on master help sign in
package: patch markdoc to support html and superscript
381e97bMatilde Park
components/Markdown.js+38−4
@@ -1,15 +1,17 @@
1import React from "react";
1import React from "react";
2−import Markdoc, { Ast, Node, Tag } from "@markdoc/markdoc";
2+import Markdoc, { Ast, Node, Tag, Raw } from "@markdoc/markdoc";
3import { heading } from "./schema/Heading.markdoc";
3import { heading } from "./schema/Heading.markdoc";
4import { footnoteRef } from "./schema/footnoteRef.markdoc";
4import { footnoteRef } from "./schema/footnoteRef.markdoc";
5import { footnoteItem } from "./schema/footnoteItem.markdoc";
5import { footnoteItem } from "./schema/footnoteItem.markdoc";
6import { link } from "./schema/link.markdoc";
6import { link } from "./schema/link.markdoc";
7import { image } from "./schema/image.markdoc";
7import { image } from "./schema/image.markdoc";
8+import { sup } from "./schema/superscript.markdoc";
8import Tabs from "../components/Tabs";
9import Tabs from "../components/Tabs";
9import Tab from "../components/Tab";
10import Tab from "../components/Tab";
10import Button from "../components/Button";
11import Button from "../components/Button";
11import Callout from "../components/Callout";
12import Callout from "../components/Callout";
12import Highlight, { defaultProps } from "prism-react-renderer";
13import Highlight, { defaultProps } from "prism-react-renderer";
14+import parse from "html-react-parser";
13import Prism from "prism-react-renderer/prism";
15import Prism from "prism-react-renderer/prism";
14(typeof global !== "undefined" ? global : window).Prism = Prism;
16(typeof global !== "undefined" ? global : window).Prism = Prism;
15require("prismjs/components/prism-hoon");
17require("prismjs/components/prism-hoon");
@@ -100,12 +102,36 @@ const customFence = {
100 attributes: {},
102 attributes: {},
101};
103};
102
104
105+const html = {
106+ render: "RenderHtml",
107+ attributes: {
108+ content: {
109+ type: String,
110+ },
111+ },
112+ transform(node) {
113+ return node.attributes.content
114+ ? new Tag("RenderHtml", { content: node.attributes.content }, [
115+ node.inline,
116+ ])
117+ : null;
118+ },
119+};
120+
121+const RenderHtml = ({ content }) => {
122+ return parse(content);
123+};
124+
125+const superscript = ({ children }) => <sup>{children}</sup>;
126+
103const CustomFence = ({ children }) => <pre>{children}</pre>;
127const CustomFence = ({ children }) => <pre>{children}</pre>;
104
128
105−export default function Markdown({ post }) {
129+export function MarkdownParse({ post }) {
130+ const tokeniser = new Markdoc.Tokenizer({ html: true });
131+ const tokens = tokeniser.tokenize(post.content);
106− const ast = Markdoc.parse(post.content);
132+ const ast = Markdoc.parse(tokens);
107 const finalAst = footnoteParse(ast);
133 const finalAst = footnoteParse(ast);
108− const content = Markdoc.transform(finalAst, {
134+ return Markdoc.transform(finalAst, {
109 nodes: {
135 nodes: {
110 fence,
136 fence,
111 heading,
137 heading,
@@ -113,6 +139,8 @@ export default function Markdown({ post }) {
113 link,
139 link,
114 footnoteItem,
140 footnoteItem,
115 footnoteRef,
141 footnoteRef,
142+ html,
143+ sup,
116 },
144 },
117 tags: {
145 tags: {
118 tabs,
146 tabs,
@@ -120,8 +148,13 @@ export default function Markdown({ post }) {
120 button,
148 button,
121 callout,
149 callout,
122 customFence,
150 customFence,
151+ RenderHtml,
152+ superscript,
123 },
153 },
124 });
154 });
155+}
156+
157+export default function Markdown({ content }) {
125 return Markdoc.renderers.react(content, React, {
158 return Markdoc.renderers.react(content, React, {
126 components: {
159 components: {
127 Fence,
160 Fence,
@@ -130,6 +163,7 @@ export default function Markdown({ post }) {
130 Button,
163 Button,
131 Callout,
164 Callout,
132 CustomFence,
165 CustomFence,
166+ RenderHtml,
133 },
167 },
134 });
168 });
135}
169}
components/schema/superscript.markdoc.jsnew file+15
@@ -0,0 +1,15 @@
1+import { Tag } from "@markdoc/markdoc";
2+
3+export const sup = {
4+ render: "superscript",
5+ children: ["strong", "em", "s", "code", "text", "tag"],
6+ attributes: {},
7+ transform(node, config) {
8+ console.log(node);
9+ return new Tag(
10+ `sup`,
11+ node.transformAttributes(config),
12+ node.transformChildren(config)
13+ );
14+ },
15+};
package-lock.json+823−26
@@ -7,6 +7,7 @@
7 "": {
7 "": {
8 "name": "urbit.org-2",
8 "name": "urbit.org-2",
9 "version": "0.1.0",
9 "version": "0.1.0",
10+ "hasInstallScript": true,
10 "dependencies": {
11 "dependencies": {
11 "@iarna/toml": "^2.2.5",
12 "@iarna/toml": "^2.2.5",
12 "@markdoc/markdoc": "^0.1.2",
13 "@markdoc/markdoc": "^0.1.2",
@@ -22,10 +23,12 @@
22 "fuzzy-search": "^3.2.1",
23 "fuzzy-search": "^3.2.1",
23 "gray-matter": "^4.0.3",
24 "gray-matter": "^4.0.3",
24 "html-entities": "^2.3.2",
25 "html-entities": "^2.3.2",
26+ "html-react-parser": "^1.4.14",
25 "lodash.debounce": "^4.0.8",
27 "lodash.debounce": "^4.0.8",
26 "lodash.omit": "^4.5.0",
28 "lodash.omit": "^4.5.0",
27 "luxon": "^2.0.2",
29 "luxon": "^2.0.2",
28 "next": "^12.1.5",
30 "next": "^12.1.5",
31+ "patch-package": "^6.4.7",
29 "path-browserify": "^1.0.1",
32 "path-browserify": "^1.0.1",
30 "prism-react-renderer": "^1.3.3",
33 "prism-react-renderer": "^1.3.3",
31 "prismjs": "^1.25.0",
34 "prismjs": "^1.25.0",
@@ -344,6 +347,11 @@
344 "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
347 "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
345 "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
348 "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
346 },
349 },
350+ "node_modules/@yarnpkg/lockfile": {
351+ "version": "1.1.0",
352+ "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
353+ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ=="
354+ },
347 "node_modules/acorn-node": {
355 "node_modules/acorn-node": {
348 "version": "1.8.2",
356 "version": "1.8.2",
349 "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
357 "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
@@ -493,8 +501,7 @@
493 "node_modules/balanced-match": {
501 "node_modules/balanced-match": {
494 "version": "1.0.2",
502 "version": "1.0.2",
495 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
503 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
496− "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
504+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
497− "dev": true
498 },
505 },
499 "node_modules/base64-js": {
506 "node_modules/base64-js": {
500 "version": "1.5.1",
507 "version": "1.5.1",
@@ -532,7 +539,6 @@
532 "version": "1.1.11",
539 "version": "1.1.11",
533 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
540 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
534 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
541 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
535− "dev": true,
536 "dependencies": {
542 "dependencies": {
537 "balanced-match": "^1.0.0",
543 "balanced-match": "^1.0.0",
538 "concat-map": "0.0.1"
544 "concat-map": "0.0.1"
@@ -701,6 +707,11 @@
701 "node": ">= 6"
707 "node": ">= 6"
702 }
708 }
703 },
709 },
710+ "node_modules/ci-info": {
711+ "version": "2.0.0",
712+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
713+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
714+ },
704 "node_modules/classnames": {
715 "node_modules/classnames": {
705 "version": "2.3.1",
716 "version": "2.3.1",
706 "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
717 "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
@@ -740,8 +751,7 @@
740 "node_modules/concat-map": {
751 "node_modules/concat-map": {
741 "version": "0.0.1",
752 "version": "0.0.1",
742 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
753 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
743− "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
754+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
744− "dev": true
745 },
755 },
746 "node_modules/cross-spawn": {
756 "node_modules/cross-spawn": {
747 "version": "7.0.3",
757 "version": "7.0.3",
@@ -835,6 +845,65 @@
835 "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
845 "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
836 "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
846 "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
837 },
847 },
848+ "node_modules/dom-serializer": {
849+ "version": "1.4.1",
850+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
851+ "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
852+ "dependencies": {
853+ "domelementtype": "^2.0.1",
854+ "domhandler": "^4.2.0",
855+ "entities": "^2.0.0"
856+ },
857+ "funding": {
858+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
859+ }
860+ },
861+ "node_modules/dom-serializer/node_modules/entities": {
862+ "version": "2.2.0",
863+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
864+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
865+ "funding": {
866+ "url": "https://github.com/fb55/entities?sponsor=1"
867+ }
868+ },
869+ "node_modules/domelementtype": {
870+ "version": "2.3.0",
871+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
872+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
873+ "funding": [
874+ {
875+ "type": "github",
876+ "url": "https://github.com/sponsors/fb55"
877+ }
878+ ]
879+ },
880+ "node_modules/domhandler": {
881+ "version": "4.3.1",
882+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
883+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
884+ "dependencies": {
885+ "domelementtype": "^2.2.0"
886+ },
887+ "engines": {
888+ "node": ">= 4"
889+ },
890+ "funding": {
891+ "url": "https://github.com/fb55/domhandler?sponsor=1"
892+ }
893+ },
894+ "node_modules/domutils": {
895+ "version": "2.8.0",
896+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
897+ "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
898+ "dependencies": {
899+ "dom-serializer": "^1.0.1",
900+ "domelementtype": "^2.2.0",
901+ "domhandler": "^4.2.0"
902+ },
903+ "funding": {
904+ "url": "https://github.com/fb55/domutils?sponsor=1"
905+ }
906+ },
838 "node_modules/downshift": {
907 "node_modules/downshift": {
839 "version": "6.1.7",
908 "version": "6.1.7",
840 "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.7.tgz",
909 "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.7.tgz",
@@ -878,6 +947,17 @@
878 "node": ">=10.13.0"
947 "node": ">=10.13.0"
879 }
948 }
880 },
949 },
950+ "node_modules/entities": {
951+ "version": "3.0.1",
952+ "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
953+ "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
954+ "engines": {
955+ "node": ">=0.12"
956+ },
957+ "funding": {
958+ "url": "https://github.com/fb55/entities?sponsor=1"
959+ }
960+ },
881 "node_modules/escalade": {
961 "node_modules/escalade": {
882 "version": "3.1.1",
962 "version": "3.1.1",
883 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
963 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -887,6 +967,14 @@
887 "node": ">=6"
967 "node": ">=6"
888 }
968 }
889 },
969 },
970+ "node_modules/escape-string-regexp": {
971+ "version": "1.0.5",
972+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
973+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
974+ "engines": {
975+ "node": ">=0.8.0"
976+ }
977+ },
890 "node_modules/esprima": {
978 "node_modules/esprima": {
891 "version": "4.0.1",
979 "version": "4.0.1",
892 "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
980 "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
@@ -1012,6 +1100,14 @@
1012 "node": ">=8"
1100 "node": ">=8"
1013 }
1101 }
1014 },
1102 },
1103+ "node_modules/find-yarn-workspace-root": {
1104+ "version": "2.0.0",
1105+ "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz",
1106+ "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==",
1107+ "dependencies": {
1108+ "micromatch": "^4.0.2"
1109+ }
1110+ },
1015 "node_modules/follow-redirects": {
1111 "node_modules/follow-redirects": {
1016 "version": "1.15.1",
1112 "version": "1.15.1",
1017 "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
1113 "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
@@ -1044,6 +1140,24 @@
1044 "url": "https://www.patreon.com/infusion"
1140 "url": "https://www.patreon.com/infusion"
1045 }
1141 }
1046 },
1142 },
1143+ "node_modules/fs-extra": {
1144+ "version": "7.0.1",
1145+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
1146+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
1147+ "dependencies": {
1148+ "graceful-fs": "^4.1.2",
1149+ "jsonfile": "^4.0.0",
1150+ "universalify": "^0.1.0"
1151+ },
1152+ "engines": {
1153+ "node": ">=6 <7 || >=8"
1154+ }
1155+ },
1156+ "node_modules/fs.realpath": {
1157+ "version": "1.0.0",
1158+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1159+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
1160+ },
1047 "node_modules/fsevents": {
1161 "node_modules/fsevents": {
1048 "version": "2.3.2",
1162 "version": "2.3.2",
1049 "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
1163 "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
@@ -1090,6 +1204,25 @@
1090 "node": ">=0.10.0"
1204 "node": ">=0.10.0"
1091 }
1205 }
1092 },
1206 },
1207+ "node_modules/glob": {
1208+ "version": "7.2.3",
1209+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
1210+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
1211+ "dependencies": {
1212+ "fs.realpath": "^1.0.0",
1213+ "inflight": "^1.0.4",
1214+ "inherits": "2",
1215+ "minimatch": "^3.1.1",
1216+ "once": "^1.3.0",
1217+ "path-is-absolute": "^1.0.0"
1218+ },
1219+ "engines": {
1220+ "node": "*"
1221+ },
1222+ "funding": {
1223+ "url": "https://github.com/sponsors/isaacs"
1224+ }
1225+ },
1093 "node_modules/glob-parent": {
1226 "node_modules/glob-parent": {
1094 "version": "6.0.2",
1227 "version": "6.0.2",
1095 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
1228 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
@@ -1104,8 +1237,7 @@
1104 "node_modules/graceful-fs": {
1237 "node_modules/graceful-fs": {
1105 "version": "4.2.10",
1238 "version": "4.2.10",
1106 "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
1239 "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
1107− "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
1240+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
1108− "dev": true
1109 },
1241 },
1110 "node_modules/gray-matter": {
1242 "node_modules/gray-matter": {
1111 "version": "4.0.3",
1243 "version": "4.0.3",
@@ -1320,11 +1452,34 @@
1320 "url": "https://opencollective.com/unified"
1452 "url": "https://opencollective.com/unified"
1321 }
1453 }
1322 },
1454 },
1455+ "node_modules/html-dom-parser": {
1456+ "version": "1.2.0",
1457+ "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-1.2.0.tgz",
1458+ "integrity": "sha512-2HIpFMvvffsXHFUFjso0M9LqM+1Lm22BF+Df2ba+7QHJXjk63pWChEnI6YG27eaWqUdfnh5/Vy+OXrNTtepRsg==",
1459+ "dependencies": {
1460+ "domhandler": "4.3.1",
1461+ "htmlparser2": "7.2.0"
1462+ }
1463+ },
1323 "node_modules/html-entities": {
1464 "node_modules/html-entities": {
1324 "version": "2.3.3",
1465 "version": "2.3.3",
1325 "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz",
1466 "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz",
1326 "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="
1467 "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="
1327 },
1468 },
1469+ "node_modules/html-react-parser": {
1470+ "version": "1.4.14",
1471+ "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-1.4.14.tgz",
1472+ "integrity": "sha512-pxhNWGie8Y+DGDpSh8cTa0k3g8PsDcwlfolA+XxYo1AGDeB6e2rdlyv4ptU9bOTiZ2i3fID+6kyqs86MN0FYZQ==",
1473+ "dependencies": {
1474+ "domhandler": "4.3.1",
1475+ "html-dom-parser": "1.2.0",
1476+ "react-property": "2.0.0",
1477+ "style-to-js": "1.1.1"
1478+ },
1479+ "peerDependencies": {
1480+ "react": "0.14 || 15 || 16 || 17 || 18"
1481+ }
1482+ },
1328 "node_modules/html-void-elements": {
1483 "node_modules/html-void-elements": {
1329 "version": "2.0.1",
1484 "version": "2.0.1",
1330 "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
1485 "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
@@ -1334,6 +1489,24 @@
1334 "url": "https://github.com/sponsors/wooorm"
1489 "url": "https://github.com/sponsors/wooorm"
1335 }
1490 }
1336 },
1491 },
1492+ "node_modules/htmlparser2": {
1493+ "version": "7.2.0",
1494+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz",
1495+ "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==",
1496+ "funding": [
1497+ "https://github.com/fb55/htmlparser2?sponsor=1",
1498+ {
1499+ "type": "github",
1500+ "url": "https://github.com/sponsors/fb55"
1501+ }
1502+ ],
1503+ "dependencies": {
1504+ "domelementtype": "^2.0.1",
1505+ "domhandler": "^4.2.2",
1506+ "domutils": "^2.8.0",
1507+ "entities": "^3.0.1"
1508+ }
1509+ },
1337 "node_modules/human-signals": {
1510 "node_modules/human-signals": {
1338 "version": "1.1.1",
1511 "version": "1.1.1",
1339 "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
1512 "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
@@ -1371,6 +1544,15 @@
1371 "node": ">= 4"
1544 "node": ">= 4"
1372 }
1545 }
1373 },
1546 },
1547+ "node_modules/inflight": {
1548+ "version": "1.0.6",
1549+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1550+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
1551+ "dependencies": {
1552+ "once": "^1.3.0",
1553+ "wrappy": "1"
1554+ }
1555+ },
1374 "node_modules/inherits": {
1556 "node_modules/inherits": {
1375 "version": "2.0.4",
1557 "version": "2.0.4",
1376 "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1558 "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
@@ -1422,6 +1604,17 @@
1422 "node": ">=4"
1604 "node": ">=4"
1423 }
1605 }
1424 },
1606 },
1607+ "node_modules/is-ci": {
1608+ "version": "2.0.0",
1609+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
1610+ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
1611+ "dependencies": {
1612+ "ci-info": "^2.0.0"
1613+ },
1614+ "bin": {
1615+ "is-ci": "bin.js"
1616+ }
1617+ },
1425 "node_modules/is-core-module": {
1618 "node_modules/is-core-module": {
1426 "version": "2.9.0",
1619 "version": "2.9.0",
1427 "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
1620 "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
@@ -1433,6 +1626,20 @@
1433 "url": "https://github.com/sponsors/ljharb"
1626 "url": "https://github.com/sponsors/ljharb"
1434 }
1627 }
1435 },
1628 },
1629+ "node_modules/is-docker": {
1630+ "version": "2.2.1",
1631+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
1632+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
1633+ "bin": {
1634+ "is-docker": "cli.js"
1635+ },
1636+ "engines": {
1637+ "node": ">=8"
1638+ },
1639+ "funding": {
1640+ "url": "https://github.com/sponsors/sindresorhus"
1641+ }
1642+ },
1436 "node_modules/is-extendable": {
1643 "node_modules/is-extendable": {
1437 "version": "0.1.1",
1644 "version": "0.1.1",
1438 "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
1645 "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
@@ -1499,6 +1706,17 @@
1499 "url": "https://github.com/sponsors/sindresorhus"
1706 "url": "https://github.com/sponsors/sindresorhus"
1500 }
1707 }
1501 },
1708 },
1709+ "node_modules/is-wsl": {
1710+ "version": "2.2.0",
1711+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
1712+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
1713+ "dependencies": {
1714+ "is-docker": "^2.0.0"
1715+ },
1716+ "engines": {
1717+ "node": ">=8"
1718+ }
1719+ },
1502 "node_modules/isarray": {
1720 "node_modules/isarray": {
1503 "version": "1.0.0",
1721 "version": "1.0.0",
1504 "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1722 "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -1507,8 +1725,7 @@
1507 "node_modules/isexe": {
1725 "node_modules/isexe": {
1508 "version": "2.0.0",
1726 "version": "2.0.0",
1509 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1727 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1510− "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
1728+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
1511− "dev": true
1512 },
1729 },
1513 "node_modules/isobject": {
1730 "node_modules/isobject": {
1514 "version": "3.0.1",
1731 "version": "3.0.1",
@@ -1535,6 +1752,14 @@
1535 "js-yaml": "bin/js-yaml.js"
1752 "js-yaml": "bin/js-yaml.js"
1536 }
1753 }
1537 },
1754 },
1755+ "node_modules/jsonfile": {
1756+ "version": "4.0.0",
1757+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
1758+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
1759+ "optionalDependencies": {
1760+ "graceful-fs": "^4.1.6"
1761+ }
1762+ },
1538 "node_modules/kind-of": {
1763 "node_modules/kind-of": {
1539 "version": "6.0.3",
1764 "version": "6.0.3",
1540 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
1765 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -1543,6 +1768,14 @@
1543 "node": ">=0.10.0"
1768 "node": ">=0.10.0"
1544 }
1769 }
1545 },
1770 },
1771+ "node_modules/klaw-sync": {
1772+ "version": "6.0.0",
1773+ "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
1774+ "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
1775+ "dependencies": {
1776+ "graceful-fs": "^4.1.11"
1777+ }
1778+ },
1546 "node_modules/lilconfig": {
1779 "node_modules/lilconfig": {
1547 "version": "2.0.5",
1780 "version": "2.0.5",
1548 "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
1781 "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
@@ -1641,7 +1874,6 @@
1641 "version": "3.1.2",
1874 "version": "3.1.2",
1642 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1875 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1643 "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1876 "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1644− "dev": true,
1645 "dependencies": {
1877 "dependencies": {
1646 "brace-expansion": "^1.1.7"
1878 "brace-expansion": "^1.1.7"
1647 },
1879 },
@@ -1766,6 +1998,11 @@
1766 "url": "https://opencollective.com/postcss/"
1998 "url": "https://opencollective.com/postcss/"
1767 }
1999 }
1768 },
2000 },
2001+ "node_modules/nice-try": {
2002+ "version": "1.0.5",
2003+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
2004+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
2005+ },
1769 "node_modules/node-releases": {
2006 "node_modules/node-releases": {
1770 "version": "2.0.5",
2007 "version": "2.0.5",
1771 "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
2008 "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
@@ -1833,7 +2070,6 @@
1833 "version": "1.4.0",
2070 "version": "1.4.0",
1834 "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
2071 "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1835 "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
2072 "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1836− "dev": true,
1837 "dependencies": {
2073 "dependencies": {
1838 "wrappy": "1"
2074 "wrappy": "1"
1839 }
2075 }
@@ -1853,6 +2089,29 @@
1853 "url": "https://github.com/sponsors/sindresorhus"
2089 "url": "https://github.com/sponsors/sindresorhus"
1854 }
2090 }
1855 },
2091 },
2092+ "node_modules/open": {
2093+ "version": "7.4.2",
2094+ "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
2095+ "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
2096+ "dependencies": {
2097+ "is-docker": "^2.0.0",
2098+ "is-wsl": "^2.1.1"
2099+ },
2100+ "engines": {
2101+ "node": ">=8"
2102+ },
2103+ "funding": {
2104+ "url": "https://github.com/sponsors/sindresorhus"
2105+ }
2106+ },
2107+ "node_modules/os-tmpdir": {
2108+ "version": "1.0.2",
2109+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
2110+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
2111+ "engines": {
2112+ "node": ">=0.10.0"
2113+ }
2114+ },
1856 "node_modules/p-limit": {
2115 "node_modules/p-limit": {
1857 "version": "2.3.0",
2116 "version": "2.3.0",
1858 "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
2117 "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -1894,6 +2153,141 @@
1894 "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
2153 "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
1895 "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
2154 "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
1896 },
2155 },
2156+ "node_modules/patch-package": {
2157+ "version": "6.4.7",
2158+ "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz",
2159+ "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==",
2160+ "dependencies": {
2161+ "@yarnpkg/lockfile": "^1.1.0",
2162+ "chalk": "^2.4.2",
2163+ "cross-spawn": "^6.0.5",
2164+ "find-yarn-workspace-root": "^2.0.0",
2165+ "fs-extra": "^7.0.1",
2166+ "is-ci": "^2.0.0",
2167+ "klaw-sync": "^6.0.0",
2168+ "minimist": "^1.2.0",
2169+ "open": "^7.4.2",
2170+ "rimraf": "^2.6.3",
2171+ "semver": "^5.6.0",
2172+ "slash": "^2.0.0",
2173+ "tmp": "^0.0.33"
2174+ },
2175+ "bin": {
2176+ "patch-package": "index.js"
2177+ },
2178+ "engines": {
2179+ "npm": ">5"
2180+ }
2181+ },
2182+ "node_modules/patch-package/node_modules/ansi-styles": {
2183+ "version": "3.2.1",
2184+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
2185+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
2186+ "dependencies": {
2187+ "color-convert": "^1.9.0"
2188+ },
2189+ "engines": {
2190+ "node": ">=4"
2191+ }
2192+ },
2193+ "node_modules/patch-package/node_modules/chalk": {
2194+ "version": "2.4.2",
2195+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
2196+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
2197+ "dependencies": {
2198+ "ansi-styles": "^3.2.1",
2199+ "escape-string-regexp": "^1.0.5",
2200+ "supports-color": "^5.3.0"
2201+ },
2202+ "engines": {
2203+ "node": ">=4"
2204+ }
2205+ },
2206+ "node_modules/patch-package/node_modules/color-convert": {
2207+ "version": "1.9.3",
2208+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
2209+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
2210+ "dependencies": {
2211+ "color-name": "1.1.3"
2212+ }
2213+ },
2214+ "node_modules/patch-package/node_modules/color-name": {
2215+ "version": "1.1.3",
2216+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
2217+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
2218+ },
2219+ "node_modules/patch-package/node_modules/cross-spawn": {
2220+ "version": "6.0.5",
2221+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
2222+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
2223+ "dependencies": {
2224+ "nice-try": "^1.0.4",
2225+ "path-key": "^2.0.1",
2226+ "semver": "^5.5.0",
2227+ "shebang-command": "^1.2.0",
2228+ "which": "^1.2.9"
2229+ },
2230+ "engines": {
2231+ "node": ">=4.8"
2232+ }
2233+ },
2234+ "node_modules/patch-package/node_modules/has-flag": {
2235+ "version": "3.0.0",
2236+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
2237+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
2238+ "engines": {
2239+ "node": ">=4"
2240+ }
2241+ },
2242+ "node_modules/patch-package/node_modules/path-key": {
2243+ "version": "2.0.1",
2244+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
2245+ "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
2246+ "engines": {
2247+ "node": ">=4"
2248+ }
2249+ },
2250+ "node_modules/patch-package/node_modules/shebang-command": {
2251+ "version": "1.2.0",
2252+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
2253+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
2254+ "dependencies": {
2255+ "shebang-regex": "^1.0.0"
2256+ },
2257+ "engines": {
2258+ "node": ">=0.10.0"
2259+ }
2260+ },
2261+ "node_modules/patch-package/node_modules/shebang-regex": {
2262+ "version": "1.0.0",
2263+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
2264+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
2265+ "engines": {
2266+ "node": ">=0.10.0"
2267+ }
2268+ },
2269+ "node_modules/patch-package/node_modules/supports-color": {
2270+ "version": "5.5.0",
2271+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
2272+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
2273+ "dependencies": {
2274+ "has-flag": "^3.0.0"
2275+ },
2276+ "engines": {
2277+ "node": ">=4"
2278+ }
2279+ },
2280+ "node_modules/patch-package/node_modules/which": {
2281+ "version": "1.3.1",
2282+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
2283+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
2284+ "dependencies": {
2285+ "isexe": "^2.0.0"
2286+ },
2287+ "bin": {
2288+ "which": "bin/which"
2289+ }
2290+ },
1897 "node_modules/path-browserify": {
2291 "node_modules/path-browserify": {
1898 "version": "1.0.1",
2292 "version": "1.0.1",
1899 "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
2293 "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
@@ -1908,6 +2302,14 @@
1908 "node": ">=8"
2302 "node": ">=8"
1909 }
2303 }
1910 },
2304 },
2305+ "node_modules/path-is-absolute": {
2306+ "version": "1.0.1",
2307+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2308+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
2309+ "engines": {
2310+ "node": ">=0.10.0"
2311+ }
2312+ },
1911 "node_modules/path-key": {
2313 "node_modules/path-key": {
1912 "version": "3.1.1",
2314 "version": "3.1.1",
1913 "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2315 "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
@@ -2209,6 +2611,11 @@
2209 "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
2611 "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
2210 "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
2612 "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
2211 },
2613 },
2614+ "node_modules/react-property": {
2615+ "version": "2.0.0",
2616+ "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz",
2617+ "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw=="
2618+ },
2212 "node_modules/react-swipeable": {
2619 "node_modules/react-swipeable": {
2213 "version": "6.2.2",
2620 "version": "6.2.2",
2214 "resolved": "https://registry.npmjs.org/react-swipeable/-/react-swipeable-6.2.2.tgz",
2621 "resolved": "https://registry.npmjs.org/react-swipeable/-/react-swipeable-6.2.2.tgz",
@@ -2409,6 +2816,17 @@
2409 "node": ">=0.10.0"
2816 "node": ">=0.10.0"
2410 }
2817 }
2411 },
2818 },
2819+ "node_modules/rimraf": {
2820+ "version": "2.7.1",
2821+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
2822+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
2823+ "dependencies": {
2824+ "glob": "^7.1.3"
2825+ },
2826+ "bin": {
2827+ "rimraf": "bin.js"
2828+ }
2829+ },
2412 "node_modules/run-parallel": {
2830 "node_modules/run-parallel": {
2413 "version": "1.2.0",
2831 "version": "1.2.0",
2414 "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
2832 "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -2476,6 +2894,14 @@
2476 "node": ">=4"
2894 "node": ">=4"
2477 }
2895 }
2478 },
2896 },
2897+ "node_modules/semver": {
2898+ "version": "5.7.1",
2899+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
2900+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
2901+ "bin": {
2902+ "semver": "bin/semver"
2903+ }
2904+ },
2479 "node_modules/shebang-command": {
2905 "node_modules/shebang-command": {
2480 "version": "2.0.0",
2906 "version": "2.0.0",
2481 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2907 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -2503,6 +2929,14 @@
2503 "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
2929 "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
2504 "dev": true
2930 "dev": true
2505 },
2931 },
2932+ "node_modules/slash": {
2933+ "version": "2.0.0",
2934+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
2935+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
2936+ "engines": {
2937+ "node": ">=6"
2938+ }
2939+ },
2506 "node_modules/source-map-js": {
2940 "node_modules/source-map-js": {
2507 "version": "1.0.2",
2941 "version": "1.0.2",
2508 "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
2942 "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
@@ -2572,6 +3006,14 @@
2572 "node": ">=6"
3006 "node": ">=6"
2573 }
3007 }
2574 },
3008 },
3009+ "node_modules/style-to-js": {
3010+ "version": "1.1.1",
3011+ "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.1.tgz",
3012+ "integrity": "sha512-RJ18Z9t2B02sYhZtfWKQq5uplVctgvjTfLWT7+Eb1zjUjIrWzX5SdlkwLGQozrqarTmEzJJ/YmdNJCUNI47elg==",
3013+ "dependencies": {
3014+ "style-to-object": "0.3.0"
3015+ }
3016+ },
2575 "node_modules/style-to-object": {
3017 "node_modules/style-to-object": {
2576 "version": "0.3.0",
3018 "version": "0.3.0",
2577 "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
3019 "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
@@ -2679,6 +3121,17 @@
2679 "node": ">=6"
3121 "node": ">=6"
2680 }
3122 }
2681 },
3123 },
3124+ "node_modules/tmp": {
3125+ "version": "0.0.33",
3126+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
3127+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
3128+ "dependencies": {
3129+ "os-tmpdir": "~1.0.2"
3130+ },
3131+ "engines": {
3132+ "node": ">=0.6.0"
3133+ }
3134+ },
2682 "node_modules/to-regex-range": {
3135 "node_modules/to-regex-range": {
2683 "version": "5.0.1",
3136 "version": "5.0.1",
2684 "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
3137 "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -2826,6 +3279,14 @@
2826 "url": "https://opencollective.com/unified"
3279 "url": "https://opencollective.com/unified"
2827 }
3280 }
2828 },
3281 },
3282+ "node_modules/universalify": {
3283+ "version": "0.1.2",
3284+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
3285+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
3286+ "engines": {
3287+ "node": ">= 4.0.0"
3288+ }
3289+ },
2829 "node_modules/unset-value": {
3290 "node_modules/unset-value": {
2830 "version": "0.1.2",
3291 "version": "0.1.2",
2831 "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz",
3292 "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz",
@@ -2921,8 +3382,7 @@
2921 "node_modules/wrappy": {
3382 "node_modules/wrappy": {
2922 "version": "1.0.2",
3383 "version": "1.0.2",
2923 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
3384 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2924− "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
3385+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
2925− "dev": true
2926 },
3386 },
2927 "node_modules/xml-js": {
3387 "node_modules/xml-js": {
2928 "version": "1.6.11",
3388 "version": "1.6.11",
@@ -3143,6 +3603,11 @@
3143 "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
3603 "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
3144 "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
3604 "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
3145 },
3605 },
3606+ "@yarnpkg/lockfile": {
3607+ "version": "1.1.0",
3608+ "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
3609+ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ=="
3610+ },
3146 "acorn-node": {
3611 "acorn-node": {
3147 "version": "1.8.2",
3612 "version": "1.8.2",
3148 "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
3613 "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
@@ -3244,8 +3709,7 @@
3244 "balanced-match": {
3709 "balanced-match": {
3245 "version": "1.0.2",
3710 "version": "1.0.2",
3246 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
3711 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
3247− "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
3712+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
3248− "dev": true
3249 },
3713 },
3250 "base64-js": {
3714 "base64-js": {
3251 "version": "1.5.1",
3715 "version": "1.5.1",
@@ -3266,7 +3730,6 @@
3266 "version": "1.1.11",
3730 "version": "1.1.11",
3267 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
3731 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
3268 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
3732 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
3269− "dev": true,
3270 "requires": {
3733 "requires": {
3271 "balanced-match": "^1.0.0",
3734 "balanced-match": "^1.0.0",
3272 "concat-map": "0.0.1"
3735 "concat-map": "0.0.1"
@@ -3362,6 +3825,11 @@
3362 }
3825 }
3363 }
3826 }
3364 },
3827 },
3828+ "ci-info": {
3829+ "version": "2.0.0",
3830+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
3831+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
3832+ },
3365 "classnames": {
3833 "classnames": {
3366 "version": "2.3.1",
3834 "version": "2.3.1",
3367 "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
3835 "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
@@ -3394,8 +3862,7 @@
3394 "concat-map": {
3862 "concat-map": {
3395 "version": "0.0.1",
3863 "version": "0.0.1",
3396 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
3864 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
3397− "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
3865+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
3398− "dev": true
3399 },
3866 },
3400 "cross-spawn": {
3867 "cross-spawn": {
3401 "version": "7.0.3",
3868 "version": "7.0.3",
@@ -3467,6 +3934,46 @@
3467 "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
3934 "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
3468 "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
3935 "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
3469 },
3936 },
3937+ "dom-serializer": {
3938+ "version": "1.4.1",
3939+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
3940+ "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
3941+ "requires": {
3942+ "domelementtype": "^2.0.1",
3943+ "domhandler": "^4.2.0",
3944+ "entities": "^2.0.0"
3945+ },
3946+ "dependencies": {
3947+ "entities": {
3948+ "version": "2.2.0",
3949+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
3950+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
3951+ }
3952+ }
3953+ },
3954+ "domelementtype": {
3955+ "version": "2.3.0",
3956+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
3957+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="
3958+ },
3959+ "domhandler": {
3960+ "version": "4.3.1",
3961+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
3962+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
3963+ "requires": {
3964+ "domelementtype": "^2.2.0"
3965+ }
3966+ },
3967+ "domutils": {
3968+ "version": "2.8.0",
3969+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
3970+ "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
3971+ "requires": {
3972+ "dom-serializer": "^1.0.1",
3973+ "domelementtype": "^2.2.0",
3974+ "domhandler": "^4.2.0"
3975+ }
3976+ },
3470 "downshift": {
3977 "downshift": {
3471 "version": "6.1.7",
3978 "version": "6.1.7",
3472 "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.7.tgz",
3979 "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.7.tgz",
@@ -3504,12 +4011,22 @@
3504 "tapable": "^2.2.0"
4011 "tapable": "^2.2.0"
3505 }
4012 }
3506 },
4013 },
4014+ "entities": {
4015+ "version": "3.0.1",
4016+ "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
4017+ "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q=="
4018+ },
3507 "escalade": {
4019 "escalade": {
3508 "version": "3.1.1",
4020 "version": "3.1.1",
3509 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
4021 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
3510 "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
4022 "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
3511 "dev": true
4023 "dev": true
3512 },
4024 },
4025+ "escape-string-regexp": {
4026+ "version": "1.0.5",
4027+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
4028+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
4029+ },
3513 "esprima": {
4030 "esprima": {
3514 "version": "4.0.1",
4031 "version": "4.0.1",
3515 "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
4032 "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
@@ -3606,6 +4123,14 @@
3606 "path-exists": "^4.0.0"
4123 "path-exists": "^4.0.0"
3607 }
4124 }
3608 },
4125 },
4126+ "find-yarn-workspace-root": {
4127+ "version": "2.0.0",
4128+ "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz",
4129+ "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==",
4130+ "requires": {
4131+ "micromatch": "^4.0.2"
4132+ }
4133+ },
3609 "follow-redirects": {
4134 "follow-redirects": {
3610 "version": "1.15.1",
4135 "version": "1.15.1",
3611 "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
4136 "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
@@ -3617,6 +4142,21 @@
3617 "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
4142 "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
3618 "dev": true
4143 "dev": true
3619 },
4144 },
4145+ "fs-extra": {
4146+ "version": "7.0.1",
4147+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
4148+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
4149+ "requires": {
4150+ "graceful-fs": "^4.1.2",
4151+ "jsonfile": "^4.0.0",
4152+ "universalify": "^0.1.0"
4153+ }
4154+ },
4155+ "fs.realpath": {
4156+ "version": "1.0.0",
4157+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
4158+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
4159+ },
3620 "fsevents": {
4160 "fsevents": {
3621 "version": "2.3.2",
4161 "version": "2.3.2",
3622 "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
4162 "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
@@ -3647,6 +4187,19 @@
3647 "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
4187 "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
3648 "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA=="
4188 "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA=="
3649 },
4189 },
4190+ "glob": {
4191+ "version": "7.2.3",
4192+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
4193+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
4194+ "requires": {
4195+ "fs.realpath": "^1.0.0",
4196+ "inflight": "^1.0.4",
4197+ "inherits": "2",
4198+ "minimatch": "^3.1.1",
4199+ "once": "^1.3.0",
4200+ "path-is-absolute": "^1.0.0"
4201+ }
4202+ },
3650 "glob-parent": {
4203 "glob-parent": {
3651 "version": "6.0.2",
4204 "version": "6.0.2",
3652 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
4205 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
@@ -3658,8 +4211,7 @@
3658 "graceful-fs": {
4211 "graceful-fs": {
3659 "version": "4.2.10",
4212 "version": "4.2.10",
3660 "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
4213 "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
3661− "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
4214+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
3662− "dev": true
3663 },
4215 },
3664 "gray-matter": {
4216 "gray-matter": {
3665 "version": "4.0.3",
4217 "version": "4.0.3",
@@ -3822,16 +4374,47 @@
3822 "space-separated-tokens": "^2.0.0"
4374 "space-separated-tokens": "^2.0.0"
3823 }
4375 }
3824 },
4376 },
4377+ "html-dom-parser": {
4378+ "version": "1.2.0",
4379+ "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-1.2.0.tgz",
4380+ "integrity": "sha512-2HIpFMvvffsXHFUFjso0M9LqM+1Lm22BF+Df2ba+7QHJXjk63pWChEnI6YG27eaWqUdfnh5/Vy+OXrNTtepRsg==",
4381+ "requires": {
4382+ "domhandler": "4.3.1",
4383+ "htmlparser2": "7.2.0"
4384+ }
4385+ },
3825 "html-entities": {
4386 "html-entities": {
3826 "version": "2.3.3",
4387 "version": "2.3.3",
3827 "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz",
4388 "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz",
3828 "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="
4389 "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="
3829 },
4390 },
4391+ "html-react-parser": {
4392+ "version": "1.4.14",
4393+ "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-1.4.14.tgz",
4394+ "integrity": "sha512-pxhNWGie8Y+DGDpSh8cTa0k3g8PsDcwlfolA+XxYo1AGDeB6e2rdlyv4ptU9bOTiZ2i3fID+6kyqs86MN0FYZQ==",
4395+ "requires": {
4396+ "domhandler": "4.3.1",
4397+ "html-dom-parser": "1.2.0",
4398+ "react-property": "2.0.0",
4399+ "style-to-js": "1.1.1"
4400+ }
4401+ },
3830 "html-void-elements": {
4402 "html-void-elements": {
3831 "version": "2.0.1",
4403 "version": "2.0.1",
3832 "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
4404 "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
3833 "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A=="
4405 "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A=="
3834 },
4406 },
4407+ "htmlparser2": {
4408+ "version": "7.2.0",
4409+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz",
4410+ "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==",
4411+ "requires": {
4412+ "domelementtype": "^2.0.1",
4413+ "domhandler": "^4.2.2",
4414+ "domutils": "^2.8.0",
4415+ "entities": "^3.0.1"
4416+ }
4417+ },
3835 "human-signals": {
4418 "human-signals": {
3836 "version": "1.1.1",
4419 "version": "1.1.1",
3837 "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
4420 "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
@@ -3849,6 +4432,15 @@
3849 "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
4432 "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
3850 "dev": true
4433 "dev": true
3851 },
4434 },
4435+ "inflight": {
4436+ "version": "1.0.6",
4437+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
4438+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
4439+ "requires": {
4440+ "once": "^1.3.0",
4441+ "wrappy": "1"
4442+ }
4443+ },
3852 "inherits": {
4444 "inherits": {
3853 "version": "2.0.4",
4445 "version": "2.0.4",
3854 "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
4446 "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
@@ -3880,6 +4472,14 @@
3880 "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
4472 "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
3881 "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
4473 "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
3882 },
4474 },
4475+ "is-ci": {
4476+ "version": "2.0.0",
4477+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
4478+ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
4479+ "requires": {
4480+ "ci-info": "^2.0.0"
4481+ }
4482+ },
3883 "is-core-module": {
4483 "is-core-module": {
3884 "version": "2.9.0",
4484 "version": "2.9.0",
3885 "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
4485 "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
@@ -3888,6 +4488,11 @@
3888 "has": "^1.0.3"
4488 "has": "^1.0.3"
3889 }
4489 }
3890 },
4490 },
4491+ "is-docker": {
4492+ "version": "2.2.1",
4493+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
4494+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="
4495+ },
3891 "is-extendable": {
4496 "is-extendable": {
3892 "version": "0.1.1",
4497 "version": "0.1.1",
3893 "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
4498 "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
@@ -3930,6 +4535,14 @@
3930 "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
4535 "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
3931 "dev": true
4536 "dev": true
3932 },
4537 },
4538+ "is-wsl": {
4539+ "version": "2.2.0",
4540+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
4541+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
4542+ "requires": {
4543+ "is-docker": "^2.0.0"
4544+ }
4545+ },
3933 "isarray": {
4546 "isarray": {
3934 "version": "1.0.0",
4547 "version": "1.0.0",
3935 "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
4548 "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -3938,8 +4551,7 @@
3938 "isexe": {
4551 "isexe": {
3939 "version": "2.0.0",
4552 "version": "2.0.0",
3940 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
4553 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
3941− "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
4554+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
3942− "dev": true
3943 },
4555 },
3944 "isobject": {
4556 "isobject": {
3945 "version": "3.0.1",
4557 "version": "3.0.1",
@@ -3960,11 +4572,27 @@
3960 "esprima": "^4.0.0"
4572 "esprima": "^4.0.0"
3961 }
4573 }
3962 },
4574 },
4575+ "jsonfile": {
4576+ "version": "4.0.0",
4577+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
4578+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
4579+ "requires": {
4580+ "graceful-fs": "^4.1.6"
4581+ }
4582+ },
3963 "kind-of": {
4583 "kind-of": {
3964 "version": "6.0.3",
4584 "version": "6.0.3",
3965 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
4585 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
3966 "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
4586 "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
3967 },
4587 },
4588+ "klaw-sync": {
4589+ "version": "6.0.0",
4590+ "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
4591+ "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
4592+ "requires": {
4593+ "graceful-fs": "^4.1.11"
4594+ }
4595+ },
3968 "lilconfig": {
4596 "lilconfig": {
3969 "version": "2.0.5",
4597 "version": "2.0.5",
3970 "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
4598 "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
@@ -4042,7 +4670,6 @@
4042 "version": "3.1.2",
4670 "version": "3.1.2",
4043 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
4671 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
4044 "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
4672 "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
4045− "dev": true,
4046 "requires": {
4673 "requires": {
4047 "brace-expansion": "^1.1.7"
4674 "brace-expansion": "^1.1.7"
4048 }
4675 }
@@ -4121,6 +4748,11 @@
4121 "escalade": "^3.1.1"
4748 "escalade": "^3.1.1"
4122 }
4749 }
4123 },
4750 },
4751+ "nice-try": {
4752+ "version": "1.0.5",
4753+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
4754+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
4755+ },
4124 "node-releases": {
4756 "node-releases": {
4125 "version": "2.0.5",
4757 "version": "2.0.5",
4126 "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
4758 "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
@@ -4170,7 +4802,6 @@
4170 "version": "1.4.0",
4802 "version": "1.4.0",
4171 "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
4803 "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
4172 "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
4804 "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
4173− "dev": true,
4174 "requires": {
4805 "requires": {
4175 "wrappy": "1"
4806 "wrappy": "1"
4176 }
4807 }
@@ -4184,6 +4815,20 @@
4184 "mimic-fn": "^2.1.0"
4815 "mimic-fn": "^2.1.0"
4185 }
4816 }
4186 },
4817 },
4818+ "open": {
4819+ "version": "7.4.2",
4820+ "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
4821+ "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
4822+ "requires": {
4823+ "is-docker": "^2.0.0",
4824+ "is-wsl": "^2.1.1"
4825+ }
4826+ },
4827+ "os-tmpdir": {
4828+ "version": "1.0.2",
4829+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
4830+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g=="
4831+ },
4187 "p-limit": {
4832 "p-limit": {
4188 "version": "2.3.0",
4833 "version": "2.3.0",
4189 "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
4834 "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -4213,6 +4858,110 @@
4213 "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
4858 "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
4214 "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
4859 "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
4215 },
4860 },
4861+ "patch-package": {
4862+ "version": "6.4.7",
4863+ "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz",
4864+ "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==",
4865+ "requires": {
4866+ "@yarnpkg/lockfile": "^1.1.0",
4867+ "chalk": "^2.4.2",
4868+ "cross-spawn": "^6.0.5",
4869+ "find-yarn-workspace-root": "^2.0.0",
4870+ "fs-extra": "^7.0.1",
4871+ "is-ci": "^2.0.0",
4872+ "klaw-sync": "^6.0.0",
4873+ "minimist": "^1.2.0",
4874+ "open": "^7.4.2",
4875+ "rimraf": "^2.6.3",
4876+ "semver": "^5.6.0",
4877+ "slash": "^2.0.0",
4878+ "tmp": "^0.0.33"
4879+ },
4880+ "dependencies": {
4881+ "ansi-styles": {
4882+ "version": "3.2.1",
4883+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
4884+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
4885+ "requires": {
4886+ "color-convert": "^1.9.0"
4887+ }
4888+ },
4889+ "chalk": {
4890+ "version": "2.4.2",
4891+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
4892+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
4893+ "requires": {
4894+ "ansi-styles": "^3.2.1",
4895+ "escape-string-regexp": "^1.0.5",
4896+ "supports-color": "^5.3.0"
4897+ }
4898+ },
4899+ "color-convert": {
4900+ "version": "1.9.3",
4901+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
4902+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
4903+ "requires": {
4904+ "color-name": "1.1.3"
4905+ }
4906+ },
4907+ "color-name": {
4908+ "version": "1.1.3",
4909+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
4910+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
4911+ },
4912+ "cross-spawn": {
4913+ "version": "6.0.5",
4914+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
4915+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
4916+ "requires": {
4917+ "nice-try": "^1.0.4",
4918+ "path-key": "^2.0.1",
4919+ "semver": "^5.5.0",
4920+ "shebang-command": "^1.2.0",
4921+ "which": "^1.2.9"
4922+ }
4923+ },
4924+ "has-flag": {
4925+ "version": "3.0.0",
4926+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
4927+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
4928+ },
4929+ "path-key": {
4930+ "version": "2.0.1",
4931+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
4932+ "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw=="
4933+ },
4934+ "shebang-command": {
4935+ "version": "1.2.0",
4936+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
4937+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
4938+ "requires": {
4939+ "shebang-regex": "^1.0.0"
4940+ }
4941+ },
4942+ "shebang-regex": {
4943+ "version": "1.0.0",
4944+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
4945+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
4946+ },
4947+ "supports-color": {
4948+ "version": "5.5.0",
4949+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
4950+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
4951+ "requires": {
4952+ "has-flag": "^3.0.0"
4953+ }
4954+ },
4955+ "which": {
4956+ "version": "1.3.1",
4957+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
4958+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
4959+ "requires": {
4960+ "isexe": "^2.0.0"
4961+ }
4962+ }
4963+ }
4964+ },
4216 "path-browserify": {
4965 "path-browserify": {
4217 "version": "1.0.1",
4966 "version": "1.0.1",
4218 "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
4967 "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
@@ -4224,6 +4973,11 @@
4224 "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
4973 "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
4225 "dev": true
4974 "dev": true
4226 },
4975 },
4976+ "path-is-absolute": {
4977+ "version": "1.0.1",
4978+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
4979+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
4980+ },
4227 "path-key": {
4981 "path-key": {
4228 "version": "3.1.1",
4982 "version": "3.1.1",
4229 "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
4983 "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
@@ -4404,6 +5158,11 @@
4404 "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
5158 "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
4405 "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
5159 "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
4406 },
5160 },
5161+ "react-property": {
5162+ "version": "2.0.0",
5163+ "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz",
5164+ "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw=="
5165+ },
4407 "react-swipeable": {
5166 "react-swipeable": {
4408 "version": "6.2.2",
5167 "version": "6.2.2",
4409 "resolved": "https://registry.npmjs.org/react-swipeable/-/react-swipeable-6.2.2.tgz",
5168 "resolved": "https://registry.npmjs.org/react-swipeable/-/react-swipeable-6.2.2.tgz",
@@ -4541,6 +5300,14 @@
4541 "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
5300 "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
4542 "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
5301 "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
4543 },
5302 },
5303+ "rimraf": {
5304+ "version": "2.7.1",
5305+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
5306+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
5307+ "requires": {
5308+ "glob": "^7.1.3"
5309+ }
5310+ },
4544 "run-parallel": {
5311 "run-parallel": {
4545 "version": "1.2.0",
5312 "version": "1.2.0",
4546 "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
5313 "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -4577,6 +5344,11 @@
4577 "kind-of": "^6.0.0"
5344 "kind-of": "^6.0.0"
4578 }
5345 }
4579 },
5346 },
5347+ "semver": {
5348+ "version": "5.7.1",
5349+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
5350+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
5351+ },
4580 "shebang-command": {
5352 "shebang-command": {
4581 "version": "2.0.0",
5353 "version": "2.0.0",
4582 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
5354 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -4598,6 +5370,11 @@
4598 "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
5370 "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
4599 "dev": true
5371 "dev": true
4600 },
5372 },
5373+ "slash": {
5374+ "version": "2.0.0",
5375+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
5376+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A=="
5377+ },
4601 "source-map-js": {
5378 "source-map-js": {
4602 "version": "1.0.2",
5379 "version": "1.0.2",
4603 "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
5380 "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
@@ -4650,6 +5427,14 @@
4650 "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
5427 "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
4651 "dev": true
5428 "dev": true
4652 },
5429 },
5430+ "style-to-js": {
5431+ "version": "1.1.1",
5432+ "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.1.tgz",
5433+ "integrity": "sha512-RJ18Z9t2B02sYhZtfWKQq5uplVctgvjTfLWT7+Eb1zjUjIrWzX5SdlkwLGQozrqarTmEzJJ/YmdNJCUNI47elg==",
5434+ "requires": {
5435+ "style-to-object": "0.3.0"
5436+ }
5437+ },
4653 "style-to-object": {
5438 "style-to-object": {
4654 "version": "0.3.0",
5439 "version": "0.3.0",
4655 "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
5440 "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
@@ -4722,6 +5507,14 @@
4722 "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
5507 "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
4723 "dev": true
5508 "dev": true
4724 },
5509 },
5510+ "tmp": {
5511+ "version": "0.0.33",
5512+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
5513+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
5514+ "requires": {
5515+ "os-tmpdir": "~1.0.2"
5516+ }
5517+ },
4725 "to-regex-range": {
5518 "to-regex-range": {
4726 "version": "5.0.1",
5519 "version": "5.0.1",
4727 "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
5520 "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -4828,6 +5621,11 @@
4828 "unist-util-is": "^5.0.0"
5621 "unist-util-is": "^5.0.0"
4829 }
5622 }
4830 },
5623 },
5624+ "universalify": {
5625+ "version": "0.1.2",
5626+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
5627+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
5628+ },
4831 "unset-value": {
5629 "unset-value": {
4832 "version": "0.1.2",
5630 "version": "0.1.2",
4833 "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz",
5631 "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz",
@@ -4898,8 +5696,7 @@
4898 "wrappy": {
5696 "wrappy": {
4899 "version": "1.0.2",
5697 "version": "1.0.2",
4900 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
5698 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
4901− "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
5699+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
4902− "dev": true
4903 },
5700 },
4904 "xml-js": {
5701 "xml-js": {
4905 "version": "1.6.11",
5702 "version": "1.6.11",
package.json+4−1
@@ -14,7 +14,8 @@
14 "understanding-urbit-tree": "node lib/buildPageTree understanding-urbit weight",
14 "understanding-urbit-tree": "node lib/buildPageTree understanding-urbit weight",
15 "using-tree": "node lib/buildPageTree using weight",
15 "using-tree": "node lib/buildPageTree using weight",
16 "cache-posts": "node lib/cache.js",
16 "cache-posts": "node lib/cache.js",
17− "rss": "node lib/rss.js"
17+ "rss": "node lib/rss.js",
18+ "postinstall": "patch-package"
18 },
19 },
19 "dependencies": {
20 "dependencies": {
20 "@iarna/toml": "^2.2.5",
21 "@iarna/toml": "^2.2.5",
@@ -31,10 +32,12 @@
31 "fuzzy-search": "^3.2.1",
32 "fuzzy-search": "^3.2.1",
32 "gray-matter": "^4.0.3",
33 "gray-matter": "^4.0.3",
33 "html-entities": "^2.3.2",
34 "html-entities": "^2.3.2",
35+ "html-react-parser": "^1.4.14",
34 "lodash.debounce": "^4.0.8",
36 "lodash.debounce": "^4.0.8",
35 "lodash.omit": "^4.5.0",
37 "lodash.omit": "^4.5.0",
36 "luxon": "^2.0.2",
38 "luxon": "^2.0.2",
37 "next": "^12.1.5",
39 "next": "^12.1.5",
40+ "patch-package": "^6.4.7",
38 "path-browserify": "^1.0.1",
41 "path-browserify": "^1.0.1",
39 "prism-react-renderer": "^1.3.3",
42 "prism-react-renderer": "^1.3.3",
40 "prismjs": "^1.25.0",
43 "prismjs": "^1.25.0",
patches/@markdoc+markdoc+0.1.2.patchnew file+1409
@@ -0,0 +1,1409 @@
1+diff --git a/node_modules/@markdoc/markdoc/build.js b/node_modules/@markdoc/markdoc/build.js
2+new file mode 100644
3+index 0000000..74d5c16
4+--- /dev/null
5++++ b/node_modules/@markdoc/markdoc/build.js
6+@@ -0,0 +1,16 @@
7++#!/usr/bin/env node
8++const { buildSync } = require('esbuild');
9++
10++const shared = {
11++ bundle: true,
12++ entryPoints: ['index.ts'],
13++ outdir: 'dist',
14++ sourcemap: 'external',
15++ external: [],
16++ format: 'esm',
17++ watch: process.argv.includes('--watch'),
18++};
19++
20++buildSync({ ...shared, format: 'cjs' });
21++buildSync({ ...shared, outExtension: { '.js': '.mjs' } });
22++buildSync({ ...shared, entryPoints: ['src/renderers/react/react.ts'] });
23+\ No newline at end of file
24+diff --git a/node_modules/@markdoc/markdoc/dist/index.d.ts b/node_modules/@markdoc/markdoc/dist/index.d.ts
25+index 42060c7..0afef25 100644
26+--- a/node_modules/@markdoc/markdoc/dist/index.d.ts
27++++ b/node_modules/@markdoc/markdoc/dist/index.d.ts
28+@@ -11,6 +11,7 @@ import transformer from './src/transformer';
29+ import validator from './src/validator';
30+ import { parseTags } from './src/utils';
31+ import transforms from './src/transforms/index';
32++import Raw from '@markdoc/markdoc/src/ast/raw';
33+ import type Token from 'markdown-it/lib/token';
34+ import type { Config, RenderableTreeNode, ValidateError } from './src/types';
35+ export * from './src/types';
36+@@ -82,15 +83,15 @@ declare const _default: {
37+ debug: import("./src/types").ConfigFunction;
38+ };
39+ renderers: {
40+- html: typeof import("./src/renderers/html").default;
41+- react: typeof import("./src/renderers/react/react").default;
42+- reactStatic: typeof import("./src/renderers/react/static").default;
43++ html: typeof import("@markdoc/markdoc/src/renderers/html").default;
44++ react: typeof import("@markdoc/markdoc/src/renderers/react/react").default;
45++ reactStatic: typeof import("@markdoc/markdoc/src/renderers/react/static").default;
46+ };
47+- transforms: typeof import("./src/transforms/table").default[];
48++ transforms: typeof import("@markdoc/markdoc/src/transforms/table").default[];
49+ Ast: {
50+ fromJSON: (text: string) => Node | Node[];
51+ isAst(value?: any): value is import("./src/types").AstType;
52+- isFunction(value?: any): value is import("./src/ast/function").default;
53++ isFunction(value?: any): value is import("@markdoc/markdoc/src/ast/function").default;
54+ getAstValues(value: any): Generator<import("./src/types").AstType, void, unknown>;
55+ resolve(value: any, config?: Readonly<Partial<{
56+ nodes: Partial<Record<import("./src/types").NodeType, import("./src/types").Schema<Readonly<Partial<any>>, string>>>;
57+@@ -102,11 +103,12 @@ declare const _default: {
58+ validateFunctions?: boolean | undefined;
59+ } | undefined;
60+ }>>): any;
61+- Function: typeof import("./src/ast/function").default;
62++ Function: typeof import("@markdoc/markdoc/src/ast/function").default;
63+ Node: typeof Node;
64+- Variable: typeof import("./src/ast/variable").default;
65++ Variable: typeof import("@markdoc/markdoc/src/ast/variable").default;
66+ };
67+ Tag: typeof Tag;
68++ Raw: typeof Raw;
69+ Tokenizer: typeof Tokenizer;
70+ parseTags: typeof parseTags;
71+ transformer: import("./src/transformer").Transformer;
72+@@ -118,5 +120,5 @@ declare const _default: {
73+ truthy: typeof truthy;
74+ };
75+ export default _default;
76+-export { nodes, tags, functions, transforms, renderers, Ast, Tag, Tokenizer, parseTags, transformer, validator, truthy, };
77++export { nodes, tags, functions, transforms, renderers, Ast, Tag, Raw, Tokenizer, parseTags, transformer, validator, truthy, };
78+ //# sourceMappingURL=index.d.ts.map
79+\ No newline at end of file
80+diff --git a/node_modules/@markdoc/markdoc/dist/index.d.ts.map b/node_modules/@markdoc/markdoc/dist/index.d.ts.map
81+index 7ebe6ac..35df68d 100644
82+--- a/node_modules/@markdoc/markdoc/dist/index.d.ts.map
83++++ b/node_modules/@markdoc/markdoc/dist/index.d.ts.map
84+@@ -1 +1 @@
85+-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAExC,OAAO,IAAI,MAAM,gBAAgB,CAAC;AAClC,OAAO,GAAG,MAAM,eAAe,CAAC;AAChC,OAAO,GAAG,MAAM,iBAAiB,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAEhD,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE7E,cAAc,aAAa,CAAC;AAsB5B,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAGpE;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC/C,OAAO,EAAE,IAAI,EACb,MAAM,EAAE,CAAC,GACR,IAAI,CAAC;AACR,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC/C,OAAO,EAAE,IAAI,EAAE,EACf,MAAM,EAAE,CAAC,GACR,IAAI,EAAE,CAAC;AAWV,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACjD,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,EAAE,CAAC,GACT,kBAAkB,CAAC;AACtB,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACjD,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,CAAC,EAAE,CAAC,GACT,kBAAkB,EAAE,CAAC;AAaxB,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAChD,OAAO,EAAE,IAAI,EACb,OAAO,CAAC,EAAE,CAAC,GACV,aAAa,EAAE,CAYjB;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EACxC,UAAU,KAAK,EACf,GAAG,QAAQ,EAAE,GAAG,EAAE;;;;;;EAGnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,wBAiBE;AAEF,OAAO,EACL,KAAK,EACL,IAAI,EACJ,SAAS,EACT,UAAU,EACV,SAAS,EACT,GAAG,EACH,GAAG,EACH,SAAS,EACT,SAAS,EACT,WAAW,EACX,SAAS,EACT,MAAM,GACP,CAAC"}
86+\ No newline at end of file
87++{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAExC,OAAO,IAAI,MAAM,gBAAgB,CAAC;AAClC,OAAO,GAAG,MAAM,eAAe,CAAC;AAChC,OAAO,GAAG,MAAM,iBAAiB,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,GAAG,MAAM,8BAA8B,CAAC;AAE/C,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE7E,cAAc,aAAa,CAAC;AAsB5B,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAGpE;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC/C,OAAO,EAAE,IAAI,EACb,MAAM,EAAE,CAAC,GACR,IAAI,CAAC;AACR,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC/C,OAAO,EAAE,IAAI,EAAE,EACf,MAAM,EAAE,CAAC,GACR,IAAI,EAAE,CAAC;AAWV,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACjD,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,EAAE,CAAC,GACT,kBAAkB,CAAC;AACtB,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACjD,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,CAAC,EAAE,CAAC,GACT,kBAAkB,EAAE,CAAC;AAaxB,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAChD,OAAO,EAAE,IAAI,EACb,OAAO,CAAC,EAAE,CAAC,GACV,aAAa,EAAE,CAYjB;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EACxC,UAAU,KAAK,EACf,GAAG,QAAQ,EAAE,GAAG,EAAE;;;;;;EAGnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,wBAkBE;AAEF,OAAO,EACL,KAAK,EACL,IAAI,EACJ,SAAS,EACT,UAAU,EACV,SAAS,EACT,GAAG,EACH,GAAG,EACH,GAAG,EACH,SAAS,EACT,SAAS,EACT,WAAW,EACX,SAAS,EACT,MAAM,GACP,CAAC"}
88+\ No newline at end of file
89+diff --git a/node_modules/@markdoc/markdoc/dist/index.js b/node_modules/@markdoc/markdoc/dist/index.js
90+index 27f4068..b7c7f3f 100644
91+--- a/node_modules/@markdoc/markdoc/dist/index.js
92++++ b/node_modules/@markdoc/markdoc/dist/index.js
93+@@ -6590,6 +6590,57 @@ var require_tag = __commonJS({
94+ }
95+ });
96+
97++// node_modules/markdown-it-sup/index.js
98++var require_markdown_it_sup = __commonJS({
99++ "node_modules/markdown-it-sup/index.js"(exports, module2) {
100++ "use strict";
101++ var UNESCAPE_RE = /\\([ \\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g;
102++ function superscript(state, silent) {
103++ var found, content, token, max = state.posMax, start = state.pos;
104++ if (state.src.charCodeAt(start) !== 94) {
105++ return false;
106++ }
107++ if (silent) {
108++ return false;
109++ }
110++ if (start + 2 >= max) {
111++ return false;
112++ }
113++ state.pos = start + 1;
114++ while (state.pos < max) {
115++ if (state.src.charCodeAt(state.pos) === 94) {
116++ found = true;
117++ break;
118++ }
119++ state.md.inline.skipToken(state);
120++ }
121++ if (!found || start + 1 === state.pos) {
122++ state.pos = start;
123++ return false;
124++ }
125++ content = state.src.slice(start + 1, state.pos);
126++ if (content.match(/(^|[^\\])(\\\\)*\s/)) {
127++ state.pos = start;
128++ return false;
129++ }
130++ state.posMax = state.pos;
131++ state.pos = start + 1;
132++ token = state.push("sup_open", "sup", 1);
133++ token.markup = "^";
134++ token = state.push("text", "", 0);
135++ token.content = content.replace(UNESCAPE_RE, "$1");
136++ token = state.push("sup_close", "sup", -1);
137++ token.markup = "^";
138++ state.pos = state.posMax + 1;
139++ state.posMax = max;
140++ return true;
141++ }
142++ module2.exports = function sup_plugin(md) {
143++ md.inline.ruler.after("emphasis", "sup", superscript);
144++ };
145++ }
146++});
147++
148+ // node_modules/markdown-it/index.js
149+ var require_markdown_it = __commonJS({
150+ "node_modules/markdown-it/index.js"(exports, module2) {
151+@@ -6601,6 +6652,7 @@ var require_markdown_it = __commonJS({
152+ // index.ts
153+ __export(exports, {
154+ Ast: () => ast_default,
155++ Raw: () => Raw,
156+ Tag: () => Tag,
157+ Tokenizer: () => Tokenizer,
158+ createElement: () => createElement,
159+@@ -6926,6 +6978,7 @@ var Tokenizer = class {
160+ this.parser = new import_lib.default(config);
161+ this.parser.use(plugin, "annotations", {});
162+ this.parser.use(plugin2, "frontmatter", {});
163++ this.parser.use(require_markdown_it_sup());
164+ this.parser.disable("lheading");
165+ }
166+ tokenize(content) {
167+@@ -7127,7 +7180,9 @@ var mappings = {
168+ bullet_list: "list",
169+ code_inline: "code",
170+ list_item: "item",
171+- variable: "text"
172++ variable: "text",
173++ html_block: "html",
174++ html_inline: "html"
175+ };
176+ function annotate(node, attributes) {
177+ for (const { name, value, type } of attributes)
178+@@ -7155,6 +7210,7 @@ function handleAttrs(token, type) {
179+ }
180+ case "text":
181+ case "code":
182++ case "html":
183+ return { content: (token.meta || {}).variable || token.content };
184+ case "fence": {
185+ const [language] = token.info.split(" ", 1);
186+@@ -7265,6 +7321,7 @@ __export(schema_exports, {
187+ hardbreak: () => hardbreak,
188+ heading: () => heading,
189+ hr: () => hr,
190++ html: () => html,
191+ image: () => image,
192+ inline: () => inline2,
193+ item: () => item,
194+@@ -7282,6 +7339,17 @@ __export(schema_exports, {
195+ thead: () => thead,
196+ tr: () => tr
197+ });
198++
199++// src/ast/raw.ts
200++var Raw = class {
201++ constructor(content, inline3) {
202++ this.$$mdtype = "Raw";
203++ this.content = content;
204++ this.inline = inline3;
205++ }
206++};
207++
208++// src/schema.ts
209+ var document = {
210+ render: "article",
211+ children: [
212+@@ -7475,6 +7543,14 @@ var softbreak = {
213+ return " ";
214+ }
215+ };
216++var html = {
217++ attributes: {
218++ content: { type: String, required: true }
219++ },
220++ transform(node) {
221++ return node.attributes.content ? new Raw(node.attributes.content, node.inline) : null;
222++ }
223++};
224+ var error = {};
225+
226+ // src/tags/conditional.ts
227+@@ -7617,6 +7693,8 @@ function render(node) {
228+ return node.map(render).join("");
229+ if (node === null || typeof node !== "object")
230+ return "";
231++ if (node.$$mdtype === "Raw")
232++ return node.content;
233+ const { name, attributes, children = [] } = node;
234+ if (!name)
235+ return render(children);
236+@@ -7638,26 +7716,28 @@ function tagName(name, components) {
237+ }
238+
239+ // src/renderers/react/react.ts
240+-function dynamic(node, React, { components = {} } = {}) {
241+- function deepRender2(value) {
242++function dynamic(node, React, { components = {} } = {}, raw) {
243++ function deepRender(value) {
244+ if (value == null || typeof value !== "object")
245+ return value;
246+ if (Array.isArray(value))
247+- return value.map((item2) => deepRender2(item2));
248+- if (value.$$mdtype === "Tag")
249+- return render3(value);
250++ return value.map((item2) => deepRender(item2));
251++ if (["Tag", "Raw"].includes(value.$$mdtype))
252++ return render2(value);
253+ if (typeof value !== "object")
254+ return value;
255+ const output = {};
256+ for (const [k, v] of Object.entries(value))
257+- output[k] = deepRender2(v);
258++ output[k] = deepRender(v);
259+ return output;
260+ }
261+- function render3(node2) {
262++ function render2(node2) {
263+ if (Array.isArray(node2))
264+- return React.createElement(React.Fragment, null, ...node2.map(render3));
265++ return React.createElement(React.Fragment, null, ...node2.map(render2));
266+ if (node2 === null || typeof node2 !== "object")
267+ return node2;
268++ if (node2.$$mdtype === "Raw")
269++ return raw?.(node2.content, node2.inline);
270+ const {
271+ name,
272+ attributes: { class: className, ...attrs } = {},
273+@@ -7665,45 +7745,47 @@ function dynamic(node, React, { components = {} } = {}) {
274+ } = node2;
275+ if (className)
276+ attrs.className = className;
277+- return React.createElement(tagName(name, components), Object.keys(attrs).length == 0 ? null : deepRender2(attrs), ...children.map(render3));
278++ return React.createElement(tagName(name, components), Object.keys(attrs).length == 0 ? null : deepRender(attrs), ...children.map(render2));
279+ }
280+- return render3(node);
281++ return render2(node);
282+ }
283+
284+ // src/renderers/react/static.ts
285+-function renderArray(children) {
286+- return children.map(render2).join(", ");
287+-}
288+-function deepRender(value) {
289+- if (value == null || typeof value !== "object")
290+- return JSON.stringify(value);
291+- if (Array.isArray(value))
292+- return `[${value.map((item2) => deepRender(item2)).join(", ")}]`;
293+- if (value.$$mdtype === "Tag")
294+- return render2(value);
295+- if (typeof value !== "object")
296+- return JSON.stringify(value);
297+- const object = Object.entries(value).map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(": ")).join(", ");
298+- return `{${object}}`;
299+-}
300+-function render2(node) {
301+- if (Array.isArray(node))
302+- return `React.createElement(React.Fragment, null, ${renderArray(node)})`;
303+- if (node === null || typeof node !== "object")
304+- return JSON.stringify(node);
305+- const {
306+- name,
307+- attributes: { class: className, ...attrs } = {},
308+- children = []
309+- } = node;
310+- if (className)
311+- attrs.className = className;
312+- return `React.createElement(
313++function reactStatic(node, raw) {
314++ function renderArray(children) {
315++ return children.map(render2).join(", ");
316++ }
317++ function deepRender(value) {
318++ if (value == null || typeof value !== "object")
319++ return JSON.stringify(value);
320++ if (Array.isArray(value))
321++ return `[${value.map((item2) => deepRender(item2)).join(", ")}]`;
322++ if (["Tag", "Raw"].includes(value.$$mdtype))
323++ return render2(value);
324++ if (typeof value !== "object")
325++ return JSON.stringify(value);
326++ const object = Object.entries(value).map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(": ")).join(", ");
327++ return `{${object}}`;
328++ }
329++ function render2(node2) {
330++ if (Array.isArray(node2))
331++ return `React.createElement(React.Fragment, null, ${renderArray(node2)})`;
332++ if (node2 === null || typeof node2 !== "object")
333++ return JSON.stringify(node2);
334++ if (node2.$$mdtype === "Raw")
335++ return raw?.(node2.content, node2.inline) ?? "";
336++ const {
337++ name,
338++ attributes: { class: className, ...attrs } = {},
339++ children = []
340++ } = node2;
341++ if (className)
342++ attrs.className = className;
343++ return `React.createElement(
344+ tagName(${JSON.stringify(name)}, components),
345+ ${Object.keys(attrs).length == 0 ? "null" : deepRender(attrs)},
346+ ${renderArray(children)})`;
347+-}
348+-function reactStatic(node) {
349++ }
350+ return `
351+ (({components = {}} = {}) => {
352+ ${tagName}
353+@@ -7951,6 +8033,7 @@ var markdoc_default = {
354+ transforms: transforms_default,
355+ Ast: ast_default,
356+ Tag,
357++ Raw,
358+ Tokenizer,
359+ parseTags,
360+ transformer: transformer_default,
361+diff --git a/node_modules/@markdoc/markdoc/dist/index.js.map b/node_modules/@markdoc/markdoc/dist/index.js.map
362+index 58a23c6..c6a3ab4 100644
363+--- a/node_modules/@markdoc/markdoc/dist/index.js.map
364++++ b/node_modules/@markdoc/markdoc/dist/index.js.map
365+@@ -1,7 +1,7 @@
366+ {
367+ "version": 3,
368+- "sources": ["../node_modules/markdown-it/lib/common/entities.js", "../node_modules/uc.micro/categories/P/regex.js", "../node_modules/mdurl/encode.js", "../node_modules/mdurl/decode.js", "../node_modules/mdurl/format.js", "../node_modules/mdurl/parse.js", "../node_modules/mdurl/index.js", "../node_modules/uc.micro/properties/Any/regex.js", "../node_modules/uc.micro/categories/Cc/regex.js", "../node_modules/uc.micro/categories/Cf/regex.js", "../node_modules/uc.micro/categories/Z/regex.js", "../node_modules/uc.micro/index.js", "../node_modules/markdown-it/lib/common/utils.js", "../node_modules/markdown-it/lib/helpers/parse_link_label.js", "../node_modules/markdown-it/lib/helpers/parse_link_destination.js", "../node_modules/markdown-it/lib/helpers/parse_link_title.js", "../node_modules/markdown-it/lib/helpers/index.js", "../node_modules/markdown-it/lib/renderer.js", "../node_modules/markdown-it/lib/ruler.js", "../node_modules/markdown-it/lib/rules_core/normalize.js", "../node_modules/markdown-it/lib/rules_core/block.js", "../node_modules/markdown-it/lib/rules_core/inline.js", "../node_modules/markdown-it/lib/rules_core/linkify.js", "../node_modules/markdown-it/lib/rules_core/replacements.js", "../node_modules/markdown-it/lib/rules_core/smartquotes.js", "../node_modules/markdown-it/lib/token.js", "../node_modules/markdown-it/lib/rules_core/state_core.js", "../node_modules/markdown-it/lib/parser_core.js", "../node_modules/markdown-it/lib/rules_block/table.js", "../node_modules/markdown-it/lib/rules_block/code.js", "../node_modules/markdown-it/lib/rules_block/fence.js", "../node_modules/markdown-it/lib/rules_block/blockquote.js", "../node_modules/markdown-it/lib/rules_block/hr.js", "../node_modules/markdown-it/lib/rules_block/list.js", "../node_modules/markdown-it/lib/rules_block/reference.js", "../node_modules/markdown-it/lib/common/html_blocks.js", "../node_modules/markdown-it/lib/common/html_re.js", "../node_modules/markdown-it/lib/rules_block/html_block.js", "../node_modules/markdown-it/lib/rules_block/heading.js", "../node_modules/markdown-it/lib/rules_block/lheading.js", "../node_modules/markdown-it/lib/rules_block/paragraph.js", "../node_modules/markdown-it/lib/rules_block/state_block.js", "../node_modules/markdown-it/lib/parser_block.js", "../node_modules/markdown-it/lib/rules_inline/text.js", "../node_modules/markdown-it/lib/rules_inline/newline.js", "../node_modules/markdown-it/lib/rules_inline/escape.js", "../node_modules/markdown-it/lib/rules_inline/backticks.js", "../node_modules/markdown-it/lib/rules_inline/strikethrough.js", "../node_modules/markdown-it/lib/rules_inline/emphasis.js", "../node_modules/markdown-it/lib/rules_inline/link.js", "../node_modules/markdown-it/lib/rules_inline/image.js", "../node_modules/markdown-it/lib/rules_inline/autolink.js", "../node_modules/markdown-it/lib/rules_inline/html_inline.js", "../node_modules/markdown-it/lib/rules_inline/entity.js", "../node_modules/markdown-it/lib/rules_inline/balance_pairs.js", "../node_modules/markdown-it/lib/rules_inline/text_collapse.js", "../node_modules/markdown-it/lib/rules_inline/state_inline.js", "../node_modules/markdown-it/lib/parser_inline.js", "../node_modules/linkify-it/lib/re.js", "../node_modules/linkify-it/index.js", "../node_modules/punycode/punycode.js", "../node_modules/markdown-it/lib/presets/default.js", "../node_modules/markdown-it/lib/presets/zero.js", "../node_modules/markdown-it/lib/presets/commonmark.js", "../node_modules/markdown-it/lib/index.js", "../src/grammar/tag.js", "../node_modules/markdown-it/index.js", "../index.ts", "../src/tokenizer/index.ts", "../src/utils.ts", "../src/ast/variable.ts", "../src/ast/base.ts", "../src/ast/function.ts", "../src/tokenizer/plugins/annotations.ts", "../src/tokenizer/plugins/frontmatter.ts", "../src/ast/tag.ts", "../src/schema-types/class.ts", "../src/transformer.ts", "../src/ast/node.ts", "../src/ast/index.ts", "../src/transforms/table.ts", "../src/transforms/index.ts", "../src/parser.ts", "../src/schema.ts", "../src/tags/conditional.ts", "../src/tags/partial.ts", "../src/tags/table.ts", "../src/tags/index.ts", "../src/functions/index.ts", "../src/renderers/html.ts", "../src/renderers/react/shared.ts", "../src/renderers/react/react.ts", "../src/renderers/react/static.ts", "../src/renderers/index.ts", "../src/validator.ts"],
369+- "sourcesContent": ["// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/lib/maps/entities.json');\n", "module.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/", "\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n var i, ch, cache = encodeCache[exclude];\n if (cache) { return cache; }\n\n cache = encodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch);\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n }\n }\n\n for (i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i];\n }\n\n return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n var i, l, code, nextCode, cache,\n result = '';\n\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude;\n exclude = encode.defaultChars;\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true;\n }\n\n cache = getEncodeCache(exclude);\n\n for (i = 0, l = string.length; i < l; i++) {\n code = string.charCodeAt(i);\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3);\n i += 2;\n continue;\n }\n }\n\n if (code < 128) {\n result += cache[code];\n continue;\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n nextCode = string.charCodeAt(i + 1);\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1]);\n i++;\n continue;\n }\n }\n result += '%EF%BF%BD';\n continue;\n }\n\n result += encodeURIComponent(string[i]);\n }\n\n return result;\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n", "\n'use strict';\n\n\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n var i, ch, cache = decodeCache[exclude];\n if (cache) { return cache; }\n\n cache = decodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n cache.push(ch);\n }\n\n for (i = 0; i < exclude.length; i++) {\n ch = exclude.charCodeAt(i);\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n }\n\n return cache;\n}\n\n\n// Decode percent-encoded string.\n//\nfunction decode(string, exclude) {\n var cache;\n\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars;\n }\n\n cache = getDecodeCache(exclude);\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {\n var i, l, b1, b2, b3, b4, chr,\n result = '';\n\n for (i = 0, l = seq.length; i < l; i += 3) {\n b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n if (b1 < 0x80) {\n result += cache[b1];\n continue;\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n if ((b2 & 0xC0) === 0x80) {\n chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F);\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 3;\n continue;\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F);\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 6;\n continue;\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F);\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd';\n } else {\n chr -= 0x10000;\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n }\n\n i += 9;\n continue;\n }\n }\n\n result += '\\ufffd';\n }\n\n return result;\n });\n}\n\n\ndecode.defaultChars = ';/?:@&=+$,#';\ndecode.componentChars = '';\n\n\nmodule.exports = decode;\n", "\n'use strict';\n\n\nmodule.exports = function format(url) {\n var result = '';\n\n result += url.protocol || '';\n result += url.slashes ? '//' : '';\n result += url.auth ? url.auth + '@' : '';\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']';\n } else {\n result += url.hostname || '';\n }\n\n result += url.port ? ':' + url.port : '';\n result += url.pathname || '';\n result += url.search || '';\n result += url.hash || '';\n\n return result;\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\n'use strict';\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.pathname = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = [ '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t' ],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = [ '{', '}', '|', '\\\\', '^', '`' ].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = [ '\\'' ].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape),\n hostEndingChars = [ '/', '?', '#' ],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n /* eslint-disable no-script-url */\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n };\n /* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n if (url && url instanceof Url) { return url; }\n\n var u = new Url();\n u.parse(url, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, slashesDenoteHost) {\n var i, l, lowerProto, hec, slashes,\n rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n lowerProto = proto.toLowerCase();\n this.protocol = proto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = auth;\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length;\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd--; }\n var host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost(host);\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) { continue; }\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n }\n }\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n rest = rest.slice(0, qm);\n }\n if (rest) { this.pathname = rest; }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '';\n }\n\n return this;\n};\n\nUrl.prototype.parseHost = function(host) {\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) { this.hostname = host; }\n};\n\nmodule.exports = urlParse;\n", "'use strict';\n\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse = require('./parse');\n", "module.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/", "module.exports=/[\\0-\\x1F\\x7F-\\x9F]/", "module.exports=/[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/", "module.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/", "'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc = require('./categories/Cc/regex');\nexports.Cf = require('./categories/Cf/regex');\nexports.P = require('./categories/P/regex');\nexports.Z = require('./categories/Z/regex');\n", "// Utilities\n//\n'use strict';\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object');\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n /*eslint no-bitwise:0*/\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) { return false; }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false; }\n if (c === 0x0B) { return false; }\n if (c >= 0x0E && c <= 0x1F) { return false; }\n if (c >= 0x7F && c <= 0x9F) { return false; }\n // out of range\n if (c > 0x10FFFF) { return false; }\n return true;\n}\n\nfunction fromCodePoint(c) {\n /*eslint no-bitwise:0*/\n if (c > 0xffff) {\n c -= 0x10000;\n var surrogate1 = 0xd800 + (c >> 10),\n surrogate2 = 0xdc00 + (c & 0x3ff);\n\n return String.fromCharCode(surrogate1, surrogate2);\n }\n return String.fromCharCode(c);\n}\n\n\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\n\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n var code = 0;\n\n if (has(entities, name)) {\n return entities[name];\n }\n\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n code = name[1].toLowerCase() === 'x' ?\n parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code);\n }\n }\n\n return match;\n}\n\n/*function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n if (str.indexOf('\\\\') < 0) { return str; }\n return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str; }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped; }\n return replaceEntityPattern(match, entity);\n });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;'\n};\n\nfunction replaceUnsafeChar(ch) {\n return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n }\n return str;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isSpace(code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true;\n }\n return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n if (code >= 0x2000 && code <= 0x200A) { return true; }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true;\n }\n return false;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n return UNICODE_PUNCT_RE.test(ch);\n}\n\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n switch (ch) {\n case 0x21/* ! */:\n case 0x22/* \" */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x27/* ' */:\n case 0x28/* ( */:\n case 0x29/* ) */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2C/* , */:\n case 0x2D/* - */:\n case 0x2E/* . */:\n case 0x2F/* / */:\n case 0x3A/* : */:\n case 0x3B/* ; */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x3F/* ? */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7C/* | */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ');\n\n // In node v10 '\u1E9E'.toLowerCase() === '\u1E7E', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('\u1E9E'.toLowerCase() === '\u1E7E') {\n str = str.replace(/\u1E9E/g, '\u00DF');\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // \u0130, \u03F4, \u1E9E, \u2126, \u212A, \u212B - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (\u0398), U+03f4 (\u03F4) and lowercase U+03b8 (\u03B8), U+03d1 (\u03D1)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change \u03D1 (it's already lowercase),\n // and .toUpperCase() doesn't change \u03F4 (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib = {};\nexports.lib.mdurl = require('mdurl');\nexports.lib.ucmicro = require('uc.micro');\n\nexports.assign = assign;\nexports.isString = isString;\nexports.has = has;\nexports.unescapeMd = unescapeMd;\nexports.unescapeAll = unescapeAll;\nexports.isValidEntityCode = isValidEntityCode;\nexports.fromCodePoint = fromCodePoint;\n// exports.replaceEntities = replaceEntities;\nexports.escapeHtml = escapeHtml;\nexports.arrayReplaceAt = arrayReplaceAt;\nexports.isSpace = isSpace;\nexports.isWhiteSpace = isWhiteSpace;\nexports.isMdAsciiPunct = isMdAsciiPunct;\nexports.isPunctChar = isPunctChar;\nexports.escapeRE = escapeRE;\nexports.normalizeReference = normalizeReference;\n", "// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n var level, found, marker, prevPos,\n labelEnd = -1,\n max = state.posMax,\n oldPos = state.pos;\n\n state.pos = start + 1;\n level = 1;\n\n while (state.pos < max) {\n marker = state.src.charCodeAt(state.pos);\n if (marker === 0x5D /* ] */) {\n level--;\n if (level === 0) {\n found = true;\n break;\n }\n }\n\n prevPos = state.pos;\n state.md.inline.skipToken(state);\n if (marker === 0x5B /* [ */) {\n if (prevPos === state.pos - 1) {\n // increase level if we find text `[`, which is not a part of any token\n level++;\n } else if (disableNested) {\n state.pos = oldPos;\n return -1;\n }\n }\n }\n\n if (found) {\n labelEnd = state.pos;\n }\n\n // restore old state\n state.pos = oldPos;\n\n return labelEnd;\n};\n", "// Parse link destination\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkDestination(str, pos, max) {\n var code, level,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (str.charCodeAt(pos) === 0x3C /* < */) {\n pos++;\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === 0x0A /* \\n */) { return result; }\n if (code === 0x3C /* < */) { return result; }\n if (code === 0x3E /* > */) {\n result.pos = pos + 1;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n }\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n pos++;\n }\n\n // no closing '>'\n return result;\n }\n\n // this should be ... } else { ... branch\n\n level = 0;\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x20) { break; }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7F) { break; }\n\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) { break; }\n pos += 2;\n continue;\n }\n\n if (code === 0x28 /* ( */) {\n level++;\n if (level > 32) { return result; }\n }\n\n if (code === 0x29 /* ) */) {\n if (level === 0) { break; }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos) { return result; }\n if (level !== 0) { return result; }\n\n result.str = unescapeAll(str.slice(start, pos));\n result.lines = lines;\n result.pos = pos;\n result.ok = true;\n return result;\n};\n", "// Parse link title\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkTitle(str, pos, max) {\n var code,\n marker,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (pos >= max) { return result; }\n\n marker = str.charCodeAt(pos);\n\n if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; }\n\n pos++;\n\n // if opening marker is \"(\", switch it to closing marker \")\"\n if (marker === 0x28) { marker = 0x29; }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === marker) {\n result.pos = pos + 1;\n result.lines = lines;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n } else if (code === 0x28 /* ( */ && marker === 0x29 /* ) */) {\n return result;\n } else if (code === 0x0A) {\n lines++;\n } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos++;\n if (str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n\n pos++;\n }\n\n return result;\n};\n", "// Just a shortcut for bulk export\n'use strict';\n\n\nexports.parseLinkLabel = require('./parse_link_label');\nexports.parseLinkDestination = require('./parse_link_destination');\nexports.parseLinkTitle = require('./parse_link_title');\n", "/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\n\nvar assign = require('./common/utils').assign;\nvar unescapeAll = require('./common/utils').unescapeAll;\nvar escapeHtml = require('./common/utils').escapeHtml;\n\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar default_rules = {};\n\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<code' + slf.renderAttrs(token) + '>' +\n escapeHtml(tokens[idx].content) +\n '</code>';\n};\n\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<pre' + slf.renderAttrs(token) + '><code>' +\n escapeHtml(tokens[idx].content) +\n '</code></pre>\\n';\n};\n\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n var token = tokens[idx],\n info = token.info ? unescapeAll(token.info).trim() : '',\n langName = '',\n langAttrs = '',\n highlighted, i, arr, tmpAttrs, tmpToken;\n\n if (info) {\n arr = info.split(/(\\s+)/g);\n langName = arr[0];\n langAttrs = arr.slice(2).join('');\n }\n\n if (options.highlight) {\n highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n } else {\n highlighted = escapeHtml(token.content);\n }\n\n if (highlighted.indexOf('<pre') === 0) {\n return highlighted + '\\n';\n }\n\n // If language exists, inject class gently, without modifying original token.\n // May be, one day we will add .deepClone() for token and simplify this part, but\n // now we prefer to keep things local.\n if (info) {\n i = token.attrIndex('class');\n tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\n if (i < 0) {\n tmpAttrs.push([ 'class', options.langPrefix + langName ]);\n } else {\n tmpAttrs[i] = tmpAttrs[i].slice();\n tmpAttrs[i][1] += ' ' + options.langPrefix + langName;\n }\n\n // Fake token just to render attributes\n tmpToken = {\n attrs: tmpAttrs\n };\n\n return '<pre><code' + slf.renderAttrs(tmpToken) + '>'\n + highlighted\n + '</code></pre>\\n';\n }\n\n\n return '<pre><code' + slf.renderAttrs(token) + '>'\n + highlighted\n + '</code></pre>\\n';\n};\n\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n // should be placed on proper position for tests.\n //\n // Replace content with actual value\n\n token.attrs[token.attrIndex('alt')][1] =\n slf.renderInlineAsText(token.children, options, env);\n\n return slf.renderToken(tokens, idx, options);\n};\n\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n return options.xhtmlOut ? '<br />\\n' : '<br>\\n';\n};\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n';\n};\n\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n return escapeHtml(tokens[idx].content);\n};\n\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\n\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer() {\n\n /**\n * Renderer#rules -> Object\n *\n * Contains render rules for tokens. Can be updated and extended.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.renderer.rules.strong_open = function () { return '<b>'; };\n * md.renderer.rules.strong_close = function () { return '</b>'; };\n *\n * var result = md.renderInline(...);\n * ```\n *\n * Each rule is called as independent static function with fixed signature:\n *\n * ```javascript\n * function my_token_render(tokens, idx, options, env, renderer) {\n * // ...\n * return renderedHTML;\n * }\n * ```\n *\n * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n * for more details and examples.\n **/\n this.rules = assign({}, default_rules);\n}\n\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n var i, l, result;\n\n if (!token.attrs) { return ''; }\n\n result = '';\n\n for (i = 0, l = token.attrs.length; i < l; i++) {\n result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n }\n\n return result;\n};\n\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n var nextToken,\n result = '',\n needLf = false,\n token = tokens[idx];\n\n // Tight list paragraphs\n if (token.hidden) {\n return '';\n }\n\n // Insert a newline between hidden paragraph and subsequent opening\n // block-level tag.\n //\n // For example, here we should insert a newline before blockquote:\n // - a\n // >\n //\n if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n result += '\\n';\n }\n\n // Add token name, e.g. `<img`\n result += (token.nesting === -1 ? '</' : '<') + token.tag;\n\n // Encode attributes, e.g. `<img src=\"foo\"`\n result += this.renderAttrs(token);\n\n // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n if (token.nesting === 0 && options.xhtmlOut) {\n result += ' /';\n }\n\n // Check if we need to add a newline after this tag\n if (token.block) {\n needLf = true;\n\n if (token.nesting === 1) {\n if (idx + 1 < tokens.length) {\n nextToken = tokens[idx + 1];\n\n if (nextToken.type === 'inline' || nextToken.hidden) {\n // Block-level tag containing an inline tag.\n //\n needLf = false;\n\n } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n //\n needLf = false;\n }\n }\n }\n }\n\n result += needLf ? '>\\n' : '>';\n\n return result;\n};\n\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n var type,\n result = '',\n rules = this.rules;\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options);\n }\n }\n\n return result;\n};\n\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n var result = '';\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n if (tokens[i].type === 'text') {\n result += tokens[i].content;\n } else if (tokens[i].type === 'image') {\n result += this.renderInlineAsText(tokens[i].children, options, env);\n } else if (tokens[i].type === 'softbreak') {\n result += '\\n';\n }\n }\n\n return result;\n};\n\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n var i, len, type,\n result = '',\n rules = this.rules;\n\n for (i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (type === 'inline') {\n result += this.renderInline(tokens[i].children, options, env);\n } else if (typeof rules[type] !== 'undefined') {\n result += rules[tokens[i].type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options, env);\n }\n }\n\n return result;\n};\n\nmodule.exports = Renderer;\n", "/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = [];\n\n // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n this.__cache__ = null;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n for (var i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i;\n }\n }\n return -1;\n};\n\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n var self = this;\n var chains = [ '' ];\n\n // collect unique names\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName);\n }\n });\n });\n\n self.__cache__ = {};\n\n chains.forEach(function (chain) {\n self.__cache__[chain] = [];\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n if (chain && rule.alt.indexOf(chain) < 0) { return; }\n\n self.__cache__[chain].push(rule.fn);\n });\n });\n};\n\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n var index = this.__find__(name);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + name); }\n\n this.__rules__[index].fn = fn;\n this.__rules__[index].alt = opt.alt || [];\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n var index = this.__find__(beforeName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); }\n\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n var index = this.__find__(afterName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + afterName); }\n\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n var opt = options || {};\n\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and enable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = true;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n this.__rules__.forEach(function (rule) { rule.enabled = false; });\n\n this.enable(list, ignoreInvalid);\n};\n\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and disable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = false;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__();\n }\n\n // Chain can be empty, if rules disabled. But we still have to return Array.\n return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;\n", "// Normalize input string\n\n'use strict';\n\n\n// https://spec.commonmark.org/0.29/#line-ending\nvar NEWLINES_RE = /\\r\\n?|\\n/g;\nvar NULL_RE = /\\0/g;\n\n\nmodule.exports = function normalize(state) {\n var str;\n\n // Normalize newlines\n str = state.src.replace(NEWLINES_RE, '\\n');\n\n // Replace NULL characters\n str = str.replace(NULL_RE, '\\uFFFD');\n\n state.src = str;\n};\n", "'use strict';\n\n\nmodule.exports = function block(state) {\n var token;\n\n if (state.inlineMode) {\n token = new state.Token('inline', '', 0);\n token.content = state.src;\n token.map = [ 0, 1 ];\n token.children = [];\n state.tokens.push(token);\n } else {\n state.md.block.parse(state.src, state.md, state.env, state.tokens);\n }\n};\n", "'use strict';\n\nmodule.exports = function inline(state) {\n var tokens = state.tokens, tok, i, l;\n\n // Parse inlines\n for (i = 0, l = tokens.length; i < l; i++) {\n tok = tokens[i];\n if (tok.type === 'inline') {\n state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n }\n }\n};\n", "// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\n\nfunction isLinkOpen(str) {\n return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n return /^<\\/a\\s*>/i.test(str);\n}\n\n\nmodule.exports = function linkify(state) {\n var i, j, l, tokens, token, currentToken, nodes, ln, text, pos, lastPos,\n level, htmlLinkLevel, url, fullUrl, urlText,\n blockTokens = state.tokens,\n links;\n\n if (!state.md.options.linkify) { return; }\n\n for (j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline' ||\n !state.md.linkify.pretest(blockTokens[j].content)) {\n continue;\n }\n\n tokens = blockTokens[j].children;\n\n htmlLinkLevel = 0;\n\n // We scan from the end, to keep position when new tags added.\n // Use reversed logic in links start/end match\n for (i = tokens.length - 1; i >= 0; i--) {\n currentToken = tokens[i];\n\n // Skip content of markdown links\n if (currentToken.type === 'link_close') {\n i--;\n while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n i--;\n }\n continue;\n }\n\n // Skip content of html tag links\n if (currentToken.type === 'html_inline') {\n if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n htmlLinkLevel--;\n }\n if (isLinkClose(currentToken.content)) {\n htmlLinkLevel++;\n }\n }\n if (htmlLinkLevel > 0) { continue; }\n\n if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n\n text = currentToken.content;\n links = state.md.linkify.match(text);\n\n // Now split string to nodes\n nodes = [];\n level = currentToken.level;\n lastPos = 0;\n\n for (ln = 0; ln < links.length; ln++) {\n\n url = links[ln].url;\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { continue; }\n\n urlText = links[ln].text;\n\n // Linkifier might send raw hostnames like \"example.com\", where url\n // starts with domain name. So we prepend http:// in those cases,\n // and remove it afterwards.\n //\n if (!links[ln].schema) {\n urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '');\n } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '');\n } else {\n urlText = state.md.normalizeLinkText(urlText);\n }\n\n pos = links[ln].index;\n\n if (pos > lastPos) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos, pos);\n token.level = level;\n nodes.push(token);\n }\n\n token = new state.Token('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.level = level++;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n token = new state.Token('text', '', 0);\n token.content = urlText;\n token.level = level;\n nodes.push(token);\n\n token = new state.Token('link_close', 'a', -1);\n token.level = --level;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n lastPos = links[ln].lastIndex;\n }\n if (lastPos < text.length) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos);\n token.level = level;\n nodes.push(token);\n }\n\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n }\n }\n }\n};\n", "// Simple typographic replacements\n//\n// (c) (C) \u2192 \u00A9\n// (tm) (TM) \u2192 \u2122\n// (r) (R) \u2192 \u00AE\n// +- \u2192 \u00B1\n// (p) (P) -> \u00A7\n// ... \u2192 \u2026 (also ?.... \u2192 ?.., !.... \u2192 !..)\n// ???????? \u2192 ???, !!!!! \u2192 !!!, `,,` \u2192 `,`\n// -- \u2192 &ndash;, --- \u2192 &mdash;\n//\n'use strict';\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> \u00BD, \u00BC, \u00BE\n// - miltiplication 2 x 4 -> 2 \u00D7 4\n\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r|p)\\)/i;\n\nvar SCOPED_ABBR_RE = /\\((c|tm|r|p)\\)/ig;\nvar SCOPED_ABBR = {\n c: '\u00A9',\n r: '\u00AE',\n p: '\u00A7',\n tm: '\u2122'\n};\n\nfunction replaceFn(match, name) {\n return SCOPED_ABBR[name.toLowerCase()];\n}\n\nfunction replace_scoped(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\nfunction replace_rare(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n if (RARE_RE.test(token.content)) {\n token.content = token.content\n .replace(/\\+-/g, '\u00B1')\n // .., ..., ....... -> \u2026\n // but ?..... & !..... -> ?.. & !..\n .replace(/\\.{2,}/g, '\u2026').replace(/([?!])\u2026/g, '$1..')\n .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n // em-dash\n .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n // en-dash\n .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013');\n }\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\n\nmodule.exports = function replace(state) {\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline') { continue; }\n\n if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n replace_scoped(state.tokens[blkIdx].children);\n }\n\n if (RARE_RE.test(state.tokens[blkIdx].content)) {\n replace_rare(state.tokens[blkIdx].children);\n }\n\n }\n};\n", "// Convert straight quotation marks to typographic ones\n//\n'use strict';\n\n\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = '\\u2019'; /* \u2019 */\n\n\nfunction replaceAt(str, index, ch) {\n return str.substr(0, index) + ch + str.substr(index + 1);\n}\n\nfunction process_inlines(tokens, state) {\n var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar,\n isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace,\n canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;\n\n stack = [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n\n thisLevel = tokens[i].level;\n\n for (j = stack.length - 1; j >= 0; j--) {\n if (stack[j].level <= thisLevel) { break; }\n }\n stack.length = j + 1;\n\n if (token.type !== 'text') { continue; }\n\n text = token.content;\n pos = 0;\n max = text.length;\n\n /*eslint no-labels:0,block-scoped-var:0*/\n OUTER:\n while (pos < max) {\n QUOTE_RE.lastIndex = pos;\n t = QUOTE_RE.exec(text);\n if (!t) { break; }\n\n canOpen = canClose = true;\n pos = t.index + 1;\n isSingle = (t[0] === \"'\");\n\n // Find previous character,\n // default to space if it's the beginning of the line\n //\n lastChar = 0x20;\n\n if (t.index - 1 >= 0) {\n lastChar = text.charCodeAt(t.index - 1);\n } else {\n for (j = i - 1; j >= 0; j--) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n break;\n }\n }\n\n // Find next character,\n // default to space if it's the end of the line\n //\n nextChar = 0x20;\n\n if (pos < max) {\n nextChar = text.charCodeAt(pos);\n } else {\n for (j = i + 1; j < tokens.length; j++) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n nextChar = tokens[j].content.charCodeAt(0);\n break;\n }\n }\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n canOpen = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n canOpen = false;\n }\n }\n\n if (isLastWhiteSpace) {\n canClose = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n canClose = false;\n }\n }\n\n if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n // special case: 1\"\" - count first quote as an inch\n canClose = canOpen = false;\n }\n }\n\n if (canOpen && canClose) {\n // Replace quotes in the middle of punctuation sequence, but not\n // in the middle of the words, i.e.:\n //\n // 1. foo \" bar \" baz - not replaced\n // 2. foo-\"-bar-\"-baz - replaced\n // 3. foo\"bar\"baz - not replaced\n //\n canOpen = isLastPunctChar;\n canClose = isNextPunctChar;\n }\n\n if (!canOpen && !canClose) {\n // middle of word\n if (isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n continue;\n }\n\n if (canClose) {\n // this could be a closing quote, rewind the stack to get a match\n for (j = stack.length - 1; j >= 0; j--) {\n item = stack[j];\n if (stack[j].level < thisLevel) { break; }\n if (item.single === isSingle && stack[j].level === thisLevel) {\n item = stack[j];\n\n if (isSingle) {\n openQuote = state.md.options.quotes[2];\n closeQuote = state.md.options.quotes[3];\n } else {\n openQuote = state.md.options.quotes[0];\n closeQuote = state.md.options.quotes[1];\n }\n\n // replace token.content *before* tokens[item.token].content,\n // because, if they are pointing at the same token, replaceAt\n // could mess up indices when quote length != 1\n token.content = replaceAt(token.content, t.index, closeQuote);\n tokens[item.token].content = replaceAt(\n tokens[item.token].content, item.pos, openQuote);\n\n pos += closeQuote.length - 1;\n if (item.token === i) { pos += openQuote.length - 1; }\n\n text = token.content;\n max = text.length;\n\n stack.length = j;\n continue OUTER;\n }\n }\n }\n\n if (canOpen) {\n stack.push({\n token: i,\n pos: t.index,\n single: isSingle,\n level: thisLevel\n });\n } else if (canClose && isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n }\n }\n}\n\n\nmodule.exports = function smartquotes(state) {\n /*eslint max-depth:0*/\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline' ||\n !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n continue;\n }\n\n process_inlines(state.tokens[blkIdx].children, state);\n }\n};\n", "// Token class\n\n'use strict';\n\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type;\n\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n this.tag = tag;\n\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n this.attrs = null;\n\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n this.map = null;\n\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n this.nesting = nesting;\n\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n this.level = 0;\n\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n this.children = null;\n\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n this.content = '';\n\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n this.markup = '';\n\n /**\n * Token#info -> String\n *\n * Additional information:\n *\n * - Info string for \"fence\" tokens\n * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n **/\n this.info = '';\n\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n this.meta = null;\n\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n this.block = false;\n\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n this.hidden = false;\n}\n\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n var attrs, i, len;\n\n if (!this.attrs) { return -1; }\n\n attrs = this.attrs;\n\n for (i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) { return i; }\n }\n return -1;\n};\n\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n if (this.attrs) {\n this.attrs.push(attrData);\n } else {\n this.attrs = [ attrData ];\n }\n};\n\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n var idx = this.attrIndex(name),\n attrData = [ name, value ];\n\n if (idx < 0) {\n this.attrPush(attrData);\n } else {\n this.attrs[idx] = attrData;\n }\n};\n\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n var idx = this.attrIndex(name), value = null;\n if (idx >= 0) {\n value = this.attrs[idx][1];\n }\n return value;\n};\n\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n var idx = this.attrIndex(name);\n\n if (idx < 0) {\n this.attrPush([ name, value ]);\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n }\n};\n\n\nmodule.exports = Token;\n", "// Core state object\n//\n'use strict';\n\nvar Token = require('../token');\n\n\nfunction StateCore(src, md, env) {\n this.src = src;\n this.env = env;\n this.tokens = [];\n this.inlineMode = false;\n this.md = md; // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token;\n\n\nmodule.exports = StateCore;\n", "/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n [ 'normalize', require('./rules_core/normalize') ],\n [ 'block', require('./rules_core/block') ],\n [ 'inline', require('./rules_core/inline') ],\n [ 'linkify', require('./rules_core/linkify') ],\n [ 'replacements', require('./rules_core/replacements') ],\n [ 'smartquotes', require('./rules_core/smartquotes') ]\n];\n\n\n/**\n * new Core()\n **/\nfunction Core() {\n /**\n * Core#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of core rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n}\n\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n var i, l, rules;\n\n rules = this.ruler.getRules('');\n\n for (i = 0, l = rules.length; i < l; i++) {\n rules[i](state);\n }\n};\n\nCore.prototype.State = require('./rules_core/state_core');\n\n\nmodule.exports = Core;\n", "// GFM table, https://github.github.com/gfm/#tables-extension-\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction getLine(state, line) {\n var pos = state.bMarks[line] + state.tShift[line],\n max = state.eMarks[line];\n\n return state.src.substr(pos, max - pos);\n}\n\nfunction escapedSplit(str) {\n var result = [],\n pos = 0,\n max = str.length,\n ch,\n isEscaped = false,\n lastPos = 0,\n current = '';\n\n ch = str.charCodeAt(pos);\n\n while (pos < max) {\n if (ch === 0x7c/* | */) {\n if (!isEscaped) {\n // pipe separating cells, '|'\n result.push(current + str.substring(lastPos, pos));\n current = '';\n lastPos = pos + 1;\n } else {\n // escaped pipe, '\\|'\n current += str.substring(lastPos, pos - 1);\n lastPos = pos;\n }\n }\n\n isEscaped = (ch === 0x5c/* \\ */);\n pos++;\n\n ch = str.charCodeAt(pos);\n }\n\n result.push(current + str.substring(lastPos));\n\n return result;\n}\n\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n var ch, lineText, pos, i, l, nextLine, columns, columnCount, token,\n aligns, t, tableLines, tbodyLines, oldParentType, terminate,\n terminatorRules, firstCh, secondCh;\n\n // should have at least two lines\n if (startLine + 2 > endLine) { return false; }\n\n nextLine = startLine + 1;\n\n if (state.sCount[nextLine] < state.blkIndent) { return false; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { return false; }\n\n // first character of the second line should be '|', '-', ':',\n // and no other characters are allowed but spaces;\n // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n firstCh = state.src.charCodeAt(pos++);\n if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false; }\n\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n secondCh = state.src.charCodeAt(pos++);\n if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n return false;\n }\n\n // if first character is '-', then second character must not be a space\n // (due to parsing ambiguity with list)\n if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false; }\n\n while (pos < state.eMarks[nextLine]) {\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false; }\n\n pos++;\n }\n\n lineText = getLine(state, startLine + 1);\n\n columns = lineText.split('|');\n aligns = [];\n for (i = 0; i < columns.length; i++) {\n t = columns[i].trim();\n if (!t) {\n // allow empty columns before and after table, but not in between columns;\n // e.g. allow ` |---| `, disallow ` ---||--- `\n if (i === 0 || i === columns.length - 1) {\n continue;\n } else {\n return false;\n }\n }\n\n if (!/^:?-+:?$/.test(t)) { return false; }\n if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right');\n } else if (t.charCodeAt(0) === 0x3A/* : */) {\n aligns.push('left');\n } else {\n aligns.push('');\n }\n }\n\n lineText = getLine(state, startLine).trim();\n if (lineText.indexOf('|') === -1) { return false; }\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n // header row will define an amount of columns in the entire table,\n // and align row should be exactly the same (the rest of the rows can differ)\n columnCount = columns.length;\n if (columnCount === 0 || columnCount !== aligns.length) { return false; }\n\n if (silent) { return true; }\n\n oldParentType = state.parentType;\n state.parentType = 'table';\n\n // use 'blockquote' lists for termination because it's\n // the most similar to tables\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n token = state.push('table_open', 'table', 1);\n token.map = tableLines = [ startLine, 0 ];\n\n token = state.push('thead_open', 'thead', 1);\n token.map = [ startLine, startLine + 1 ];\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ startLine, startLine + 1 ];\n\n for (i = 0; i < columns.length; i++) {\n token = state.push('th_open', 'th', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i].trim();\n token.children = [];\n\n token = state.push('th_close', 'th', -1);\n }\n\n token = state.push('tr_close', 'tr', -1);\n token = state.push('thead_close', 'thead', -1);\n\n for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) { break; }\n lineText = getLine(state, nextLine).trim();\n if (!lineText) { break; }\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { break; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n if (nextLine === startLine + 2) {\n token = state.push('tbody_open', 'tbody', 1);\n token.map = tbodyLines = [ startLine + 2, 0 ];\n }\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ nextLine, nextLine + 1 ];\n\n for (i = 0; i < columnCount; i++) {\n token = state.push('td_open', 'td', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i] ? columns[i].trim() : '';\n token.children = [];\n\n token = state.push('td_close', 'td', -1);\n }\n token = state.push('tr_close', 'tr', -1);\n }\n\n if (tbodyLines) {\n token = state.push('tbody_close', 'tbody', -1);\n tbodyLines[1] = nextLine;\n }\n\n token = state.push('table_close', 'table', -1);\n tableLines[1] = nextLine;\n\n state.parentType = oldParentType;\n state.line = nextLine;\n return true;\n};\n", "// Code block (4 spaces padded)\n\n'use strict';\n\n\nmodule.exports = function code(state, startLine, endLine/*, silent*/) {\n if (state.md.options.allowIndentation) { return false; }\n\n var nextLine, last, token;\n\n if (state.sCount[startLine] - state.blkIndent < 4) { return false; }\n\n last = nextLine = startLine + 1;\n\n while (nextLine < endLine) {\n if (state.isEmpty(nextLine)) {\n nextLine++;\n continue;\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n nextLine++;\n last = nextLine;\n continue;\n }\n break;\n }\n\n state.line = last;\n\n token = state.push('code_block', 'code', 0);\n token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n';\n token.map = [ startLine, state.line ];\n\n return true;\n};\n", "// fences (``` lang, ~~~ lang)\n\n'use strict';\n\n\nmodule.exports = function fence(state, startLine, endLine, silent) {\n var marker, len, params, nextLine, mem, token, markup,\n haveEndMarker = false,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (pos + 3 > max) { return false; }\n\n marker = state.src.charCodeAt(pos);\n\n if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n return false;\n }\n\n // scan marker length\n mem = pos;\n pos = state.skipChars(pos, marker);\n\n len = pos - mem;\n\n if (len < 3) { return false; }\n\n markup = state.src.slice(mem, pos);\n params = state.src.slice(pos, max);\n\n if (marker === 0x60 /* ` */) {\n if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n return false;\n }\n }\n\n // Since start is found, we can report success here in validation mode\n if (silent) { return true; }\n\n // search end of block\n nextLine = startLine;\n\n for (;;) {\n nextLine++;\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break;\n }\n\n pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break;\n }\n\n if (state.src.charCodeAt(pos) !== marker) { continue; }\n\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue;\n }\n\n pos = state.skipChars(pos, marker);\n\n // closing code fence must be at least as long as the opening one\n if (pos - mem < len) { continue; }\n\n // make sure tail has spaces only\n pos = state.skipSpaces(pos);\n\n if (pos < max) { continue; }\n\n haveEndMarker = true;\n // found!\n break;\n }\n\n // If a fence has heading spaces, they should be removed from its inner block\n len = state.sCount[startLine];\n\n state.line = nextLine + (haveEndMarker ? 1 : 0);\n\n token = state.push('fence', 'code', 0);\n token.info = params;\n token.content = state.getLines(startLine + 1, nextLine, len, true);\n token.markup = markup;\n token.map = [ startLine, state.line ];\n\n return true;\n};\n", "// Block quotes\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function blockquote(state, startLine, endLine, silent) {\n var adjustTab,\n ch,\n i,\n initial,\n l,\n lastLineEmpty,\n lines,\n nextLine,\n offset,\n oldBMarks,\n oldBSCount,\n oldIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n spaceAfterMarker,\n terminate,\n terminatorRules,\n token,\n isOutdented,\n oldLineMax = state.lineMax,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // check the block quote marker\n if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }\n\n // we know that it's going to be a valid blockquote,\n // so no point trying to find the end of it in silent mode\n if (silent) { return true; }\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[startLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[startLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks = [ state.bMarks[startLine] ];\n state.bMarks[startLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[startLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n oldBSCount = [ state.bsCount[startLine] ];\n state.bsCount[startLine] = state.sCount[startLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n lastLineEmpty = pos >= max;\n\n oldSCount = [ state.sCount[startLine] ];\n state.sCount[startLine] = offset - initial;\n\n oldTShift = [ state.tShift[startLine] ];\n state.tShift[startLine] = pos - state.bMarks[startLine];\n\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n oldParentType = state.parentType;\n state.parentType = 'blockquote';\n\n // Search the end of the block\n //\n // Block ends with either:\n // 1. an empty line outside:\n // ```\n // > test\n //\n // ```\n // 2. an empty line inside:\n // ```\n // >\n // test\n // ```\n // 3. another tag:\n // ```\n // > test\n // - - -\n // ```\n for (nextLine = startLine + 1; nextLine < endLine; nextLine++) {\n // check if it's outdented, i.e. it's inside list item and indented\n // less than said list item:\n //\n // ```\n // 1. anything\n // > current blockquote\n // 2. checking this line\n // ```\n isOutdented = state.sCount[nextLine] < state.blkIndent;\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos >= max) {\n // Case 1: line is not inside the blockquote, and this line is empty.\n break;\n }\n\n if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n // This line is inside the blockquote.\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[nextLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[nextLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n state.bMarks[nextLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n lastLineEmpty = pos >= max;\n\n oldBSCount.push(state.bsCount[nextLine]);\n state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] = offset - initial;\n\n oldTShift.push(state.tShift[nextLine]);\n state.tShift[nextLine] = pos - state.bMarks[nextLine];\n continue;\n }\n\n // Case 2: line is not inside the blockquote, and the last line was empty.\n if (lastLineEmpty) { break; }\n\n // Case 3: another tag found.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) {\n // Quirk to enforce \"hard termination mode\" for paragraphs;\n // normally if you call `tokenize(state, startLine, nextLine)`,\n // paragraphs will look below nextLine for paragraph continuation,\n // but if blockquote is terminated by another tag, they shouldn't\n state.lineMax = nextLine;\n\n if (state.blkIndent !== 0) {\n // state.blkIndent was non-zero, we now set it to zero,\n // so we need to re-calculate all offsets to appear as\n // if indent wasn't changed\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] -= state.blkIndent;\n }\n\n break;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n\n // A negative indentation means that this is a paragraph continuation\n //\n state.sCount[nextLine] = -1;\n }\n\n oldIndent = state.blkIndent;\n state.blkIndent = 0;\n\n token = state.push('blockquote_open', 'blockquote', 1);\n token.markup = '>';\n token.map = lines = [ startLine, 0 ];\n\n state.md.block.tokenize(state, startLine, nextLine);\n\n token = state.push('blockquote_close', 'blockquote', -1);\n token.markup = '>';\n\n state.lineMax = oldLineMax;\n state.parentType = oldParentType;\n lines[1] = state.line;\n\n // Restore original tShift; this might not be necessary since the parser\n // has already been here, but just to make sure we can do that.\n for (i = 0; i < oldTShift.length; i++) {\n state.bMarks[i + startLine] = oldBMarks[i];\n state.tShift[i + startLine] = oldTShift[i];\n state.sCount[i + startLine] = oldSCount[i];\n state.bsCount[i + startLine] = oldBSCount[i];\n }\n state.blkIndent = oldIndent;\n\n return true;\n};\n", "// Horizontal rule\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function hr(state, startLine, endLine, silent) {\n var marker, cnt, ch, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n marker = state.src.charCodeAt(pos++);\n\n // Check hr marker\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x5F/* _ */) {\n return false;\n }\n\n // markers can be mixed with spaces, but there should be at least 3 of them\n\n cnt = 1;\n while (pos < max) {\n ch = state.src.charCodeAt(pos++);\n if (ch !== marker && !isSpace(ch)) { return false; }\n if (ch === marker) { cnt++; }\n }\n\n if (cnt < 3) { return false; }\n\n if (silent) { return true; }\n\n state.line = startLine + 1;\n\n token = state.push('hr', 'hr', 0);\n token.map = [ startLine, state.line ];\n token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\n return true;\n};\n", "// Lists\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker(state, startLine) {\n var marker, pos, max, ch;\n\n pos = state.bMarks[startLine] + state.tShift[startLine];\n max = state.eMarks[startLine];\n\n marker = state.src.charCodeAt(pos++);\n // Check bullet\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x2B/* + */) {\n return -1;\n }\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" -test \" - is not a list item\n return -1;\n }\n }\n\n return pos;\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker(state, startLine) {\n var ch,\n start = state.bMarks[startLine] + state.tShift[startLine],\n pos = start,\n max = state.eMarks[startLine];\n\n // List marker should have at least 2 chars (digit + dot)\n if (pos + 1 >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; }\n\n for (;;) {\n // EOL -> fail\n if (pos >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n\n // List marker should have no more than 9 digits\n // (prevents integer overflow in browsers)\n if (pos - start >= 10) { return -1; }\n\n continue;\n }\n\n // found valid marker\n if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n break;\n }\n\n return -1;\n }\n\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" 1.test \" - is not a list item\n return -1;\n }\n }\n return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n var i, l,\n level = state.level + 2;\n\n for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n state.tokens[i + 2].hidden = true;\n state.tokens[i].hidden = true;\n i += 2;\n }\n }\n}\n\n\nmodule.exports = function list(state, startLine, endLine, silent) {\n var ch,\n contentStart,\n i,\n indent,\n indentAfterMarker,\n initial,\n isOrdered,\n itemLines,\n l,\n listLines,\n listTokIdx,\n markerCharCode,\n markerValue,\n max,\n nextLine,\n offset,\n oldListIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n oldTight,\n pos,\n posAfterMarker,\n prevEmptyEnd,\n start,\n terminate,\n terminatorRules,\n token,\n isTerminatingParagraph = false,\n tight = true;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // Special case:\n // - item 1\n // - item 2\n // - item 3\n // - item 4\n // - this one is a paragraph continuation\n if (!state.md.options.allowIndentation &&\n state.listIndent >= 0 &&\n state.sCount[startLine] - state.listIndent >= 4 &&\n state.sCount[startLine] < state.blkIndent) {\n return false;\n }\n\n // limit conditions when list can interrupt\n // a paragraph (validation mode only)\n if (silent && state.parentType === 'paragraph') {\n // Next list item should still terminate previous list item;\n //\n // This code can fail if plugins use blkIndent as well as lists,\n // but I hope the spec gets fixed long before that happens.\n //\n if (state.sCount[startLine] >= state.blkIndent) {\n isTerminatingParagraph = true;\n }\n }\n\n // Detect list type and position after marker\n if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n isOrdered = true;\n start = state.bMarks[startLine] + state.tShift[startLine];\n markerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\n // If we're starting a new ordered list right after\n // a paragraph, it should start with 1.\n if (isTerminatingParagraph && markerValue !== 1) return false;\n\n } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n isOrdered = false;\n\n } else {\n return false;\n }\n\n // If we're starting a new unordered list right after\n // a paragraph, first line should not be empty.\n if (isTerminatingParagraph) {\n if (state.skipSpaces(posAfterMarker) >= state.eMarks[startLine]) return false;\n }\n\n // We should terminate list on style change. Remember first one to compare.\n markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n // For validation mode we can terminate immediately\n if (silent) { return true; }\n\n // Start list\n listTokIdx = state.tokens.length;\n\n if (isOrdered) {\n token = state.push('ordered_list_open', 'ol', 1);\n if (markerValue !== 1) {\n token.attrs = [ [ 'start', markerValue ] ];\n }\n\n } else {\n token = state.push('bullet_list_open', 'ul', 1);\n }\n\n token.map = listLines = [ startLine, 0 ];\n token.markup = String.fromCharCode(markerCharCode);\n\n //\n // Iterate list items\n //\n\n nextLine = startLine;\n prevEmptyEnd = false;\n terminatorRules = state.md.block.ruler.getRules('list');\n\n oldParentType = state.parentType;\n state.parentType = 'list';\n\n while (nextLine < endLine) {\n pos = posAfterMarker;\n max = state.eMarks[nextLine];\n\n initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n } else if (ch === 0x20) {\n offset++;\n } else {\n break;\n }\n\n pos++;\n }\n\n contentStart = pos;\n\n if (contentStart >= max) {\n // trimming space in \"- \\n 3\" case, indent is 1 here\n indentAfterMarker = 1;\n } else {\n indentAfterMarker = offset - initial;\n }\n\n // If we have more than 4 spaces, the indent is 1\n // (the rest is just indented code block)\n if (!state.md.options.allowIndentation && indentAfterMarker > 4) { indentAfterMarker = 1; }\n\n // \" - test\"\n // ^^^^^ - calculating total length of this thing\n indent = initial + indentAfterMarker;\n\n // Run subparser & write tokens\n token = state.push('list_item_open', 'li', 1);\n token.markup = String.fromCharCode(markerCharCode);\n token.map = itemLines = [ startLine, 0 ];\n if (isOrdered) {\n token.info = state.src.slice(start, posAfterMarker - 1);\n }\n\n // change current state, then restore it after parser subcall\n oldTight = state.tight;\n oldTShift = state.tShift[startLine];\n oldSCount = state.sCount[startLine];\n\n // - example list\n // ^ listIndent position will be here\n // ^ blkIndent position will be here\n //\n oldListIndent = state.listIndent;\n state.listIndent = state.blkIndent;\n state.blkIndent = indent;\n\n state.tight = true;\n state.tShift[startLine] = contentStart - state.bMarks[startLine];\n state.sCount[startLine] = offset;\n\n if (contentStart >= max && state.isEmpty(startLine + 1)) {\n // workaround for this case\n // (list item is empty, list terminates before \"foo\"):\n // ~~~~~~~~\n // -\n //\n // foo\n // ~~~~~~~~\n state.line = Math.min(state.line + 2, endLine);\n } else {\n state.md.block.tokenize(state, startLine, endLine, true);\n }\n\n // If any of list item is tight, mark list as tight\n if (!state.tight || prevEmptyEnd) {\n tight = false;\n }\n // Item become loose if finish with empty line,\n // but we should filter last element, because it means list finish\n prevEmptyEnd = (state.line - startLine) > 1 && state.isEmpty(state.line - 1);\n\n state.blkIndent = state.listIndent;\n state.listIndent = oldListIndent;\n state.tShift[startLine] = oldTShift;\n state.sCount[startLine] = oldSCount;\n state.tight = oldTight;\n\n token = state.push('list_item_close', 'li', -1);\n token.markup = String.fromCharCode(markerCharCode);\n\n nextLine = startLine = state.line;\n itemLines[1] = nextLine;\n contentStart = state.bMarks[startLine];\n\n if (nextLine >= endLine) { break; }\n\n //\n // Try to check if list is terminated or continued.\n //\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { break; }\n\n // fail if terminating block found\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n\n // fail if list has another type\n if (isOrdered) {\n posAfterMarker = skipOrderedListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n start = state.bMarks[nextLine] + state.tShift[nextLine];\n } else {\n posAfterMarker = skipBulletListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n }\n\n if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; }\n }\n\n // Finalize list\n if (isOrdered) {\n token = state.push('ordered_list_close', 'ol', -1);\n } else {\n token = state.push('bullet_list_close', 'ul', -1);\n }\n token.markup = String.fromCharCode(markerCharCode);\n\n listLines[1] = nextLine;\n state.line = nextLine;\n\n state.parentType = oldParentType;\n\n // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx);\n }\n\n return true;\n};\n", "'use strict';\n\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function reference(state, startLine, _endLine, silent) {\n var ch,\n destEndPos,\n destEndLineNo,\n endLine,\n href,\n i,\n l,\n label,\n labelEnd,\n oldParentType,\n res,\n start,\n str,\n terminate,\n terminatorRules,\n title,\n lines = 0,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine],\n nextLine = startLine + 1;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; }\n\n // Simple check to quickly interrupt scan on [link](url) at the start of line.\n // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n while (++pos < max) {\n if (state.src.charCodeAt(pos) === 0x5D /* ] */ &&\n state.src.charCodeAt(pos - 1) !== 0x5C/* \\ */) {\n if (pos + 1 === max) { return false; }\n if (state.src.charCodeAt(pos + 1) !== 0x3A/* : */) { return false; }\n break;\n }\n }\n\n endLine = state.lineMax;\n\n // jump line-by-line until empty one or EOF\n terminatorRules = state.md.block.ruler.getRules('reference');\n\n oldParentType = state.parentType;\n state.parentType = 'reference';\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n max = str.length;\n\n for (pos = 1; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x5B /* [ */) {\n return false;\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos;\n break;\n } else if (ch === 0x0A /* \\n */) {\n lines++;\n } else if (ch === 0x5C /* \\ */) {\n pos++;\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; }\n\n // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n for (pos = labelEnd + 2; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n res = state.md.helpers.parseLinkDestination(str, pos, max);\n if (!res.ok) { return false; }\n\n href = state.md.normalizeLink(res.str);\n if (!state.md.validateLink(href)) { return false; }\n\n pos = res.pos;\n lines += res.lines;\n\n // save cursor state, we could require to rollback later\n destEndPos = pos;\n destEndLineNo = lines;\n\n // [label]: destination 'title'\n // ^^^ skipping those spaces\n start = pos;\n for (; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^ parse this\n res = state.md.helpers.parseLinkTitle(str, pos, max);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n lines += res.lines;\n } else {\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n }\n\n // skip trailing spaces until the rest of the line\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n // garbage at the end of the line\n return false;\n }\n\n label = normalizeReference(str.slice(1, labelEnd));\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false;\n }\n\n // Reference can not terminate anything. This check is for safety only.\n /*istanbul ignore if*/\n if (silent) { return true; }\n\n if (typeof state.env.references === 'undefined') {\n state.env.references = {};\n }\n if (typeof state.env.references[label] === 'undefined') {\n state.env.references[label] = { title: title, href: href };\n }\n\n state.parentType = oldParentType;\n\n state.line = startLine + lines + 1;\n return true;\n};\n", "// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n\n'use strict';\n\n\nmodule.exports = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'section',\n 'source',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n];\n", "// Regexps to match html elements\n\n'use strict';\n\nvar attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\n\nvar unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\n\nvar attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\n\nvar attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\n\nvar open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\n\nvar close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing = '<[?][\\\\s\\\\S]*?[?]>';\nvar declaration = '<![A-Z]+\\\\s+[^>]*>';\nvar cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\n\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\n\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;\n", "// HTML block\n\n'use strict';\n\n\nvar block_names = require('../common/html_blocks');\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE;\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nvar HTML_SEQUENCES = [\n [ /^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true ],\n [ /^<!--/, /-->/, true ],\n [ /^<\\?/, /\\?>/, true ],\n [ /^<![A-Z]/, />/, true ],\n [ /^<!\\[CDATA\\[/, /\\]\\]>/, true ],\n [ new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true ],\n [ new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false ]\n];\n\n\nmodule.exports = function html_block(state, startLine, endLine, silent) {\n var i, nextLine, token, lineText,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (!state.md.options.html) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n lineText = state.src.slice(pos, max);\n\n for (i = 0; i < HTML_SEQUENCES.length; i++) {\n if (HTML_SEQUENCES[i][0].test(lineText)) { break; }\n }\n\n if (i === HTML_SEQUENCES.length) { return false; }\n\n if (silent) {\n // true if this sequence can be a terminator, false otherwise\n return HTML_SEQUENCES[i][2];\n }\n\n nextLine = startLine + 1;\n\n // If we are here - we detected HTML block.\n // Let's roll down till block end.\n if (!HTML_SEQUENCES[i][1].test(lineText)) {\n for (; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n lineText = state.src.slice(pos, max);\n\n if (HTML_SEQUENCES[i][1].test(lineText)) {\n if (lineText.length !== 0) { nextLine++; }\n break;\n }\n }\n }\n\n state.line = nextLine;\n\n token = state.push('html_block', '', 0);\n token.map = [ startLine, nextLine ];\n token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\n return true;\n};\n", "// heading (#, ##, ...)\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n var ch, level, tmp, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x23/* # */ || pos >= max) { return false; }\n\n // count heading level\n level = 1;\n ch = state.src.charCodeAt(++pos);\n while (ch === 0x23/* # */ && pos < max && level <= 6) {\n level++;\n ch = state.src.charCodeAt(++pos);\n }\n\n if (level > 6 || (pos < max && !isSpace(ch))) { return false; }\n\n if (silent) { return true; }\n\n // Let's cut tails like ' ### ' from the end of string\n\n max = state.skipSpacesBack(max, pos);\n tmp = state.skipCharsBack(max, 0x23, pos); // #\n if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n max = tmp;\n }\n\n state.line = startLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = '########'.slice(0, level);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = state.src.slice(pos, max).trim();\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = '########'.slice(0, level);\n\n return true;\n};\n", "// lheading (---, ===)\n\n'use strict';\n\n\nmodule.exports = function lheading(state, startLine, endLine/*, silent*/) {\n var content, terminate, i, l, token, pos, max, level, marker,\n nextLine = startLine + 1, oldParentType,\n terminatorRules = state.md.block.ruler.getRules('paragraph');\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n //\n // Check for underline in setext header\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max) {\n marker = state.src.charCodeAt(pos);\n\n if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n pos = state.skipChars(pos, marker);\n pos = state.skipSpaces(pos);\n\n if (pos >= max) {\n level = (marker === 0x3D/* = */ ? 1 : 2);\n break;\n }\n }\n }\n }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n if (!level) {\n // Didn't find valid underline\n return false;\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = String.fromCharCode(marker);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line - 1 ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = String.fromCharCode(marker);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Paragraph\n\n'use strict';\n\n\nmodule.exports = function paragraph(state, startLine/*, endLine*/) {\n var content, terminate, i, l, token, oldParentType,\n nextLine = startLine + 1,\n terminatorRules = state.md.block.ruler.getRules('paragraph'),\n endLine = state.lineMax;\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph';\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine;\n\n token = state.push('paragraph_open', 'p', 1);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('paragraph_close', 'p', -1);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Parser state class\n\n'use strict';\n\nvar Token = require('../token');\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction StateBlock(src, md, env, tokens) {\n var ch, s, start, pos, len, indent, offset, indent_found;\n\n this.src = src;\n\n // link to parser instance\n this.md = md;\n\n this.env = env;\n\n //\n // Internal state vartiables\n //\n\n this.tokens = tokens;\n\n this.bMarks = []; // line begin offsets for fast jumps\n this.eMarks = []; // line end offsets for fast jumps\n this.tShift = []; // offsets of the first non-space characters (tabs not expanded)\n this.sCount = []; // indents for each line (tabs expanded)\n\n // An amount of virtual spaces (tabs expanded) between beginning\n // of each line (bMarks) and real beginning of that line.\n //\n // It exists only as a hack because blockquotes override bMarks\n // losing information in the process.\n //\n // It's used only when expanding tabs, you can think about it as\n // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n // means first tab should be expanded to 4-21%4 === 3 spaces.\n //\n this.bsCount = [];\n\n // block parser variables\n this.blkIndent = 0; // required block content indent (for example, if we are\n // inside a list, it would be positioned after list marker)\n this.line = 0; // line index in src\n this.lineMax = 0; // lines count\n this.tight = false; // loose/tight mode for lists\n this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any)\n this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n\n // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n // used in lists to determine if they interrupt a paragraph\n this.parentType = 'root';\n\n this.level = 0;\n\n // renderer\n this.result = '';\n\n // Create caches\n // Generate markers.\n s = this.src;\n indent_found = false;\n\n for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n ch = s.charCodeAt(pos);\n\n if (!indent_found) {\n if (isSpace(ch)) {\n indent++;\n\n if (ch === 0x09) {\n offset += 4 - offset % 4;\n } else {\n offset++;\n }\n continue;\n } else {\n indent_found = true;\n }\n }\n\n if (ch === 0x0A || pos === len - 1) {\n if (ch !== 0x0A) { pos++; }\n this.bMarks.push(start);\n this.eMarks.push(pos);\n this.tShift.push(indent);\n this.sCount.push(offset);\n this.bsCount.push(0);\n\n indent_found = false;\n indent = 0;\n offset = 0;\n start = pos + 1;\n }\n }\n\n // Push fake entry to simplify cache bounds checks\n this.bMarks.push(s.length);\n this.eMarks.push(s.length);\n this.tShift.push(0);\n this.sCount.push(0);\n this.bsCount.push(0);\n\n this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n var token = new Token(type, tag, nesting);\n token.block = true;\n\n if (nesting < 0) this.level--; // closing tag\n token.level = this.level;\n if (nesting > 0) this.level++; // opening tag\n\n this.tokens.push(token);\n return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n for (var max = this.lineMax; from < max; from++) {\n if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n break;\n }\n }\n return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n var ch;\n\n for (var max = this.src.length; pos < max; pos++) {\n ch = this.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n }\n return pos;\n};\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1; }\n }\n return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n for (var max = this.src.length; pos < max; pos++) {\n if (this.src.charCodeAt(pos) !== code) { break; }\n }\n return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }\n }\n return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n var i, lineIndent, ch, first, last, queue, lineStart,\n line = begin;\n\n if (begin >= end) {\n return '';\n }\n\n queue = new Array(end - begin);\n\n for (i = 0; line < end; line++, i++) {\n lineIndent = 0;\n lineStart = first = this.bMarks[line];\n\n if (line + 1 < end || keepLastLF) {\n // No need for bounds check because we have fake entry on tail.\n last = this.eMarks[line] + 1;\n } else {\n last = this.eMarks[line];\n }\n\n while (first < last && lineIndent < indent) {\n ch = this.src.charCodeAt(first);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n } else {\n lineIndent++;\n }\n } else if (first - lineStart < this.tShift[line]) {\n // patched tShift masked characters to look like spaces (blockquotes, list markers)\n lineIndent++;\n } else {\n break;\n }\n\n first++;\n }\n\n if (lineIndent > indent) {\n // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n // with indent=2 becomes ' \\tfoobar'\n queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n } else {\n queue[i] = this.src.slice(first, last);\n }\n }\n\n return queue.join('');\n};\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token;\n\n\nmodule.exports = StateBlock;\n", "/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n // First 2 params - rule name & source. Secondary array - list of rules,\n // which can be terminated by this one.\n [ 'table', require('./rules_block/table'), [ 'paragraph', 'reference' ] ],\n [ 'code', require('./rules_block/code') ],\n [ 'fence', require('./rules_block/fence'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'blockquote', require('./rules_block/blockquote'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'hr', require('./rules_block/hr'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'list', require('./rules_block/list'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'reference', require('./rules_block/reference') ],\n [ 'html_block', require('./rules_block/html_block'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'heading', require('./rules_block/heading'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'lheading', require('./rules_block/lheading') ],\n [ 'paragraph', require('./rules_block/paragraph') ]\n];\n\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock() {\n /**\n * ParserBlock#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of block rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() });\n }\n}\n\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n line = startLine,\n hasEmptyLines = false,\n maxNesting = state.md.options.maxNesting;\n\n while (line < endLine) {\n state.line = line = state.skipEmptyLines(line);\n if (line >= endLine) { break; }\n\n // Termination condition for nested calls.\n // Nested calls currently used for blockquotes & lists\n if (state.sCount[line] < state.blkIndent) { break; }\n\n // If nesting level exceeded - skip tail to the end. That's not ordinary\n // situation and we should not care about content.\n if (state.level >= maxNesting) {\n state.line = endLine;\n break;\n }\n\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.line`\n // - update `state.tokens`\n // - return true\n\n for (i = 0; i < len; i++) {\n ok = rules[i](state, line, endLine, false);\n if (ok) { break; }\n }\n\n // set state.tight if we had an empty line before current tag\n // i.e. latest empty line should not count\n state.tight = !hasEmptyLines;\n\n // paragraph might \"eat\" one newline after it in nested lists\n if (state.isEmpty(state.line - 1)) {\n hasEmptyLines = true;\n }\n\n line = state.line;\n\n if (line < endLine && state.isEmpty(line)) {\n hasEmptyLines = true;\n line++;\n state.line = line;\n }\n }\n};\n\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n var state;\n\n if (!src) { return; }\n\n state = new this.State(src, md, env, outTokens);\n\n this.tokenize(state, state.line, state.lineMax);\n};\n\n\nParserBlock.prototype.State = require('./rules_block/state_block');\n\n\nmodule.exports = ParserBlock;\n", "// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n'use strict';\n\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar(ch) {\n switch (ch) {\n case 0x0A/* \\n */:\n case 0x21/* ! */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2D/* - */:\n case 0x3A/* : */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos;\n\n while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n pos++;\n }\n\n if (pos === state.pos) { return false; }\n\n if (!silent) { state.pending += state.src.slice(state.pos, pos); }\n\n state.pos = pos;\n\n return true;\n};\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos,\n idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n // first char is terminator -> empty text\n if (idx === 0) { return false; }\n\n // no terminator -> text till end of string\n if (idx < 0) {\n if (!silent) { state.pending += state.src.slice(pos); }\n state.pos = state.src.length;\n return true;\n }\n\n if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n state.pos += idx;\n\n return true;\n};*/\n", "// Proceess '\\n'\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function newline(state, silent) {\n var pmax, max, ws, pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false; }\n\n pmax = state.pending.length - 1;\n max = state.posMax;\n\n // ' \\n' -> hardbreak\n // Lookup in pending chars is bad practice! Don't copy to other rules!\n // Pending string is stored in concat mode, indexed lookups will cause\n // convertion to flat mode.\n if (!silent) {\n if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n // Find whitespaces tail of pending chars.\n ws = pmax - 1;\n while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--;\n\n state.pending = state.pending.slice(0, ws);\n state.push('hardbreak', 'br', 0);\n } else {\n state.pending = state.pending.slice(0, -1);\n state.push('softbreak', 'br', 0);\n }\n\n } else {\n state.push('softbreak', 'br', 0);\n }\n }\n\n pos++;\n\n // skip heading spaces for next line\n while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++; }\n\n state.pos = pos;\n return true;\n};\n", "// Process escaped chars and hardbreaks\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) { ESCAPED.push(0); }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; });\n\n\nmodule.exports = function escape(state, silent) {\n var ch, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) { return false; }\n\n pos++;\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch < 256 && ESCAPED[ch] !== 0) {\n if (!silent) { state.pending += state.src[pos]; }\n state.pos += 2;\n return true;\n }\n\n if (ch === 0x0A) {\n if (!silent) {\n state.push('hardbreak', 'br', 0);\n }\n\n pos++;\n // skip leading whitespaces from next line\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n state.pos = pos;\n return true;\n }\n }\n\n if (!silent) { state.pending += '\\\\'; }\n state.pos++;\n return true;\n};\n", "// Parse backticks\n\n'use strict';\n\n\nmodule.exports = function backtick(state, silent) {\n var start, max, marker, token, matchStart, matchEnd, openerLength, closerLength,\n pos = state.pos,\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x60/* ` */) { return false; }\n\n start = pos;\n pos++;\n max = state.posMax;\n\n // scan marker length\n while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }\n\n marker = state.src.slice(start, pos);\n openerLength = marker.length;\n\n if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n }\n\n matchStart = matchEnd = pos;\n\n // Nothing found in the cache, scan until the end of the line (or until marker is found)\n while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n matchEnd = matchStart + 1;\n\n // scan marker length\n while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }\n\n closerLength = matchEnd - matchStart;\n\n if (closerLength === openerLength) {\n // Found matching closer length.\n if (!silent) {\n token = state.push('code_inline', 'code', 0);\n token.markup = marker;\n token.content = state.src.slice(pos, matchStart)\n .replace(/\\n/g, ' ')\n .replace(/^ (.+) $/, '$1');\n }\n state.pos = matchEnd;\n return true;\n }\n\n // Some different length found, put it in cache as upper limit of where closer can be found\n state.backticks[closerLength] = matchStart;\n }\n\n // Scanned through the end, didn't find anything\n state.backticksScanned = true;\n\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n};\n", "// ~~strike through~~\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function strikethrough(state, silent) {\n var i, scanned, token, len, ch,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x7E/* ~ */) { return false; }\n\n scanned = state.scanDelims(state.pos, true);\n len = scanned.length;\n ch = String.fromCharCode(marker);\n\n if (len < 2) { return false; }\n\n if (len % 2) {\n token = state.push('text', '', 0);\n token.content = ch;\n len--;\n }\n\n for (i = 0; i < len; i += 2) {\n token = state.push('text', '', 0);\n token.content = ch + ch;\n\n state.delimiters.push({\n marker: marker,\n length: 0, // disable \"rule of 3\" length checks meant for emphasis\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i, j,\n startDelim,\n endDelim,\n token,\n loneMarkers = [],\n max = delimiters.length;\n\n for (i = 0; i < max; i++) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x7E/* ~ */) {\n continue;\n }\n\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n token = state.tokens[startDelim.token];\n token.type = 's_open';\n token.tag = 's';\n token.nesting = 1;\n token.markup = '~~';\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = 's_close';\n token.tag = 's';\n token.nesting = -1;\n token.markup = '~~';\n token.content = '';\n\n if (state.tokens[endDelim.token - 1].type === 'text' &&\n state.tokens[endDelim.token - 1].content === '~') {\n\n loneMarkers.push(endDelim.token - 1);\n }\n }\n\n // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n while (loneMarkers.length) {\n i = loneMarkers.pop();\n j = i + 1;\n\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++;\n }\n\n j--;\n\n if (i !== j) {\n token = state.tokens[j];\n state.tokens[j] = state.tokens[i];\n state.tokens[i] = token;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function strikethrough(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process *this* and _that_\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function emphasis(state, silent) {\n var i, scanned, token,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false; }\n\n scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n for (i = 0; i < scanned.length; i++) {\n token = state.push('text', '', 0);\n token.content = String.fromCharCode(marker);\n\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker: marker,\n\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n\n // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i,\n startDelim,\n endDelim,\n token,\n ch,\n isStrong,\n max = delimiters.length;\n\n for (i = max - 1; i >= 0; i--) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n continue;\n }\n\n // Process only opening markers\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n //\n isStrong = i > 0 &&\n delimiters[i - 1].end === startDelim.end + 1 &&\n // check that first two markers match and adjacent\n delimiters[i - 1].marker === startDelim.marker &&\n delimiters[i - 1].token === startDelim.token - 1 &&\n // check that last two markers are adjacent (we can safely assume they match)\n delimiters[startDelim.end + 1].token === endDelim.token + 1;\n\n ch = String.fromCharCode(startDelim.marker);\n\n token = state.tokens[startDelim.token];\n token.type = isStrong ? 'strong_open' : 'em_open';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = 1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = isStrong ? 'strong_close' : 'em_close';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = -1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n if (isStrong) {\n state.tokens[delimiters[i - 1].token].content = '';\n state.tokens[delimiters[startDelim.end + 1].token].content = '';\n i--;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process [link](<to> \"stuff\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function link(state, silent) {\n var attrs,\n code,\n label,\n labelEnd,\n labelStart,\n pos,\n res,\n ref,\n token,\n href = '',\n title = '',\n oldPos = state.pos,\n max = state.posMax,\n start = state.pos,\n parseReference = true;\n\n if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 1;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // might have found a valid shortcut link, disable reference parsing\n parseReference = false;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n }\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n // parsing a valid shortcut link failed, fallback to reference\n parseReference = true;\n }\n pos++;\n }\n\n if (parseReference) {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n state.pos = labelStart;\n state.posMax = labelEnd;\n\n token = state.push('link_open', 'a', 1);\n token.attrs = attrs = [ [ 'href', href ] ];\n if (title) {\n attrs.push([ 'title', title ]);\n }\n\n state.md.inline.tokenize(state);\n\n token = state.push('link_close', 'a', -1);\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n", "// Process ![image](<src> \"title\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function image(state, silent) {\n var attrs,\n code,\n content,\n label,\n labelEnd,\n labelStart,\n pos,\n ref,\n res,\n title,\n token,\n tokens,\n start,\n href = '',\n oldPos = state.pos,\n max = state.posMax;\n\n if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false; }\n if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 2;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n } else {\n title = '';\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n state.pos = oldPos;\n return false;\n }\n pos++;\n } else {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n content = state.src.slice(labelStart, labelEnd);\n\n state.md.inline.parse(\n content,\n state.md,\n state.env,\n tokens = []\n );\n\n token = state.push('image', 'img', 0);\n token.attrs = attrs = [ [ 'src', href ], [ 'alt', '' ] ];\n token.children = tokens;\n token.content = content;\n\n if (title) {\n attrs.push([ 'title', title ]);\n }\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n", "// Process autolinks '<protocol:...>'\n\n'use strict';\n\n\n/*eslint max-len:0*/\nvar EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;\nvar AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)$/;\n\n\nmodule.exports = function autolink(state, silent) {\n var url, fullUrl, token, ch, start, max,\n pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n start = state.pos;\n max = state.posMax;\n\n for (;;) {\n if (++pos >= max) return false;\n\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x3C /* < */) return false;\n if (ch === 0x3E /* > */) break;\n }\n\n url = state.src.slice(start + 1, pos);\n\n if (AUTOLINK_RE.test(url)) {\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n if (EMAIL_RE.test(url)) {\n fullUrl = state.md.normalizeLink('mailto:' + url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n return false;\n};\n", "// Process html tags\n\n'use strict';\n\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\n\n\nfunction isLetter(ch) {\n /*eslint no-bitwise:0*/\n var lc = ch | 0x20; // to lower case\n return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);\n}\n\n\nmodule.exports = function html_inline(state, silent) {\n var ch, match, max, token,\n pos = state.pos;\n\n if (!state.md.options.html) { return false; }\n\n // Check start\n max = state.posMax;\n if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n pos + 2 >= max) {\n return false;\n }\n\n // Quick fail on second char\n ch = state.src.charCodeAt(pos + 1);\n if (ch !== 0x21/* ! */ &&\n ch !== 0x3F/* ? */ &&\n ch !== 0x2F/* / */ &&\n !isLetter(ch)) {\n return false;\n }\n\n match = state.src.slice(pos).match(HTML_TAG_RE);\n if (!match) { return false; }\n\n if (!silent) {\n token = state.push('html_inline', '', 0);\n token.content = state.src.slice(pos, pos + match[0].length);\n }\n state.pos += match[0].length;\n return true;\n};\n", "// Process html entity - &#123;, &#xAF;, &quot;, ...\n\n'use strict';\n\nvar entities = require('../common/entities');\nvar has = require('../common/utils').has;\nvar isValidEntityCode = require('../common/utils').isValidEntityCode;\nvar fromCodePoint = require('../common/utils').fromCodePoint;\n\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\n\n\nmodule.exports = function entity(state, silent) {\n var ch, code, match, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x26/* & */) { return false; }\n\n if (pos + 1 < max) {\n ch = state.src.charCodeAt(pos + 1);\n\n if (ch === 0x23 /* # */) {\n match = state.src.slice(pos).match(DIGITAL_RE);\n if (match) {\n if (!silent) {\n code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n state.pending += isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n }\n state.pos += match[0].length;\n return true;\n }\n } else {\n match = state.src.slice(pos).match(NAMED_RE);\n if (match) {\n if (has(entities, match[1])) {\n if (!silent) { state.pending += entities[match[1]]; }\n state.pos += match[0].length;\n return true;\n }\n }\n }\n }\n\n if (!silent) { state.pending += '&'; }\n state.pos++;\n return true;\n};\n", "// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\n\nfunction processDelimiters(state, delimiters) {\n var closerIdx, openerIdx, closer, opener, minOpenerIdx, newMinOpenerIdx,\n isOddMatch, lastJump,\n openersBottom = {},\n max = delimiters.length;\n\n if (!max) return;\n\n // headerIdx is the first delimiter of the current (where closer is) delimiter run\n var headerIdx = 0;\n var lastTokenIdx = -2; // needs any value lower than -1\n var jumps = [];\n\n for (closerIdx = 0; closerIdx < max; closerIdx++) {\n closer = delimiters[closerIdx];\n\n jumps.push(0);\n\n // markers belong to same delimiter run if:\n // - they have adjacent tokens\n // - AND markers are the same\n //\n if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n headerIdx = closerIdx;\n }\n\n lastTokenIdx = closer.token;\n\n // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n closer.length = closer.length || 0;\n\n if (!closer.close) continue;\n\n // Previously calculated lower bounds (previous fails)\n // for each marker, each delimiter length modulo 3,\n // and for whether this closer can be an opener;\n // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [ -1, -1, -1, -1, -1, -1 ];\n }\n\n minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)];\n\n openerIdx = headerIdx - jumps[headerIdx] - 1;\n\n newMinOpenerIdx = openerIdx;\n\n for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n opener = delimiters[openerIdx];\n\n if (opener.marker !== closer.marker) continue;\n\n if (opener.open && opener.end < 0) {\n\n isOddMatch = false;\n\n // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true;\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ?\n jumps[openerIdx - 1] + 1 :\n 0;\n\n jumps[closerIdx] = closerIdx - openerIdx + lastJump;\n jumps[openerIdx] = lastJump;\n\n closer.open = false;\n opener.end = closerIdx;\n opener.close = false;\n newMinOpenerIdx = -1;\n // treat next token as start of run,\n // it optimizes skips in **<...>**a**<...>** pathological case\n lastTokenIdx = -2;\n break;\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx;\n }\n }\n}\n\n\nmodule.exports = function link_pairs(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n processDelimiters(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n'use strict';\n\n\nmodule.exports = function text_collapse(state) {\n var curr, last,\n level = 0,\n tokens = state.tokens,\n max = state.tokens.length;\n\n for (curr = last = 0; curr < max; curr++) {\n // re-calculate levels after emphasis/strikethrough turns some text nodes\n // into opening/closing tags\n if (tokens[curr].nesting < 0) level--; // closing tag\n tokens[curr].level = level;\n if (tokens[curr].nesting > 0) level++; // opening tag\n\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n } else {\n if (curr !== last) { tokens[last] = tokens[curr]; }\n\n last++;\n }\n }\n\n if (curr !== last) {\n tokens.length = last;\n }\n};\n", "// Inline parser state\n\n'use strict';\n\n\nvar Token = require('../token');\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\n\nfunction StateInline(src, md, env, outTokens) {\n this.src = src;\n this.env = env;\n this.md = md;\n this.tokens = outTokens;\n this.tokens_meta = Array(outTokens.length);\n\n this.pos = 0;\n this.posMax = this.src.length;\n this.level = 0;\n this.pending = '';\n this.pendingLevel = 0;\n\n // Stores { start: end } pairs. Useful for backtrack\n // optimization of pairs parse (emphasis, strikes).\n this.cache = {};\n\n // List of emphasis-like delimiters for current tag\n this.delimiters = [];\n\n // Stack of delimiter lists for upper level tags\n this._prev_delimiters = [];\n\n // backtick length => last seen position\n this.backticks = {};\n this.backticksScanned = false;\n}\n\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n var token = new Token('text', '', 0);\n token.content = this.pending;\n token.level = this.pendingLevel;\n this.tokens.push(token);\n this.pending = '';\n return token;\n};\n\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n if (this.pending) {\n this.pushPending();\n }\n\n var token = new Token(type, tag, nesting);\n var token_meta = null;\n\n if (nesting < 0) {\n // closing tag\n this.level--;\n this.delimiters = this._prev_delimiters.pop();\n }\n\n token.level = this.level;\n\n if (nesting > 0) {\n // opening tag\n this.level++;\n this._prev_delimiters.push(this.delimiters);\n this.delimiters = [];\n token_meta = { delimiters: this.delimiters };\n }\n\n this.pendingLevel = this.level;\n this.tokens.push(token);\n this.tokens_meta.push(token_meta);\n return token;\n};\n\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n// - start - position to scan from (it should point at a valid marker);\n// - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n var pos = start, lastChar, nextChar, count, can_open, can_close,\n isLastWhiteSpace, isLastPunctChar,\n isNextWhiteSpace, isNextPunctChar,\n left_flanking = true,\n right_flanking = true,\n max = this.posMax,\n marker = this.src.charCodeAt(start);\n\n // treat beginning of the line as a whitespace\n lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n\n while (pos < max && this.src.charCodeAt(pos) === marker) { pos++; }\n\n count = pos - start;\n\n // treat end of the line as a whitespace\n nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n left_flanking = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n left_flanking = false;\n }\n }\n\n if (isLastWhiteSpace) {\n right_flanking = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n right_flanking = false;\n }\n }\n\n if (!canSplitWord) {\n can_open = left_flanking && (!right_flanking || isLastPunctChar);\n can_close = right_flanking && (!left_flanking || isNextPunctChar);\n } else {\n can_open = left_flanking;\n can_close = right_flanking;\n }\n\n return {\n can_open: can_open,\n can_close: can_close,\n length: count\n };\n};\n\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token;\n\n\nmodule.exports = StateInline;\n", "/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Parser rules\n\nvar _rules = [\n [ 'text', require('./rules_inline/text') ],\n [ 'newline', require('./rules_inline/newline') ],\n [ 'escape', require('./rules_inline/escape') ],\n [ 'backticks', require('./rules_inline/backticks') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').tokenize ],\n [ 'emphasis', require('./rules_inline/emphasis').tokenize ],\n [ 'link', require('./rules_inline/link') ],\n [ 'image', require('./rules_inline/image') ],\n [ 'autolink', require('./rules_inline/autolink') ],\n [ 'html_inline', require('./rules_inline/html_inline') ],\n [ 'entity', require('./rules_inline/entity') ]\n];\n\nvar _rules2 = [\n [ 'balance_pairs', require('./rules_inline/balance_pairs') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').postProcess ],\n [ 'emphasis', require('./rules_inline/emphasis').postProcess ],\n [ 'text_collapse', require('./rules_inline/text_collapse') ]\n];\n\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline() {\n var i;\n\n /**\n * ParserInline#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of inline rules.\n **/\n this.ruler = new Ruler();\n\n for (i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n\n /**\n * ParserInline#ruler2 -> Ruler\n *\n * [[Ruler]] instance. Second ruler used for post-processing\n * (e.g. in emphasis-like rules).\n **/\n this.ruler2 = new Ruler();\n\n for (i = 0; i < _rules2.length; i++) {\n this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n }\n}\n\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n var ok, i, pos = state.pos,\n rules = this.ruler.getRules(''),\n len = rules.length,\n maxNesting = state.md.options.maxNesting,\n cache = state.cache;\n\n\n if (typeof cache[pos] !== 'undefined') {\n state.pos = cache[pos];\n return;\n }\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n // Increment state.level and decrement it later to limit recursion.\n // It's harmless to do here, because no tokens are created. But ideally,\n // we'd need a separate private state variable for this purpose.\n //\n state.level++;\n ok = rules[i](state, true);\n state.level--;\n\n if (ok) { break; }\n }\n } else {\n // Too much nesting, just skip until the end of the paragraph.\n //\n // NOTE: this will cause links to behave incorrectly in the following case,\n // when an amount of `[` is exactly equal to `maxNesting + 1`:\n //\n // [[[[[[[[[[[[[[[[[[[[[foo]()\n //\n // TODO: remove this workaround when CM standard will allow nested links\n // (we can replace it by preventing links from being parsed in\n // validation mode)\n //\n state.pos = state.posMax;\n }\n\n if (!ok) { state.pos++; }\n cache[pos] = state.pos;\n};\n\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n end = state.posMax,\n maxNesting = state.md.options.maxNesting;\n\n while (state.pos < end) {\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.pos`\n // - update `state.tokens`\n // - return true\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n ok = rules[i](state, false);\n if (ok) { break; }\n }\n }\n\n if (ok) {\n if (state.pos >= end) { break; }\n continue;\n }\n\n state.pending += state.src[state.pos++];\n }\n\n if (state.pending) {\n state.pushPending();\n }\n};\n\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n var i, rules, len;\n var state = new this.State(str, md, env, outTokens);\n\n this.tokenize(state);\n\n rules = this.ruler2.getRules('');\n len = rules.length;\n\n for (i = 0; i < len; i++) {\n rules[i](state);\n }\n};\n\n\nParserInline.prototype.State = require('./rules_inline/state_inline');\n\n\nmodule.exports = ParserInline;\n", "'use strict';\n\n\nmodule.exports = function (opts) {\n var re = {};\n\n // Use direct extract instead of `regenerate` to reduse browserified size\n re.src_Any = require('uc.micro/properties/Any/regex').source;\n re.src_Cc = require('uc.micro/categories/Cc/regex').source;\n re.src_Z = require('uc.micro/categories/Z/regex').source;\n re.src_P = require('uc.micro/categories/P/regex').source;\n\n // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|');\n\n // \\p{\\Z\\Cc} (white spaces + control)\n re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|');\n\n // Experimental. List of chars, completely prohibited in links\n // because can separate it from other part of text\n var text_separators = '[><\\uff5c]';\n\n // All possible word characters (everything without punctuation, spaces & controls)\n // Defined via punctuation & spaces to save space\n // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';\n // The same as abothe but without [0-9]\n // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n ////////////////////////////////////////////////////////////////////////////////\n\n re.src_ip4 =\n\n '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n\n re.src_port =\n\n '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n re.src_host_terminator =\n\n '(?=$|' + text_separators + '|' + re.src_ZPCc + ')(?!-|_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n\n re.src_path =\n\n '(?:' +\n '[/?#]' +\n '(?:' +\n '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n \"\\\\'(?=\" + re.src_pseudo_letter + '|[-]).|' + // allow `I'm_king` if no pair found\n '\\\\.{2,}[a-zA-Z0-9%/&]|' + // google has many dots in \"google search\" links (#66, #81).\n // github has ... in commit range links,\n // Restrict to\n // - english\n // - percent-encoded\n // - parts of file path\n // - params separator\n // until more examples found.\n '\\\\.(?!' + re.src_ZCc + '|[.]).|' +\n (opts && opts['---'] ?\n '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n :\n '\\\\-+|'\n ) +\n ',(?!' + re.src_ZCc + ').|' + // allow `,,,` in paths\n ';(?!' + re.src_ZCc + ').|' + // allow `;` if not followed by space-like char\n '\\\\!+(?!' + re.src_ZCc + '|[!]).|' + // allow `!!!` in paths, but not at the end\n '\\\\?(?!' + re.src_ZCc + '|[?]).' +\n ')+' +\n '|\\\\/' +\n ')?';\n\n // Allow anything in markdown spec, forbid quote (\") at the first position\n // because emails enclosed in quotes are far more common\n re.src_email_name =\n\n '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n\n re.src_xn =\n\n 'xn--[a-z0-9\\\\-]{1,59}';\n\n // More to read about domain names\n // http://serverfault.com/questions/638260/\n\n re.src_domain_root =\n\n // Allow letters & digits (http://test1)\n '(?:' +\n re.src_xn +\n '|' +\n re.src_pseudo_letter + '{1,63}' +\n ')';\n\n re.src_domain =\n\n '(?:' +\n re.src_xn +\n '|' +\n '(?:' + re.src_pseudo_letter + ')' +\n '|' +\n '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n ')';\n\n re.src_host =\n\n '(?:' +\n // Don't need IP check, because digits are already allowed in normal domain names\n // src_ip4 +\n // '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/*_root*/ + ')' +\n ')';\n\n re.tpl_host_fuzzy =\n\n '(?:' +\n re.src_ip4 +\n '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n ')';\n\n re.tpl_host_no_ip_fuzzy =\n\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n\n re.src_host_strict =\n\n re.src_host + re.src_host_terminator;\n\n re.tpl_host_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_host_terminator;\n\n re.src_host_port_strict =\n\n re.src_host + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_no_ip_fuzzy_strict =\n\n re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n\n ////////////////////////////////////////////////////////////////////////////////\n // Main rules\n\n // Rude test fuzzy links by host, for quick deny\n re.tpl_host_fuzzy_test =\n\n 'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n\n re.tpl_email_fuzzy =\n\n '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n\n re.tpl_link_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n\n re.tpl_link_no_ip_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n\n return re;\n};\n", "'use strict';\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\nfunction isRegExp(obj) { return _class(obj) === '[object RegExp]'; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\n\n\nfunction escapeRE(str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&'); }\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n fuzzyLink: true,\n fuzzyEmail: true,\n fuzzyIP: false\n};\n\n\nfunction isOptionsObj(obj) {\n return Object.keys(obj || {}).reduce(function (acc, k) {\n return acc || defaultOptions.hasOwnProperty(k);\n }, false);\n}\n\n\nvar defaultSchemas = {\n 'http:': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.http = new RegExp(\n '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n );\n }\n if (self.re.http.test(tail)) {\n return tail.match(self.re.http)[0].length;\n }\n return 0;\n }\n },\n 'https:': 'http:',\n 'ftp:': 'http:',\n '//': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.no_http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.no_http = new RegExp(\n '^' +\n self.re.src_auth +\n // Don't allow single-level domains, because of false positives like '//test'\n // with code comments\n '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n self.re.src_port +\n self.re.src_host_terminator +\n self.re.src_path,\n\n 'i'\n );\n }\n\n if (self.re.no_http.test(tail)) {\n // should not be `://` & `///`, that protects from errors in protocol name\n if (pos >= 3 && text[pos - 3] === ':') { return 0; }\n if (pos >= 3 && text[pos - 3] === '/') { return 0; }\n return tail.match(self.re.no_http)[0].length;\n }\n return 0;\n }\n },\n 'mailto:': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.mailto) {\n self.re.mailto = new RegExp(\n '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n );\n }\n if (self.re.mailto.test(tail)) {\n return tail.match(self.re.mailto)[0].length;\n }\n return 0;\n }\n }\n};\n\n/*eslint-disable max-len*/\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444'.split('|');\n\n/*eslint-enable max-len*/\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n self.__index__ = -1;\n self.__text_cache__ = '';\n}\n\nfunction createValidator(re) {\n return function (text, pos) {\n var tail = text.slice(pos);\n\n if (re.test(tail)) {\n return tail.match(re)[0].length;\n }\n return 0;\n };\n}\n\nfunction createNormalizer() {\n return function (match, self) {\n self.normalize(match);\n };\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile(self) {\n\n // Load & clone RE patterns.\n var re = self.re = require('./lib/re')(self.__opts__);\n\n // Define dynamic patterns\n var tlds = self.__tlds__.slice();\n\n self.onCompile();\n\n if (!self.__tlds_replaced__) {\n tlds.push(tlds_2ch_src_re);\n }\n tlds.push(re.src_xn);\n\n re.src_tlds = tlds.join('|');\n\n function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); }\n\n re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n //\n // Compile each schema\n //\n\n var aliases = [];\n\n self.__compiled__ = {}; // Reset compiled data\n\n function schemaError(name, val) {\n throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n }\n\n Object.keys(self.__schemas__).forEach(function (name) {\n var val = self.__schemas__[name];\n\n // skip disabled methods\n if (val === null) { return; }\n\n var compiled = { validate: null, link: null };\n\n self.__compiled__[name] = compiled;\n\n if (isObject(val)) {\n if (isRegExp(val.validate)) {\n compiled.validate = createValidator(val.validate);\n } else if (isFunction(val.validate)) {\n compiled.validate = val.validate;\n } else {\n schemaError(name, val);\n }\n\n if (isFunction(val.normalize)) {\n compiled.normalize = val.normalize;\n } else if (!val.normalize) {\n compiled.normalize = createNormalizer();\n } else {\n schemaError(name, val);\n }\n\n return;\n }\n\n if (isString(val)) {\n aliases.push(name);\n return;\n }\n\n schemaError(name, val);\n });\n\n //\n // Compile postponed aliases\n //\n\n aliases.forEach(function (alias) {\n if (!self.__compiled__[self.__schemas__[alias]]) {\n // Silently fail on missed schemas to avoid errons on disable.\n // schemaError(alias, self.__schemas__[alias]);\n return;\n }\n\n self.__compiled__[alias].validate =\n self.__compiled__[self.__schemas__[alias]].validate;\n self.__compiled__[alias].normalize =\n self.__compiled__[self.__schemas__[alias]].normalize;\n });\n\n //\n // Fake record for guessed links\n //\n self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n //\n // Build schema condition\n //\n var slist = Object.keys(self.__compiled__)\n .filter(function (name) {\n // Filter disabled & fake schemas\n return name.length > 0 && self.__compiled__[name];\n })\n .map(escapeRE)\n .join('|');\n // (?!_) cause 1.5x slowdown\n self.re.schema_test = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');\n self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');\n\n self.re.pretest = RegExp(\n '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n 'i'\n );\n\n //\n // Cleanup\n //\n\n resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match(self, shift) {\n var start = self.__index__,\n end = self.__last_index__,\n text = self.__text_cache__.slice(start, end);\n\n /**\n * Match#schema -> String\n *\n * Prefix (protocol) for matched string.\n **/\n this.schema = self.__schema__.toLowerCase();\n /**\n * Match#index -> Number\n *\n * First position of matched string.\n **/\n this.index = start + shift;\n /**\n * Match#lastIndex -> Number\n *\n * Next position after matched string.\n **/\n this.lastIndex = end + shift;\n /**\n * Match#raw -> String\n *\n * Matched string.\n **/\n this.raw = text;\n /**\n * Match#text -> String\n *\n * Notmalized text of matched string.\n **/\n this.text = text;\n /**\n * Match#url -> String\n *\n * Normalized url of matched string.\n **/\n this.url = text;\n}\n\nfunction createMatch(self, shift) {\n var match = new Match(self, shift);\n\n self.__compiled__[match.schema].normalize(match, self);\n\n return match;\n}\n\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n * for example). `linkify-it` makes shure that prefix is not preceeded with\n * alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n * - _String_ - just alias to existing rule\n * - _Object_\n * - _validate_ - validator function (should return matched length on success),\n * or `RegExp`.\n * - _normalize_ - optional function to normalize text & url of matched result\n * (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n * like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt(schemas, options) {\n if (!(this instanceof LinkifyIt)) {\n return new LinkifyIt(schemas, options);\n }\n\n if (!options) {\n if (isOptionsObj(schemas)) {\n options = schemas;\n schemas = {};\n }\n }\n\n this.__opts__ = assign({}, defaultOptions, options);\n\n // Cache last tested result. Used to skip repeating steps on next `match` call.\n this.__index__ = -1;\n this.__last_index__ = -1; // Next scan position\n this.__schema__ = '';\n this.__text_cache__ = '';\n\n this.__schemas__ = assign({}, defaultSchemas, schemas);\n this.__compiled__ = {};\n\n this.__tlds__ = tlds_default;\n this.__tlds_replaced__ = false;\n\n this.re = {};\n\n compile(this);\n}\n\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add(schema, definition) {\n this.__schemas__[schema] = definition;\n compile(this);\n return this;\n};\n\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set(options) {\n this.__opts__ = assign(this.__opts__, options);\n return this;\n};\n\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test(text) {\n // Reset scan cache\n this.__text_cache__ = text;\n this.__index__ = -1;\n\n if (!text.length) { return false; }\n\n var m, ml, me, len, shift, next, re, tld_pos, at_pos;\n\n // try to scan for link with schema - that's the most simple rule\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search;\n re.lastIndex = 0;\n while ((m = re.exec(text)) !== null) {\n len = this.testSchemaAt(text, m[2], re.lastIndex);\n if (len) {\n this.__schema__ = m[2];\n this.__index__ = m.index + m[1].length;\n this.__last_index__ = m.index + m[0].length + len;\n break;\n }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n // guess schemaless links\n tld_pos = text.search(this.re.host_fuzzy_test);\n if (tld_pos >= 0) {\n // if tld is located after found link - no need to check fuzzy pattern\n if (this.__index__ < 0 || tld_pos < this.__index__) {\n if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n\n shift = ml.index + ml[1].length;\n\n if (this.__index__ < 0 || shift < this.__index__) {\n this.__schema__ = '';\n this.__index__ = shift;\n this.__last_index__ = ml.index + ml[0].length;\n }\n }\n }\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n // guess schemaless emails\n at_pos = text.indexOf('@');\n if (at_pos >= 0) {\n // We can't skip this check, because this cases are possible:\n // 192.168.1.1@gmail.com, my.in@example.com\n if ((me = text.match(this.re.email_fuzzy)) !== null) {\n\n shift = me.index + me[1].length;\n next = me.index + me[0].length;\n\n if (this.__index__ < 0 || shift < this.__index__ ||\n (shift === this.__index__ && next > this.__last_index__)) {\n this.__schema__ = 'mailto:';\n this.__index__ = shift;\n this.__last_index__ = next;\n }\n }\n }\n }\n\n return this.__index__ >= 0;\n};\n\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest(text) {\n return this.re.pretest.test(text);\n};\n\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n // If not supported schema check requested - terminate\n if (!this.__compiled__[schema.toLowerCase()]) {\n return 0;\n }\n return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n * protocol-neutral links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match(text) {\n var shift = 0, result = [];\n\n // Try to take previous element from cache, if .test() called before\n if (this.__index__ >= 0 && this.__text_cache__ === text) {\n result.push(createMatch(this, shift));\n shift = this.__last_index__;\n }\n\n // Cut head if cache was used\n var tail = shift ? text.slice(shift) : text;\n\n // Scan string until end reached\n while (this.test(tail)) {\n result.push(createMatch(this, shift));\n\n tail = tail.slice(this.__last_index__);\n shift += this.__last_index__;\n }\n\n if (result.length) {\n return result;\n }\n\n return null;\n};\n\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444\n * are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n list = Array.isArray(list) ? list : [ list ];\n\n if (!keepOld) {\n this.__tlds__ = list.slice();\n this.__tlds_replaced__ = true;\n compile(this);\n return this;\n }\n\n this.__tlds__ = this.__tlds__.concat(list)\n .sort()\n .filter(function (el, idx, arr) {\n return el !== arr[idx - 1];\n })\n .reverse();\n\n compile(this);\n return this;\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize(match) {\n\n // Do minimal possible changes by default. Need to collect feedback prior\n // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n if (!match.schema) { match.url = 'http://' + match.url; }\n\n if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n match.url = 'mailto:' + match.url;\n }\n};\n\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\n\n\nmodule.exports = LinkifyIt;\n", "'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nmodule.exports = punycode;\n", "// markdown-it default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 100 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {},\n block: {},\n inline: {}\n }\n};\n", "// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Commonmark default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: true, // Enable HTML tags in source\n xhtmlOut: true, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'blockquote',\n 'code',\n 'fence',\n 'heading',\n 'hr',\n 'html_block',\n 'lheading',\n 'list',\n 'reference',\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'autolink',\n 'backticks',\n 'emphasis',\n 'entity',\n 'escape',\n 'html_inline',\n 'image',\n 'link',\n 'newline',\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'emphasis',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Main parser class\n\n'use strict';\n\n\nvar utils = require('./common/utils');\nvar helpers = require('./helpers');\nvar Renderer = require('./renderer');\nvar ParserCore = require('./parser_core');\nvar ParserBlock = require('./parser_block');\nvar ParserInline = require('./parser_inline');\nvar LinkifyIt = require('linkify-it');\nvar mdurl = require('mdurl');\nvar punycode = require('punycode');\n\n\nvar config = {\n default: require('./presets/default'),\n zero: require('./presets/zero'),\n commonmark: require('./presets/commonmark')\n};\n\n////////////////////////////////////////////////////////////////////////////////\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\n\nfunction validateLink(url) {\n // url should be normalized at this point, and existing entities are decoded\n var str = url.trim().toLowerCase();\n\n return BAD_PROTO_RE.test(str) ? (GOOD_DATA_RE.test(str) ? true : false) : true;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar RECODE_HOSTNAME_FOR = [ 'http:', 'https:', 'mailto:' ];\n\nfunction normalizeLink(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toASCII(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n return mdurl.encode(mdurl.format(parsed));\n}\n\nfunction normalizeLinkText(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toUnicode(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%');\n}\n\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n * md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n * configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n * similar to GFM, used when no preset name given. Enables all available rules,\n * but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n * all rules disabled. Useful to quickly setup your config via `.enable()`.\n * For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n * That's not safe! You may need external sanitizer to protect output from XSS.\n * It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n * (`<br />`). This is needed only for full CommonMark compatibility. In real\n * world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n * Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__ - `false`. Set `true` to enable [some language-neutral\n * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n * quotes beautification (smartquotes).\n * - __quotes__ - `\u201C\u201D\u2018\u2019`, String or Array. Double + single quotes replacement\n * pairs, when typographer enabled and smartquotes on. For example, you can\n * use `'\u00AB\u00BB\u201E\u201C'` for Russian, `'\u201E\u201C\u201A\u2018'` for German, and\n * `['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n * Highlighter `function (str, lang)` should return escaped HTML. It can also\n * return empty string if the source was not changed and should be escaped\n * externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n * html: true,\n * linkify: true,\n * typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n * } catch (__) {}\n * }\n *\n * return ''; // use external default escaping\n * }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return '<pre class=\"hljs\"><code>' +\n * hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n * '</code></pre>';\n * } catch (__) {}\n * }\n *\n * return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n * }\n * });\n * ```\n *\n **/\nfunction MarkdownIt(presetName, options) {\n if (!(this instanceof MarkdownIt)) {\n return new MarkdownIt(presetName, options);\n }\n\n if (!options) {\n if (!utils.isString(presetName)) {\n options = presetName || {};\n presetName = 'default';\n }\n }\n\n /**\n * MarkdownIt#inline -> ParserInline\n *\n * Instance of [[ParserInline]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.inline = new ParserInline();\n\n /**\n * MarkdownIt#block -> ParserBlock\n *\n * Instance of [[ParserBlock]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.block = new ParserBlock();\n\n /**\n * MarkdownIt#core -> Core\n *\n * Instance of [[Core]] chain executor. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.core = new ParserCore();\n\n /**\n * MarkdownIt#renderer -> Renderer\n *\n * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n * rules for new token types, generated by plugins.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * function myToken(tokens, idx, options, env, self) {\n * //...\n * return result;\n * };\n *\n * md.renderer.rules['my_token'] = myToken\n * ```\n *\n * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n **/\n this.renderer = new Renderer();\n\n /**\n * MarkdownIt#linkify -> LinkifyIt\n *\n * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n * rule.\n **/\n this.linkify = new LinkifyIt();\n\n /**\n * MarkdownIt#validateLink(url) -> Boolean\n *\n * Link validation function. CommonMark allows too much in links. By default\n * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n * except some embedded image types.\n *\n * You can change this behaviour:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * // enable everything\n * md.validateLink = function () { return true; }\n * ```\n **/\n this.validateLink = validateLink;\n\n /**\n * MarkdownIt#normalizeLink(url) -> String\n *\n * Function used to encode link url to a machine-readable format,\n * which includes url-encoding, punycode, etc.\n **/\n this.normalizeLink = normalizeLink;\n\n /**\n * MarkdownIt#normalizeLinkText(url) -> String\n *\n * Function used to decode link url to a human-readable format`\n **/\n this.normalizeLinkText = normalizeLinkText;\n\n\n // Expose utils & helpers for easy acces from plugins\n\n /**\n * MarkdownIt#utils -> utils\n *\n * Assorted utility functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js).\n **/\n this.utils = utils;\n\n /**\n * MarkdownIt#helpers -> helpers\n *\n * Link components parser functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n **/\n this.helpers = utils.assign({}, helpers);\n\n\n this.options = {};\n this.configure(presetName);\n\n if (options) { this.set(options); }\n}\n\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .set({ html: true, breaks: true })\n * .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n utils.assign(this.options, options);\n return this;\n};\n\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n var self = this, presetName;\n\n if (utils.isString(presets)) {\n presetName = presets;\n presets = config[presetName];\n if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name'); }\n }\n\n if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty'); }\n\n if (presets.options) { self.set(presets.options); }\n\n if (presets.components) {\n Object.keys(presets.components).forEach(function (name) {\n if (presets.components[name].rules) {\n self[name].ruler.enableOnly(presets.components[name].rules);\n }\n if (presets.components[name].rules2) {\n self[name].ruler2.enableOnly(presets.components[name].rules2);\n }\n });\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .enable(['sub', 'sup'])\n * .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.enable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.enable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n }\n\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.disable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.disable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n * .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n * });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n var args = [ this ].concat(Array.prototype.slice.call(arguments, 1));\n plugin.apply(plugin, args);\n return this;\n};\n\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n if (typeof src !== 'string') {\n throw new Error('Input data should be a String');\n }\n\n var state = new this.core.State(src, this, env);\n\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parse(src, env), this.options, env);\n};\n\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n var state = new this.core.State(src, this, env);\n\n state.inlineMode = true;\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\n\nmodule.exports = MarkdownIt;\n", "// Generated by PEG.js v0.11.0-master.b7b87ea, https://pegjs.org/\n\n'use strict';\n\nfunction peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = 'SyntaxError';\n\n // istanbul ignore next\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\npeg$SyntaxError.buildMessage = function (expected, found, location) {\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 + ']';\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 not: function (expectation) {\n return 'not ' + describeExpectation(expectation.expected);\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) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\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) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\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 (\n descriptions.slice(0, -1).join(', ') +\n ', or ' +\n descriptions[descriptions.length - 1]\n );\n }\n }\n\n function describeFound(found) {\n return found ? '\"' + literalEscape(found) + '\"' : 'end of input';\n }\n\n return (\n 'Expected ' +\n describeExpected(expected) +\n ' but ' +\n describeFound(found) +\n ' found.'\n );\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n\n var peg$startRuleFunctions = { Top: peg$parseTop };\n var peg$startRuleFunction = peg$parseTop;\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 = 'null';\n var peg$c10 = 'true';\n var peg$c11 = 'false';\n var peg$c12 = '{';\n var peg$c13 = '}';\n var peg$c14 = ':';\n var peg$c15 = '-';\n var peg$c16 = '\"';\n var peg$c17 = '\\\\';\n\n var peg$r0 = /^[$@]/;\n var peg$r1 = /^[0-9]/;\n var peg$r2 = /^[^\\0-\\x1F\"\\\\]/;\n var peg$r3 = /^[a-zA-Z0-9_\\-]/;\n var peg$r4 = /^[ \\n\\t]/;\n\n var peg$e0 = peg$literalExpectation('/', false);\n var peg$e1 = peg$otherExpectation('tag name');\n var peg$e2 = peg$otherExpectation('class');\n var peg$e3 = peg$otherExpectation('id');\n var peg$e4 = peg$literalExpectation('=', false);\n var peg$e5 = peg$literalExpectation('(', false);\n var peg$e6 = peg$literalExpectation(')', false);\n var peg$e7 = peg$literalExpectation(',', false);\n var peg$e8 = peg$otherExpectation('variable');\n var peg$e9 = peg$otherExpectation('null');\n var peg$e10 = peg$otherExpectation('boolean');\n var peg$e11 = peg$literalExpectation('[', false);\n var peg$e12 = peg$literalExpectation(']', false);\n var peg$e13 = peg$literalExpectation('{', false);\n var peg$e14 = peg$literalExpectation('}', false);\n var peg$e15 = peg$literalExpectation(':', false);\n var peg$e16 = peg$otherExpectation('number');\n var peg$e17 = peg$otherExpectation('string');\n var peg$e18 = peg$otherExpectation('identifier');\n var peg$e19 = peg$otherExpectation('whitespace');\n\n var peg$f0 = function (variable) {\n return { type: 'variable', meta: { variable } };\n };\n var peg$f1 = function (attributes) {\n return { type: 'annotation', meta: { attributes } };\n };\n var peg$f2 = function (tag, value) {\n return value;\n };\n var peg$f3 = function (tag, primary, attributes, close) {\n if (primary) {\n attributes = attributes || [];\n attributes.unshift({\n type: 'attribute',\n name: 'primary',\n value: primary,\n });\n }\n\n const [type, nesting] = close ? ['tag', 0] : ['tag_open', 1];\n return { type, nesting, meta: { tag, attributes } };\n };\n var peg$f4 = function (tag) {\n return { type: 'tag_close', nesting: -1, meta: { tag } };\n };\n var peg$f5 = function (head, tail) {\n return !head ? [] : [head, ...tail];\n };\n var peg$f6 = function (item) {\n return item;\n };\n var peg$f7 = function (ids) {\n return ids;\n };\n var peg$f8 = function (classes) {\n return classes;\n };\n var peg$f9 = function (attribute) {\n return attribute;\n };\n var peg$f10 = function (name) {\n return { type: 'class', name, value: true };\n };\n var peg$f11 = function (value) {\n return { type: 'attribute', name: 'id', value };\n };\n var peg$f12 = function (name, value) {\n return { type: 'attribute', name, value };\n };\n var peg$f13 = function (name, head, tail) {\n return head ? [head, ...tail] : [];\n };\n var peg$f14 = function (name, params) {\n let parameters = {};\n for (let [index, { name, value }] of params.entries())\n parameters[name || index] = value;\n return new Function(name, parameters);\n };\n var peg$f15 = function (name) {\n return name;\n };\n var peg$f16 = function (name, value) {\n return { name, value };\n };\n var peg$f17 = function (value) {\n return value;\n };\n var peg$f18 = function (prefix, head, tail) {\n if (prefix === '@') return [head, ...tail];\n return new Variable([head, ...tail]);\n };\n var peg$f19 = function () {\n return null;\n };\n var peg$f20 = function () {\n return true;\n };\n var peg$f21 = function () {\n return false;\n };\n var peg$f22 = function (head, tail) {\n return [head, ...tail];\n };\n var peg$f23 = function (value) {\n return value || [];\n };\n var peg$f24 = function (head, tail) {\n return Object.assign(head, ...tail);\n };\n var peg$f25 = function (value) {\n return value || {};\n };\n var peg$f26 = function (key, value) {\n return key === '$$mdtype' ? {} : { [key]: value };\n };\n var peg$f27 = function () {\n return parseFloat(text());\n };\n var peg$f28 = function (value) {\n return value.join('');\n };\n var peg$f29 = function (sequence) {\n return sequence;\n };\n\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$expected = [];\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(\n 'Can\\'t start parsing from rule \"' + options.startRule + '\".'\n );\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 [peg$savedPos, peg$currPos];\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location =\n 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 =\n 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 {\n type: 'class',\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase,\n };\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 var peg$VALIDFILENAME =\n typeof options.filename === 'string' && options.filename.length > 0;\n function peg$computeLocation(startPos, endPos) {\n var loc = {};\n\n if (peg$VALIDFILENAME) loc.filename = options.filename;\n\n var startPosDetails = peg$computePosDetails(startPos);\n loc.start = {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column,\n };\n\n var endPosDetails = peg$computePosDetails(endPos);\n loc.end = {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column,\n };\n\n return loc;\n }\n\n function peg$begin() {\n peg$expected.push({ pos: peg$currPos, variants: [] });\n }\n\n function peg$expect(expected) {\n var top = peg$expected[peg$expected.length - 1];\n\n if (peg$currPos < top.pos) {\n return;\n }\n\n if (peg$currPos > top.pos) {\n top.pos = peg$currPos;\n top.variants = [];\n }\n\n top.variants.push(expected);\n }\n\n function peg$end(invert) {\n var expected = peg$expected.pop();\n var top = peg$expected[peg$expected.length - 1];\n var variants = expected.variants;\n\n if (top.pos !== expected.pos) {\n return;\n }\n\n if (invert) {\n variants = variants.map(function (e) {\n return e.type === 'not' ? e.expected : { type: 'not', expected: e };\n });\n }\n\n Array.prototype.push.apply(top.variants, variants);\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, location),\n expected,\n found,\n location\n );\n }\n\n function peg$buildError() {\n var expected = peg$expected[0];\n var failPos = expected.pos;\n\n return peg$buildStructuredError(\n expected.variants,\n failPos < input.length ? input.charAt(failPos) : null,\n failPos < input.length\n ? peg$computeLocation(failPos, failPos + 1)\n : peg$computeLocation(failPos, failPos)\n );\n }\n\n function peg$parseTop() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseTopLevelValue();\n if (s0 === peg$FAILED) {\n s0 = peg$parseAnnotation();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagOpen();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagClose();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseTopLevelValue() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseVariable();\n if (s1 === peg$FAILED) {\n s1 = peg$parseFunction();\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseAnnotation() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributes();\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 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$parseTagOpen() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagName();\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$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n peg$savedPos = s3;\n s3 = peg$f2(s1, s4);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseTagAttributes();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n s6 = peg$parse_();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parse_();\n }\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s6 = peg$c0;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s3, s4, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagClose() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagName();\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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagName() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e1);\n peg$silentFails++;\n s0 = peg$parseIdentifier();\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttributes() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributesItem();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseTagAttributesTail();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseTagAttributesTail();\n }\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$parseTagAttributesTail() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagAttributesItem();\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$parseTagAttributesItem() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutId();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f7(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutClass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagAttribute();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f9(s1);\n }\n s0 = s1;\n }\n }\n\n return s0;\n }\n\n function peg$parseTagShortcutClass() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e2);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagShortcutId() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e3);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\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 peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttribute() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseValue();\n if (s3 !== 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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunction() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e5);\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c4;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$currPos;\n s5 = peg$parseFunctionParameter();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s6 = [];\n s7 = peg$parseFunctionParameterTail();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parseFunctionParameterTail();\n }\n peg$savedPos = s4;\n s4 = peg$f13(s1, s5, s6);\n rule$expects(peg$e6);\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c5;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s1, 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 return s0;\n }\n\n function peg$parseFunctionParameter() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s3 = peg$c3;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f15(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 s1 = null;\n }\n s2 = peg$parseValue();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunctionParameterTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\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 rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$parseFunctionParameter();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\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$parseTrailingComma() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\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 rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\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 if (s0 === peg$FAILED) {\n s0 = null;\n }\n\n return s0;\n }\n\n function peg$parseVariable() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e8);\n peg$silentFails++;\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 }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseVariableTail();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseVariableTail();\n }\n peg$savedPos = s0;\n s0 = peg$f18(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 peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseVariableTail() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\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 if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseValueNumber();\n if (s2 === peg$FAILED) {\n s2 = peg$parseValueString();\n }\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 }\n if (s3 !== 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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseValue() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseValueNull();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueBoolean();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueString();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueArray();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueHash();\n if (s0 === peg$FAILED) {\n s0 = peg$parseFunction();\n if (s0 === peg$FAILED) {\n s0 = peg$parseVariable();\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseValueNull() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e9);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c9) {\n s1 = peg$c9;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19();\n }\n s0 = s1;\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueBoolean() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e10);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c10) {\n s1 = peg$c10;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f20();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c11) {\n s1 = peg$c11;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f21();\n }\n s0 = s1;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueArray() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e11);\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\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$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueArrayTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueArrayTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f22(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e12);\n if (input.charCodeAt(peg$currPos) === 93) {\n s5 = peg$c8;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(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$parseValueArrayTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\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 rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\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$parseValueHash() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e13);\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\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$currPos;\n s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueHashTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueHashTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f24(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e14);\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\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\n return s0;\n }\n\n function peg$parseValueHashTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\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 rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s4);\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$parseValueHashItem() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 === peg$FAILED) {\n s1 = peg$parseValueString();\n }\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e15);\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c14;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f26(s1, 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 return s0;\n }\n\n function peg$parseValueNumber() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e16);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\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 }\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 }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\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 }\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 }\n }\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 s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f27();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueString() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e17);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseValueStringChars();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseValueStringChars();\n }\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c16;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\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$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueStringChars() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\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 }\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueStringEscapes();\n }\n\n return s0;\n }\n\n function peg$parseValueStringEscapes() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c17;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s2 = peg$c16;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c17;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n }\n if (s2 !== 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\n return s0;\n }\n\n function peg$parseIdentifier() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e18);\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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\n return s0;\n }\n\n function peg$parse_() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e19);\n peg$silentFails++;\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n const { Variable, Function } = options;\n\n peg$begin();\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$expect(peg$endExpectation());\n }\n\n throw peg$buildError();\n }\n}\n\nmodule.exports = {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse,\n};\n", "'use strict';\n\n\nmodule.exports = require('./lib/');\n", "import Tokenizer from './src/tokenizer';\nimport parser from './src/parser';\nimport Node from './src/ast/node';\nimport Tag from './src/ast/tag';\nimport Ast from './src/ast/index';\nimport * as nodes from './src/schema';\nimport tags from './src/tags/index';\nimport { truthy } from './src/tags/conditional';\nimport functions from './src/functions/index';\nimport renderers from './src/renderers/index';\nimport transformer from './src/transformer';\nimport validator from './src/validator';\nimport { parseTags } from './src/utils';\nimport transforms from './src/transforms/index';\n\nimport type Token from 'markdown-it/lib/token';\nimport type { Config, RenderableTreeNode, ValidateError } from './src/types';\n\nexport * from './src/types';\n\nconst tokenizer = new Tokenizer();\n\nfunction mergeConfig(config: Config = {}): Config {\n return {\n ...config,\n tags: {\n ...tags,\n ...config.tags,\n },\n nodes: {\n ...nodes,\n ...config.nodes,\n },\n functions: {\n ...functions,\n ...config.functions,\n },\n };\n}\n\nexport function parse(content: string | Token[], file?: string): Node {\n if (typeof content === 'string') content = tokenizer.tokenize(content);\n return parser(content, file);\n}\n\nexport function resolve<C extends Config = Config>(\n content: Node,\n config: C\n): Node;\nexport function resolve<C extends Config = Config>(\n content: Node[],\n config: C\n): Node[];\nexport function resolve<C extends Config = Config>(\n content: any,\n config: C\n): any {\n if (Array.isArray(content))\n return content.flatMap((child) => child.resolve(config));\n\n return content.resolve(config);\n}\n\nexport function transform<C extends Config = Config>(\n node: Node,\n config?: C\n): RenderableTreeNode;\nexport function transform<C extends Config = Config>(\n nodes: Node[],\n config?: C\n): RenderableTreeNode[];\nexport function transform<C extends Config = Config>(\n nodes: any,\n options?: C\n): any {\n const config = mergeConfig(options);\n const content = resolve(nodes, config);\n\n if (Array.isArray(content))\n return content.flatMap((child) => child.transform(config));\n return content.transform(config);\n}\n\nexport function validate<C extends Config = Config>(\n content: Node,\n options?: C\n): ValidateError[] {\n const config = mergeConfig(options);\n\n const output = [];\n for (const node of [content, ...content.walk()]) {\n const { type, lines, location } = node;\n const errors = validator(node, config);\n\n for (const error of errors) output.push({ type, lines, location, error });\n }\n\n return output;\n}\n\nexport function createElement(\n name: string | { key?: string | number },\n attributes = {},\n ...children: any[]\n) {\n return { name, attributes, children };\n}\n\nexport default {\n nodes,\n tags,\n functions,\n renderers,\n transforms,\n Ast,\n Tag,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n parse,\n transform,\n validate,\n createElement,\n truthy,\n};\n\nexport {\n nodes,\n tags,\n functions,\n transforms,\n renderers,\n Ast,\n Tag,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n truthy,\n};\n", "import MarkdownIt from 'markdown-it/lib';\nimport annotations from './plugins/annotations';\nimport frontmatter from './plugins/frontmatter';\nimport type Token from 'markdown-it/lib/token';\n\nexport default class Tokenizer {\n private parser: MarkdownIt;\n\n constructor(\n config: MarkdownIt.Options & { allowIndentation?: boolean } = {}\n ) {\n this.parser = new MarkdownIt(config);\n this.parser.use(annotations, 'annotations', {});\n this.parser.use(frontmatter, 'frontmatter', {});\n this.parser.disable('lheading');\n }\n\n tokenize(content: string): Token[] {\n return this.parser.parse(content.toString(), {});\n }\n}\n", "import { parse, SyntaxError } from './grammar/tag';\nimport Variable from './ast/variable';\nimport Function from './ast/function';\n\nimport type Token from 'markdown-it/lib/token';\n\nenum STATES {\n normal,\n string,\n escape,\n}\n\nexport const OPEN = '{%';\nexport const CLOSE = '%}';\n\nexport function findTagEnd(content: string, start = 0) {\n let state = STATES.normal;\n for (let pos = start; pos < content.length; pos++) {\n const char = content[pos];\n\n switch (state) {\n case STATES.string:\n switch (char) {\n case '\"':\n state = STATES.normal;\n break;\n case '\\\\':\n state = STATES.escape;\n break;\n }\n break;\n case STATES.escape:\n state = STATES.string;\n break;\n case STATES.normal:\n if (char === '\"') state = STATES.string;\n else if (content.startsWith(CLOSE, pos)) return pos;\n }\n }\n}\n\nfunction parseTag(content: string, line: number, contentStart: number) {\n try {\n return parse(content, { Variable, Function });\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = {\n start: { line, character: start.offset + contentStart },\n end: { line: line + 1, character: end.offset + contentStart },\n };\n\n return { type: 'error', meta: { error: { message, location } } };\n }\n}\n\nexport function parseTags(content: string, firstLine = 0): Token[] {\n let line = firstLine + 1;\n const output = [];\n let start = 0;\n\n for (let pos = 0; pos < content.length; pos++) {\n if (content[pos] === '\\n') {\n line++;\n continue;\n }\n\n if (!content.startsWith(OPEN, pos)) continue;\n\n const end = findTagEnd(content, pos) || 0;\n const text = content.slice(pos, end + CLOSE.length);\n const inner = content.slice(pos + OPEN.length, end);\n const lineStart = content.lastIndexOf('\\n', pos);\n const lineEnd = content.indexOf('\\n', end);\n const lineContent = content.slice(lineStart, lineEnd);\n const tag = parseTag(inner.trim(), line, pos - lineStart);\n\n // Throw away excess whitespace introduced by block-level tags\n const precedingTextEnd = lineContent.trim() === text ? lineStart : pos;\n const precedingText = content.slice(start, precedingTextEnd);\n\n output.push({\n type: 'text',\n start,\n end: pos - 1,\n content: precedingText,\n });\n\n output.push({\n map: [line, line + 1],\n position: {\n start: pos - lineStart,\n end: pos - lineStart + text.length,\n },\n start: pos,\n end: pos + text.length - 1,\n info: text,\n ...tag,\n });\n\n start = end + CLOSE.length;\n pos = start - 1;\n }\n\n output.push({\n type: 'text',\n start,\n end: content.length - 1,\n content: content.slice(start),\n });\n\n return output;\n}\n", "import type { Config, AstType } from '../types';\n\nexport default class Variable implements AstType {\n readonly $$mdtype = 'Variable';\n\n path;\n\n constructor(path: (string | number)[] = []) {\n this.path = path;\n }\n\n resolve({ variables }: Config = {}) {\n return variables instanceof Function\n ? variables(this.path)\n : this.path.reduce((obj = {}, key) => obj[key], variables);\n }\n}\n", "import type {\n AstType,\n Config,\n Function as AstFunction,\n Scalar,\n} from '../types';\n\nexport function isAst(value?: any): value is AstType {\n return !!value?.$$mdtype;\n}\n\nexport function isFunction(value?: any): value is AstFunction {\n return !!(value?.$$mdtype === 'Function');\n}\n\nexport function* getAstValues(value: any): Generator<AstType, void, unknown> {\n if (value == null || typeof value !== 'object') return;\n\n if (Array.isArray(value)) for (const v of value) yield* getAstValues(v);\n\n if (isAst(value)) yield value;\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return;\n\n for (const v of Object.values(value)) yield* getAstValues(v);\n}\n\nexport function resolve(value: any, config: Config = {}): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => resolve(item, config));\n\n if (isAst(value) && value?.resolve instanceof Function)\n return value.resolve(config);\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = resolve(v, config);\n return output;\n}\n", "import { resolve } from './base';\nimport type { Config, AstType } from '../types';\n\nexport default class Function implements AstType {\n readonly $$mdtype = 'Function';\n\n name;\n parameters;\n\n constructor(name: string, parameters: Record<string, any>) {\n this.name = name;\n this.parameters = parameters;\n }\n\n resolve(config: Config = {}) {\n const fn = config?.functions?.[this.name];\n if (!fn) return null;\n\n const parameters = resolve(this.parameters, config);\n return fn.transform?.(parameters, config);\n }\n}\n", "import { findTagEnd, parseTags } from '../../utils';\nimport { parse, SyntaxError } from '../../grammar/tag';\nimport Variable from '../../ast/variable';\nimport Function from '../../ast/function';\n\nimport type { AttributeValue } from '../../types';\nimport type MarkdownIt from 'markdown-it/lib';\nimport type StateCore from 'markdown-it/lib/rules_core/state_core';\nimport type StateInline from 'markdown-it/lib/rules_inline/state_inline';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\nimport type Token from 'markdown-it/lib/token';\n\nimport { OPEN, CLOSE } from '../../utils';\n\nfunction createToken(\n state: StateBlock | StateInline,\n content: string,\n contentStart?: number\n): Token {\n try {\n const { type, meta, nesting = 0 } = parse(content, { Variable, Function });\n const token = state.push(type, '', nesting);\n token.info = content;\n token.meta = meta;\n\n return token;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = contentStart\n ? {\n start: { offset: start.offset + contentStart },\n end: { offset: end.offset + contentStart },\n }\n : null;\n\n const token = state.push('error', '', 0);\n token.meta = { error: { message, location } };\n return token;\n }\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n const start = state.bMarks[startLine] + state.tShift[startLine];\n const finish = state.eMarks[startLine];\n\n if (!state.src.startsWith(OPEN, start)) return false;\n\n const tagEnd = findTagEnd(state.src, start);\n const lastPossible = state.src.slice(0, finish).trim().length;\n\n if (!tagEnd || tagEnd < lastPossible - CLOSE.length) return false;\n\n const contentStart = start + OPEN.length;\n const content = state.src.slice(contentStart, tagEnd).trim();\n const lines = content.split('\\n').length;\n\n if (content[0] === '$') return false;\n\n if (silent) return true;\n\n const token = createToken(state, content, contentStart);\n token.map = [startLine, startLine + lines];\n state.line += lines;\n return true;\n}\n\nfunction inline(state: StateInline, silent: boolean): boolean {\n if (!state.src.startsWith(OPEN, state.pos)) return false;\n\n const tagEnd = findTagEnd(state.src, state.pos);\n if (!tagEnd) return false;\n\n const content = state.src.slice(state.pos + OPEN.length, tagEnd);\n if (!silent) createToken(state, content.trim());\n\n state.pos = tagEnd + CLOSE.length;\n return true;\n}\n\nfunction core(state: StateCore) {\n let token: Token;\n for (token of state.tokens) {\n if (token.type !== 'fence') continue;\n\n if (token.info.includes(OPEN)) {\n const start = token.info.indexOf(OPEN);\n const end = findTagEnd(token.info, start);\n const content = token.info.slice(start + OPEN.length, end);\n\n try {\n const { meta } = parse(content.trim(), { Variable, Function });\n token.meta = meta;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n if (!token.errors) token.errors = [];\n token.errors.push({\n id: 'fence-tag-error',\n level: 'error',\n message: `Syntax error in fence tag: ${\n (error as SyntaxError).message\n }`,\n });\n }\n }\n\n if (\n token?.meta?.attributes?.find(\n (attr: AttributeValue) => attr.name === 'process' && !attr.value\n )\n )\n continue;\n\n token.children = parseTags(token.content, token.map[0]);\n }\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('paragraph', 'annotations', block, {\n alt: ['paragraph', 'blockquote'],\n });\n md.inline.ruler.push('containers', inline);\n md.core.ruler.push('annotations', core);\n}\n", "import type MarkdownIt from 'markdown-it/lib';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\n\nconst fence = '---';\n\nfunction getLine(state: StateBlock, n: number) {\n return state.src.slice(state.bMarks[n], state.eMarks[n]).trim();\n}\n\nfunction findClose(state: StateBlock, endLine: number) {\n for (let line = 1; line < endLine; line++)\n if (getLine(state, line) === fence) return line;\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n if (startLine != 0 || getLine(state, 0) != fence) return false;\n\n const close = findClose(state, endLine);\n\n if (!close) return false;\n if (silent) return true;\n\n const token = state.push('frontmatter', '', 0);\n token.content = state.src.slice(state.eMarks[0], state.bMarks[close]).trim();\n token.map = [0, close];\n token.hidden = true;\n\n state.line = close + 1;\n return true;\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('hr', 'frontmatter', block);\n}\n", "import type { RenderableTreeNode } from '../types';\n\nexport default class Tag {\n readonly $$mdtype = 'Tag' as const;\n\n name: string;\n attributes: Record<string, any>;\n children: RenderableTreeNode[];\n\n constructor(\n name = 'div',\n attributes = {},\n children: RenderableTreeNode[] = []\n ) {\n this.name = name;\n this.attributes = attributes;\n this.children = children;\n }\n}\n", "import { CustomAttributeTypeInterface, ValidationError } from '../types';\n\nexport class Class implements CustomAttributeTypeInterface {\n validate(value: any): ValidationError[] {\n if (typeof value === 'string' || typeof value === 'object') return [];\n\n return [\n {\n id: 'attribute-type-invalid',\n level: 'error',\n message: `Attribute 'class' must be type 'string | object'`,\n },\n ];\n }\n\n transform(value: any) {\n if (!value || typeof value === 'string') return value;\n\n const classes = [];\n for (const [k, v] of Object.entries(value ?? {})) if (v) classes.push(k);\n return classes.join(' ');\n }\n}\n", "import Tag from './ast/tag';\nimport { Class } from './schema-types/class';\nimport type {\n Config,\n Node,\n NodeType,\n Schema,\n RenderableTreeNode,\n RenderableTreeNodes,\n} from './types';\n\ntype AttributesSchema = Schema['attributes'];\n\nexport const globalAttributes: AttributesSchema = {\n class: { type: Class, render: true },\n id: { type: String, render: true },\n};\n\nexport interface Transformer {\n findSchema(node: Node, config: Config): Schema | undefined;\n node(node: Node, config: Config): RenderableTreeNodes;\n attributes(node: Node, config: Config): Record<string, any>;\n children(node: Node, config: Config): RenderableTreeNode[];\n}\n\nexport default {\n findSchema(node: Node, { nodes = {}, tags = {} }: Config = {}) {\n return node.tag ? tags[node.tag] : nodes[node.type as NodeType];\n },\n\n attributes(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n const output: Record<string, any> = {};\n\n const attrs = { ...globalAttributes, ...schema.attributes };\n for (const [key, attr] of Object.entries(attrs)) {\n if (attr.render == false) continue;\n\n const name = typeof attr.render === 'string' ? attr.render : key;\n\n let value = node.attributes[key];\n if (typeof attr.type === 'function') {\n const instance: any = new attr.type();\n if (instance.transform) {\n value = instance.transform(value, config);\n }\n }\n value = value === undefined ? attr.default : value;\n\n if (value === undefined) continue;\n output[name] = value;\n }\n\n return output;\n },\n\n children(node: Node, config: Config = {}) {\n return node.children.flatMap((child) => this.node(child, config));\n },\n\n node(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n if (schema && schema.transform instanceof Function)\n return schema.transform(node, config);\n\n const children = this.children(node, config);\n if (!schema || !schema.render) return children;\n\n const attributes = this.attributes(node, config);\n return new Tag(schema.render, attributes, children);\n },\n} as Transformer;\n", "import { resolve } from './base';\nimport transformer from '../transformer';\nimport type {\n AstType,\n Location,\n Config,\n RenderableTreeNode,\n RenderableTreeNodes,\n Schema,\n ValidationError,\n} from '../types';\n\nexport default class Node implements AstType {\n readonly $$mdtype = 'Node';\n\n attributes: Record<string, any>;\n children: Node[];\n errors: ValidationError[] = [];\n lines: number[] = [];\n type: string;\n tag?: string;\n\n inline = false;\n location?: Location;\n\n constructor(\n type = 'node',\n attributes: Record<string, any> = {},\n children: Node[] = [],\n tag?: string\n ) {\n this.attributes = attributes;\n this.children = children;\n this.type = type;\n this.tag = tag;\n }\n\n *walk(): Generator<Node, void, unknown> {\n for (const child of this.children) {\n yield child;\n yield* child.walk();\n }\n }\n\n push(node: Node) {\n this.children.push(node);\n }\n\n resolve(config: Config = {}): Node {\n return Object.assign(new Node(), this, {\n children: this.children.map((child) => child.resolve(config)),\n attributes: resolve(this.attributes, config),\n });\n }\n\n findSchema(config: Config = {}): Schema | undefined {\n return transformer.findSchema(this, config);\n }\n\n transformAttributes(config: Config = {}) {\n return transformer.attributes(this, config);\n }\n\n transformChildren(config: Config): RenderableTreeNode[] {\n return transformer.children(this, config);\n }\n\n transform(config: Config): RenderableTreeNodes {\n return transformer.node(this, config);\n }\n}\n", "import Node from './node';\nimport Function from './function';\nimport Variable from './variable';\nimport * as base from './base';\n\nimport type { AstType } from '../types';\n\nconst AstTypes = {\n Function,\n Node,\n Variable,\n};\n\nfunction reviver(_: string, value: AstType): any {\n if (!value) return value;\n const klass = AstTypes[value.$$mdtype] as any;\n return klass ? Object.assign(new klass(), value) : value;\n}\n\nfunction fromJSON(text: string): Node | Node[] {\n return JSON.parse(text, reviver);\n}\n\nexport default {\n ...AstTypes,\n ...base,\n fromJSON,\n};\n", "import Ast from '../ast/index';\n\nimport type { Node } from '../types';\n\nfunction convertToRow(node: Node, cellType = 'td') {\n node.type = 'tr';\n node.attributes = {};\n\n for (const cell of node.children) cell.type = cellType;\n\n return node;\n}\n\nexport default function transform(document: Node) {\n for (const node of document.walk()) {\n if (node.type !== 'tag' || node.tag !== 'table') continue;\n\n const [first, ...rest] = node.children;\n if (!first || first.type === 'table') continue;\n\n const table = new Ast.Node('table', node.attributes, [\n new Ast.Node('thead'),\n new Ast.Node('tbody'),\n ]);\n\n const [thead, tbody] = table.children;\n\n if (first.type === 'list') thead.push(convertToRow(first, 'th'));\n\n for (const row of rest) {\n // Convert lists to rows with special-case support for conditionals\n // When a conditional is encountered, convert all of its top-level lists to rows\n if (row.type === 'list') convertToRow(row);\n else if (row.type === 'tag' && row.tag == 'if') {\n const children = [];\n\n for (const child of row.children) {\n // Replace children and skip HRs in order to support conditionals with multiple rows\n if (child.type === 'hr') continue;\n if (child.type === 'list') convertToRow(child);\n children.push(child);\n }\n\n row.children = children;\n } else continue;\n tbody.push(row);\n }\n\n node.children = [table];\n }\n}\n", "import table from './table';\nexport default [table];\n", "import Node from './ast/node';\nimport transforms from './transforms/index';\n\nimport type { AttributeValue } from './types';\n\nimport type Token from 'markdown-it/lib/token';\n\nconst mappings: Record<string, string> = {\n ordered_list: 'list',\n bullet_list: 'list',\n code_inline: 'code',\n list_item: 'item',\n variable: 'text',\n};\n\nfunction annotate(node: Node, attributes: AttributeValue[]) {\n for (const { name, value, type } of attributes)\n if (type === 'attribute') node.attributes[name] = value;\n else if (type === 'class')\n if (node.attributes.class) node.attributes.class[name] = value;\n else node.attributes.class = { [name]: value };\n}\n\nfunction handleAttrs(token: Token, type: string) {\n switch (type) {\n case 'heading':\n return { level: Number(token.tag.replace('h', '')) };\n case 'list':\n return { ordered: token.type.startsWith('ordered') };\n case 'link': {\n const attrs = Object.fromEntries(token.attrs);\n return { href: attrs.href };\n }\n case 'image': {\n const attrs = Object.fromEntries(token.attrs);\n return { alt: token.content, src: attrs.src };\n }\n case 'text':\n case 'code':\n return { content: (token.meta || {}).variable || token.content };\n case 'fence': {\n const [language] = token.info.split(' ', 1);\n return language === ''\n ? { content: token.content }\n : { content: token.content, language };\n }\n default:\n return {};\n }\n}\n\nfunction handleToken(\n token: Token,\n nodes: Node[],\n file?: string,\n inlineParent?: Node\n) {\n if (token.type === 'frontmatter') {\n nodes[0].attributes.frontmatter = token.content;\n return;\n }\n\n if (token.hidden || (token.type === 'text' && token.content === '')) return;\n\n const errors = token.errors || [];\n const parent = nodes[nodes.length - 1];\n const { tag, attributes, error } = token.meta || {};\n\n if (token.type === 'annotation') {\n if (inlineParent) return annotate(inlineParent, attributes);\n\n return parent.errors.push({\n id: 'no-inline-annotations',\n level: 'error',\n message: `Can't apply inline annotations to '${parent.type}'`,\n });\n }\n\n let typeName = token.type.replace(/_(open|close)$/, '');\n if (mappings[typeName]) typeName = mappings[typeName];\n\n if (typeName === 'error') {\n const { message, location } = error;\n errors.push({ id: 'parse-error', level: 'critical', message, location });\n }\n\n if (token.nesting < 0) {\n if (parent.type === typeName) {\n if (parent.lines && token.map) parent.lines.push(...token.map);\n return nodes.pop();\n }\n\n errors.push({\n id: 'missing-opening',\n level: 'critical',\n message: `Node '${typeName}' is missing opening`,\n });\n }\n\n const attrs = handleAttrs(token, typeName);\n const node = new Node(typeName, attrs, undefined, tag || undefined);\n const { position = {} } = token;\n\n node.errors = errors;\n node.lines = token.map || parent.lines || [];\n node.location = {\n file,\n start: {\n line: node.lines[0],\n character: position.start,\n },\n end: {\n line: node.lines[1],\n character: position.end,\n },\n };\n\n if (inlineParent) node.inline = true;\n\n if (attributes && ['tag', 'fence', 'image'].includes(typeName))\n annotate(node, attributes);\n\n parent.push(node);\n if (token.nesting > 0) nodes.push(node);\n\n if (!Array.isArray(token.children)) return;\n\n inlineParent = parent;\n\n nodes.push(node);\n\n const isLeafNode = typeName === 'image';\n if (!isLeafNode) {\n for (const child of token.children)\n handleToken(child, nodes, file, inlineParent);\n }\n\n nodes.pop();\n}\n\nexport default function parser(tokens: Token[], file?: string) {\n const doc = new Node('document');\n const nodes = [doc];\n\n for (const token of tokens) handleToken(token, nodes, file);\n\n if (nodes.length > 1)\n for (const node of nodes.slice(1))\n node.errors.push({\n id: 'missing-closing',\n level: 'critical',\n message: `Node '${node.tag || node.type}' is missing closing`,\n });\n\n for (const transform of transforms) transform(doc);\n\n return doc;\n}\n", "import type { Schema } from './types';\nimport Tag from './ast/tag';\n\nexport const document: Schema = {\n render: 'article',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n frontmatter: { render: false },\n },\n};\n\nexport const heading: Schema = {\n children: ['inline'],\n attributes: {\n level: { type: Number, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n `h${node.attributes['level']}`,\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const paragraph: Schema = {\n render: 'p',\n children: ['inline'],\n};\n\nexport const image: Schema = {\n render: 'img',\n attributes: {\n src: { type: String, required: true },\n alt: { type: String },\n // width/height attributes will need to be to be implemented as an extension to markdown-it\n },\n};\n\nexport const fence: Schema = {\n render: 'pre',\n attributes: {\n content: { type: String, render: false, required: true },\n language: { type: String, render: 'data-language' },\n process: { type: Boolean, render: false, default: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n const children = node.children.length\n ? node.transformChildren(config)\n : [node.attributes.content];\n\n return new Tag('pre', attributes, children);\n },\n};\n\nexport const blockquote: Schema = {\n render: 'blockquote',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const item: Schema = {\n render: 'li',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const list: Schema = {\n children: ['item'],\n attributes: {\n ordered: { type: Boolean, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n node.attributes.ordered ? 'ol' : 'ul',\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const hr: Schema = {\n render: 'hr',\n};\n\nexport const table: Schema = {\n render: 'table',\n};\n\nexport const td: Schema = {\n render: 'td',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n colspan: { type: Number },\n rowspan: { type: Number },\n align: { type: String },\n },\n};\n\nexport const th: Schema = {\n render: 'th',\n attributes: {\n width: { type: Number },\n align: { type: String },\n },\n};\n\nexport const tr: Schema = {\n render: 'tr',\n children: ['th', 'td'],\n};\n\nexport const tbody: Schema = {\n render: 'tbody',\n children: ['tr', 'tag'],\n};\n\nexport const thead: Schema = {\n render: 'thead',\n children: ['tr'],\n};\n\nexport const strong: Schema = {\n render: 'strong',\n children: ['em', 's', 'link', 'code', 'text', 'tag'],\n};\n\nexport const em: Schema = {\n render: 'em',\n children: ['strong', 's', 'link', 'code', 'text', 'tag'],\n};\n\nexport const s: Schema = {\n render: 's',\n children: ['strong', 'em', 'link', 'code', 'text', 'tag'],\n};\n\nexport const inline: Schema = {\n children: [\n 'strong',\n 'em',\n 's',\n 'code',\n 'text',\n 'tag',\n 'link',\n 'image',\n 'hardbreak',\n 'softbreak',\n ],\n};\n\nexport const link: Schema = {\n render: 'a',\n children: ['strong', 'em', 's', 'code', 'text', 'tag'],\n attributes: {\n href: { type: String, required: true },\n title: { type: String },\n },\n};\n\nexport const code: Schema = {\n render: 'code',\n attributes: {\n content: { type: String, render: false, required: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n return new Tag('code', attributes, [node.attributes.content]);\n },\n};\n\nexport const text: Schema = {\n attributes: {\n content: { type: String, required: true },\n },\n transform(node) {\n return node.attributes.content;\n },\n};\n\nexport const hardbreak: Schema = {\n render: 'br',\n};\n\nexport const softbreak: Schema = {\n transform(_node, _config) {\n return ' ';\n },\n};\n\nexport const error = {};\n", "import type { Node, Schema, Value } from '../types';\n\ntype Condition = { condition: Value; children: Node[] };\n\nexport function truthy(value: any) {\n return value !== false && value !== undefined && value !== null;\n}\n\nfunction renderConditions(node: Node) {\n const conditions: Condition[] = [\n { condition: node.attributes.primary, children: [] },\n ];\n for (const child of node.children) {\n if (child.type === 'tag' && child.tag === 'else')\n conditions.push({\n condition:\n 'primary' in child.attributes ? child.attributes.primary : true,\n children: [],\n });\n else conditions[conditions.length - 1].children.push(child);\n }\n\n return conditions;\n}\n\nexport const tagIf: Schema = {\n attributes: {\n primary: { type: Object, render: false },\n },\n\n transform(node, config) {\n const conditions = renderConditions(node);\n for (const { condition, children } of conditions)\n if (truthy(condition))\n return children.flatMap((child) => child.transform(config));\n return [];\n },\n};\n\nexport const tagElse: Schema = {\n selfClosing: true,\n attributes: {\n primary: { type: Object, render: false },\n },\n};\n", "import type { Node, Config, Schema } from '../types';\n\nexport const partial: Schema = {\n selfClosing: true,\n attributes: {\n file: { type: String, render: false, required: true },\n variables: { type: Object, render: false },\n },\n\n transform(node: Node, config: Config) {\n const { partials = {} } = config;\n const { file, variables } = node.attributes;\n const partial: Node | Node[] = partials[file];\n\n if (!partial) return null;\n\n const scopedConfig = {\n ...config,\n variables: {\n ...config.variables,\n ...variables,\n ['$$partial:filename']: file,\n },\n };\n\n const transformChildren = (part: Node) =>\n part.resolve(scopedConfig).transformChildren(scopedConfig);\n\n return Array.isArray(partial)\n ? partial.flatMap(transformChildren)\n : transformChildren(partial);\n },\n};\n", "import type { Schema } from '../types';\n\nexport const table: Schema = {\n children: ['table'],\n};\n", "import { tagIf, tagElse } from './conditional';\nimport { partial } from './partial';\nimport { table } from './table';\n\nexport default {\n if: tagIf,\n else: tagElse,\n partial,\n table,\n};\n", "import type { ConfigFunction } from '../types';\nimport { truthy } from '../tags/conditional';\n\nconst and: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).every((x) => truthy(x));\n },\n};\n\nconst or: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).find((x) => truthy(x)) !== undefined;\n },\n};\n\nconst not: ConfigFunction = {\n parameters: {\n 0: { required: true },\n },\n\n transform(parameters) {\n return !truthy(parameters[0]);\n },\n};\n\nconst equals: ConfigFunction = {\n transform(parameters) {\n const values = Object.values(parameters);\n return values.every((v) => v === values[0]);\n },\n};\n\nconst debug: ConfigFunction = {\n transform(parameters) {\n return JSON.stringify(parameters[0], null, 2);\n },\n};\n\nconst defaultFn: ConfigFunction = {\n transform(parameters) {\n return parameters[0] === undefined ? parameters[1] : parameters[0];\n },\n};\n\nexport default { and, or, not, equals, default: defaultFn, debug };\n", "import MarkdownIt from 'markdown-it';\nimport type { RenderableTreeNodes } from '../types';\nconst { escapeHtml } = MarkdownIt().utils;\n\n// HTML elements that do not have a matching close tag\n// Defined in the HTML standard: https://html.spec.whatwg.org/#void-elements\nconst voidElements = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nexport default function render(node: RenderableTreeNodes): string {\n if (typeof node === 'string') return escapeHtml(node);\n\n if (Array.isArray(node)) return node.map(render).join('');\n\n if (node === null || typeof node !== 'object') return '';\n\n const { name, attributes, children = [] } = node;\n\n if (!name) return render(children);\n\n let output = `<${name}`;\n for (const [k, v] of Object.entries(attributes ?? {}))\n output += ` ${k}=\"${escapeHtml(String(v))}\"`;\n output += '>';\n\n if (voidElements.has(name)) return output;\n\n if (children.length) output += render(children);\n output += `</${name}>`;\n\n return output;\n}\n", "import type { ComponentType } from 'react';\n\ntype Component = ComponentType<unknown>;\n\nexport function tagName(\n name: string,\n components: Record<string, Component> | ((string: string) => Component)\n): string | Component {\n return typeof name !== 'string'\n ? 'Fragment'\n : name[0] !== name[0].toUpperCase()\n ? name\n : components instanceof Function\n ? components(name)\n : components[name];\n}\n", "import { tagName } from './shared';\nimport type { createElement, Fragment, ReactNode } from 'react';\nimport type { RenderableTreeNodes, Scalar } from '../../types';\n\ntype ReactShape = Readonly<{\n createElement: typeof createElement;\n Fragment: typeof Fragment;\n}>;\n\nexport default function dynamic(\n node: RenderableTreeNodes,\n React: ReactShape,\n { components = {} } = {}\n) {\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => deepRender(item));\n\n if (value.$$mdtype === 'Tag') return render(value);\n\n if (typeof value !== 'object') return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = deepRender(v);\n return output;\n }\n\n function render(node: RenderableTreeNodes): ReactNode {\n if (Array.isArray(node))\n return React.createElement(React.Fragment, null, ...node.map(render));\n\n if (node === null || typeof node !== 'object') return node;\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return React.createElement(\n tagName(name, components),\n Object.keys(attrs).length == 0 ? null : deepRender(attrs),\n ...children.map(render)\n );\n }\n\n return render(node);\n}\n", "import { tagName } from './shared';\nimport type { RenderableTreeNode, RenderableTreeNodes } from '../../types';\n\nfunction renderArray(children: RenderableTreeNode[]): string {\n return children.map(render).join(', ');\n}\n\nfunction deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return JSON.stringify(value);\n\n if (Array.isArray(value))\n return `[${value.map((item) => deepRender(item)).join(', ')}]`;\n\n if (value.$$mdtype === 'Tag') return render(value);\n\n if (typeof value !== 'object') return JSON.stringify(value);\n\n const object = Object.entries(value)\n .map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(': '))\n .join(', ');\n\n return `{${object}}`;\n}\n\nfunction render(node: RenderableTreeNodes): string {\n if (Array.isArray(node))\n return `React.createElement(React.Fragment, null, ${renderArray(node)})`;\n\n if (node === null || typeof node !== 'object') return JSON.stringify(node);\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return `React.createElement(\n tagName(${JSON.stringify(name)}, components),\n ${Object.keys(attrs).length == 0 ? 'null' : deepRender(attrs)},\n ${renderArray(children)})`;\n}\n\nexport default function reactStatic(node: RenderableTreeNodes): string {\n return `\n (({components = {}} = {}) => {\n ${tagName}\n return ${render(node)};\n })\n`;\n}\n", "import html from './html';\nimport react from './react/react';\nimport reactStatic from './react/static';\n\nexport default { html, react, reactStatic };\n", "import { globalAttributes } from './transformer';\nimport Ast from './ast/index';\n\nimport type {\n Node,\n Function,\n Config,\n SchemaAttribute,\n ValidationError,\n Value,\n} from './types';\n\nconst TypeMappings = {\n String: String,\n Number: Number,\n Array: Array,\n Object: Object,\n Boolean: Boolean,\n} as const;\n\ntype TypeParam = NonNullable<SchemaAttribute['type']>;\n\nexport function validateType(\n type: TypeParam,\n value: Value,\n config: Config\n): boolean | ValidationError[] {\n if (!type) return true;\n\n if (Ast.isFunction(value) && config.validation?.validateFunctions) {\n const schema = config.functions?.[value.name];\n return !schema?.returns\n ? true\n : Array.isArray(schema.returns)\n ? schema.returns.find((t) => t === type) !== undefined\n : schema.returns === type;\n }\n\n if (Ast.isAst(value)) return true;\n\n if (Array.isArray(type))\n return type.some((t) => validateType(t, value, config));\n\n if (typeof type === 'string') type = TypeMappings[type];\n\n if (typeof type === 'function') {\n const instance: any = new type();\n if (instance.validate) {\n return instance.validate(value, config);\n }\n }\n\n return value != null && value.constructor === type;\n}\n\nfunction typeToString(type: TypeParam): string {\n if (typeof type === 'string') return type;\n\n if (Array.isArray(type)) return type.map(typeToString).join(' | ');\n\n return type.name;\n}\n\nfunction validateFunction(fn: Function, config: Config): ValidationError[] {\n const schema = config.functions?.[fn.name];\n const errors: ValidationError[] = [];\n\n if (!schema)\n return [\n {\n id: 'function-undefined',\n level: 'critical',\n message: `Undefined function '${fn.name}'`,\n },\n ];\n\n if (schema.validate) errors.push(...schema.validate(fn, config));\n\n if (schema.parameters) {\n for (const [key, value] of Object.entries(fn.parameters)) {\n const param = schema.parameters?.[key];\n\n if (!param) {\n errors.push({\n id: 'parameter-undefined',\n level: 'error',\n message: `Invalid parameter '${key}'`,\n });\n\n continue;\n }\n\n if (Ast.isAst(value) && !Ast.isFunction(value)) continue;\n\n if (param.type) {\n const valid = validateType(param.type, value, config);\n if (valid === false) {\n errors.push({\n id: 'parameter-type-invalid',\n level: 'error',\n message: `Parameter '${key}' of '${\n fn.name\n }' must be type '${typeToString(param.type)}'`,\n });\n } else if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n }\n }\n\n for (const [key, { required }] of Object.entries(schema.parameters ?? {}))\n if (required && fn.parameters[key] === undefined)\n errors.push({\n id: 'parameter-missing-required',\n level: 'error',\n message: `Missing required parameter '${key}'`,\n });\n\n return errors;\n}\n\nexport default function validate(node: Node, config: Config) {\n const schema = node.findSchema(config);\n const errors: ValidationError[] = [...(node.errors || [])];\n\n if (!schema) {\n errors.push({\n id: node.tag ? 'tag-undefined' : 'node-undefined',\n level: 'critical',\n message: node.tag\n ? `Undefined tag '${node.tag}'`\n : `Undefined node '${node.type}'`,\n });\n\n return errors;\n }\n\n if (schema.selfClosing && node.children.length > 0)\n errors.push({\n id: 'tag-selfclosing-has-children',\n level: 'critical',\n message: `Tag '${node.tag}' should be self-closing`,\n });\n\n const attributes = {\n ...globalAttributes,\n ...schema.attributes,\n };\n\n if (schema.validate) errors.push(...schema.validate(node, config));\n\n for (let [key, value] of Object.entries(node.attributes)) {\n const attrib = attributes[key];\n\n if (!attrib) {\n errors.push({\n id: 'attribute-undefined',\n level: 'error',\n message: `Invalid attribute '${key}'`,\n });\n\n continue;\n }\n\n let { type, matches, errorLevel } = attrib;\n\n if (Ast.isAst(value)) {\n if (Ast.isFunction(value) && config.validation?.validateFunctions)\n errors.push(...validateFunction(value, config));\n else continue;\n }\n\n value = value as string;\n if (key === 'id' && value.match(/^[0-9]/))\n errors.push({\n id: 'attribute-value-invalid',\n level: 'error',\n message: 'The ID attribute must not start with a number',\n });\n\n if (type) {\n const valid = validateType(type, value, config);\n if (valid === false) {\n errors.push({\n id: 'attribute-type-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must be type '${typeToString(type)}'`,\n });\n }\n if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n\n if (typeof matches === 'function') matches = matches(config);\n\n if (Array.isArray(matches) && !matches.includes(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match one of ${JSON.stringify(\n matches\n )}`,\n });\n\n if (matches instanceof RegExp && !matches.test(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match ${matches}`,\n });\n }\n\n for (const [key, { required }] of Object.entries(attributes))\n if (required && node.attributes[key] === undefined)\n errors.push({\n id: 'attribute-missing-required',\n level: 'error',\n message: `Missing required attribute '${key}'`,\n });\n\n for (const { type } of node.children) {\n if (schema.children && type !== 'error' && !schema.children.includes(type))\n errors.push({\n id: 'child-invalid',\n level: 'warning',\n message: `Can't nest '${type}' in '${node.tag || node.type}'`,\n });\n }\n\n return errors;\n}\n"],
370+- "mappings": "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",
371++ "sources": ["../node_modules/markdown-it/lib/common/entities.js", "../node_modules/uc.micro/categories/P/regex.js", "../node_modules/mdurl/encode.js", "../node_modules/mdurl/decode.js", "../node_modules/mdurl/format.js", "../node_modules/mdurl/parse.js", "../node_modules/mdurl/index.js", "../node_modules/uc.micro/properties/Any/regex.js", "../node_modules/uc.micro/categories/Cc/regex.js", "../node_modules/uc.micro/categories/Cf/regex.js", "../node_modules/uc.micro/categories/Z/regex.js", "../node_modules/uc.micro/index.js", "../node_modules/markdown-it/lib/common/utils.js", "../node_modules/markdown-it/lib/helpers/parse_link_label.js", "../node_modules/markdown-it/lib/helpers/parse_link_destination.js", "../node_modules/markdown-it/lib/helpers/parse_link_title.js", "../node_modules/markdown-it/lib/helpers/index.js", "../node_modules/markdown-it/lib/renderer.js", "../node_modules/markdown-it/lib/ruler.js", "../node_modules/markdown-it/lib/rules_core/normalize.js", "../node_modules/markdown-it/lib/rules_core/block.js", "../node_modules/markdown-it/lib/rules_core/inline.js", "../node_modules/markdown-it/lib/rules_core/linkify.js", "../node_modules/markdown-it/lib/rules_core/replacements.js", "../node_modules/markdown-it/lib/rules_core/smartquotes.js", "../node_modules/markdown-it/lib/token.js", "../node_modules/markdown-it/lib/rules_core/state_core.js", "../node_modules/markdown-it/lib/parser_core.js", "../node_modules/markdown-it/lib/rules_block/table.js", "../node_modules/markdown-it/lib/rules_block/code.js", "../node_modules/markdown-it/lib/rules_block/fence.js", "../node_modules/markdown-it/lib/rules_block/blockquote.js", "../node_modules/markdown-it/lib/rules_block/hr.js", "../node_modules/markdown-it/lib/rules_block/list.js", "../node_modules/markdown-it/lib/rules_block/reference.js", "../node_modules/markdown-it/lib/common/html_blocks.js", "../node_modules/markdown-it/lib/common/html_re.js", "../node_modules/markdown-it/lib/rules_block/html_block.js", "../node_modules/markdown-it/lib/rules_block/heading.js", "../node_modules/markdown-it/lib/rules_block/lheading.js", "../node_modules/markdown-it/lib/rules_block/paragraph.js", "../node_modules/markdown-it/lib/rules_block/state_block.js", "../node_modules/markdown-it/lib/parser_block.js", "../node_modules/markdown-it/lib/rules_inline/text.js", "../node_modules/markdown-it/lib/rules_inline/newline.js", "../node_modules/markdown-it/lib/rules_inline/escape.js", "../node_modules/markdown-it/lib/rules_inline/backticks.js", "../node_modules/markdown-it/lib/rules_inline/strikethrough.js", "../node_modules/markdown-it/lib/rules_inline/emphasis.js", "../node_modules/markdown-it/lib/rules_inline/link.js", "../node_modules/markdown-it/lib/rules_inline/image.js", "../node_modules/markdown-it/lib/rules_inline/autolink.js", "../node_modules/markdown-it/lib/rules_inline/html_inline.js", "../node_modules/markdown-it/lib/rules_inline/entity.js", "../node_modules/markdown-it/lib/rules_inline/balance_pairs.js", "../node_modules/markdown-it/lib/rules_inline/text_collapse.js", "../node_modules/markdown-it/lib/rules_inline/state_inline.js", "../node_modules/markdown-it/lib/parser_inline.js", "../node_modules/linkify-it/lib/re.js", "../node_modules/linkify-it/index.js", "../node_modules/punycode/punycode.js", "../node_modules/markdown-it/lib/presets/default.js", "../node_modules/markdown-it/lib/presets/zero.js", "../node_modules/markdown-it/lib/presets/commonmark.js", "../node_modules/markdown-it/lib/index.js", "../src/grammar/tag.js", "../node_modules/markdown-it-sup/index.js", "../node_modules/markdown-it/index.js", "../index.ts", "../src/tokenizer/index.ts", "../src/utils.ts", "../src/ast/variable.ts", "../src/ast/base.ts", "../src/ast/function.ts", "../src/tokenizer/plugins/annotations.ts", "../src/tokenizer/plugins/frontmatter.ts", "../src/ast/tag.ts", "../src/schema-types/class.ts", "../src/transformer.ts", "../src/ast/node.ts", "../src/ast/index.ts", "../src/transforms/table.ts", "../src/transforms/index.ts", "../src/parser.ts", "../src/schema.ts", "../src/ast/raw.ts", "../src/tags/conditional.ts", "../src/tags/partial.ts", "../src/tags/table.ts", "../src/tags/index.ts", "../src/functions/index.ts", "../src/renderers/html.ts", "../src/renderers/react/shared.ts", "../src/renderers/react/react.ts", "../src/renderers/react/static.ts", "../src/renderers/index.ts", "../src/validator.ts"],
372++ "sourcesContent": ["// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/lib/maps/entities.json');\n", "module.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/", "\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n var i, ch, cache = encodeCache[exclude];\n if (cache) { return cache; }\n\n cache = encodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch);\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n }\n }\n\n for (i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i];\n }\n\n return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n var i, l, code, nextCode, cache,\n result = '';\n\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude;\n exclude = encode.defaultChars;\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true;\n }\n\n cache = getEncodeCache(exclude);\n\n for (i = 0, l = string.length; i < l; i++) {\n code = string.charCodeAt(i);\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3);\n i += 2;\n continue;\n }\n }\n\n if (code < 128) {\n result += cache[code];\n continue;\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n nextCode = string.charCodeAt(i + 1);\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1]);\n i++;\n continue;\n }\n }\n result += '%EF%BF%BD';\n continue;\n }\n\n result += encodeURIComponent(string[i]);\n }\n\n return result;\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n", "\n'use strict';\n\n\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n var i, ch, cache = decodeCache[exclude];\n if (cache) { return cache; }\n\n cache = decodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n cache.push(ch);\n }\n\n for (i = 0; i < exclude.length; i++) {\n ch = exclude.charCodeAt(i);\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n }\n\n return cache;\n}\n\n\n// Decode percent-encoded string.\n//\nfunction decode(string, exclude) {\n var cache;\n\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars;\n }\n\n cache = getDecodeCache(exclude);\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {\n var i, l, b1, b2, b3, b4, chr,\n result = '';\n\n for (i = 0, l = seq.length; i < l; i += 3) {\n b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n if (b1 < 0x80) {\n result += cache[b1];\n continue;\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n if ((b2 & 0xC0) === 0x80) {\n chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F);\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 3;\n continue;\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F);\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 6;\n continue;\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F);\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd';\n } else {\n chr -= 0x10000;\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n }\n\n i += 9;\n continue;\n }\n }\n\n result += '\\ufffd';\n }\n\n return result;\n });\n}\n\n\ndecode.defaultChars = ';/?:@&=+$,#';\ndecode.componentChars = '';\n\n\nmodule.exports = decode;\n", "\n'use strict';\n\n\nmodule.exports = function format(url) {\n var result = '';\n\n result += url.protocol || '';\n result += url.slashes ? '//' : '';\n result += url.auth ? url.auth + '@' : '';\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']';\n } else {\n result += url.hostname || '';\n }\n\n result += url.port ? ':' + url.port : '';\n result += url.pathname || '';\n result += url.search || '';\n result += url.hash || '';\n\n return result;\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\n'use strict';\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.pathname = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = [ '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t' ],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = [ '{', '}', '|', '\\\\', '^', '`' ].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = [ '\\'' ].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape),\n hostEndingChars = [ '/', '?', '#' ],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n /* eslint-disable no-script-url */\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n };\n /* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n if (url && url instanceof Url) { return url; }\n\n var u = new Url();\n u.parse(url, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, slashesDenoteHost) {\n var i, l, lowerProto, hec, slashes,\n rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n lowerProto = proto.toLowerCase();\n this.protocol = proto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = auth;\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length;\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd--; }\n var host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost(host);\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) { continue; }\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n }\n }\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n rest = rest.slice(0, qm);\n }\n if (rest) { this.pathname = rest; }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '';\n }\n\n return this;\n};\n\nUrl.prototype.parseHost = function(host) {\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) { this.hostname = host; }\n};\n\nmodule.exports = urlParse;\n", "'use strict';\n\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse = require('./parse');\n", "module.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/", "module.exports=/[\\0-\\x1F\\x7F-\\x9F]/", "module.exports=/[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/", "module.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/", "'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc = require('./categories/Cc/regex');\nexports.Cf = require('./categories/Cf/regex');\nexports.P = require('./categories/P/regex');\nexports.Z = require('./categories/Z/regex');\n", "// Utilities\n//\n'use strict';\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object');\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n /*eslint no-bitwise:0*/\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) { return false; }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false; }\n if (c === 0x0B) { return false; }\n if (c >= 0x0E && c <= 0x1F) { return false; }\n if (c >= 0x7F && c <= 0x9F) { return false; }\n // out of range\n if (c > 0x10FFFF) { return false; }\n return true;\n}\n\nfunction fromCodePoint(c) {\n /*eslint no-bitwise:0*/\n if (c > 0xffff) {\n c -= 0x10000;\n var surrogate1 = 0xd800 + (c >> 10),\n surrogate2 = 0xdc00 + (c & 0x3ff);\n\n return String.fromCharCode(surrogate1, surrogate2);\n }\n return String.fromCharCode(c);\n}\n\n\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\n\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n var code = 0;\n\n if (has(entities, name)) {\n return entities[name];\n }\n\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n code = name[1].toLowerCase() === 'x' ?\n parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code);\n }\n }\n\n return match;\n}\n\n/*function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n if (str.indexOf('\\\\') < 0) { return str; }\n return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str; }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped; }\n return replaceEntityPattern(match, entity);\n });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;'\n};\n\nfunction replaceUnsafeChar(ch) {\n return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n }\n return str;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isSpace(code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true;\n }\n return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n if (code >= 0x2000 && code <= 0x200A) { return true; }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true;\n }\n return false;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n return UNICODE_PUNCT_RE.test(ch);\n}\n\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n switch (ch) {\n case 0x21/* ! */:\n case 0x22/* \" */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x27/* ' */:\n case 0x28/* ( */:\n case 0x29/* ) */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2C/* , */:\n case 0x2D/* - */:\n case 0x2E/* . */:\n case 0x2F/* / */:\n case 0x3A/* : */:\n case 0x3B/* ; */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x3F/* ? */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7C/* | */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ');\n\n // In node v10 '\u1E9E'.toLowerCase() === '\u1E7E', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('\u1E9E'.toLowerCase() === '\u1E7E') {\n str = str.replace(/\u1E9E/g, '\u00DF');\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // \u0130, \u03F4, \u1E9E, \u2126, \u212A, \u212B - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (\u0398), U+03f4 (\u03F4) and lowercase U+03b8 (\u03B8), U+03d1 (\u03D1)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change \u03D1 (it's already lowercase),\n // and .toUpperCase() doesn't change \u03F4 (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib = {};\nexports.lib.mdurl = require('mdurl');\nexports.lib.ucmicro = require('uc.micro');\n\nexports.assign = assign;\nexports.isString = isString;\nexports.has = has;\nexports.unescapeMd = unescapeMd;\nexports.unescapeAll = unescapeAll;\nexports.isValidEntityCode = isValidEntityCode;\nexports.fromCodePoint = fromCodePoint;\n// exports.replaceEntities = replaceEntities;\nexports.escapeHtml = escapeHtml;\nexports.arrayReplaceAt = arrayReplaceAt;\nexports.isSpace = isSpace;\nexports.isWhiteSpace = isWhiteSpace;\nexports.isMdAsciiPunct = isMdAsciiPunct;\nexports.isPunctChar = isPunctChar;\nexports.escapeRE = escapeRE;\nexports.normalizeReference = normalizeReference;\n", "// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n var level, found, marker, prevPos,\n labelEnd = -1,\n max = state.posMax,\n oldPos = state.pos;\n\n state.pos = start + 1;\n level = 1;\n\n while (state.pos < max) {\n marker = state.src.charCodeAt(state.pos);\n if (marker === 0x5D /* ] */) {\n level--;\n if (level === 0) {\n found = true;\n break;\n }\n }\n\n prevPos = state.pos;\n state.md.inline.skipToken(state);\n if (marker === 0x5B /* [ */) {\n if (prevPos === state.pos - 1) {\n // increase level if we find text `[`, which is not a part of any token\n level++;\n } else if (disableNested) {\n state.pos = oldPos;\n return -1;\n }\n }\n }\n\n if (found) {\n labelEnd = state.pos;\n }\n\n // restore old state\n state.pos = oldPos;\n\n return labelEnd;\n};\n", "// Parse link destination\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkDestination(str, pos, max) {\n var code, level,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (str.charCodeAt(pos) === 0x3C /* < */) {\n pos++;\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === 0x0A /* \\n */) { return result; }\n if (code === 0x3C /* < */) { return result; }\n if (code === 0x3E /* > */) {\n result.pos = pos + 1;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n }\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n pos++;\n }\n\n // no closing '>'\n return result;\n }\n\n // this should be ... } else { ... branch\n\n level = 0;\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x20) { break; }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7F) { break; }\n\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) { break; }\n pos += 2;\n continue;\n }\n\n if (code === 0x28 /* ( */) {\n level++;\n if (level > 32) { return result; }\n }\n\n if (code === 0x29 /* ) */) {\n if (level === 0) { break; }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos) { return result; }\n if (level !== 0) { return result; }\n\n result.str = unescapeAll(str.slice(start, pos));\n result.lines = lines;\n result.pos = pos;\n result.ok = true;\n return result;\n};\n", "// Parse link title\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkTitle(str, pos, max) {\n var code,\n marker,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (pos >= max) { return result; }\n\n marker = str.charCodeAt(pos);\n\n if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; }\n\n pos++;\n\n // if opening marker is \"(\", switch it to closing marker \")\"\n if (marker === 0x28) { marker = 0x29; }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === marker) {\n result.pos = pos + 1;\n result.lines = lines;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n } else if (code === 0x28 /* ( */ && marker === 0x29 /* ) */) {\n return result;\n } else if (code === 0x0A) {\n lines++;\n } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos++;\n if (str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n\n pos++;\n }\n\n return result;\n};\n", "// Just a shortcut for bulk export\n'use strict';\n\n\nexports.parseLinkLabel = require('./parse_link_label');\nexports.parseLinkDestination = require('./parse_link_destination');\nexports.parseLinkTitle = require('./parse_link_title');\n", "/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\n\nvar assign = require('./common/utils').assign;\nvar unescapeAll = require('./common/utils').unescapeAll;\nvar escapeHtml = require('./common/utils').escapeHtml;\n\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar default_rules = {};\n\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<code' + slf.renderAttrs(token) + '>' +\n escapeHtml(tokens[idx].content) +\n '</code>';\n};\n\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<pre' + slf.renderAttrs(token) + '><code>' +\n escapeHtml(tokens[idx].content) +\n '</code></pre>\\n';\n};\n\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n var token = tokens[idx],\n info = token.info ? unescapeAll(token.info).trim() : '',\n langName = '',\n langAttrs = '',\n highlighted, i, arr, tmpAttrs, tmpToken;\n\n if (info) {\n arr = info.split(/(\\s+)/g);\n langName = arr[0];\n langAttrs = arr.slice(2).join('');\n }\n\n if (options.highlight) {\n highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n } else {\n highlighted = escapeHtml(token.content);\n }\n\n if (highlighted.indexOf('<pre') === 0) {\n return highlighted + '\\n';\n }\n\n // If language exists, inject class gently, without modifying original token.\n // May be, one day we will add .deepClone() for token and simplify this part, but\n // now we prefer to keep things local.\n if (info) {\n i = token.attrIndex('class');\n tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\n if (i < 0) {\n tmpAttrs.push([ 'class', options.langPrefix + langName ]);\n } else {\n tmpAttrs[i] = tmpAttrs[i].slice();\n tmpAttrs[i][1] += ' ' + options.langPrefix + langName;\n }\n\n // Fake token just to render attributes\n tmpToken = {\n attrs: tmpAttrs\n };\n\n return '<pre><code' + slf.renderAttrs(tmpToken) + '>'\n + highlighted\n + '</code></pre>\\n';\n }\n\n\n return '<pre><code' + slf.renderAttrs(token) + '>'\n + highlighted\n + '</code></pre>\\n';\n};\n\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n // should be placed on proper position for tests.\n //\n // Replace content with actual value\n\n token.attrs[token.attrIndex('alt')][1] =\n slf.renderInlineAsText(token.children, options, env);\n\n return slf.renderToken(tokens, idx, options);\n};\n\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n return options.xhtmlOut ? '<br />\\n' : '<br>\\n';\n};\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n';\n};\n\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n return escapeHtml(tokens[idx].content);\n};\n\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\n\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer() {\n\n /**\n * Renderer#rules -> Object\n *\n * Contains render rules for tokens. Can be updated and extended.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.renderer.rules.strong_open = function () { return '<b>'; };\n * md.renderer.rules.strong_close = function () { return '</b>'; };\n *\n * var result = md.renderInline(...);\n * ```\n *\n * Each rule is called as independent static function with fixed signature:\n *\n * ```javascript\n * function my_token_render(tokens, idx, options, env, renderer) {\n * // ...\n * return renderedHTML;\n * }\n * ```\n *\n * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n * for more details and examples.\n **/\n this.rules = assign({}, default_rules);\n}\n\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n var i, l, result;\n\n if (!token.attrs) { return ''; }\n\n result = '';\n\n for (i = 0, l = token.attrs.length; i < l; i++) {\n result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n }\n\n return result;\n};\n\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n var nextToken,\n result = '',\n needLf = false,\n token = tokens[idx];\n\n // Tight list paragraphs\n if (token.hidden) {\n return '';\n }\n\n // Insert a newline between hidden paragraph and subsequent opening\n // block-level tag.\n //\n // For example, here we should insert a newline before blockquote:\n // - a\n // >\n //\n if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n result += '\\n';\n }\n\n // Add token name, e.g. `<img`\n result += (token.nesting === -1 ? '</' : '<') + token.tag;\n\n // Encode attributes, e.g. `<img src=\"foo\"`\n result += this.renderAttrs(token);\n\n // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n if (token.nesting === 0 && options.xhtmlOut) {\n result += ' /';\n }\n\n // Check if we need to add a newline after this tag\n if (token.block) {\n needLf = true;\n\n if (token.nesting === 1) {\n if (idx + 1 < tokens.length) {\n nextToken = tokens[idx + 1];\n\n if (nextToken.type === 'inline' || nextToken.hidden) {\n // Block-level tag containing an inline tag.\n //\n needLf = false;\n\n } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n //\n needLf = false;\n }\n }\n }\n }\n\n result += needLf ? '>\\n' : '>';\n\n return result;\n};\n\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n var type,\n result = '',\n rules = this.rules;\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options);\n }\n }\n\n return result;\n};\n\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n var result = '';\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n if (tokens[i].type === 'text') {\n result += tokens[i].content;\n } else if (tokens[i].type === 'image') {\n result += this.renderInlineAsText(tokens[i].children, options, env);\n } else if (tokens[i].type === 'softbreak') {\n result += '\\n';\n }\n }\n\n return result;\n};\n\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n var i, len, type,\n result = '',\n rules = this.rules;\n\n for (i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (type === 'inline') {\n result += this.renderInline(tokens[i].children, options, env);\n } else if (typeof rules[type] !== 'undefined') {\n result += rules[tokens[i].type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options, env);\n }\n }\n\n return result;\n};\n\nmodule.exports = Renderer;\n", "/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = [];\n\n // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n this.__cache__ = null;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n for (var i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i;\n }\n }\n return -1;\n};\n\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n var self = this;\n var chains = [ '' ];\n\n // collect unique names\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName);\n }\n });\n });\n\n self.__cache__ = {};\n\n chains.forEach(function (chain) {\n self.__cache__[chain] = [];\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n if (chain && rule.alt.indexOf(chain) < 0) { return; }\n\n self.__cache__[chain].push(rule.fn);\n });\n });\n};\n\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n var index = this.__find__(name);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + name); }\n\n this.__rules__[index].fn = fn;\n this.__rules__[index].alt = opt.alt || [];\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n var index = this.__find__(beforeName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); }\n\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n var index = this.__find__(afterName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + afterName); }\n\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n var opt = options || {};\n\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and enable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = true;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n this.__rules__.forEach(function (rule) { rule.enabled = false; });\n\n this.enable(list, ignoreInvalid);\n};\n\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and disable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = false;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__();\n }\n\n // Chain can be empty, if rules disabled. But we still have to return Array.\n return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;\n", "// Normalize input string\n\n'use strict';\n\n\n// https://spec.commonmark.org/0.29/#line-ending\nvar NEWLINES_RE = /\\r\\n?|\\n/g;\nvar NULL_RE = /\\0/g;\n\n\nmodule.exports = function normalize(state) {\n var str;\n\n // Normalize newlines\n str = state.src.replace(NEWLINES_RE, '\\n');\n\n // Replace NULL characters\n str = str.replace(NULL_RE, '\\uFFFD');\n\n state.src = str;\n};\n", "'use strict';\n\n\nmodule.exports = function block(state) {\n var token;\n\n if (state.inlineMode) {\n token = new state.Token('inline', '', 0);\n token.content = state.src;\n token.map = [ 0, 1 ];\n token.children = [];\n state.tokens.push(token);\n } else {\n state.md.block.parse(state.src, state.md, state.env, state.tokens);\n }\n};\n", "'use strict';\n\nmodule.exports = function inline(state) {\n var tokens = state.tokens, tok, i, l;\n\n // Parse inlines\n for (i = 0, l = tokens.length; i < l; i++) {\n tok = tokens[i];\n if (tok.type === 'inline') {\n state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n }\n }\n};\n", "// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\n\nfunction isLinkOpen(str) {\n return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n return /^<\\/a\\s*>/i.test(str);\n}\n\n\nmodule.exports = function linkify(state) {\n var i, j, l, tokens, token, currentToken, nodes, ln, text, pos, lastPos,\n level, htmlLinkLevel, url, fullUrl, urlText,\n blockTokens = state.tokens,\n links;\n\n if (!state.md.options.linkify) { return; }\n\n for (j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline' ||\n !state.md.linkify.pretest(blockTokens[j].content)) {\n continue;\n }\n\n tokens = blockTokens[j].children;\n\n htmlLinkLevel = 0;\n\n // We scan from the end, to keep position when new tags added.\n // Use reversed logic in links start/end match\n for (i = tokens.length - 1; i >= 0; i--) {\n currentToken = tokens[i];\n\n // Skip content of markdown links\n if (currentToken.type === 'link_close') {\n i--;\n while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n i--;\n }\n continue;\n }\n\n // Skip content of html tag links\n if (currentToken.type === 'html_inline') {\n if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n htmlLinkLevel--;\n }\n if (isLinkClose(currentToken.content)) {\n htmlLinkLevel++;\n }\n }\n if (htmlLinkLevel > 0) { continue; }\n\n if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n\n text = currentToken.content;\n links = state.md.linkify.match(text);\n\n // Now split string to nodes\n nodes = [];\n level = currentToken.level;\n lastPos = 0;\n\n for (ln = 0; ln < links.length; ln++) {\n\n url = links[ln].url;\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { continue; }\n\n urlText = links[ln].text;\n\n // Linkifier might send raw hostnames like \"example.com\", where url\n // starts with domain name. So we prepend http:// in those cases,\n // and remove it afterwards.\n //\n if (!links[ln].schema) {\n urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '');\n } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '');\n } else {\n urlText = state.md.normalizeLinkText(urlText);\n }\n\n pos = links[ln].index;\n\n if (pos > lastPos) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos, pos);\n token.level = level;\n nodes.push(token);\n }\n\n token = new state.Token('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.level = level++;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n token = new state.Token('text', '', 0);\n token.content = urlText;\n token.level = level;\n nodes.push(token);\n\n token = new state.Token('link_close', 'a', -1);\n token.level = --level;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n lastPos = links[ln].lastIndex;\n }\n if (lastPos < text.length) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos);\n token.level = level;\n nodes.push(token);\n }\n\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n }\n }\n }\n};\n", "// Simple typographic replacements\n//\n// (c) (C) \u2192 \u00A9\n// (tm) (TM) \u2192 \u2122\n// (r) (R) \u2192 \u00AE\n// +- \u2192 \u00B1\n// (p) (P) -> \u00A7\n// ... \u2192 \u2026 (also ?.... \u2192 ?.., !.... \u2192 !..)\n// ???????? \u2192 ???, !!!!! \u2192 !!!, `,,` \u2192 `,`\n// -- \u2192 &ndash;, --- \u2192 &mdash;\n//\n'use strict';\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> \u00BD, \u00BC, \u00BE\n// - miltiplication 2 x 4 -> 2 \u00D7 4\n\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r|p)\\)/i;\n\nvar SCOPED_ABBR_RE = /\\((c|tm|r|p)\\)/ig;\nvar SCOPED_ABBR = {\n c: '\u00A9',\n r: '\u00AE',\n p: '\u00A7',\n tm: '\u2122'\n};\n\nfunction replaceFn(match, name) {\n return SCOPED_ABBR[name.toLowerCase()];\n}\n\nfunction replace_scoped(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\nfunction replace_rare(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n if (RARE_RE.test(token.content)) {\n token.content = token.content\n .replace(/\\+-/g, '\u00B1')\n // .., ..., ....... -> \u2026\n // but ?..... & !..... -> ?.. & !..\n .replace(/\\.{2,}/g, '\u2026').replace(/([?!])\u2026/g, '$1..')\n .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n // em-dash\n .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n // en-dash\n .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013');\n }\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\n\nmodule.exports = function replace(state) {\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline') { continue; }\n\n if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n replace_scoped(state.tokens[blkIdx].children);\n }\n\n if (RARE_RE.test(state.tokens[blkIdx].content)) {\n replace_rare(state.tokens[blkIdx].children);\n }\n\n }\n};\n", "// Convert straight quotation marks to typographic ones\n//\n'use strict';\n\n\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = '\\u2019'; /* \u2019 */\n\n\nfunction replaceAt(str, index, ch) {\n return str.substr(0, index) + ch + str.substr(index + 1);\n}\n\nfunction process_inlines(tokens, state) {\n var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar,\n isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace,\n canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;\n\n stack = [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n\n thisLevel = tokens[i].level;\n\n for (j = stack.length - 1; j >= 0; j--) {\n if (stack[j].level <= thisLevel) { break; }\n }\n stack.length = j + 1;\n\n if (token.type !== 'text') { continue; }\n\n text = token.content;\n pos = 0;\n max = text.length;\n\n /*eslint no-labels:0,block-scoped-var:0*/\n OUTER:\n while (pos < max) {\n QUOTE_RE.lastIndex = pos;\n t = QUOTE_RE.exec(text);\n if (!t) { break; }\n\n canOpen = canClose = true;\n pos = t.index + 1;\n isSingle = (t[0] === \"'\");\n\n // Find previous character,\n // default to space if it's the beginning of the line\n //\n lastChar = 0x20;\n\n if (t.index - 1 >= 0) {\n lastChar = text.charCodeAt(t.index - 1);\n } else {\n for (j = i - 1; j >= 0; j--) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n break;\n }\n }\n\n // Find next character,\n // default to space if it's the end of the line\n //\n nextChar = 0x20;\n\n if (pos < max) {\n nextChar = text.charCodeAt(pos);\n } else {\n for (j = i + 1; j < tokens.length; j++) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n nextChar = tokens[j].content.charCodeAt(0);\n break;\n }\n }\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n canOpen = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n canOpen = false;\n }\n }\n\n if (isLastWhiteSpace) {\n canClose = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n canClose = false;\n }\n }\n\n if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n // special case: 1\"\" - count first quote as an inch\n canClose = canOpen = false;\n }\n }\n\n if (canOpen && canClose) {\n // Replace quotes in the middle of punctuation sequence, but not\n // in the middle of the words, i.e.:\n //\n // 1. foo \" bar \" baz - not replaced\n // 2. foo-\"-bar-\"-baz - replaced\n // 3. foo\"bar\"baz - not replaced\n //\n canOpen = isLastPunctChar;\n canClose = isNextPunctChar;\n }\n\n if (!canOpen && !canClose) {\n // middle of word\n if (isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n continue;\n }\n\n if (canClose) {\n // this could be a closing quote, rewind the stack to get a match\n for (j = stack.length - 1; j >= 0; j--) {\n item = stack[j];\n if (stack[j].level < thisLevel) { break; }\n if (item.single === isSingle && stack[j].level === thisLevel) {\n item = stack[j];\n\n if (isSingle) {\n openQuote = state.md.options.quotes[2];\n closeQuote = state.md.options.quotes[3];\n } else {\n openQuote = state.md.options.quotes[0];\n closeQuote = state.md.options.quotes[1];\n }\n\n // replace token.content *before* tokens[item.token].content,\n // because, if they are pointing at the same token, replaceAt\n // could mess up indices when quote length != 1\n token.content = replaceAt(token.content, t.index, closeQuote);\n tokens[item.token].content = replaceAt(\n tokens[item.token].content, item.pos, openQuote);\n\n pos += closeQuote.length - 1;\n if (item.token === i) { pos += openQuote.length - 1; }\n\n text = token.content;\n max = text.length;\n\n stack.length = j;\n continue OUTER;\n }\n }\n }\n\n if (canOpen) {\n stack.push({\n token: i,\n pos: t.index,\n single: isSingle,\n level: thisLevel\n });\n } else if (canClose && isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n }\n }\n}\n\n\nmodule.exports = function smartquotes(state) {\n /*eslint max-depth:0*/\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline' ||\n !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n continue;\n }\n\n process_inlines(state.tokens[blkIdx].children, state);\n }\n};\n", "// Token class\n\n'use strict';\n\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type;\n\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n this.tag = tag;\n\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n this.attrs = null;\n\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n this.map = null;\n\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n this.nesting = nesting;\n\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n this.level = 0;\n\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n this.children = null;\n\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n this.content = '';\n\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n this.markup = '';\n\n /**\n * Token#info -> String\n *\n * Additional information:\n *\n * - Info string for \"fence\" tokens\n * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n **/\n this.info = '';\n\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n this.meta = null;\n\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n this.block = false;\n\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n this.hidden = false;\n}\n\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n var attrs, i, len;\n\n if (!this.attrs) { return -1; }\n\n attrs = this.attrs;\n\n for (i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) { return i; }\n }\n return -1;\n};\n\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n if (this.attrs) {\n this.attrs.push(attrData);\n } else {\n this.attrs = [ attrData ];\n }\n};\n\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n var idx = this.attrIndex(name),\n attrData = [ name, value ];\n\n if (idx < 0) {\n this.attrPush(attrData);\n } else {\n this.attrs[idx] = attrData;\n }\n};\n\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n var idx = this.attrIndex(name), value = null;\n if (idx >= 0) {\n value = this.attrs[idx][1];\n }\n return value;\n};\n\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n var idx = this.attrIndex(name);\n\n if (idx < 0) {\n this.attrPush([ name, value ]);\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n }\n};\n\n\nmodule.exports = Token;\n", "// Core state object\n//\n'use strict';\n\nvar Token = require('../token');\n\n\nfunction StateCore(src, md, env) {\n this.src = src;\n this.env = env;\n this.tokens = [];\n this.inlineMode = false;\n this.md = md; // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token;\n\n\nmodule.exports = StateCore;\n", "/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n [ 'normalize', require('./rules_core/normalize') ],\n [ 'block', require('./rules_core/block') ],\n [ 'inline', require('./rules_core/inline') ],\n [ 'linkify', require('./rules_core/linkify') ],\n [ 'replacements', require('./rules_core/replacements') ],\n [ 'smartquotes', require('./rules_core/smartquotes') ]\n];\n\n\n/**\n * new Core()\n **/\nfunction Core() {\n /**\n * Core#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of core rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n}\n\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n var i, l, rules;\n\n rules = this.ruler.getRules('');\n\n for (i = 0, l = rules.length; i < l; i++) {\n rules[i](state);\n }\n};\n\nCore.prototype.State = require('./rules_core/state_core');\n\n\nmodule.exports = Core;\n", "// GFM table, https://github.github.com/gfm/#tables-extension-\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction getLine(state, line) {\n var pos = state.bMarks[line] + state.tShift[line],\n max = state.eMarks[line];\n\n return state.src.substr(pos, max - pos);\n}\n\nfunction escapedSplit(str) {\n var result = [],\n pos = 0,\n max = str.length,\n ch,\n isEscaped = false,\n lastPos = 0,\n current = '';\n\n ch = str.charCodeAt(pos);\n\n while (pos < max) {\n if (ch === 0x7c/* | */) {\n if (!isEscaped) {\n // pipe separating cells, '|'\n result.push(current + str.substring(lastPos, pos));\n current = '';\n lastPos = pos + 1;\n } else {\n // escaped pipe, '\\|'\n current += str.substring(lastPos, pos - 1);\n lastPos = pos;\n }\n }\n\n isEscaped = (ch === 0x5c/* \\ */);\n pos++;\n\n ch = str.charCodeAt(pos);\n }\n\n result.push(current + str.substring(lastPos));\n\n return result;\n}\n\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n var ch, lineText, pos, i, l, nextLine, columns, columnCount, token,\n aligns, t, tableLines, tbodyLines, oldParentType, terminate,\n terminatorRules, firstCh, secondCh;\n\n // should have at least two lines\n if (startLine + 2 > endLine) { return false; }\n\n nextLine = startLine + 1;\n\n if (state.sCount[nextLine] < state.blkIndent) { return false; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { return false; }\n\n // first character of the second line should be '|', '-', ':',\n // and no other characters are allowed but spaces;\n // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n firstCh = state.src.charCodeAt(pos++);\n if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false; }\n\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n secondCh = state.src.charCodeAt(pos++);\n if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n return false;\n }\n\n // if first character is '-', then second character must not be a space\n // (due to parsing ambiguity with list)\n if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false; }\n\n while (pos < state.eMarks[nextLine]) {\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false; }\n\n pos++;\n }\n\n lineText = getLine(state, startLine + 1);\n\n columns = lineText.split('|');\n aligns = [];\n for (i = 0; i < columns.length; i++) {\n t = columns[i].trim();\n if (!t) {\n // allow empty columns before and after table, but not in between columns;\n // e.g. allow ` |---| `, disallow ` ---||--- `\n if (i === 0 || i === columns.length - 1) {\n continue;\n } else {\n return false;\n }\n }\n\n if (!/^:?-+:?$/.test(t)) { return false; }\n if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right');\n } else if (t.charCodeAt(0) === 0x3A/* : */) {\n aligns.push('left');\n } else {\n aligns.push('');\n }\n }\n\n lineText = getLine(state, startLine).trim();\n if (lineText.indexOf('|') === -1) { return false; }\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n // header row will define an amount of columns in the entire table,\n // and align row should be exactly the same (the rest of the rows can differ)\n columnCount = columns.length;\n if (columnCount === 0 || columnCount !== aligns.length) { return false; }\n\n if (silent) { return true; }\n\n oldParentType = state.parentType;\n state.parentType = 'table';\n\n // use 'blockquote' lists for termination because it's\n // the most similar to tables\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n token = state.push('table_open', 'table', 1);\n token.map = tableLines = [ startLine, 0 ];\n\n token = state.push('thead_open', 'thead', 1);\n token.map = [ startLine, startLine + 1 ];\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ startLine, startLine + 1 ];\n\n for (i = 0; i < columns.length; i++) {\n token = state.push('th_open', 'th', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i].trim();\n token.children = [];\n\n token = state.push('th_close', 'th', -1);\n }\n\n token = state.push('tr_close', 'tr', -1);\n token = state.push('thead_close', 'thead', -1);\n\n for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) { break; }\n lineText = getLine(state, nextLine).trim();\n if (!lineText) { break; }\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { break; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n if (nextLine === startLine + 2) {\n token = state.push('tbody_open', 'tbody', 1);\n token.map = tbodyLines = [ startLine + 2, 0 ];\n }\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ nextLine, nextLine + 1 ];\n\n for (i = 0; i < columnCount; i++) {\n token = state.push('td_open', 'td', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i] ? columns[i].trim() : '';\n token.children = [];\n\n token = state.push('td_close', 'td', -1);\n }\n token = state.push('tr_close', 'tr', -1);\n }\n\n if (tbodyLines) {\n token = state.push('tbody_close', 'tbody', -1);\n tbodyLines[1] = nextLine;\n }\n\n token = state.push('table_close', 'table', -1);\n tableLines[1] = nextLine;\n\n state.parentType = oldParentType;\n state.line = nextLine;\n return true;\n};\n", "// Code block (4 spaces padded)\n\n'use strict';\n\n\nmodule.exports = function code(state, startLine, endLine/*, silent*/) {\n if (state.md.options.allowIndentation) { return false; }\n\n var nextLine, last, token;\n\n if (state.sCount[startLine] - state.blkIndent < 4) { return false; }\n\n last = nextLine = startLine + 1;\n\n while (nextLine < endLine) {\n if (state.isEmpty(nextLine)) {\n nextLine++;\n continue;\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n nextLine++;\n last = nextLine;\n continue;\n }\n break;\n }\n\n state.line = last;\n\n token = state.push('code_block', 'code', 0);\n token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n';\n token.map = [ startLine, state.line ];\n\n return true;\n};\n", "// fences (``` lang, ~~~ lang)\n\n'use strict';\n\n\nmodule.exports = function fence(state, startLine, endLine, silent) {\n var marker, len, params, nextLine, mem, token, markup,\n haveEndMarker = false,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (pos + 3 > max) { return false; }\n\n marker = state.src.charCodeAt(pos);\n\n if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n return false;\n }\n\n // scan marker length\n mem = pos;\n pos = state.skipChars(pos, marker);\n\n len = pos - mem;\n\n if (len < 3) { return false; }\n\n markup = state.src.slice(mem, pos);\n params = state.src.slice(pos, max);\n\n if (marker === 0x60 /* ` */) {\n if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n return false;\n }\n }\n\n // Since start is found, we can report success here in validation mode\n if (silent) { return true; }\n\n // search end of block\n nextLine = startLine;\n\n for (;;) {\n nextLine++;\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break;\n }\n\n pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break;\n }\n\n if (state.src.charCodeAt(pos) !== marker) { continue; }\n\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue;\n }\n\n pos = state.skipChars(pos, marker);\n\n // closing code fence must be at least as long as the opening one\n if (pos - mem < len) { continue; }\n\n // make sure tail has spaces only\n pos = state.skipSpaces(pos);\n\n if (pos < max) { continue; }\n\n haveEndMarker = true;\n // found!\n break;\n }\n\n // If a fence has heading spaces, they should be removed from its inner block\n len = state.sCount[startLine];\n\n state.line = nextLine + (haveEndMarker ? 1 : 0);\n\n token = state.push('fence', 'code', 0);\n token.info = params;\n token.content = state.getLines(startLine + 1, nextLine, len, true);\n token.markup = markup;\n token.map = [ startLine, state.line ];\n\n return true;\n};\n", "// Block quotes\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function blockquote(state, startLine, endLine, silent) {\n var adjustTab,\n ch,\n i,\n initial,\n l,\n lastLineEmpty,\n lines,\n nextLine,\n offset,\n oldBMarks,\n oldBSCount,\n oldIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n spaceAfterMarker,\n terminate,\n terminatorRules,\n token,\n isOutdented,\n oldLineMax = state.lineMax,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // check the block quote marker\n if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }\n\n // we know that it's going to be a valid blockquote,\n // so no point trying to find the end of it in silent mode\n if (silent) { return true; }\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[startLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[startLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks = [ state.bMarks[startLine] ];\n state.bMarks[startLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[startLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n oldBSCount = [ state.bsCount[startLine] ];\n state.bsCount[startLine] = state.sCount[startLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n lastLineEmpty = pos >= max;\n\n oldSCount = [ state.sCount[startLine] ];\n state.sCount[startLine] = offset - initial;\n\n oldTShift = [ state.tShift[startLine] ];\n state.tShift[startLine] = pos - state.bMarks[startLine];\n\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n oldParentType = state.parentType;\n state.parentType = 'blockquote';\n\n // Search the end of the block\n //\n // Block ends with either:\n // 1. an empty line outside:\n // ```\n // > test\n //\n // ```\n // 2. an empty line inside:\n // ```\n // >\n // test\n // ```\n // 3. another tag:\n // ```\n // > test\n // - - -\n // ```\n for (nextLine = startLine + 1; nextLine < endLine; nextLine++) {\n // check if it's outdented, i.e. it's inside list item and indented\n // less than said list item:\n //\n // ```\n // 1. anything\n // > current blockquote\n // 2. checking this line\n // ```\n isOutdented = state.sCount[nextLine] < state.blkIndent;\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos >= max) {\n // Case 1: line is not inside the blockquote, and this line is empty.\n break;\n }\n\n if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n // This line is inside the blockquote.\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[nextLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[nextLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n state.bMarks[nextLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n lastLineEmpty = pos >= max;\n\n oldBSCount.push(state.bsCount[nextLine]);\n state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] = offset - initial;\n\n oldTShift.push(state.tShift[nextLine]);\n state.tShift[nextLine] = pos - state.bMarks[nextLine];\n continue;\n }\n\n // Case 2: line is not inside the blockquote, and the last line was empty.\n if (lastLineEmpty) { break; }\n\n // Case 3: another tag found.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) {\n // Quirk to enforce \"hard termination mode\" for paragraphs;\n // normally if you call `tokenize(state, startLine, nextLine)`,\n // paragraphs will look below nextLine for paragraph continuation,\n // but if blockquote is terminated by another tag, they shouldn't\n state.lineMax = nextLine;\n\n if (state.blkIndent !== 0) {\n // state.blkIndent was non-zero, we now set it to zero,\n // so we need to re-calculate all offsets to appear as\n // if indent wasn't changed\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] -= state.blkIndent;\n }\n\n break;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n\n // A negative indentation means that this is a paragraph continuation\n //\n state.sCount[nextLine] = -1;\n }\n\n oldIndent = state.blkIndent;\n state.blkIndent = 0;\n\n token = state.push('blockquote_open', 'blockquote', 1);\n token.markup = '>';\n token.map = lines = [ startLine, 0 ];\n\n state.md.block.tokenize(state, startLine, nextLine);\n\n token = state.push('blockquote_close', 'blockquote', -1);\n token.markup = '>';\n\n state.lineMax = oldLineMax;\n state.parentType = oldParentType;\n lines[1] = state.line;\n\n // Restore original tShift; this might not be necessary since the parser\n // has already been here, but just to make sure we can do that.\n for (i = 0; i < oldTShift.length; i++) {\n state.bMarks[i + startLine] = oldBMarks[i];\n state.tShift[i + startLine] = oldTShift[i];\n state.sCount[i + startLine] = oldSCount[i];\n state.bsCount[i + startLine] = oldBSCount[i];\n }\n state.blkIndent = oldIndent;\n\n return true;\n};\n", "// Horizontal rule\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function hr(state, startLine, endLine, silent) {\n var marker, cnt, ch, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n marker = state.src.charCodeAt(pos++);\n\n // Check hr marker\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x5F/* _ */) {\n return false;\n }\n\n // markers can be mixed with spaces, but there should be at least 3 of them\n\n cnt = 1;\n while (pos < max) {\n ch = state.src.charCodeAt(pos++);\n if (ch !== marker && !isSpace(ch)) { return false; }\n if (ch === marker) { cnt++; }\n }\n\n if (cnt < 3) { return false; }\n\n if (silent) { return true; }\n\n state.line = startLine + 1;\n\n token = state.push('hr', 'hr', 0);\n token.map = [ startLine, state.line ];\n token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\n return true;\n};\n", "// Lists\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker(state, startLine) {\n var marker, pos, max, ch;\n\n pos = state.bMarks[startLine] + state.tShift[startLine];\n max = state.eMarks[startLine];\n\n marker = state.src.charCodeAt(pos++);\n // Check bullet\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x2B/* + */) {\n return -1;\n }\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" -test \" - is not a list item\n return -1;\n }\n }\n\n return pos;\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker(state, startLine) {\n var ch,\n start = state.bMarks[startLine] + state.tShift[startLine],\n pos = start,\n max = state.eMarks[startLine];\n\n // List marker should have at least 2 chars (digit + dot)\n if (pos + 1 >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; }\n\n for (;;) {\n // EOL -> fail\n if (pos >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n\n // List marker should have no more than 9 digits\n // (prevents integer overflow in browsers)\n if (pos - start >= 10) { return -1; }\n\n continue;\n }\n\n // found valid marker\n if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n break;\n }\n\n return -1;\n }\n\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" 1.test \" - is not a list item\n return -1;\n }\n }\n return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n var i, l,\n level = state.level + 2;\n\n for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n state.tokens[i + 2].hidden = true;\n state.tokens[i].hidden = true;\n i += 2;\n }\n }\n}\n\n\nmodule.exports = function list(state, startLine, endLine, silent) {\n var ch,\n contentStart,\n i,\n indent,\n indentAfterMarker,\n initial,\n isOrdered,\n itemLines,\n l,\n listLines,\n listTokIdx,\n markerCharCode,\n markerValue,\n max,\n nextLine,\n offset,\n oldListIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n oldTight,\n pos,\n posAfterMarker,\n prevEmptyEnd,\n start,\n terminate,\n terminatorRules,\n token,\n isTerminatingParagraph = false,\n tight = true;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // Special case:\n // - item 1\n // - item 2\n // - item 3\n // - item 4\n // - this one is a paragraph continuation\n if (!state.md.options.allowIndentation &&\n state.listIndent >= 0 &&\n state.sCount[startLine] - state.listIndent >= 4 &&\n state.sCount[startLine] < state.blkIndent) {\n return false;\n }\n\n // limit conditions when list can interrupt\n // a paragraph (validation mode only)\n if (silent && state.parentType === 'paragraph') {\n // Next list item should still terminate previous list item;\n //\n // This code can fail if plugins use blkIndent as well as lists,\n // but I hope the spec gets fixed long before that happens.\n //\n if (state.sCount[startLine] >= state.blkIndent) {\n isTerminatingParagraph = true;\n }\n }\n\n // Detect list type and position after marker\n if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n isOrdered = true;\n start = state.bMarks[startLine] + state.tShift[startLine];\n markerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\n // If we're starting a new ordered list right after\n // a paragraph, it should start with 1.\n if (isTerminatingParagraph && markerValue !== 1) return false;\n\n } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n isOrdered = false;\n\n } else {\n return false;\n }\n\n // If we're starting a new unordered list right after\n // a paragraph, first line should not be empty.\n if (isTerminatingParagraph) {\n if (state.skipSpaces(posAfterMarker) >= state.eMarks[startLine]) return false;\n }\n\n // We should terminate list on style change. Remember first one to compare.\n markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n // For validation mode we can terminate immediately\n if (silent) { return true; }\n\n // Start list\n listTokIdx = state.tokens.length;\n\n if (isOrdered) {\n token = state.push('ordered_list_open', 'ol', 1);\n if (markerValue !== 1) {\n token.attrs = [ [ 'start', markerValue ] ];\n }\n\n } else {\n token = state.push('bullet_list_open', 'ul', 1);\n }\n\n token.map = listLines = [ startLine, 0 ];\n token.markup = String.fromCharCode(markerCharCode);\n\n //\n // Iterate list items\n //\n\n nextLine = startLine;\n prevEmptyEnd = false;\n terminatorRules = state.md.block.ruler.getRules('list');\n\n oldParentType = state.parentType;\n state.parentType = 'list';\n\n while (nextLine < endLine) {\n pos = posAfterMarker;\n max = state.eMarks[nextLine];\n\n initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n } else if (ch === 0x20) {\n offset++;\n } else {\n break;\n }\n\n pos++;\n }\n\n contentStart = pos;\n\n if (contentStart >= max) {\n // trimming space in \"- \\n 3\" case, indent is 1 here\n indentAfterMarker = 1;\n } else {\n indentAfterMarker = offset - initial;\n }\n\n // If we have more than 4 spaces, the indent is 1\n // (the rest is just indented code block)\n if (!state.md.options.allowIndentation && indentAfterMarker > 4) { indentAfterMarker = 1; }\n\n // \" - test\"\n // ^^^^^ - calculating total length of this thing\n indent = initial + indentAfterMarker;\n\n // Run subparser & write tokens\n token = state.push('list_item_open', 'li', 1);\n token.markup = String.fromCharCode(markerCharCode);\n token.map = itemLines = [ startLine, 0 ];\n if (isOrdered) {\n token.info = state.src.slice(start, posAfterMarker - 1);\n }\n\n // change current state, then restore it after parser subcall\n oldTight = state.tight;\n oldTShift = state.tShift[startLine];\n oldSCount = state.sCount[startLine];\n\n // - example list\n // ^ listIndent position will be here\n // ^ blkIndent position will be here\n //\n oldListIndent = state.listIndent;\n state.listIndent = state.blkIndent;\n state.blkIndent = indent;\n\n state.tight = true;\n state.tShift[startLine] = contentStart - state.bMarks[startLine];\n state.sCount[startLine] = offset;\n\n if (contentStart >= max && state.isEmpty(startLine + 1)) {\n // workaround for this case\n // (list item is empty, list terminates before \"foo\"):\n // ~~~~~~~~\n // -\n //\n // foo\n // ~~~~~~~~\n state.line = Math.min(state.line + 2, endLine);\n } else {\n state.md.block.tokenize(state, startLine, endLine, true);\n }\n\n // If any of list item is tight, mark list as tight\n if (!state.tight || prevEmptyEnd) {\n tight = false;\n }\n // Item become loose if finish with empty line,\n // but we should filter last element, because it means list finish\n prevEmptyEnd = (state.line - startLine) > 1 && state.isEmpty(state.line - 1);\n\n state.blkIndent = state.listIndent;\n state.listIndent = oldListIndent;\n state.tShift[startLine] = oldTShift;\n state.sCount[startLine] = oldSCount;\n state.tight = oldTight;\n\n token = state.push('list_item_close', 'li', -1);\n token.markup = String.fromCharCode(markerCharCode);\n\n nextLine = startLine = state.line;\n itemLines[1] = nextLine;\n contentStart = state.bMarks[startLine];\n\n if (nextLine >= endLine) { break; }\n\n //\n // Try to check if list is terminated or continued.\n //\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { break; }\n\n // fail if terminating block found\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n\n // fail if list has another type\n if (isOrdered) {\n posAfterMarker = skipOrderedListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n start = state.bMarks[nextLine] + state.tShift[nextLine];\n } else {\n posAfterMarker = skipBulletListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n }\n\n if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; }\n }\n\n // Finalize list\n if (isOrdered) {\n token = state.push('ordered_list_close', 'ol', -1);\n } else {\n token = state.push('bullet_list_close', 'ul', -1);\n }\n token.markup = String.fromCharCode(markerCharCode);\n\n listLines[1] = nextLine;\n state.line = nextLine;\n\n state.parentType = oldParentType;\n\n // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx);\n }\n\n return true;\n};\n", "'use strict';\n\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function reference(state, startLine, _endLine, silent) {\n var ch,\n destEndPos,\n destEndLineNo,\n endLine,\n href,\n i,\n l,\n label,\n labelEnd,\n oldParentType,\n res,\n start,\n str,\n terminate,\n terminatorRules,\n title,\n lines = 0,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine],\n nextLine = startLine + 1;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; }\n\n // Simple check to quickly interrupt scan on [link](url) at the start of line.\n // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n while (++pos < max) {\n if (state.src.charCodeAt(pos) === 0x5D /* ] */ &&\n state.src.charCodeAt(pos - 1) !== 0x5C/* \\ */) {\n if (pos + 1 === max) { return false; }\n if (state.src.charCodeAt(pos + 1) !== 0x3A/* : */) { return false; }\n break;\n }\n }\n\n endLine = state.lineMax;\n\n // jump line-by-line until empty one or EOF\n terminatorRules = state.md.block.ruler.getRules('reference');\n\n oldParentType = state.parentType;\n state.parentType = 'reference';\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n max = str.length;\n\n for (pos = 1; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x5B /* [ */) {\n return false;\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos;\n break;\n } else if (ch === 0x0A /* \\n */) {\n lines++;\n } else if (ch === 0x5C /* \\ */) {\n pos++;\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; }\n\n // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n for (pos = labelEnd + 2; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n res = state.md.helpers.parseLinkDestination(str, pos, max);\n if (!res.ok) { return false; }\n\n href = state.md.normalizeLink(res.str);\n if (!state.md.validateLink(href)) { return false; }\n\n pos = res.pos;\n lines += res.lines;\n\n // save cursor state, we could require to rollback later\n destEndPos = pos;\n destEndLineNo = lines;\n\n // [label]: destination 'title'\n // ^^^ skipping those spaces\n start = pos;\n for (; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^ parse this\n res = state.md.helpers.parseLinkTitle(str, pos, max);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n lines += res.lines;\n } else {\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n }\n\n // skip trailing spaces until the rest of the line\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n // garbage at the end of the line\n return false;\n }\n\n label = normalizeReference(str.slice(1, labelEnd));\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false;\n }\n\n // Reference can not terminate anything. This check is for safety only.\n /*istanbul ignore if*/\n if (silent) { return true; }\n\n if (typeof state.env.references === 'undefined') {\n state.env.references = {};\n }\n if (typeof state.env.references[label] === 'undefined') {\n state.env.references[label] = { title: title, href: href };\n }\n\n state.parentType = oldParentType;\n\n state.line = startLine + lines + 1;\n return true;\n};\n", "// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n\n'use strict';\n\n\nmodule.exports = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'section',\n 'source',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n];\n", "// Regexps to match html elements\n\n'use strict';\n\nvar attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\n\nvar unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\n\nvar attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\n\nvar attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\n\nvar open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\n\nvar close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing = '<[?][\\\\s\\\\S]*?[?]>';\nvar declaration = '<![A-Z]+\\\\s+[^>]*>';\nvar cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\n\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\n\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;\n", "// HTML block\n\n'use strict';\n\n\nvar block_names = require('../common/html_blocks');\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE;\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nvar HTML_SEQUENCES = [\n [ /^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true ],\n [ /^<!--/, /-->/, true ],\n [ /^<\\?/, /\\?>/, true ],\n [ /^<![A-Z]/, />/, true ],\n [ /^<!\\[CDATA\\[/, /\\]\\]>/, true ],\n [ new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true ],\n [ new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false ]\n];\n\n\nmodule.exports = function html_block(state, startLine, endLine, silent) {\n var i, nextLine, token, lineText,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (!state.md.options.html) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n lineText = state.src.slice(pos, max);\n\n for (i = 0; i < HTML_SEQUENCES.length; i++) {\n if (HTML_SEQUENCES[i][0].test(lineText)) { break; }\n }\n\n if (i === HTML_SEQUENCES.length) { return false; }\n\n if (silent) {\n // true if this sequence can be a terminator, false otherwise\n return HTML_SEQUENCES[i][2];\n }\n\n nextLine = startLine + 1;\n\n // If we are here - we detected HTML block.\n // Let's roll down till block end.\n if (!HTML_SEQUENCES[i][1].test(lineText)) {\n for (; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n lineText = state.src.slice(pos, max);\n\n if (HTML_SEQUENCES[i][1].test(lineText)) {\n if (lineText.length !== 0) { nextLine++; }\n break;\n }\n }\n }\n\n state.line = nextLine;\n\n token = state.push('html_block', '', 0);\n token.map = [ startLine, nextLine ];\n token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\n return true;\n};\n", "// heading (#, ##, ...)\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n var ch, level, tmp, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x23/* # */ || pos >= max) { return false; }\n\n // count heading level\n level = 1;\n ch = state.src.charCodeAt(++pos);\n while (ch === 0x23/* # */ && pos < max && level <= 6) {\n level++;\n ch = state.src.charCodeAt(++pos);\n }\n\n if (level > 6 || (pos < max && !isSpace(ch))) { return false; }\n\n if (silent) { return true; }\n\n // Let's cut tails like ' ### ' from the end of string\n\n max = state.skipSpacesBack(max, pos);\n tmp = state.skipCharsBack(max, 0x23, pos); // #\n if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n max = tmp;\n }\n\n state.line = startLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = '########'.slice(0, level);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = state.src.slice(pos, max).trim();\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = '########'.slice(0, level);\n\n return true;\n};\n", "// lheading (---, ===)\n\n'use strict';\n\n\nmodule.exports = function lheading(state, startLine, endLine/*, silent*/) {\n var content, terminate, i, l, token, pos, max, level, marker,\n nextLine = startLine + 1, oldParentType,\n terminatorRules = state.md.block.ruler.getRules('paragraph');\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n //\n // Check for underline in setext header\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max) {\n marker = state.src.charCodeAt(pos);\n\n if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n pos = state.skipChars(pos, marker);\n pos = state.skipSpaces(pos);\n\n if (pos >= max) {\n level = (marker === 0x3D/* = */ ? 1 : 2);\n break;\n }\n }\n }\n }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n if (!level) {\n // Didn't find valid underline\n return false;\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = String.fromCharCode(marker);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line - 1 ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = String.fromCharCode(marker);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Paragraph\n\n'use strict';\n\n\nmodule.exports = function paragraph(state, startLine/*, endLine*/) {\n var content, terminate, i, l, token, oldParentType,\n nextLine = startLine + 1,\n terminatorRules = state.md.block.ruler.getRules('paragraph'),\n endLine = state.lineMax;\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph';\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine;\n\n token = state.push('paragraph_open', 'p', 1);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('paragraph_close', 'p', -1);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Parser state class\n\n'use strict';\n\nvar Token = require('../token');\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction StateBlock(src, md, env, tokens) {\n var ch, s, start, pos, len, indent, offset, indent_found;\n\n this.src = src;\n\n // link to parser instance\n this.md = md;\n\n this.env = env;\n\n //\n // Internal state vartiables\n //\n\n this.tokens = tokens;\n\n this.bMarks = []; // line begin offsets for fast jumps\n this.eMarks = []; // line end offsets for fast jumps\n this.tShift = []; // offsets of the first non-space characters (tabs not expanded)\n this.sCount = []; // indents for each line (tabs expanded)\n\n // An amount of virtual spaces (tabs expanded) between beginning\n // of each line (bMarks) and real beginning of that line.\n //\n // It exists only as a hack because blockquotes override bMarks\n // losing information in the process.\n //\n // It's used only when expanding tabs, you can think about it as\n // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n // means first tab should be expanded to 4-21%4 === 3 spaces.\n //\n this.bsCount = [];\n\n // block parser variables\n this.blkIndent = 0; // required block content indent (for example, if we are\n // inside a list, it would be positioned after list marker)\n this.line = 0; // line index in src\n this.lineMax = 0; // lines count\n this.tight = false; // loose/tight mode for lists\n this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any)\n this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n\n // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n // used in lists to determine if they interrupt a paragraph\n this.parentType = 'root';\n\n this.level = 0;\n\n // renderer\n this.result = '';\n\n // Create caches\n // Generate markers.\n s = this.src;\n indent_found = false;\n\n for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n ch = s.charCodeAt(pos);\n\n if (!indent_found) {\n if (isSpace(ch)) {\n indent++;\n\n if (ch === 0x09) {\n offset += 4 - offset % 4;\n } else {\n offset++;\n }\n continue;\n } else {\n indent_found = true;\n }\n }\n\n if (ch === 0x0A || pos === len - 1) {\n if (ch !== 0x0A) { pos++; }\n this.bMarks.push(start);\n this.eMarks.push(pos);\n this.tShift.push(indent);\n this.sCount.push(offset);\n this.bsCount.push(0);\n\n indent_found = false;\n indent = 0;\n offset = 0;\n start = pos + 1;\n }\n }\n\n // Push fake entry to simplify cache bounds checks\n this.bMarks.push(s.length);\n this.eMarks.push(s.length);\n this.tShift.push(0);\n this.sCount.push(0);\n this.bsCount.push(0);\n\n this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n var token = new Token(type, tag, nesting);\n token.block = true;\n\n if (nesting < 0) this.level--; // closing tag\n token.level = this.level;\n if (nesting > 0) this.level++; // opening tag\n\n this.tokens.push(token);\n return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n for (var max = this.lineMax; from < max; from++) {\n if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n break;\n }\n }\n return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n var ch;\n\n for (var max = this.src.length; pos < max; pos++) {\n ch = this.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n }\n return pos;\n};\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1; }\n }\n return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n for (var max = this.src.length; pos < max; pos++) {\n if (this.src.charCodeAt(pos) !== code) { break; }\n }\n return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }\n }\n return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n var i, lineIndent, ch, first, last, queue, lineStart,\n line = begin;\n\n if (begin >= end) {\n return '';\n }\n\n queue = new Array(end - begin);\n\n for (i = 0; line < end; line++, i++) {\n lineIndent = 0;\n lineStart = first = this.bMarks[line];\n\n if (line + 1 < end || keepLastLF) {\n // No need for bounds check because we have fake entry on tail.\n last = this.eMarks[line] + 1;\n } else {\n last = this.eMarks[line];\n }\n\n while (first < last && lineIndent < indent) {\n ch = this.src.charCodeAt(first);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n } else {\n lineIndent++;\n }\n } else if (first - lineStart < this.tShift[line]) {\n // patched tShift masked characters to look like spaces (blockquotes, list markers)\n lineIndent++;\n } else {\n break;\n }\n\n first++;\n }\n\n if (lineIndent > indent) {\n // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n // with indent=2 becomes ' \\tfoobar'\n queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n } else {\n queue[i] = this.src.slice(first, last);\n }\n }\n\n return queue.join('');\n};\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token;\n\n\nmodule.exports = StateBlock;\n", "/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n // First 2 params - rule name & source. Secondary array - list of rules,\n // which can be terminated by this one.\n [ 'table', require('./rules_block/table'), [ 'paragraph', 'reference' ] ],\n [ 'code', require('./rules_block/code') ],\n [ 'fence', require('./rules_block/fence'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'blockquote', require('./rules_block/blockquote'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'hr', require('./rules_block/hr'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'list', require('./rules_block/list'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'reference', require('./rules_block/reference') ],\n [ 'html_block', require('./rules_block/html_block'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'heading', require('./rules_block/heading'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'lheading', require('./rules_block/lheading') ],\n [ 'paragraph', require('./rules_block/paragraph') ]\n];\n\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock() {\n /**\n * ParserBlock#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of block rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() });\n }\n}\n\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n line = startLine,\n hasEmptyLines = false,\n maxNesting = state.md.options.maxNesting;\n\n while (line < endLine) {\n state.line = line = state.skipEmptyLines(line);\n if (line >= endLine) { break; }\n\n // Termination condition for nested calls.\n // Nested calls currently used for blockquotes & lists\n if (state.sCount[line] < state.blkIndent) { break; }\n\n // If nesting level exceeded - skip tail to the end. That's not ordinary\n // situation and we should not care about content.\n if (state.level >= maxNesting) {\n state.line = endLine;\n break;\n }\n\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.line`\n // - update `state.tokens`\n // - return true\n\n for (i = 0; i < len; i++) {\n ok = rules[i](state, line, endLine, false);\n if (ok) { break; }\n }\n\n // set state.tight if we had an empty line before current tag\n // i.e. latest empty line should not count\n state.tight = !hasEmptyLines;\n\n // paragraph might \"eat\" one newline after it in nested lists\n if (state.isEmpty(state.line - 1)) {\n hasEmptyLines = true;\n }\n\n line = state.line;\n\n if (line < endLine && state.isEmpty(line)) {\n hasEmptyLines = true;\n line++;\n state.line = line;\n }\n }\n};\n\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n var state;\n\n if (!src) { return; }\n\n state = new this.State(src, md, env, outTokens);\n\n this.tokenize(state, state.line, state.lineMax);\n};\n\n\nParserBlock.prototype.State = require('./rules_block/state_block');\n\n\nmodule.exports = ParserBlock;\n", "// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n'use strict';\n\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar(ch) {\n switch (ch) {\n case 0x0A/* \\n */:\n case 0x21/* ! */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2D/* - */:\n case 0x3A/* : */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos;\n\n while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n pos++;\n }\n\n if (pos === state.pos) { return false; }\n\n if (!silent) { state.pending += state.src.slice(state.pos, pos); }\n\n state.pos = pos;\n\n return true;\n};\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos,\n idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n // first char is terminator -> empty text\n if (idx === 0) { return false; }\n\n // no terminator -> text till end of string\n if (idx < 0) {\n if (!silent) { state.pending += state.src.slice(pos); }\n state.pos = state.src.length;\n return true;\n }\n\n if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n state.pos += idx;\n\n return true;\n};*/\n", "// Proceess '\\n'\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function newline(state, silent) {\n var pmax, max, ws, pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false; }\n\n pmax = state.pending.length - 1;\n max = state.posMax;\n\n // ' \\n' -> hardbreak\n // Lookup in pending chars is bad practice! Don't copy to other rules!\n // Pending string is stored in concat mode, indexed lookups will cause\n // convertion to flat mode.\n if (!silent) {\n if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n // Find whitespaces tail of pending chars.\n ws = pmax - 1;\n while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--;\n\n state.pending = state.pending.slice(0, ws);\n state.push('hardbreak', 'br', 0);\n } else {\n state.pending = state.pending.slice(0, -1);\n state.push('softbreak', 'br', 0);\n }\n\n } else {\n state.push('softbreak', 'br', 0);\n }\n }\n\n pos++;\n\n // skip heading spaces for next line\n while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++; }\n\n state.pos = pos;\n return true;\n};\n", "// Process escaped chars and hardbreaks\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) { ESCAPED.push(0); }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; });\n\n\nmodule.exports = function escape(state, silent) {\n var ch, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) { return false; }\n\n pos++;\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch < 256 && ESCAPED[ch] !== 0) {\n if (!silent) { state.pending += state.src[pos]; }\n state.pos += 2;\n return true;\n }\n\n if (ch === 0x0A) {\n if (!silent) {\n state.push('hardbreak', 'br', 0);\n }\n\n pos++;\n // skip leading whitespaces from next line\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n state.pos = pos;\n return true;\n }\n }\n\n if (!silent) { state.pending += '\\\\'; }\n state.pos++;\n return true;\n};\n", "// Parse backticks\n\n'use strict';\n\n\nmodule.exports = function backtick(state, silent) {\n var start, max, marker, token, matchStart, matchEnd, openerLength, closerLength,\n pos = state.pos,\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x60/* ` */) { return false; }\n\n start = pos;\n pos++;\n max = state.posMax;\n\n // scan marker length\n while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }\n\n marker = state.src.slice(start, pos);\n openerLength = marker.length;\n\n if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n }\n\n matchStart = matchEnd = pos;\n\n // Nothing found in the cache, scan until the end of the line (or until marker is found)\n while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n matchEnd = matchStart + 1;\n\n // scan marker length\n while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }\n\n closerLength = matchEnd - matchStart;\n\n if (closerLength === openerLength) {\n // Found matching closer length.\n if (!silent) {\n token = state.push('code_inline', 'code', 0);\n token.markup = marker;\n token.content = state.src.slice(pos, matchStart)\n .replace(/\\n/g, ' ')\n .replace(/^ (.+) $/, '$1');\n }\n state.pos = matchEnd;\n return true;\n }\n\n // Some different length found, put it in cache as upper limit of where closer can be found\n state.backticks[closerLength] = matchStart;\n }\n\n // Scanned through the end, didn't find anything\n state.backticksScanned = true;\n\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n};\n", "// ~~strike through~~\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function strikethrough(state, silent) {\n var i, scanned, token, len, ch,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x7E/* ~ */) { return false; }\n\n scanned = state.scanDelims(state.pos, true);\n len = scanned.length;\n ch = String.fromCharCode(marker);\n\n if (len < 2) { return false; }\n\n if (len % 2) {\n token = state.push('text', '', 0);\n token.content = ch;\n len--;\n }\n\n for (i = 0; i < len; i += 2) {\n token = state.push('text', '', 0);\n token.content = ch + ch;\n\n state.delimiters.push({\n marker: marker,\n length: 0, // disable \"rule of 3\" length checks meant for emphasis\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i, j,\n startDelim,\n endDelim,\n token,\n loneMarkers = [],\n max = delimiters.length;\n\n for (i = 0; i < max; i++) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x7E/* ~ */) {\n continue;\n }\n\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n token = state.tokens[startDelim.token];\n token.type = 's_open';\n token.tag = 's';\n token.nesting = 1;\n token.markup = '~~';\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = 's_close';\n token.tag = 's';\n token.nesting = -1;\n token.markup = '~~';\n token.content = '';\n\n if (state.tokens[endDelim.token - 1].type === 'text' &&\n state.tokens[endDelim.token - 1].content === '~') {\n\n loneMarkers.push(endDelim.token - 1);\n }\n }\n\n // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n while (loneMarkers.length) {\n i = loneMarkers.pop();\n j = i + 1;\n\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++;\n }\n\n j--;\n\n if (i !== j) {\n token = state.tokens[j];\n state.tokens[j] = state.tokens[i];\n state.tokens[i] = token;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function strikethrough(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process *this* and _that_\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function emphasis(state, silent) {\n var i, scanned, token,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false; }\n\n scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n for (i = 0; i < scanned.length; i++) {\n token = state.push('text', '', 0);\n token.content = String.fromCharCode(marker);\n\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker: marker,\n\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n\n // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i,\n startDelim,\n endDelim,\n token,\n ch,\n isStrong,\n max = delimiters.length;\n\n for (i = max - 1; i >= 0; i--) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n continue;\n }\n\n // Process only opening markers\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n //\n isStrong = i > 0 &&\n delimiters[i - 1].end === startDelim.end + 1 &&\n // check that first two markers match and adjacent\n delimiters[i - 1].marker === startDelim.marker &&\n delimiters[i - 1].token === startDelim.token - 1 &&\n // check that last two markers are adjacent (we can safely assume they match)\n delimiters[startDelim.end + 1].token === endDelim.token + 1;\n\n ch = String.fromCharCode(startDelim.marker);\n\n token = state.tokens[startDelim.token];\n token.type = isStrong ? 'strong_open' : 'em_open';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = 1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = isStrong ? 'strong_close' : 'em_close';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = -1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n if (isStrong) {\n state.tokens[delimiters[i - 1].token].content = '';\n state.tokens[delimiters[startDelim.end + 1].token].content = '';\n i--;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process [link](<to> \"stuff\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function link(state, silent) {\n var attrs,\n code,\n label,\n labelEnd,\n labelStart,\n pos,\n res,\n ref,\n token,\n href = '',\n title = '',\n oldPos = state.pos,\n max = state.posMax,\n start = state.pos,\n parseReference = true;\n\n if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 1;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // might have found a valid shortcut link, disable reference parsing\n parseReference = false;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n }\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n // parsing a valid shortcut link failed, fallback to reference\n parseReference = true;\n }\n pos++;\n }\n\n if (parseReference) {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n state.pos = labelStart;\n state.posMax = labelEnd;\n\n token = state.push('link_open', 'a', 1);\n token.attrs = attrs = [ [ 'href', href ] ];\n if (title) {\n attrs.push([ 'title', title ]);\n }\n\n state.md.inline.tokenize(state);\n\n token = state.push('link_close', 'a', -1);\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n", "// Process ![image](<src> \"title\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function image(state, silent) {\n var attrs,\n code,\n content,\n label,\n labelEnd,\n labelStart,\n pos,\n ref,\n res,\n title,\n token,\n tokens,\n start,\n href = '',\n oldPos = state.pos,\n max = state.posMax;\n\n if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false; }\n if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 2;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n } else {\n title = '';\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n state.pos = oldPos;\n return false;\n }\n pos++;\n } else {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n content = state.src.slice(labelStart, labelEnd);\n\n state.md.inline.parse(\n content,\n state.md,\n state.env,\n tokens = []\n );\n\n token = state.push('image', 'img', 0);\n token.attrs = attrs = [ [ 'src', href ], [ 'alt', '' ] ];\n token.children = tokens;\n token.content = content;\n\n if (title) {\n attrs.push([ 'title', title ]);\n }\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n", "// Process autolinks '<protocol:...>'\n\n'use strict';\n\n\n/*eslint max-len:0*/\nvar EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;\nvar AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)$/;\n\n\nmodule.exports = function autolink(state, silent) {\n var url, fullUrl, token, ch, start, max,\n pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n start = state.pos;\n max = state.posMax;\n\n for (;;) {\n if (++pos >= max) return false;\n\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x3C /* < */) return false;\n if (ch === 0x3E /* > */) break;\n }\n\n url = state.src.slice(start + 1, pos);\n\n if (AUTOLINK_RE.test(url)) {\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n if (EMAIL_RE.test(url)) {\n fullUrl = state.md.normalizeLink('mailto:' + url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n return false;\n};\n", "// Process html tags\n\n'use strict';\n\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\n\n\nfunction isLetter(ch) {\n /*eslint no-bitwise:0*/\n var lc = ch | 0x20; // to lower case\n return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);\n}\n\n\nmodule.exports = function html_inline(state, silent) {\n var ch, match, max, token,\n pos = state.pos;\n\n if (!state.md.options.html) { return false; }\n\n // Check start\n max = state.posMax;\n if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n pos + 2 >= max) {\n return false;\n }\n\n // Quick fail on second char\n ch = state.src.charCodeAt(pos + 1);\n if (ch !== 0x21/* ! */ &&\n ch !== 0x3F/* ? */ &&\n ch !== 0x2F/* / */ &&\n !isLetter(ch)) {\n return false;\n }\n\n match = state.src.slice(pos).match(HTML_TAG_RE);\n if (!match) { return false; }\n\n if (!silent) {\n token = state.push('html_inline', '', 0);\n token.content = state.src.slice(pos, pos + match[0].length);\n }\n state.pos += match[0].length;\n return true;\n};\n", "// Process html entity - &#123;, &#xAF;, &quot;, ...\n\n'use strict';\n\nvar entities = require('../common/entities');\nvar has = require('../common/utils').has;\nvar isValidEntityCode = require('../common/utils').isValidEntityCode;\nvar fromCodePoint = require('../common/utils').fromCodePoint;\n\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\n\n\nmodule.exports = function entity(state, silent) {\n var ch, code, match, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x26/* & */) { return false; }\n\n if (pos + 1 < max) {\n ch = state.src.charCodeAt(pos + 1);\n\n if (ch === 0x23 /* # */) {\n match = state.src.slice(pos).match(DIGITAL_RE);\n if (match) {\n if (!silent) {\n code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n state.pending += isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n }\n state.pos += match[0].length;\n return true;\n }\n } else {\n match = state.src.slice(pos).match(NAMED_RE);\n if (match) {\n if (has(entities, match[1])) {\n if (!silent) { state.pending += entities[match[1]]; }\n state.pos += match[0].length;\n return true;\n }\n }\n }\n }\n\n if (!silent) { state.pending += '&'; }\n state.pos++;\n return true;\n};\n", "// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\n\nfunction processDelimiters(state, delimiters) {\n var closerIdx, openerIdx, closer, opener, minOpenerIdx, newMinOpenerIdx,\n isOddMatch, lastJump,\n openersBottom = {},\n max = delimiters.length;\n\n if (!max) return;\n\n // headerIdx is the first delimiter of the current (where closer is) delimiter run\n var headerIdx = 0;\n var lastTokenIdx = -2; // needs any value lower than -1\n var jumps = [];\n\n for (closerIdx = 0; closerIdx < max; closerIdx++) {\n closer = delimiters[closerIdx];\n\n jumps.push(0);\n\n // markers belong to same delimiter run if:\n // - they have adjacent tokens\n // - AND markers are the same\n //\n if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n headerIdx = closerIdx;\n }\n\n lastTokenIdx = closer.token;\n\n // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n closer.length = closer.length || 0;\n\n if (!closer.close) continue;\n\n // Previously calculated lower bounds (previous fails)\n // for each marker, each delimiter length modulo 3,\n // and for whether this closer can be an opener;\n // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [ -1, -1, -1, -1, -1, -1 ];\n }\n\n minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)];\n\n openerIdx = headerIdx - jumps[headerIdx] - 1;\n\n newMinOpenerIdx = openerIdx;\n\n for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n opener = delimiters[openerIdx];\n\n if (opener.marker !== closer.marker) continue;\n\n if (opener.open && opener.end < 0) {\n\n isOddMatch = false;\n\n // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true;\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ?\n jumps[openerIdx - 1] + 1 :\n 0;\n\n jumps[closerIdx] = closerIdx - openerIdx + lastJump;\n jumps[openerIdx] = lastJump;\n\n closer.open = false;\n opener.end = closerIdx;\n opener.close = false;\n newMinOpenerIdx = -1;\n // treat next token as start of run,\n // it optimizes skips in **<...>**a**<...>** pathological case\n lastTokenIdx = -2;\n break;\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx;\n }\n }\n}\n\n\nmodule.exports = function link_pairs(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n processDelimiters(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n'use strict';\n\n\nmodule.exports = function text_collapse(state) {\n var curr, last,\n level = 0,\n tokens = state.tokens,\n max = state.tokens.length;\n\n for (curr = last = 0; curr < max; curr++) {\n // re-calculate levels after emphasis/strikethrough turns some text nodes\n // into opening/closing tags\n if (tokens[curr].nesting < 0) level--; // closing tag\n tokens[curr].level = level;\n if (tokens[curr].nesting > 0) level++; // opening tag\n\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n } else {\n if (curr !== last) { tokens[last] = tokens[curr]; }\n\n last++;\n }\n }\n\n if (curr !== last) {\n tokens.length = last;\n }\n};\n", "// Inline parser state\n\n'use strict';\n\n\nvar Token = require('../token');\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\n\nfunction StateInline(src, md, env, outTokens) {\n this.src = src;\n this.env = env;\n this.md = md;\n this.tokens = outTokens;\n this.tokens_meta = Array(outTokens.length);\n\n this.pos = 0;\n this.posMax = this.src.length;\n this.level = 0;\n this.pending = '';\n this.pendingLevel = 0;\n\n // Stores { start: end } pairs. Useful for backtrack\n // optimization of pairs parse (emphasis, strikes).\n this.cache = {};\n\n // List of emphasis-like delimiters for current tag\n this.delimiters = [];\n\n // Stack of delimiter lists for upper level tags\n this._prev_delimiters = [];\n\n // backtick length => last seen position\n this.backticks = {};\n this.backticksScanned = false;\n}\n\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n var token = new Token('text', '', 0);\n token.content = this.pending;\n token.level = this.pendingLevel;\n this.tokens.push(token);\n this.pending = '';\n return token;\n};\n\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n if (this.pending) {\n this.pushPending();\n }\n\n var token = new Token(type, tag, nesting);\n var token_meta = null;\n\n if (nesting < 0) {\n // closing tag\n this.level--;\n this.delimiters = this._prev_delimiters.pop();\n }\n\n token.level = this.level;\n\n if (nesting > 0) {\n // opening tag\n this.level++;\n this._prev_delimiters.push(this.delimiters);\n this.delimiters = [];\n token_meta = { delimiters: this.delimiters };\n }\n\n this.pendingLevel = this.level;\n this.tokens.push(token);\n this.tokens_meta.push(token_meta);\n return token;\n};\n\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n// - start - position to scan from (it should point at a valid marker);\n// - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n var pos = start, lastChar, nextChar, count, can_open, can_close,\n isLastWhiteSpace, isLastPunctChar,\n isNextWhiteSpace, isNextPunctChar,\n left_flanking = true,\n right_flanking = true,\n max = this.posMax,\n marker = this.src.charCodeAt(start);\n\n // treat beginning of the line as a whitespace\n lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n\n while (pos < max && this.src.charCodeAt(pos) === marker) { pos++; }\n\n count = pos - start;\n\n // treat end of the line as a whitespace\n nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n left_flanking = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n left_flanking = false;\n }\n }\n\n if (isLastWhiteSpace) {\n right_flanking = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n right_flanking = false;\n }\n }\n\n if (!canSplitWord) {\n can_open = left_flanking && (!right_flanking || isLastPunctChar);\n can_close = right_flanking && (!left_flanking || isNextPunctChar);\n } else {\n can_open = left_flanking;\n can_close = right_flanking;\n }\n\n return {\n can_open: can_open,\n can_close: can_close,\n length: count\n };\n};\n\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token;\n\n\nmodule.exports = StateInline;\n", "/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Parser rules\n\nvar _rules = [\n [ 'text', require('./rules_inline/text') ],\n [ 'newline', require('./rules_inline/newline') ],\n [ 'escape', require('./rules_inline/escape') ],\n [ 'backticks', require('./rules_inline/backticks') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').tokenize ],\n [ 'emphasis', require('./rules_inline/emphasis').tokenize ],\n [ 'link', require('./rules_inline/link') ],\n [ 'image', require('./rules_inline/image') ],\n [ 'autolink', require('./rules_inline/autolink') ],\n [ 'html_inline', require('./rules_inline/html_inline') ],\n [ 'entity', require('./rules_inline/entity') ]\n];\n\nvar _rules2 = [\n [ 'balance_pairs', require('./rules_inline/balance_pairs') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').postProcess ],\n [ 'emphasis', require('./rules_inline/emphasis').postProcess ],\n [ 'text_collapse', require('./rules_inline/text_collapse') ]\n];\n\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline() {\n var i;\n\n /**\n * ParserInline#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of inline rules.\n **/\n this.ruler = new Ruler();\n\n for (i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n\n /**\n * ParserInline#ruler2 -> Ruler\n *\n * [[Ruler]] instance. Second ruler used for post-processing\n * (e.g. in emphasis-like rules).\n **/\n this.ruler2 = new Ruler();\n\n for (i = 0; i < _rules2.length; i++) {\n this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n }\n}\n\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n var ok, i, pos = state.pos,\n rules = this.ruler.getRules(''),\n len = rules.length,\n maxNesting = state.md.options.maxNesting,\n cache = state.cache;\n\n\n if (typeof cache[pos] !== 'undefined') {\n state.pos = cache[pos];\n return;\n }\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n // Increment state.level and decrement it later to limit recursion.\n // It's harmless to do here, because no tokens are created. But ideally,\n // we'd need a separate private state variable for this purpose.\n //\n state.level++;\n ok = rules[i](state, true);\n state.level--;\n\n if (ok) { break; }\n }\n } else {\n // Too much nesting, just skip until the end of the paragraph.\n //\n // NOTE: this will cause links to behave incorrectly in the following case,\n // when an amount of `[` is exactly equal to `maxNesting + 1`:\n //\n // [[[[[[[[[[[[[[[[[[[[[foo]()\n //\n // TODO: remove this workaround when CM standard will allow nested links\n // (we can replace it by preventing links from being parsed in\n // validation mode)\n //\n state.pos = state.posMax;\n }\n\n if (!ok) { state.pos++; }\n cache[pos] = state.pos;\n};\n\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n end = state.posMax,\n maxNesting = state.md.options.maxNesting;\n\n while (state.pos < end) {\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.pos`\n // - update `state.tokens`\n // - return true\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n ok = rules[i](state, false);\n if (ok) { break; }\n }\n }\n\n if (ok) {\n if (state.pos >= end) { break; }\n continue;\n }\n\n state.pending += state.src[state.pos++];\n }\n\n if (state.pending) {\n state.pushPending();\n }\n};\n\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n var i, rules, len;\n var state = new this.State(str, md, env, outTokens);\n\n this.tokenize(state);\n\n rules = this.ruler2.getRules('');\n len = rules.length;\n\n for (i = 0; i < len; i++) {\n rules[i](state);\n }\n};\n\n\nParserInline.prototype.State = require('./rules_inline/state_inline');\n\n\nmodule.exports = ParserInline;\n", "'use strict';\n\n\nmodule.exports = function (opts) {\n var re = {};\n\n // Use direct extract instead of `regenerate` to reduse browserified size\n re.src_Any = require('uc.micro/properties/Any/regex').source;\n re.src_Cc = require('uc.micro/categories/Cc/regex').source;\n re.src_Z = require('uc.micro/categories/Z/regex').source;\n re.src_P = require('uc.micro/categories/P/regex').source;\n\n // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|');\n\n // \\p{\\Z\\Cc} (white spaces + control)\n re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|');\n\n // Experimental. List of chars, completely prohibited in links\n // because can separate it from other part of text\n var text_separators = '[><\\uff5c]';\n\n // All possible word characters (everything without punctuation, spaces & controls)\n // Defined via punctuation & spaces to save space\n // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';\n // The same as abothe but without [0-9]\n // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n ////////////////////////////////////////////////////////////////////////////////\n\n re.src_ip4 =\n\n '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n\n re.src_port =\n\n '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n re.src_host_terminator =\n\n '(?=$|' + text_separators + '|' + re.src_ZPCc + ')(?!-|_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n\n re.src_path =\n\n '(?:' +\n '[/?#]' +\n '(?:' +\n '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n \"\\\\'(?=\" + re.src_pseudo_letter + '|[-]).|' + // allow `I'm_king` if no pair found\n '\\\\.{2,}[a-zA-Z0-9%/&]|' + // google has many dots in \"google search\" links (#66, #81).\n // github has ... in commit range links,\n // Restrict to\n // - english\n // - percent-encoded\n // - parts of file path\n // - params separator\n // until more examples found.\n '\\\\.(?!' + re.src_ZCc + '|[.]).|' +\n (opts && opts['---'] ?\n '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n :\n '\\\\-+|'\n ) +\n ',(?!' + re.src_ZCc + ').|' + // allow `,,,` in paths\n ';(?!' + re.src_ZCc + ').|' + // allow `;` if not followed by space-like char\n '\\\\!+(?!' + re.src_ZCc + '|[!]).|' + // allow `!!!` in paths, but not at the end\n '\\\\?(?!' + re.src_ZCc + '|[?]).' +\n ')+' +\n '|\\\\/' +\n ')?';\n\n // Allow anything in markdown spec, forbid quote (\") at the first position\n // because emails enclosed in quotes are far more common\n re.src_email_name =\n\n '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n\n re.src_xn =\n\n 'xn--[a-z0-9\\\\-]{1,59}';\n\n // More to read about domain names\n // http://serverfault.com/questions/638260/\n\n re.src_domain_root =\n\n // Allow letters & digits (http://test1)\n '(?:' +\n re.src_xn +\n '|' +\n re.src_pseudo_letter + '{1,63}' +\n ')';\n\n re.src_domain =\n\n '(?:' +\n re.src_xn +\n '|' +\n '(?:' + re.src_pseudo_letter + ')' +\n '|' +\n '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n ')';\n\n re.src_host =\n\n '(?:' +\n // Don't need IP check, because digits are already allowed in normal domain names\n // src_ip4 +\n // '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/*_root*/ + ')' +\n ')';\n\n re.tpl_host_fuzzy =\n\n '(?:' +\n re.src_ip4 +\n '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n ')';\n\n re.tpl_host_no_ip_fuzzy =\n\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n\n re.src_host_strict =\n\n re.src_host + re.src_host_terminator;\n\n re.tpl_host_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_host_terminator;\n\n re.src_host_port_strict =\n\n re.src_host + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_no_ip_fuzzy_strict =\n\n re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n\n ////////////////////////////////////////////////////////////////////////////////\n // Main rules\n\n // Rude test fuzzy links by host, for quick deny\n re.tpl_host_fuzzy_test =\n\n 'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n\n re.tpl_email_fuzzy =\n\n '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n\n re.tpl_link_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n\n re.tpl_link_no_ip_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n\n return re;\n};\n", "'use strict';\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\nfunction isRegExp(obj) { return _class(obj) === '[object RegExp]'; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\n\n\nfunction escapeRE(str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&'); }\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n fuzzyLink: true,\n fuzzyEmail: true,\n fuzzyIP: false\n};\n\n\nfunction isOptionsObj(obj) {\n return Object.keys(obj || {}).reduce(function (acc, k) {\n return acc || defaultOptions.hasOwnProperty(k);\n }, false);\n}\n\n\nvar defaultSchemas = {\n 'http:': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.http = new RegExp(\n '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n );\n }\n if (self.re.http.test(tail)) {\n return tail.match(self.re.http)[0].length;\n }\n return 0;\n }\n },\n 'https:': 'http:',\n 'ftp:': 'http:',\n '//': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.no_http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.no_http = new RegExp(\n '^' +\n self.re.src_auth +\n // Don't allow single-level domains, because of false positives like '//test'\n // with code comments\n '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n self.re.src_port +\n self.re.src_host_terminator +\n self.re.src_path,\n\n 'i'\n );\n }\n\n if (self.re.no_http.test(tail)) {\n // should not be `://` & `///`, that protects from errors in protocol name\n if (pos >= 3 && text[pos - 3] === ':') { return 0; }\n if (pos >= 3 && text[pos - 3] === '/') { return 0; }\n return tail.match(self.re.no_http)[0].length;\n }\n return 0;\n }\n },\n 'mailto:': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.mailto) {\n self.re.mailto = new RegExp(\n '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n );\n }\n if (self.re.mailto.test(tail)) {\n return tail.match(self.re.mailto)[0].length;\n }\n return 0;\n }\n }\n};\n\n/*eslint-disable max-len*/\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444'.split('|');\n\n/*eslint-enable max-len*/\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n self.__index__ = -1;\n self.__text_cache__ = '';\n}\n\nfunction createValidator(re) {\n return function (text, pos) {\n var tail = text.slice(pos);\n\n if (re.test(tail)) {\n return tail.match(re)[0].length;\n }\n return 0;\n };\n}\n\nfunction createNormalizer() {\n return function (match, self) {\n self.normalize(match);\n };\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile(self) {\n\n // Load & clone RE patterns.\n var re = self.re = require('./lib/re')(self.__opts__);\n\n // Define dynamic patterns\n var tlds = self.__tlds__.slice();\n\n self.onCompile();\n\n if (!self.__tlds_replaced__) {\n tlds.push(tlds_2ch_src_re);\n }\n tlds.push(re.src_xn);\n\n re.src_tlds = tlds.join('|');\n\n function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); }\n\n re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n //\n // Compile each schema\n //\n\n var aliases = [];\n\n self.__compiled__ = {}; // Reset compiled data\n\n function schemaError(name, val) {\n throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n }\n\n Object.keys(self.__schemas__).forEach(function (name) {\n var val = self.__schemas__[name];\n\n // skip disabled methods\n if (val === null) { return; }\n\n var compiled = { validate: null, link: null };\n\n self.__compiled__[name] = compiled;\n\n if (isObject(val)) {\n if (isRegExp(val.validate)) {\n compiled.validate = createValidator(val.validate);\n } else if (isFunction(val.validate)) {\n compiled.validate = val.validate;\n } else {\n schemaError(name, val);\n }\n\n if (isFunction(val.normalize)) {\n compiled.normalize = val.normalize;\n } else if (!val.normalize) {\n compiled.normalize = createNormalizer();\n } else {\n schemaError(name, val);\n }\n\n return;\n }\n\n if (isString(val)) {\n aliases.push(name);\n return;\n }\n\n schemaError(name, val);\n });\n\n //\n // Compile postponed aliases\n //\n\n aliases.forEach(function (alias) {\n if (!self.__compiled__[self.__schemas__[alias]]) {\n // Silently fail on missed schemas to avoid errons on disable.\n // schemaError(alias, self.__schemas__[alias]);\n return;\n }\n\n self.__compiled__[alias].validate =\n self.__compiled__[self.__schemas__[alias]].validate;\n self.__compiled__[alias].normalize =\n self.__compiled__[self.__schemas__[alias]].normalize;\n });\n\n //\n // Fake record for guessed links\n //\n self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n //\n // Build schema condition\n //\n var slist = Object.keys(self.__compiled__)\n .filter(function (name) {\n // Filter disabled & fake schemas\n return name.length > 0 && self.__compiled__[name];\n })\n .map(escapeRE)\n .join('|');\n // (?!_) cause 1.5x slowdown\n self.re.schema_test = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');\n self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');\n\n self.re.pretest = RegExp(\n '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n 'i'\n );\n\n //\n // Cleanup\n //\n\n resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match(self, shift) {\n var start = self.__index__,\n end = self.__last_index__,\n text = self.__text_cache__.slice(start, end);\n\n /**\n * Match#schema -> String\n *\n * Prefix (protocol) for matched string.\n **/\n this.schema = self.__schema__.toLowerCase();\n /**\n * Match#index -> Number\n *\n * First position of matched string.\n **/\n this.index = start + shift;\n /**\n * Match#lastIndex -> Number\n *\n * Next position after matched string.\n **/\n this.lastIndex = end + shift;\n /**\n * Match#raw -> String\n *\n * Matched string.\n **/\n this.raw = text;\n /**\n * Match#text -> String\n *\n * Notmalized text of matched string.\n **/\n this.text = text;\n /**\n * Match#url -> String\n *\n * Normalized url of matched string.\n **/\n this.url = text;\n}\n\nfunction createMatch(self, shift) {\n var match = new Match(self, shift);\n\n self.__compiled__[match.schema].normalize(match, self);\n\n return match;\n}\n\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n * for example). `linkify-it` makes shure that prefix is not preceeded with\n * alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n * - _String_ - just alias to existing rule\n * - _Object_\n * - _validate_ - validator function (should return matched length on success),\n * or `RegExp`.\n * - _normalize_ - optional function to normalize text & url of matched result\n * (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n * like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt(schemas, options) {\n if (!(this instanceof LinkifyIt)) {\n return new LinkifyIt(schemas, options);\n }\n\n if (!options) {\n if (isOptionsObj(schemas)) {\n options = schemas;\n schemas = {};\n }\n }\n\n this.__opts__ = assign({}, defaultOptions, options);\n\n // Cache last tested result. Used to skip repeating steps on next `match` call.\n this.__index__ = -1;\n this.__last_index__ = -1; // Next scan position\n this.__schema__ = '';\n this.__text_cache__ = '';\n\n this.__schemas__ = assign({}, defaultSchemas, schemas);\n this.__compiled__ = {};\n\n this.__tlds__ = tlds_default;\n this.__tlds_replaced__ = false;\n\n this.re = {};\n\n compile(this);\n}\n\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add(schema, definition) {\n this.__schemas__[schema] = definition;\n compile(this);\n return this;\n};\n\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set(options) {\n this.__opts__ = assign(this.__opts__, options);\n return this;\n};\n\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test(text) {\n // Reset scan cache\n this.__text_cache__ = text;\n this.__index__ = -1;\n\n if (!text.length) { return false; }\n\n var m, ml, me, len, shift, next, re, tld_pos, at_pos;\n\n // try to scan for link with schema - that's the most simple rule\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search;\n re.lastIndex = 0;\n while ((m = re.exec(text)) !== null) {\n len = this.testSchemaAt(text, m[2], re.lastIndex);\n if (len) {\n this.__schema__ = m[2];\n this.__index__ = m.index + m[1].length;\n this.__last_index__ = m.index + m[0].length + len;\n break;\n }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n // guess schemaless links\n tld_pos = text.search(this.re.host_fuzzy_test);\n if (tld_pos >= 0) {\n // if tld is located after found link - no need to check fuzzy pattern\n if (this.__index__ < 0 || tld_pos < this.__index__) {\n if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n\n shift = ml.index + ml[1].length;\n\n if (this.__index__ < 0 || shift < this.__index__) {\n this.__schema__ = '';\n this.__index__ = shift;\n this.__last_index__ = ml.index + ml[0].length;\n }\n }\n }\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n // guess schemaless emails\n at_pos = text.indexOf('@');\n if (at_pos >= 0) {\n // We can't skip this check, because this cases are possible:\n // 192.168.1.1@gmail.com, my.in@example.com\n if ((me = text.match(this.re.email_fuzzy)) !== null) {\n\n shift = me.index + me[1].length;\n next = me.index + me[0].length;\n\n if (this.__index__ < 0 || shift < this.__index__ ||\n (shift === this.__index__ && next > this.__last_index__)) {\n this.__schema__ = 'mailto:';\n this.__index__ = shift;\n this.__last_index__ = next;\n }\n }\n }\n }\n\n return this.__index__ >= 0;\n};\n\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest(text) {\n return this.re.pretest.test(text);\n};\n\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n // If not supported schema check requested - terminate\n if (!this.__compiled__[schema.toLowerCase()]) {\n return 0;\n }\n return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n * protocol-neutral links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match(text) {\n var shift = 0, result = [];\n\n // Try to take previous element from cache, if .test() called before\n if (this.__index__ >= 0 && this.__text_cache__ === text) {\n result.push(createMatch(this, shift));\n shift = this.__last_index__;\n }\n\n // Cut head if cache was used\n var tail = shift ? text.slice(shift) : text;\n\n // Scan string until end reached\n while (this.test(tail)) {\n result.push(createMatch(this, shift));\n\n tail = tail.slice(this.__last_index__);\n shift += this.__last_index__;\n }\n\n if (result.length) {\n return result;\n }\n\n return null;\n};\n\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444\n * are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n list = Array.isArray(list) ? list : [ list ];\n\n if (!keepOld) {\n this.__tlds__ = list.slice();\n this.__tlds_replaced__ = true;\n compile(this);\n return this;\n }\n\n this.__tlds__ = this.__tlds__.concat(list)\n .sort()\n .filter(function (el, idx, arr) {\n return el !== arr[idx - 1];\n })\n .reverse();\n\n compile(this);\n return this;\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize(match) {\n\n // Do minimal possible changes by default. Need to collect feedback prior\n // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n if (!match.schema) { match.url = 'http://' + match.url; }\n\n if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n match.url = 'mailto:' + match.url;\n }\n};\n\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\n\n\nmodule.exports = LinkifyIt;\n", "'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nmodule.exports = punycode;\n", "// markdown-it default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 100 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {},\n block: {},\n inline: {}\n }\n};\n", "// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Commonmark default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: true, // Enable HTML tags in source\n xhtmlOut: true, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'blockquote',\n 'code',\n 'fence',\n 'heading',\n 'hr',\n 'html_block',\n 'lheading',\n 'list',\n 'reference',\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'autolink',\n 'backticks',\n 'emphasis',\n 'entity',\n 'escape',\n 'html_inline',\n 'image',\n 'link',\n 'newline',\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'emphasis',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Main parser class\n\n'use strict';\n\n\nvar utils = require('./common/utils');\nvar helpers = require('./helpers');\nvar Renderer = require('./renderer');\nvar ParserCore = require('./parser_core');\nvar ParserBlock = require('./parser_block');\nvar ParserInline = require('./parser_inline');\nvar LinkifyIt = require('linkify-it');\nvar mdurl = require('mdurl');\nvar punycode = require('punycode');\n\n\nvar config = {\n default: require('./presets/default'),\n zero: require('./presets/zero'),\n commonmark: require('./presets/commonmark')\n};\n\n////////////////////////////////////////////////////////////////////////////////\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\n\nfunction validateLink(url) {\n // url should be normalized at this point, and existing entities are decoded\n var str = url.trim().toLowerCase();\n\n return BAD_PROTO_RE.test(str) ? (GOOD_DATA_RE.test(str) ? true : false) : true;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar RECODE_HOSTNAME_FOR = [ 'http:', 'https:', 'mailto:' ];\n\nfunction normalizeLink(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toASCII(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n return mdurl.encode(mdurl.format(parsed));\n}\n\nfunction normalizeLinkText(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toUnicode(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%');\n}\n\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n * md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n * configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n * similar to GFM, used when no preset name given. Enables all available rules,\n * but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n * all rules disabled. Useful to quickly setup your config via `.enable()`.\n * For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n * That's not safe! You may need external sanitizer to protect output from XSS.\n * It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n * (`<br />`). This is needed only for full CommonMark compatibility. In real\n * world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n * Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__ - `false`. Set `true` to enable [some language-neutral\n * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n * quotes beautification (smartquotes).\n * - __quotes__ - `\u201C\u201D\u2018\u2019`, String or Array. Double + single quotes replacement\n * pairs, when typographer enabled and smartquotes on. For example, you can\n * use `'\u00AB\u00BB\u201E\u201C'` for Russian, `'\u201E\u201C\u201A\u2018'` for German, and\n * `['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n * Highlighter `function (str, lang)` should return escaped HTML. It can also\n * return empty string if the source was not changed and should be escaped\n * externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n * html: true,\n * linkify: true,\n * typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n * } catch (__) {}\n * }\n *\n * return ''; // use external default escaping\n * }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return '<pre class=\"hljs\"><code>' +\n * hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n * '</code></pre>';\n * } catch (__) {}\n * }\n *\n * return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n * }\n * });\n * ```\n *\n **/\nfunction MarkdownIt(presetName, options) {\n if (!(this instanceof MarkdownIt)) {\n return new MarkdownIt(presetName, options);\n }\n\n if (!options) {\n if (!utils.isString(presetName)) {\n options = presetName || {};\n presetName = 'default';\n }\n }\n\n /**\n * MarkdownIt#inline -> ParserInline\n *\n * Instance of [[ParserInline]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.inline = new ParserInline();\n\n /**\n * MarkdownIt#block -> ParserBlock\n *\n * Instance of [[ParserBlock]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.block = new ParserBlock();\n\n /**\n * MarkdownIt#core -> Core\n *\n * Instance of [[Core]] chain executor. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.core = new ParserCore();\n\n /**\n * MarkdownIt#renderer -> Renderer\n *\n * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n * rules for new token types, generated by plugins.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * function myToken(tokens, idx, options, env, self) {\n * //...\n * return result;\n * };\n *\n * md.renderer.rules['my_token'] = myToken\n * ```\n *\n * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n **/\n this.renderer = new Renderer();\n\n /**\n * MarkdownIt#linkify -> LinkifyIt\n *\n * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n * rule.\n **/\n this.linkify = new LinkifyIt();\n\n /**\n * MarkdownIt#validateLink(url) -> Boolean\n *\n * Link validation function. CommonMark allows too much in links. By default\n * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n * except some embedded image types.\n *\n * You can change this behaviour:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * // enable everything\n * md.validateLink = function () { return true; }\n * ```\n **/\n this.validateLink = validateLink;\n\n /**\n * MarkdownIt#normalizeLink(url) -> String\n *\n * Function used to encode link url to a machine-readable format,\n * which includes url-encoding, punycode, etc.\n **/\n this.normalizeLink = normalizeLink;\n\n /**\n * MarkdownIt#normalizeLinkText(url) -> String\n *\n * Function used to decode link url to a human-readable format`\n **/\n this.normalizeLinkText = normalizeLinkText;\n\n\n // Expose utils & helpers for easy acces from plugins\n\n /**\n * MarkdownIt#utils -> utils\n *\n * Assorted utility functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js).\n **/\n this.utils = utils;\n\n /**\n * MarkdownIt#helpers -> helpers\n *\n * Link components parser functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n **/\n this.helpers = utils.assign({}, helpers);\n\n\n this.options = {};\n this.configure(presetName);\n\n if (options) { this.set(options); }\n}\n\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .set({ html: true, breaks: true })\n * .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n utils.assign(this.options, options);\n return this;\n};\n\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n var self = this, presetName;\n\n if (utils.isString(presets)) {\n presetName = presets;\n presets = config[presetName];\n if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name'); }\n }\n\n if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty'); }\n\n if (presets.options) { self.set(presets.options); }\n\n if (presets.components) {\n Object.keys(presets.components).forEach(function (name) {\n if (presets.components[name].rules) {\n self[name].ruler.enableOnly(presets.components[name].rules);\n }\n if (presets.components[name].rules2) {\n self[name].ruler2.enableOnly(presets.components[name].rules2);\n }\n });\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .enable(['sub', 'sup'])\n * .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.enable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.enable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n }\n\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.disable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.disable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n * .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n * });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n var args = [ this ].concat(Array.prototype.slice.call(arguments, 1));\n plugin.apply(plugin, args);\n return this;\n};\n\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n if (typeof src !== 'string') {\n throw new Error('Input data should be a String');\n }\n\n var state = new this.core.State(src, this, env);\n\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parse(src, env), this.options, env);\n};\n\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n var state = new this.core.State(src, this, env);\n\n state.inlineMode = true;\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\n\nmodule.exports = MarkdownIt;\n", "// Generated by PEG.js v0.11.0-master.b7b87ea, https://pegjs.org/\n\n'use strict';\n\nfunction peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = 'SyntaxError';\n\n // istanbul ignore next\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\npeg$SyntaxError.buildMessage = function (expected, found, location) {\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 + ']';\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 not: function (expectation) {\n return 'not ' + describeExpectation(expectation.expected);\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) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\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) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\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 (\n descriptions.slice(0, -1).join(', ') +\n ', or ' +\n descriptions[descriptions.length - 1]\n );\n }\n }\n\n function describeFound(found) {\n return found ? '\"' + literalEscape(found) + '\"' : 'end of input';\n }\n\n return (\n 'Expected ' +\n describeExpected(expected) +\n ' but ' +\n describeFound(found) +\n ' found.'\n );\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n\n var peg$startRuleFunctions = { Top: peg$parseTop };\n var peg$startRuleFunction = peg$parseTop;\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 = 'null';\n var peg$c10 = 'true';\n var peg$c11 = 'false';\n var peg$c12 = '{';\n var peg$c13 = '}';\n var peg$c14 = ':';\n var peg$c15 = '-';\n var peg$c16 = '\"';\n var peg$c17 = '\\\\';\n\n var peg$r0 = /^[$@]/;\n var peg$r1 = /^[0-9]/;\n var peg$r2 = /^[^\\0-\\x1F\"\\\\]/;\n var peg$r3 = /^[a-zA-Z0-9_\\-]/;\n var peg$r4 = /^[ \\n\\t]/;\n\n var peg$e0 = peg$literalExpectation('/', false);\n var peg$e1 = peg$otherExpectation('tag name');\n var peg$e2 = peg$otherExpectation('class');\n var peg$e3 = peg$otherExpectation('id');\n var peg$e4 = peg$literalExpectation('=', false);\n var peg$e5 = peg$literalExpectation('(', false);\n var peg$e6 = peg$literalExpectation(')', false);\n var peg$e7 = peg$literalExpectation(',', false);\n var peg$e8 = peg$otherExpectation('variable');\n var peg$e9 = peg$otherExpectation('null');\n var peg$e10 = peg$otherExpectation('boolean');\n var peg$e11 = peg$literalExpectation('[', false);\n var peg$e12 = peg$literalExpectation(']', false);\n var peg$e13 = peg$literalExpectation('{', false);\n var peg$e14 = peg$literalExpectation('}', false);\n var peg$e15 = peg$literalExpectation(':', false);\n var peg$e16 = peg$otherExpectation('number');\n var peg$e17 = peg$otherExpectation('string');\n var peg$e18 = peg$otherExpectation('identifier');\n var peg$e19 = peg$otherExpectation('whitespace');\n\n var peg$f0 = function (variable) {\n return { type: 'variable', meta: { variable } };\n };\n var peg$f1 = function (attributes) {\n return { type: 'annotation', meta: { attributes } };\n };\n var peg$f2 = function (tag, value) {\n return value;\n };\n var peg$f3 = function (tag, primary, attributes, close) {\n if (primary) {\n attributes = attributes || [];\n attributes.unshift({\n type: 'attribute',\n name: 'primary',\n value: primary,\n });\n }\n\n const [type, nesting] = close ? ['tag', 0] : ['tag_open', 1];\n return { type, nesting, meta: { tag, attributes } };\n };\n var peg$f4 = function (tag) {\n return { type: 'tag_close', nesting: -1, meta: { tag } };\n };\n var peg$f5 = function (head, tail) {\n return !head ? [] : [head, ...tail];\n };\n var peg$f6 = function (item) {\n return item;\n };\n var peg$f7 = function (ids) {\n return ids;\n };\n var peg$f8 = function (classes) {\n return classes;\n };\n var peg$f9 = function (attribute) {\n return attribute;\n };\n var peg$f10 = function (name) {\n return { type: 'class', name, value: true };\n };\n var peg$f11 = function (value) {\n return { type: 'attribute', name: 'id', value };\n };\n var peg$f12 = function (name, value) {\n return { type: 'attribute', name, value };\n };\n var peg$f13 = function (name, head, tail) {\n return head ? [head, ...tail] : [];\n };\n var peg$f14 = function (name, params) {\n let parameters = {};\n for (let [index, { name, value }] of params.entries())\n parameters[name || index] = value;\n return new Function(name, parameters);\n };\n var peg$f15 = function (name) {\n return name;\n };\n var peg$f16 = function (name, value) {\n return { name, value };\n };\n var peg$f17 = function (value) {\n return value;\n };\n var peg$f18 = function (prefix, head, tail) {\n if (prefix === '@') return [head, ...tail];\n return new Variable([head, ...tail]);\n };\n var peg$f19 = function () {\n return null;\n };\n var peg$f20 = function () {\n return true;\n };\n var peg$f21 = function () {\n return false;\n };\n var peg$f22 = function (head, tail) {\n return [head, ...tail];\n };\n var peg$f23 = function (value) {\n return value || [];\n };\n var peg$f24 = function (head, tail) {\n return Object.assign(head, ...tail);\n };\n var peg$f25 = function (value) {\n return value || {};\n };\n var peg$f26 = function (key, value) {\n return key === '$$mdtype' ? {} : { [key]: value };\n };\n var peg$f27 = function () {\n return parseFloat(text());\n };\n var peg$f28 = function (value) {\n return value.join('');\n };\n var peg$f29 = function (sequence) {\n return sequence;\n };\n\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$expected = [];\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(\n 'Can\\'t start parsing from rule \"' + options.startRule + '\".'\n );\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 [peg$savedPos, peg$currPos];\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location =\n 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 =\n 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 {\n type: 'class',\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase,\n };\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 var peg$VALIDFILENAME =\n typeof options.filename === 'string' && options.filename.length > 0;\n function peg$computeLocation(startPos, endPos) {\n var loc = {};\n\n if (peg$VALIDFILENAME) loc.filename = options.filename;\n\n var startPosDetails = peg$computePosDetails(startPos);\n loc.start = {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column,\n };\n\n var endPosDetails = peg$computePosDetails(endPos);\n loc.end = {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column,\n };\n\n return loc;\n }\n\n function peg$begin() {\n peg$expected.push({ pos: peg$currPos, variants: [] });\n }\n\n function peg$expect(expected) {\n var top = peg$expected[peg$expected.length - 1];\n\n if (peg$currPos < top.pos) {\n return;\n }\n\n if (peg$currPos > top.pos) {\n top.pos = peg$currPos;\n top.variants = [];\n }\n\n top.variants.push(expected);\n }\n\n function peg$end(invert) {\n var expected = peg$expected.pop();\n var top = peg$expected[peg$expected.length - 1];\n var variants = expected.variants;\n\n if (top.pos !== expected.pos) {\n return;\n }\n\n if (invert) {\n variants = variants.map(function (e) {\n return e.type === 'not' ? e.expected : { type: 'not', expected: e };\n });\n }\n\n Array.prototype.push.apply(top.variants, variants);\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, location),\n expected,\n found,\n location\n );\n }\n\n function peg$buildError() {\n var expected = peg$expected[0];\n var failPos = expected.pos;\n\n return peg$buildStructuredError(\n expected.variants,\n failPos < input.length ? input.charAt(failPos) : null,\n failPos < input.length\n ? peg$computeLocation(failPos, failPos + 1)\n : peg$computeLocation(failPos, failPos)\n );\n }\n\n function peg$parseTop() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseTopLevelValue();\n if (s0 === peg$FAILED) {\n s0 = peg$parseAnnotation();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagOpen();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagClose();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseTopLevelValue() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseVariable();\n if (s1 === peg$FAILED) {\n s1 = peg$parseFunction();\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseAnnotation() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributes();\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 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$parseTagOpen() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagName();\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$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n peg$savedPos = s3;\n s3 = peg$f2(s1, s4);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseTagAttributes();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n s6 = peg$parse_();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parse_();\n }\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s6 = peg$c0;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s3, s4, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagClose() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagName();\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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagName() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e1);\n peg$silentFails++;\n s0 = peg$parseIdentifier();\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttributes() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributesItem();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseTagAttributesTail();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseTagAttributesTail();\n }\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$parseTagAttributesTail() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagAttributesItem();\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$parseTagAttributesItem() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutId();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f7(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutClass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagAttribute();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f9(s1);\n }\n s0 = s1;\n }\n }\n\n return s0;\n }\n\n function peg$parseTagShortcutClass() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e2);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagShortcutId() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e3);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\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 peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttribute() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseValue();\n if (s3 !== 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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunction() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e5);\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c4;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$currPos;\n s5 = peg$parseFunctionParameter();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s6 = [];\n s7 = peg$parseFunctionParameterTail();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parseFunctionParameterTail();\n }\n peg$savedPos = s4;\n s4 = peg$f13(s1, s5, s6);\n rule$expects(peg$e6);\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c5;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s1, 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 return s0;\n }\n\n function peg$parseFunctionParameter() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s3 = peg$c3;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f15(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 s1 = null;\n }\n s2 = peg$parseValue();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunctionParameterTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\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 rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$parseFunctionParameter();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\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$parseTrailingComma() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\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 rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\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 if (s0 === peg$FAILED) {\n s0 = null;\n }\n\n return s0;\n }\n\n function peg$parseVariable() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e8);\n peg$silentFails++;\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 }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseVariableTail();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseVariableTail();\n }\n peg$savedPos = s0;\n s0 = peg$f18(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 peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseVariableTail() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\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 if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseValueNumber();\n if (s2 === peg$FAILED) {\n s2 = peg$parseValueString();\n }\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 }\n if (s3 !== 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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseValue() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseValueNull();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueBoolean();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueString();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueArray();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueHash();\n if (s0 === peg$FAILED) {\n s0 = peg$parseFunction();\n if (s0 === peg$FAILED) {\n s0 = peg$parseVariable();\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseValueNull() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e9);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c9) {\n s1 = peg$c9;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19();\n }\n s0 = s1;\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueBoolean() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e10);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c10) {\n s1 = peg$c10;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f20();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c11) {\n s1 = peg$c11;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f21();\n }\n s0 = s1;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueArray() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e11);\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\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$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueArrayTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueArrayTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f22(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e12);\n if (input.charCodeAt(peg$currPos) === 93) {\n s5 = peg$c8;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(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$parseValueArrayTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\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 rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\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$parseValueHash() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e13);\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\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$currPos;\n s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueHashTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueHashTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f24(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e14);\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\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\n return s0;\n }\n\n function peg$parseValueHashTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\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 rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s4);\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$parseValueHashItem() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 === peg$FAILED) {\n s1 = peg$parseValueString();\n }\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e15);\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c14;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f26(s1, 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 return s0;\n }\n\n function peg$parseValueNumber() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e16);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\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 }\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 }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\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 }\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 }\n }\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 s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f27();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueString() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e17);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseValueStringChars();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseValueStringChars();\n }\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c16;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\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$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueStringChars() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\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 }\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueStringEscapes();\n }\n\n return s0;\n }\n\n function peg$parseValueStringEscapes() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c17;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s2 = peg$c16;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c17;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n }\n if (s2 !== 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\n return s0;\n }\n\n function peg$parseIdentifier() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e18);\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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\n return s0;\n }\n\n function peg$parse_() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e19);\n peg$silentFails++;\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n const { Variable, Function } = options;\n\n peg$begin();\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$expect(peg$endExpectation());\n }\n\n throw peg$buildError();\n }\n}\n\nmodule.exports = {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse,\n};\n", "// Process ^superscript^\n\n'use strict';\n\n// same as UNESCAPE_MD_RE plus a space\nvar UNESCAPE_RE = /\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;\n\nfunction superscript(state, silent) {\n var found,\n content,\n token,\n max = state.posMax,\n start = state.pos;\n\n if (state.src.charCodeAt(start) !== 0x5E/* ^ */) { return false; }\n if (silent) { return false; } // don't run any pairs in validation mode\n if (start + 2 >= max) { return false; }\n\n state.pos = start + 1;\n\n while (state.pos < max) {\n if (state.src.charCodeAt(state.pos) === 0x5E/* ^ */) {\n found = true;\n break;\n }\n\n state.md.inline.skipToken(state);\n }\n\n if (!found || start + 1 === state.pos) {\n state.pos = start;\n return false;\n }\n\n content = state.src.slice(start + 1, state.pos);\n\n // don't allow unescaped spaces/newlines inside\n if (content.match(/(^|[^\\\\])(\\\\\\\\)*\\s/)) {\n state.pos = start;\n return false;\n }\n\n // found!\n state.posMax = state.pos;\n state.pos = start + 1;\n\n // Earlier we checked !silent, but this implementation does not need it\n token = state.push('sup_open', 'sup', 1);\n token.markup = '^';\n\n token = state.push('text', '', 0);\n token.content = content.replace(UNESCAPE_RE, '$1');\n\n token = state.push('sup_close', 'sup', -1);\n token.markup = '^';\n\n state.pos = state.posMax + 1;\n state.posMax = max;\n return true;\n}\n\n\nmodule.exports = function sup_plugin(md) {\n md.inline.ruler.after('emphasis', 'sup', superscript);\n};\n", "'use strict';\n\n\nmodule.exports = require('./lib/');\n", "import Tokenizer from './src/tokenizer';\nimport parser from './src/parser';\nimport Node from './src/ast/node';\nimport Tag from './src/ast/tag';\nimport Ast from './src/ast/index';\nimport * as nodes from './src/schema';\nimport tags from './src/tags/index';\nimport { truthy } from './src/tags/conditional';\nimport functions from './src/functions/index';\nimport renderers from './src/renderers/index';\nimport transformer from './src/transformer';\nimport validator from './src/validator';\nimport { parseTags } from './src/utils';\nimport transforms from './src/transforms/index';\nimport Raw from '@markdoc/markdoc/src/ast/raw';\n\nimport type Token from 'markdown-it/lib/token';\nimport type { Config, RenderableTreeNode, ValidateError } from './src/types';\n\nexport * from './src/types';\n\nconst tokenizer = new Tokenizer();\n\nfunction mergeConfig(config: Config = {}): Config {\n return {\n ...config,\n tags: {\n ...tags,\n ...config.tags,\n },\n nodes: {\n ...nodes,\n ...config.nodes,\n },\n functions: {\n ...functions,\n ...config.functions,\n },\n };\n}\n\nexport function parse(content: string | Token[], file?: string): Node {\n if (typeof content === 'string') content = tokenizer.tokenize(content);\n return parser(content, file);\n}\n\nexport function resolve<C extends Config = Config>(\n content: Node,\n config: C\n): Node;\nexport function resolve<C extends Config = Config>(\n content: Node[],\n config: C\n): Node[];\nexport function resolve<C extends Config = Config>(\n content: any,\n config: C\n): any {\n if (Array.isArray(content))\n return content.flatMap((child) => child.resolve(config));\n\n return content.resolve(config);\n}\n\nexport function transform<C extends Config = Config>(\n node: Node,\n config?: C\n): RenderableTreeNode;\nexport function transform<C extends Config = Config>(\n nodes: Node[],\n config?: C\n): RenderableTreeNode[];\nexport function transform<C extends Config = Config>(\n nodes: any,\n options?: C\n): any {\n const config = mergeConfig(options);\n const content = resolve(nodes, config);\n\n if (Array.isArray(content))\n return content.flatMap((child) => child.transform(config));\n return content.transform(config);\n}\n\nexport function validate<C extends Config = Config>(\n content: Node,\n options?: C\n): ValidateError[] {\n const config = mergeConfig(options);\n\n const output = [];\n for (const node of [content, ...content.walk()]) {\n const { type, lines, location } = node;\n const errors = validator(node, config);\n\n for (const error of errors) output.push({ type, lines, location, error });\n }\n\n return output;\n}\n\nexport function createElement(\n name: string | { key?: string | number },\n attributes = {},\n ...children: any[]\n) {\n return { name, attributes, children };\n}\n\nexport default {\n nodes,\n tags,\n functions,\n renderers,\n transforms,\n Ast,\n Tag,\n Raw,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n parse,\n transform,\n validate,\n createElement,\n truthy,\n};\n\nexport {\n nodes,\n tags,\n functions,\n transforms,\n renderers,\n Ast,\n Tag,\n Raw,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n truthy,\n};\n", "import MarkdownIt from 'markdown-it/lib';\nimport annotations from './plugins/annotations';\nimport frontmatter from './plugins/frontmatter';\nimport type Token from 'markdown-it/lib/token';\n\nexport default class Tokenizer {\n private parser: MarkdownIt;\n\n constructor(\n config: MarkdownIt.Options & { allowIndentation?: boolean } = {}\n ) {\n this.parser = new MarkdownIt(config);\n this.parser.use(annotations, 'annotations', {});\n this.parser.use(frontmatter, 'frontmatter', {});\n this.parser.use(require('markdown-it-sup'))\n this.parser.disable('lheading');\n }\n\n tokenize(content: string): Token[] {\n return this.parser.parse(content.toString(), {});\n }\n}\n", "import { parse, SyntaxError } from './grammar/tag';\nimport Variable from './ast/variable';\nimport Function from './ast/function';\n\nimport type Token from 'markdown-it/lib/token';\n\nenum STATES {\n normal,\n string,\n escape,\n}\n\nexport const OPEN = '{%';\nexport const CLOSE = '%}';\n\nexport function findTagEnd(content: string, start = 0) {\n let state = STATES.normal;\n for (let pos = start; pos < content.length; pos++) {\n const char = content[pos];\n\n switch (state) {\n case STATES.string:\n switch (char) {\n case '\"':\n state = STATES.normal;\n break;\n case '\\\\':\n state = STATES.escape;\n break;\n }\n break;\n case STATES.escape:\n state = STATES.string;\n break;\n case STATES.normal:\n if (char === '\"') state = STATES.string;\n else if (content.startsWith(CLOSE, pos)) return pos;\n }\n }\n}\n\nfunction parseTag(content: string, line: number, contentStart: number) {\n try {\n return parse(content, { Variable, Function });\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = {\n start: { line, character: start.offset + contentStart },\n end: { line: line + 1, character: end.offset + contentStart },\n };\n\n return { type: 'error', meta: { error: { message, location } } };\n }\n}\n\nexport function parseTags(content: string, firstLine = 0): Token[] {\n let line = firstLine + 1;\n const output = [];\n let start = 0;\n\n for (let pos = 0; pos < content.length; pos++) {\n if (content[pos] === '\\n') {\n line++;\n continue;\n }\n\n if (!content.startsWith(OPEN, pos)) continue;\n\n const end = findTagEnd(content, pos) || 0;\n const text = content.slice(pos, end + CLOSE.length);\n const inner = content.slice(pos + OPEN.length, end);\n const lineStart = content.lastIndexOf('\\n', pos);\n const lineEnd = content.indexOf('\\n', end);\n const lineContent = content.slice(lineStart, lineEnd);\n const tag = parseTag(inner.trim(), line, pos - lineStart);\n\n // Throw away excess whitespace introduced by block-level tags\n const precedingTextEnd = lineContent.trim() === text ? lineStart : pos;\n const precedingText = content.slice(start, precedingTextEnd);\n\n output.push({\n type: 'text',\n start,\n end: pos - 1,\n content: precedingText,\n });\n\n output.push({\n map: [line, line + 1],\n position: {\n start: pos - lineStart,\n end: pos - lineStart + text.length,\n },\n start: pos,\n end: pos + text.length - 1,\n info: text,\n ...tag,\n });\n\n start = end + CLOSE.length;\n pos = start - 1;\n }\n\n output.push({\n type: 'text',\n start,\n end: content.length - 1,\n content: content.slice(start),\n });\n\n return output;\n}\n", "import type { Config, AstType } from '../types';\n\nexport default class Variable implements AstType {\n readonly $$mdtype = 'Variable';\n\n path;\n\n constructor(path: (string | number)[] = []) {\n this.path = path;\n }\n\n resolve({ variables }: Config = {}) {\n return variables instanceof Function\n ? variables(this.path)\n : this.path.reduce((obj = {}, key) => obj[key], variables);\n }\n}\n", "import type {\n AstType,\n Config,\n Function as AstFunction,\n Scalar,\n} from '../types';\n\nexport function isAst(value?: any): value is AstType {\n return !!value?.$$mdtype;\n}\n\nexport function isFunction(value?: any): value is AstFunction {\n return !!(value?.$$mdtype === 'Function');\n}\n\nexport function* getAstValues(value: any): Generator<AstType, void, unknown> {\n if (value == null || typeof value !== 'object') return;\n\n if (Array.isArray(value)) for (const v of value) yield* getAstValues(v);\n\n if (isAst(value)) yield value;\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return;\n\n for (const v of Object.values(value)) yield* getAstValues(v);\n}\n\nexport function resolve(value: any, config: Config = {}): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => resolve(item, config));\n\n if (isAst(value) && value?.resolve instanceof Function)\n return value.resolve(config);\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = resolve(v, config);\n return output;\n}\n", "import { resolve } from './base';\nimport type { Config, AstType } from '../types';\n\nexport default class Function implements AstType {\n readonly $$mdtype = 'Function';\n\n name;\n parameters;\n\n constructor(name: string, parameters: Record<string, any>) {\n this.name = name;\n this.parameters = parameters;\n }\n\n resolve(config: Config = {}) {\n const fn = config?.functions?.[this.name];\n if (!fn) return null;\n\n const parameters = resolve(this.parameters, config);\n return fn.transform?.(parameters, config);\n }\n}\n", "import { findTagEnd, parseTags } from '../../utils';\nimport { parse, SyntaxError } from '../../grammar/tag';\nimport Variable from '../../ast/variable';\nimport Function from '../../ast/function';\n\nimport type { AttributeValue } from '../../types';\nimport type MarkdownIt from 'markdown-it/lib';\nimport type StateCore from 'markdown-it/lib/rules_core/state_core';\nimport type StateInline from 'markdown-it/lib/rules_inline/state_inline';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\nimport type Token from 'markdown-it/lib/token';\n\nimport { OPEN, CLOSE } from '../../utils';\n\nfunction createToken(\n state: StateBlock | StateInline,\n content: string,\n contentStart?: number\n): Token {\n try {\n const { type, meta, nesting = 0 } = parse(content, { Variable, Function });\n const token = state.push(type, '', nesting);\n token.info = content;\n token.meta = meta;\n\n return token;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = contentStart\n ? {\n start: { offset: start.offset + contentStart },\n end: { offset: end.offset + contentStart },\n }\n : null;\n\n const token = state.push('error', '', 0);\n token.meta = { error: { message, location } };\n return token;\n }\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n const start = state.bMarks[startLine] + state.tShift[startLine];\n const finish = state.eMarks[startLine];\n\n if (!state.src.startsWith(OPEN, start)) return false;\n\n const tagEnd = findTagEnd(state.src, start);\n const lastPossible = state.src.slice(0, finish).trim().length;\n\n if (!tagEnd || tagEnd < lastPossible - CLOSE.length) return false;\n\n const contentStart = start + OPEN.length;\n const content = state.src.slice(contentStart, tagEnd).trim();\n const lines = content.split('\\n').length;\n\n if (content[0] === '$') return false;\n\n if (silent) return true;\n\n const token = createToken(state, content, contentStart);\n token.map = [startLine, startLine + lines];\n state.line += lines;\n return true;\n}\n\nfunction inline(state: StateInline, silent: boolean): boolean {\n if (!state.src.startsWith(OPEN, state.pos)) return false;\n\n const tagEnd = findTagEnd(state.src, state.pos);\n if (!tagEnd) return false;\n\n const content = state.src.slice(state.pos + OPEN.length, tagEnd);\n if (!silent) createToken(state, content.trim());\n\n state.pos = tagEnd + CLOSE.length;\n return true;\n}\n\nfunction core(state: StateCore) {\n let token: Token;\n for (token of state.tokens) {\n if (token.type !== 'fence') continue;\n\n if (token.info.includes(OPEN)) {\n const start = token.info.indexOf(OPEN);\n const end = findTagEnd(token.info, start);\n const content = token.info.slice(start + OPEN.length, end);\n\n try {\n const { meta } = parse(content.trim(), { Variable, Function });\n token.meta = meta;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n if (!token.errors) token.errors = [];\n token.errors.push({\n id: 'fence-tag-error',\n level: 'error',\n message: `Syntax error in fence tag: ${\n (error as SyntaxError).message\n }`,\n });\n }\n }\n\n if (\n token?.meta?.attributes?.find(\n (attr: AttributeValue) => attr.name === 'process' && !attr.value\n )\n )\n continue;\n\n token.children = parseTags(token.content, token.map[0]);\n }\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('paragraph', 'annotations', block, {\n alt: ['paragraph', 'blockquote'],\n });\n md.inline.ruler.push('containers', inline);\n md.core.ruler.push('annotations', core);\n}\n", "import type MarkdownIt from 'markdown-it/lib';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\n\nconst fence = '---';\n\nfunction getLine(state: StateBlock, n: number) {\n return state.src.slice(state.bMarks[n], state.eMarks[n]).trim();\n}\n\nfunction findClose(state: StateBlock, endLine: number) {\n for (let line = 1; line < endLine; line++)\n if (getLine(state, line) === fence) return line;\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n if (startLine != 0 || getLine(state, 0) != fence) return false;\n\n const close = findClose(state, endLine);\n\n if (!close) return false;\n if (silent) return true;\n\n const token = state.push('frontmatter', '', 0);\n token.content = state.src.slice(state.eMarks[0], state.bMarks[close]).trim();\n token.map = [0, close];\n token.hidden = true;\n\n state.line = close + 1;\n return true;\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('hr', 'frontmatter', block);\n}\n", "import type { RenderableTreeNode } from '../types';\n\nexport default class Tag {\n readonly $$mdtype = 'Tag' as const;\n\n name: string;\n attributes: Record<string, any>;\n children: RenderableTreeNode[];\n\n constructor(\n name = 'div',\n attributes = {},\n children: RenderableTreeNode[] = []\n ) {\n this.name = name;\n this.attributes = attributes;\n this.children = children;\n }\n}\n", "import { CustomAttributeTypeInterface, ValidationError } from '../types';\n\nexport class Class implements CustomAttributeTypeInterface {\n validate(value: any): ValidationError[] {\n if (typeof value === 'string' || typeof value === 'object') return [];\n\n return [\n {\n id: 'attribute-type-invalid',\n level: 'error',\n message: `Attribute 'class' must be type 'string | object'`,\n },\n ];\n }\n\n transform(value: any) {\n if (!value || typeof value === 'string') return value;\n\n const classes = [];\n for (const [k, v] of Object.entries(value ?? {})) if (v) classes.push(k);\n return classes.join(' ');\n }\n}\n", "import Tag from './ast/tag';\nimport { Class } from './schema-types/class';\nimport type {\n Config,\n Node,\n NodeType,\n Schema,\n RenderableTreeNode,\n RenderableTreeNodes,\n} from './types';\n\ntype AttributesSchema = Schema['attributes'];\n\nexport const globalAttributes: AttributesSchema = {\n class: { type: Class, render: true },\n id: { type: String, render: true },\n};\n\nexport interface Transformer {\n findSchema(node: Node, config: Config): Schema | undefined;\n node(node: Node, config: Config): RenderableTreeNodes;\n attributes(node: Node, config: Config): Record<string, any>;\n children(node: Node, config: Config): RenderableTreeNode[];\n}\n\nexport default {\n findSchema(node: Node, { nodes = {}, tags = {} }: Config = {}) {\n return node.tag ? tags[node.tag] : nodes[node.type as NodeType];\n },\n\n attributes(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n const output: Record<string, any> = {};\n\n const attrs = { ...globalAttributes, ...schema.attributes };\n for (const [key, attr] of Object.entries(attrs)) {\n if (attr.render == false) continue;\n\n const name = typeof attr.render === 'string' ? attr.render : key;\n\n let value = node.attributes[key];\n if (typeof attr.type === 'function') {\n const instance: any = new attr.type();\n if (instance.transform) {\n value = instance.transform(value, config);\n }\n }\n value = value === undefined ? attr.default : value;\n\n if (value === undefined) continue;\n output[name] = value;\n }\n\n return output;\n },\n\n children(node: Node, config: Config = {}) {\n return node.children.flatMap((child) => this.node(child, config));\n },\n\n node(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n if (schema && schema.transform instanceof Function)\n return schema.transform(node, config);\n\n const children = this.children(node, config);\n if (!schema || !schema.render) return children;\n\n const attributes = this.attributes(node, config);\n return new Tag(schema.render, attributes, children);\n },\n} as Transformer;\n", "import { resolve } from './base';\nimport transformer from '../transformer';\nimport type {\n AstType,\n Location,\n Config,\n RenderableTreeNode,\n RenderableTreeNodes,\n Schema,\n ValidationError,\n} from '../types';\n\nexport default class Node implements AstType {\n readonly $$mdtype = 'Node';\n\n attributes: Record<string, any>;\n children: Node[];\n errors: ValidationError[] = [];\n lines: number[] = [];\n type: string;\n tag?: string;\n\n inline = false;\n location?: Location;\n\n constructor(\n type = 'node',\n attributes: Record<string, any> = {},\n children: Node[] = [],\n tag?: string\n ) {\n this.attributes = attributes;\n this.children = children;\n this.type = type;\n this.tag = tag;\n }\n\n *walk(): Generator<Node, void, unknown> {\n for (const child of this.children) {\n yield child;\n yield* child.walk();\n }\n }\n\n push(node: Node) {\n this.children.push(node);\n }\n\n resolve(config: Config = {}): Node {\n return Object.assign(new Node(), this, {\n children: this.children.map((child) => child.resolve(config)),\n attributes: resolve(this.attributes, config),\n });\n }\n\n findSchema(config: Config = {}): Schema | undefined {\n return transformer.findSchema(this, config);\n }\n\n transformAttributes(config: Config = {}) {\n return transformer.attributes(this, config);\n }\n\n transformChildren(config: Config): RenderableTreeNode[] {\n return transformer.children(this, config);\n }\n\n transform(config: Config): RenderableTreeNodes {\n return transformer.node(this, config);\n }\n}\n", "import Node from './node';\nimport Function from './function';\nimport Variable from './variable';\nimport * as base from './base';\n\nimport type { AstType } from '../types';\n\nconst AstTypes = {\n Function,\n Node,\n Variable,\n};\n\nfunction reviver(_: string, value: AstType): any {\n if (!value) return value;\n const klass = AstTypes[value.$$mdtype] as any;\n return klass ? Object.assign(new klass(), value) : value;\n}\n\nfunction fromJSON(text: string): Node | Node[] {\n return JSON.parse(text, reviver);\n}\n\nexport default {\n ...AstTypes,\n ...base,\n fromJSON,\n};\n", "import Ast from '../ast/index';\n\nimport type { Node } from '../types';\n\nfunction convertToRow(node: Node, cellType = 'td') {\n node.type = 'tr';\n node.attributes = {};\n\n for (const cell of node.children) cell.type = cellType;\n\n return node;\n}\n\nexport default function transform(document: Node) {\n for (const node of document.walk()) {\n if (node.type !== 'tag' || node.tag !== 'table') continue;\n\n const [first, ...rest] = node.children;\n if (!first || first.type === 'table') continue;\n\n const table = new Ast.Node('table', node.attributes, [\n new Ast.Node('thead'),\n new Ast.Node('tbody'),\n ]);\n\n const [thead, tbody] = table.children;\n\n if (first.type === 'list') thead.push(convertToRow(first, 'th'));\n\n for (const row of rest) {\n // Convert lists to rows with special-case support for conditionals\n // When a conditional is encountered, convert all of its top-level lists to rows\n if (row.type === 'list') convertToRow(row);\n else if (row.type === 'tag' && row.tag == 'if') {\n const children = [];\n\n for (const child of row.children) {\n // Replace children and skip HRs in order to support conditionals with multiple rows\n if (child.type === 'hr') continue;\n if (child.type === 'list') convertToRow(child);\n children.push(child);\n }\n\n row.children = children;\n } else continue;\n tbody.push(row);\n }\n\n node.children = [table];\n }\n}\n", "import table from './table';\nexport default [table];\n", "import Node from './ast/node';\nimport transforms from './transforms/index';\n\nimport type { AttributeValue } from './types';\n\nimport type Token from 'markdown-it/lib/token';\n\nconst mappings: Record<string, string> = {\n ordered_list: 'list',\n bullet_list: 'list',\n code_inline: 'code',\n list_item: 'item',\n variable: 'text',\n html_block: 'html',\n html_inline: 'html',\n};\n\nfunction annotate(node: Node, attributes: AttributeValue[]) {\n for (const { name, value, type } of attributes)\n if (type === 'attribute') node.attributes[name] = value;\n else if (type === 'class')\n if (node.attributes.class) node.attributes.class[name] = value;\n else node.attributes.class = { [name]: value };\n}\n\nfunction handleAttrs(token: Token, type: string) {\n switch (type) {\n case 'heading':\n return { level: Number(token.tag.replace('h', '')) };\n case 'list':\n return { ordered: token.type.startsWith('ordered') };\n case 'link': {\n const attrs = Object.fromEntries(token.attrs);\n return { href: attrs.href };\n }\n case 'image': {\n const attrs = Object.fromEntries(token.attrs);\n return { alt: token.content, src: attrs.src };\n }\n case 'text':\n case 'code':\n case 'html':\n return { content: (token.meta || {}).variable || token.content };\n case 'fence': {\n const [language] = token.info.split(' ', 1);\n return language === ''\n ? { content: token.content }\n : { content: token.content, language };\n }\n default:\n return {};\n }\n}\n\nfunction handleToken(\n token: Token,\n nodes: Node[],\n file?: string,\n inlineParent?: Node\n) {\n if (token.type === 'frontmatter') {\n nodes[0].attributes.frontmatter = token.content;\n return;\n }\n\n if (token.hidden || (token.type === 'text' && token.content === '')) return;\n\n const errors = token.errors || [];\n const parent = nodes[nodes.length - 1];\n const { tag, attributes, error } = token.meta || {};\n\n if (token.type === 'annotation') {\n if (inlineParent) return annotate(inlineParent, attributes);\n\n return parent.errors.push({\n id: 'no-inline-annotations',\n level: 'error',\n message: `Can't apply inline annotations to '${parent.type}'`,\n });\n }\n\n let typeName = token.type.replace(/_(open|close)$/, '');\n if (mappings[typeName]) typeName = mappings[typeName];\n\n if (typeName === 'error') {\n const { message, location } = error;\n errors.push({ id: 'parse-error', level: 'critical', message, location });\n }\n\n if (token.nesting < 0) {\n if (parent.type === typeName) {\n if (parent.lines && token.map) parent.lines.push(...token.map);\n return nodes.pop();\n }\n\n errors.push({\n id: 'missing-opening',\n level: 'critical',\n message: `Node '${typeName}' is missing opening`,\n });\n }\n\n const attrs = handleAttrs(token, typeName);\n const node = new Node(typeName, attrs, undefined, tag || undefined);\n const { position = {} } = token;\n\n node.errors = errors;\n node.lines = token.map || parent.lines || [];\n node.location = {\n file,\n start: {\n line: node.lines[0],\n character: position.start,\n },\n end: {\n line: node.lines[1],\n character: position.end,\n },\n };\n\n if (inlineParent) node.inline = true;\n\n if (attributes && ['tag', 'fence', 'image'].includes(typeName))\n annotate(node, attributes);\n\n parent.push(node);\n if (token.nesting > 0) nodes.push(node);\n\n if (!Array.isArray(token.children)) return;\n\n inlineParent = parent;\n\n nodes.push(node);\n\n const isLeafNode = typeName === 'image';\n if (!isLeafNode) {\n for (const child of token.children)\n handleToken(child, nodes, file, inlineParent);\n }\n\n nodes.pop();\n}\n\nexport default function parser(tokens: Token[], file?: string) {\n const doc = new Node('document');\n const nodes = [doc];\n\n for (const token of tokens) handleToken(token, nodes, file);\n\n if (nodes.length > 1)\n for (const node of nodes.slice(1))\n node.errors.push({\n id: 'missing-closing',\n level: 'critical',\n message: `Node '${node.tag || node.type}' is missing closing`,\n });\n\n for (const transform of transforms) transform(doc);\n\n return doc;\n}\n", "import type { Schema } from './types';\nimport Tag from './ast/tag';\nimport Raw from './ast/raw';\n\nexport const document: Schema = {\n render: 'article',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n frontmatter: { render: false },\n },\n};\n\nexport const heading: Schema = {\n children: ['inline'],\n attributes: {\n level: { type: Number, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n `h${node.attributes['level']}`,\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const paragraph: Schema = {\n render: 'p',\n children: ['inline'],\n};\n\nexport const image: Schema = {\n render: 'img',\n attributes: {\n src: { type: String, required: true },\n alt: { type: String },\n // width/height attributes will need to be to be implemented as an extension to markdown-it\n },\n};\n\nexport const fence: Schema = {\n render: 'pre',\n attributes: {\n content: { type: String, render: false, required: true },\n language: { type: String, render: 'data-language' },\n process: { type: Boolean, render: false, default: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n const children = node.children.length\n ? node.transformChildren(config)\n : [node.attributes.content];\n\n return new Tag('pre', attributes, children);\n },\n};\n\nexport const blockquote: Schema = {\n render: 'blockquote',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const item: Schema = {\n render: 'li',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const list: Schema = {\n children: ['item'],\n attributes: {\n ordered: { type: Boolean, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n node.attributes.ordered ? 'ol' : 'ul',\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const hr: Schema = {\n render: 'hr',\n};\n\nexport const table: Schema = {\n render: 'table',\n};\n\nexport const td: Schema = {\n render: 'td',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n colspan: { type: Number },\n rowspan: { type: Number },\n align: { type: String },\n },\n};\n\nexport const th: Schema = {\n render: 'th',\n attributes: {\n width: { type: Number },\n align: { type: String },\n },\n};\n\nexport const tr: Schema = {\n render: 'tr',\n children: ['th', 'td'],\n};\n\nexport const tbody: Schema = {\n render: 'tbody',\n children: ['tr', 'tag'],\n};\n\nexport const thead: Schema = {\n render: 'thead',\n children: ['tr'],\n};\n\nexport const strong: Schema = {\n render: 'strong',\n children: ['em', 's', 'link', 'code', 'text', 'tag'],\n};\n\nexport const em: Schema = {\n render: 'em',\n children: ['strong', 's', 'link', 'code', 'text', 'tag'],\n};\n\nexport const s: Schema = {\n render: 's',\n children: ['strong', 'em', 'link', 'code', 'text', 'tag'],\n};\n\nexport const inline: Schema = {\n children: [\n 'strong',\n 'em',\n 's',\n 'code',\n 'text',\n 'tag',\n 'link',\n 'image',\n 'hardbreak',\n 'softbreak',\n ],\n};\n\nexport const link: Schema = {\n render: 'a',\n children: ['strong', 'em', 's', 'code', 'text', 'tag'],\n attributes: {\n href: { type: String, required: true },\n title: { type: String },\n },\n};\n\nexport const code: Schema = {\n render: 'code',\n attributes: {\n content: { type: String, render: false, required: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n return new Tag('code', attributes, [node.attributes.content]);\n },\n};\n\nexport const text: Schema = {\n attributes: {\n content: { type: String, required: true },\n },\n transform(node) {\n return node.attributes.content;\n },\n};\n\nexport const hardbreak: Schema = {\n render: 'br',\n};\n\nexport const softbreak: Schema = {\n transform(_node, _config) {\n return ' ';\n },\n};\n\nexport const html: Schema = {\n attributes: {\n content: { type: String, required: true },\n },\n\n transform(node) {\n return node.attributes.content\n ? new Raw(node.attributes.content, node.inline)\n : null;\n },\n};\n\nexport const error = {};\n", "export default class Raw {\n readonly $$mdtype = 'Raw' as const;\n \n content: string;\n inline: boolean;\n \n constructor(content: string, inline: boolean) {\n this.content = content;\n this.inline = inline;\n }\n }", "import type { Node, Schema, Value } from '../types';\n\ntype Condition = { condition: Value; children: Node[] };\n\nexport function truthy(value: any) {\n return value !== false && value !== undefined && value !== null;\n}\n\nfunction renderConditions(node: Node) {\n const conditions: Condition[] = [\n { condition: node.attributes.primary, children: [] },\n ];\n for (const child of node.children) {\n if (child.type === 'tag' && child.tag === 'else')\n conditions.push({\n condition:\n 'primary' in child.attributes ? child.attributes.primary : true,\n children: [],\n });\n else conditions[conditions.length - 1].children.push(child);\n }\n\n return conditions;\n}\n\nexport const tagIf: Schema = {\n attributes: {\n primary: { type: Object, render: false },\n },\n\n transform(node, config) {\n const conditions = renderConditions(node);\n for (const { condition, children } of conditions)\n if (truthy(condition))\n return children.flatMap((child) => child.transform(config));\n return [];\n },\n};\n\nexport const tagElse: Schema = {\n selfClosing: true,\n attributes: {\n primary: { type: Object, render: false },\n },\n};\n", "import type { Node, Config, Schema } from '../types';\n\nexport const partial: Schema = {\n selfClosing: true,\n attributes: {\n file: { type: String, render: false, required: true },\n variables: { type: Object, render: false },\n },\n\n transform(node: Node, config: Config) {\n const { partials = {} } = config;\n const { file, variables } = node.attributes;\n const partial: Node | Node[] = partials[file];\n\n if (!partial) return null;\n\n const scopedConfig = {\n ...config,\n variables: {\n ...config.variables,\n ...variables,\n ['$$partial:filename']: file,\n },\n };\n\n const transformChildren = (part: Node) =>\n part.resolve(scopedConfig).transformChildren(scopedConfig);\n\n return Array.isArray(partial)\n ? partial.flatMap(transformChildren)\n : transformChildren(partial);\n },\n};\n", "import type { Schema } from '../types';\n\nexport const table: Schema = {\n children: ['table'],\n};\n", "import { tagIf, tagElse } from './conditional';\nimport { partial } from './partial';\nimport { table } from './table';\n\nexport default {\n if: tagIf,\n else: tagElse,\n partial,\n table,\n};\n", "import type { ConfigFunction } from '../types';\nimport { truthy } from '../tags/conditional';\n\nconst and: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).every((x) => truthy(x));\n },\n};\n\nconst or: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).find((x) => truthy(x)) !== undefined;\n },\n};\n\nconst not: ConfigFunction = {\n parameters: {\n 0: { required: true },\n },\n\n transform(parameters) {\n return !truthy(parameters[0]);\n },\n};\n\nconst equals: ConfigFunction = {\n transform(parameters) {\n const values = Object.values(parameters);\n return values.every((v) => v === values[0]);\n },\n};\n\nconst debug: ConfigFunction = {\n transform(parameters) {\n return JSON.stringify(parameters[0], null, 2);\n },\n};\n\nconst defaultFn: ConfigFunction = {\n transform(parameters) {\n return parameters[0] === undefined ? parameters[1] : parameters[0];\n },\n};\n\nexport default { and, or, not, equals, default: defaultFn, debug };\n", "import MarkdownIt from 'markdown-it';\nimport type { RenderableTreeNodes } from '../types';\nconst { escapeHtml } = MarkdownIt().utils;\n\n// HTML elements that do not have a matching close tag\n// Defined in the HTML standard: https://html.spec.whatwg.org/#void-elements\nconst voidElements = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nexport default function render(node: RenderableTreeNodes): string {\n if (typeof node === 'string') return escapeHtml(node);\n\n if (Array.isArray(node)) return node.map(render).join('');\n\n if (node === null || typeof node !== 'object') return '';\n\n if (node.$$mdtype === 'Raw') return node.content;\n\n const { name, attributes, children = [] } = node;\n\n if (!name) return render(children);\n\n let output = `<${name}`;\n for (const [k, v] of Object.entries(attributes ?? {}))\n output += ` ${k}=\"${escapeHtml(String(v))}\"`;\n output += '>';\n\n if (voidElements.has(name)) return output;\n\n if (children.length) output += render(children);\n output += `</${name}>`;\n\n return output;\n}\n", "import type { ComponentType } from 'react';\n\ntype Component = ComponentType<unknown>;\n\nexport function tagName(\n name: string,\n components: Record<string, Component> | ((string: string) => Component)\n): string | Component {\n return typeof name !== 'string'\n ? 'Fragment'\n : name[0] !== name[0].toUpperCase()\n ? name\n : components instanceof Function\n ? components(name)\n : components[name];\n}\n", "import { tagName } from './shared';\nimport type { createElement, Fragment, ReactNode } from 'react';\nimport type { RenderableTreeNodes, Scalar } from '../../types';\n\ntype ReactShape = Readonly<{\n createElement: typeof createElement;\n Fragment: typeof Fragment;\n}>;\n\nexport default function dynamic(\n node: RenderableTreeNodes,\n React: ReactShape,\n { components = {} } = {},\n raw?: (content: string, inline: boolean) => ReactNode\n) {\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => deepRender(item));\n\n if (['Tag', 'Raw'].includes(value.$$mdtype)) return render(value);\n\n if (typeof value !== 'object') return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = deepRender(v);\n return output;\n }\n\n function render(node: RenderableTreeNodes): ReactNode {\n if (Array.isArray(node))\n return React.createElement(React.Fragment, null, ...node.map(render));\n\n if (node === null || typeof node !== 'object') return node;\n\n if (node.$$mdtype === 'Raw') return raw?.(node.content, node.inline);\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return React.createElement(\n tagName(name, components),\n Object.keys(attrs).length == 0 ? null : deepRender(attrs),\n ...children.map(render)\n );\n }\n\n return render(node);\n}\n", "import { tagName } from './shared';\nimport type { RenderableTreeNode, RenderableTreeNodes } from '../../types';\n\nexport default function reactStatic(\n node: RenderableTreeNodes,\n raw?: (content: string, inline: boolean) => string\n): string {\n function renderArray(children: RenderableTreeNode[]): string {\n return children.map(render).join(', ');\n }\n\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object')\n return JSON.stringify(value);\n\n if (Array.isArray(value))\n return `[${value.map((item) => deepRender(item)).join(', ')}]`;\n\n if (['Tag', 'Raw'].includes(value.$$mdtype)) return render(value);\n\n if (typeof value !== 'object') return JSON.stringify(value);\n\n const object = Object.entries(value)\n .map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(': '))\n .join(', ');\n\n return `{${object}}`;\n }\n\n function render(node: RenderableTreeNodes): string {\n if (Array.isArray(node))\n return `React.createElement(React.Fragment, null, ${renderArray(node)})`;\n\n if (node === null || typeof node !== 'object') return JSON.stringify(node);\n\n if (node.$$mdtype === 'Raw') return raw?.(node.content, node.inline) ?? '';\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return `React.createElement(\n tagName(${JSON.stringify(name)}, components),\n ${Object.keys(attrs).length == 0 ? 'null' : deepRender(attrs)},\n ${renderArray(children)})`;\n }\n\n return `\n (({components = {}} = {}) => {\n ${tagName}\n return ${render(node)};\n })\n`;\n}\n", "import html from './html';\nimport react from './react/react';\nimport reactStatic from './react/static';\n\nexport default { html, react, reactStatic };\n", "import { globalAttributes } from './transformer';\nimport Ast from './ast/index';\n\nimport type {\n Node,\n Function,\n Config,\n SchemaAttribute,\n ValidationError,\n Value,\n} from './types';\n\nconst TypeMappings = {\n String: String,\n Number: Number,\n Array: Array,\n Object: Object,\n Boolean: Boolean,\n} as const;\n\ntype TypeParam = NonNullable<SchemaAttribute['type']>;\n\nexport function validateType(\n type: TypeParam,\n value: Value,\n config: Config\n): boolean | ValidationError[] {\n if (!type) return true;\n\n if (Ast.isFunction(value) && config.validation?.validateFunctions) {\n const schema = config.functions?.[value.name];\n return !schema?.returns\n ? true\n : Array.isArray(schema.returns)\n ? schema.returns.find((t) => t === type) !== undefined\n : schema.returns === type;\n }\n\n if (Ast.isAst(value)) return true;\n\n if (Array.isArray(type))\n return type.some((t) => validateType(t, value, config));\n\n if (typeof type === 'string') type = TypeMappings[type];\n\n if (typeof type === 'function') {\n const instance: any = new type();\n if (instance.validate) {\n return instance.validate(value, config);\n }\n }\n\n return value != null && value.constructor === type;\n}\n\nfunction typeToString(type: TypeParam): string {\n if (typeof type === 'string') return type;\n\n if (Array.isArray(type)) return type.map(typeToString).join(' | ');\n\n return type.name;\n}\n\nfunction validateFunction(fn: Function, config: Config): ValidationError[] {\n const schema = config.functions?.[fn.name];\n const errors: ValidationError[] = [];\n\n if (!schema)\n return [\n {\n id: 'function-undefined',\n level: 'critical',\n message: `Undefined function '${fn.name}'`,\n },\n ];\n\n if (schema.validate) errors.push(...schema.validate(fn, config));\n\n if (schema.parameters) {\n for (const [key, value] of Object.entries(fn.parameters)) {\n const param = schema.parameters?.[key];\n\n if (!param) {\n errors.push({\n id: 'parameter-undefined',\n level: 'error',\n message: `Invalid parameter '${key}'`,\n });\n\n continue;\n }\n\n if (Ast.isAst(value) && !Ast.isFunction(value)) continue;\n\n if (param.type) {\n const valid = validateType(param.type, value, config);\n if (valid === false) {\n errors.push({\n id: 'parameter-type-invalid',\n level: 'error',\n message: `Parameter '${key}' of '${\n fn.name\n }' must be type '${typeToString(param.type)}'`,\n });\n } else if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n }\n }\n\n for (const [key, { required }] of Object.entries(schema.parameters ?? {}))\n if (required && fn.parameters[key] === undefined)\n errors.push({\n id: 'parameter-missing-required',\n level: 'error',\n message: `Missing required parameter '${key}'`,\n });\n\n return errors;\n}\n\nexport default function validate(node: Node, config: Config) {\n const schema = node.findSchema(config);\n const errors: ValidationError[] = [...(node.errors || [])];\n\n if (!schema) {\n errors.push({\n id: node.tag ? 'tag-undefined' : 'node-undefined',\n level: 'critical',\n message: node.tag\n ? `Undefined tag '${node.tag}'`\n : `Undefined node '${node.type}'`,\n });\n\n return errors;\n }\n\n if (schema.selfClosing && node.children.length > 0)\n errors.push({\n id: 'tag-selfclosing-has-children',\n level: 'critical',\n message: `Tag '${node.tag}' should be self-closing`,\n });\n\n const attributes = {\n ...globalAttributes,\n ...schema.attributes,\n };\n\n if (schema.validate) errors.push(...schema.validate(node, config));\n\n for (let [key, value] of Object.entries(node.attributes)) {\n const attrib = attributes[key];\n\n if (!attrib) {\n errors.push({\n id: 'attribute-undefined',\n level: 'error',\n message: `Invalid attribute '${key}'`,\n });\n\n continue;\n }\n\n let { type, matches, errorLevel } = attrib;\n\n if (Ast.isAst(value)) {\n if (Ast.isFunction(value) && config.validation?.validateFunctions)\n errors.push(...validateFunction(value, config));\n else continue;\n }\n\n value = value as string;\n if (key === 'id' && value.match(/^[0-9]/))\n errors.push({\n id: 'attribute-value-invalid',\n level: 'error',\n message: 'The ID attribute must not start with a number',\n });\n\n if (type) {\n const valid = validateType(type, value, config);\n if (valid === false) {\n errors.push({\n id: 'attribute-type-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must be type '${typeToString(type)}'`,\n });\n }\n if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n\n if (typeof matches === 'function') matches = matches(config);\n\n if (Array.isArray(matches) && !matches.includes(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match one of ${JSON.stringify(\n matches\n )}`,\n });\n\n if (matches instanceof RegExp && !matches.test(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match ${matches}`,\n });\n }\n\n for (const [key, { required }] of Object.entries(attributes))\n if (required && node.attributes[key] === undefined)\n errors.push({\n id: 'attribute-missing-required',\n level: 'error',\n message: `Missing required attribute '${key}'`,\n });\n\n for (const { type } of node.children) {\n if (schema.children && type !== 'error' && !schema.children.includes(type))\n errors.push({\n id: 'child-invalid',\n level: 'warning',\n message: `Can't nest '${type}' in '${node.tag || node.type}'`,\n });\n }\n\n return errors;\n}\n"],
373++ "mappings": "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",
374+ "names": []
375+ }
376+diff --git a/node_modules/@markdoc/markdoc/dist/index.mjs b/node_modules/@markdoc/markdoc/dist/index.mjs
377+index b9e074b..4b37345 100644
378+--- a/node_modules/@markdoc/markdoc/dist/index.mjs
379++++ b/node_modules/@markdoc/markdoc/dist/index.mjs
380+@@ -6590,6 +6590,57 @@ var require_tag = __commonJS({
381+ }
382+ });
383+
384++// node_modules/markdown-it-sup/index.js
385++var require_markdown_it_sup = __commonJS({
386++ "node_modules/markdown-it-sup/index.js"(exports, module) {
387++ "use strict";
388++ var UNESCAPE_RE = /\\([ \\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g;
389++ function superscript(state, silent) {
390++ var found, content, token, max = state.posMax, start = state.pos;
391++ if (state.src.charCodeAt(start) !== 94) {
392++ return false;
393++ }
394++ if (silent) {
395++ return false;
396++ }
397++ if (start + 2 >= max) {
398++ return false;
399++ }
400++ state.pos = start + 1;
401++ while (state.pos < max) {
402++ if (state.src.charCodeAt(state.pos) === 94) {
403++ found = true;
404++ break;
405++ }
406++ state.md.inline.skipToken(state);
407++ }
408++ if (!found || start + 1 === state.pos) {
409++ state.pos = start;
410++ return false;
411++ }
412++ content = state.src.slice(start + 1, state.pos);
413++ if (content.match(/(^|[^\\])(\\\\)*\s/)) {
414++ state.pos = start;
415++ return false;
416++ }
417++ state.posMax = state.pos;
418++ state.pos = start + 1;
419++ token = state.push("sup_open", "sup", 1);
420++ token.markup = "^";
421++ token = state.push("text", "", 0);
422++ token.content = content.replace(UNESCAPE_RE, "$1");
423++ token = state.push("sup_close", "sup", -1);
424++ token.markup = "^";
425++ state.pos = state.posMax + 1;
426++ state.posMax = max;
427++ return true;
428++ }
429++ module.exports = function sup_plugin(md) {
430++ md.inline.ruler.after("emphasis", "sup", superscript);
431++ };
432++ }
433++});
434++
435+ // node_modules/markdown-it/index.js
436+ var require_markdown_it = __commonJS({
437+ "node_modules/markdown-it/index.js"(exports, module) {
438+@@ -6904,6 +6955,7 @@ var Tokenizer = class {
439+ this.parser = new import_lib.default(config);
440+ this.parser.use(plugin, "annotations", {});
441+ this.parser.use(plugin2, "frontmatter", {});
442++ this.parser.use(require_markdown_it_sup());
443+ this.parser.disable("lheading");
444+ }
445+ tokenize(content) {
446+@@ -7105,7 +7157,9 @@ var mappings = {
447+ bullet_list: "list",
448+ code_inline: "code",
449+ list_item: "item",
450+- variable: "text"
451++ variable: "text",
452++ html_block: "html",
453++ html_inline: "html"
454+ };
455+ function annotate(node, attributes) {
456+ for (const { name, value, type } of attributes)
457+@@ -7133,6 +7187,7 @@ function handleAttrs(token, type) {
458+ }
459+ case "text":
460+ case "code":
461++ case "html":
462+ return { content: (token.meta || {}).variable || token.content };
463+ case "fence": {
464+ const [language] = token.info.split(" ", 1);
465+@@ -7243,6 +7298,7 @@ __export(schema_exports, {
466+ hardbreak: () => hardbreak,
467+ heading: () => heading,
468+ hr: () => hr,
469++ html: () => html,
470+ image: () => image,
471+ inline: () => inline2,
472+ item: () => item,
473+@@ -7260,6 +7316,17 @@ __export(schema_exports, {
474+ thead: () => thead,
475+ tr: () => tr
476+ });
477++
478++// src/ast/raw.ts
479++var Raw = class {
480++ constructor(content, inline3) {
481++ this.$$mdtype = "Raw";
482++ this.content = content;
483++ this.inline = inline3;
484++ }
485++};
486++
487++// src/schema.ts
488+ var document = {
489+ render: "article",
490+ children: [
491+@@ -7453,6 +7520,14 @@ var softbreak = {
492+ return " ";
493+ }
494+ };
495++var html = {
496++ attributes: {
497++ content: { type: String, required: true }
498++ },
499++ transform(node) {
500++ return node.attributes.content ? new Raw(node.attributes.content, node.inline) : null;
501++ }
502++};
503+ var error = {};
504+
505+ // src/tags/conditional.ts
506+@@ -7595,6 +7670,8 @@ function render(node) {
507+ return node.map(render).join("");
508+ if (node === null || typeof node !== "object")
509+ return "";
510++ if (node.$$mdtype === "Raw")
511++ return node.content;
512+ const { name, attributes, children = [] } = node;
513+ if (!name)
514+ return render(children);
515+@@ -7616,26 +7693,28 @@ function tagName(name, components) {
516+ }
517+
518+ // src/renderers/react/react.ts
519+-function dynamic(node, React, { components = {} } = {}) {
520+- function deepRender2(value) {
521++function dynamic(node, React, { components = {} } = {}, raw) {
522++ function deepRender(value) {
523+ if (value == null || typeof value !== "object")
524+ return value;
525+ if (Array.isArray(value))
526+- return value.map((item2) => deepRender2(item2));
527+- if (value.$$mdtype === "Tag")
528+- return render3(value);
529++ return value.map((item2) => deepRender(item2));
530++ if (["Tag", "Raw"].includes(value.$$mdtype))
531++ return render2(value);
532+ if (typeof value !== "object")
533+ return value;
534+ const output = {};
535+ for (const [k, v] of Object.entries(value))
536+- output[k] = deepRender2(v);
537++ output[k] = deepRender(v);
538+ return output;
539+ }
540+- function render3(node2) {
541++ function render2(node2) {
542+ if (Array.isArray(node2))
543+- return React.createElement(React.Fragment, null, ...node2.map(render3));
544++ return React.createElement(React.Fragment, null, ...node2.map(render2));
545+ if (node2 === null || typeof node2 !== "object")
546+ return node2;
547++ if (node2.$$mdtype === "Raw")
548++ return raw?.(node2.content, node2.inline);
549+ const {
550+ name,
551+ attributes: { class: className, ...attrs } = {},
552+@@ -7643,45 +7722,47 @@ function dynamic(node, React, { components = {} } = {}) {
553+ } = node2;
554+ if (className)
555+ attrs.className = className;
556+- return React.createElement(tagName(name, components), Object.keys(attrs).length == 0 ? null : deepRender2(attrs), ...children.map(render3));
557++ return React.createElement(tagName(name, components), Object.keys(attrs).length == 0 ? null : deepRender(attrs), ...children.map(render2));
558+ }
559+- return render3(node);
560++ return render2(node);
561+ }
562+
563+ // src/renderers/react/static.ts
564+-function renderArray(children) {
565+- return children.map(render2).join(", ");
566+-}
567+-function deepRender(value) {
568+- if (value == null || typeof value !== "object")
569+- return JSON.stringify(value);
570+- if (Array.isArray(value))
571+- return `[${value.map((item2) => deepRender(item2)).join(", ")}]`;
572+- if (value.$$mdtype === "Tag")
573+- return render2(value);
574+- if (typeof value !== "object")
575+- return JSON.stringify(value);
576+- const object = Object.entries(value).map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(": ")).join(", ");
577+- return `{${object}}`;
578+-}
579+-function render2(node) {
580+- if (Array.isArray(node))
581+- return `React.createElement(React.Fragment, null, ${renderArray(node)})`;
582+- if (node === null || typeof node !== "object")
583+- return JSON.stringify(node);
584+- const {
585+- name,
586+- attributes: { class: className, ...attrs } = {},
587+- children = []
588+- } = node;
589+- if (className)
590+- attrs.className = className;
591+- return `React.createElement(
592++function reactStatic(node, raw) {
593++ function renderArray(children) {
594++ return children.map(render2).join(", ");
595++ }
596++ function deepRender(value) {
597++ if (value == null || typeof value !== "object")
598++ return JSON.stringify(value);
599++ if (Array.isArray(value))
600++ return `[${value.map((item2) => deepRender(item2)).join(", ")}]`;
601++ if (["Tag", "Raw"].includes(value.$$mdtype))
602++ return render2(value);
603++ if (typeof value !== "object")
604++ return JSON.stringify(value);
605++ const object = Object.entries(value).map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(": ")).join(", ");
606++ return `{${object}}`;
607++ }
608++ function render2(node2) {
609++ if (Array.isArray(node2))
610++ return `React.createElement(React.Fragment, null, ${renderArray(node2)})`;
611++ if (node2 === null || typeof node2 !== "object")
612++ return JSON.stringify(node2);
613++ if (node2.$$mdtype === "Raw")
614++ return raw?.(node2.content, node2.inline) ?? "";
615++ const {
616++ name,
617++ attributes: { class: className, ...attrs } = {},
618++ children = []
619++ } = node2;
620++ if (className)
621++ attrs.className = className;
622++ return `React.createElement(
623+ tagName(${JSON.stringify(name)}, components),
624+ ${Object.keys(attrs).length == 0 ? "null" : deepRender(attrs)},
625+ ${renderArray(children)})`;
626+-}
627+-function reactStatic(node) {
628++ }
629+ return `
630+ (({components = {}} = {}) => {
631+ ${tagName}
632+@@ -7929,6 +8010,7 @@ var markdoc_default = {
633+ transforms: transforms_default,
634+ Ast: ast_default,
635+ Tag,
636++ Raw,
637+ Tokenizer,
638+ parseTags,
639+ transformer: transformer_default,
640+@@ -7941,6 +8023,7 @@ var markdoc_default = {
641+ };
642+ export {
643+ ast_default as Ast,
644++ Raw,
645+ Tag,
646+ Tokenizer,
647+ createElement,
648+diff --git a/node_modules/@markdoc/markdoc/dist/index.mjs.map b/node_modules/@markdoc/markdoc/dist/index.mjs.map
649+index c8e26b7..1fe6693 100644
650+--- a/node_modules/@markdoc/markdoc/dist/index.mjs.map
651++++ b/node_modules/@markdoc/markdoc/dist/index.mjs.map
652+@@ -1,7 +1,7 @@
653+ {
654+ "version": 3,
655+- "sources": ["../node_modules/markdown-it/lib/common/entities.js", "../node_modules/uc.micro/categories/P/regex.js", "../node_modules/mdurl/encode.js", "../node_modules/mdurl/decode.js", "../node_modules/mdurl/format.js", "../node_modules/mdurl/parse.js", "../node_modules/mdurl/index.js", "../node_modules/uc.micro/properties/Any/regex.js", "../node_modules/uc.micro/categories/Cc/regex.js", "../node_modules/uc.micro/categories/Cf/regex.js", "../node_modules/uc.micro/categories/Z/regex.js", "../node_modules/uc.micro/index.js", "../node_modules/markdown-it/lib/common/utils.js", "../node_modules/markdown-it/lib/helpers/parse_link_label.js", "../node_modules/markdown-it/lib/helpers/parse_link_destination.js", "../node_modules/markdown-it/lib/helpers/parse_link_title.js", "../node_modules/markdown-it/lib/helpers/index.js", "../node_modules/markdown-it/lib/renderer.js", "../node_modules/markdown-it/lib/ruler.js", "../node_modules/markdown-it/lib/rules_core/normalize.js", "../node_modules/markdown-it/lib/rules_core/block.js", "../node_modules/markdown-it/lib/rules_core/inline.js", "../node_modules/markdown-it/lib/rules_core/linkify.js", "../node_modules/markdown-it/lib/rules_core/replacements.js", "../node_modules/markdown-it/lib/rules_core/smartquotes.js", "../node_modules/markdown-it/lib/token.js", "../node_modules/markdown-it/lib/rules_core/state_core.js", "../node_modules/markdown-it/lib/parser_core.js", "../node_modules/markdown-it/lib/rules_block/table.js", "../node_modules/markdown-it/lib/rules_block/code.js", "../node_modules/markdown-it/lib/rules_block/fence.js", "../node_modules/markdown-it/lib/rules_block/blockquote.js", "../node_modules/markdown-it/lib/rules_block/hr.js", "../node_modules/markdown-it/lib/rules_block/list.js", "../node_modules/markdown-it/lib/rules_block/reference.js", "../node_modules/markdown-it/lib/common/html_blocks.js", "../node_modules/markdown-it/lib/common/html_re.js", "../node_modules/markdown-it/lib/rules_block/html_block.js", "../node_modules/markdown-it/lib/rules_block/heading.js", "../node_modules/markdown-it/lib/rules_block/lheading.js", "../node_modules/markdown-it/lib/rules_block/paragraph.js", "../node_modules/markdown-it/lib/rules_block/state_block.js", "../node_modules/markdown-it/lib/parser_block.js", "../node_modules/markdown-it/lib/rules_inline/text.js", "../node_modules/markdown-it/lib/rules_inline/newline.js", "../node_modules/markdown-it/lib/rules_inline/escape.js", "../node_modules/markdown-it/lib/rules_inline/backticks.js", "../node_modules/markdown-it/lib/rules_inline/strikethrough.js", "../node_modules/markdown-it/lib/rules_inline/emphasis.js", "../node_modules/markdown-it/lib/rules_inline/link.js", "../node_modules/markdown-it/lib/rules_inline/image.js", "../node_modules/markdown-it/lib/rules_inline/autolink.js", "../node_modules/markdown-it/lib/rules_inline/html_inline.js", "../node_modules/markdown-it/lib/rules_inline/entity.js", "../node_modules/markdown-it/lib/rules_inline/balance_pairs.js", "../node_modules/markdown-it/lib/rules_inline/text_collapse.js", "../node_modules/markdown-it/lib/rules_inline/state_inline.js", "../node_modules/markdown-it/lib/parser_inline.js", "../node_modules/linkify-it/lib/re.js", "../node_modules/linkify-it/index.js", "../node_modules/punycode/punycode.js", "../node_modules/markdown-it/lib/presets/default.js", "../node_modules/markdown-it/lib/presets/zero.js", "../node_modules/markdown-it/lib/presets/commonmark.js", "../node_modules/markdown-it/lib/index.js", "../src/grammar/tag.js", "../node_modules/markdown-it/index.js", "../src/tokenizer/index.ts", "../src/utils.ts", "../src/ast/variable.ts", "../src/ast/base.ts", "../src/ast/function.ts", "../src/tokenizer/plugins/annotations.ts", "../src/tokenizer/plugins/frontmatter.ts", "../src/ast/tag.ts", "../src/schema-types/class.ts", "../src/transformer.ts", "../src/ast/node.ts", "../src/ast/index.ts", "../src/transforms/table.ts", "../src/transforms/index.ts", "../src/parser.ts", "../src/schema.ts", "../src/tags/conditional.ts", "../src/tags/partial.ts", "../src/tags/table.ts", "../src/tags/index.ts", "../src/functions/index.ts", "../src/renderers/html.ts", "../src/renderers/react/shared.ts", "../src/renderers/react/react.ts", "../src/renderers/react/static.ts", "../src/renderers/index.ts", "../src/validator.ts", "../index.ts"],
656+- "sourcesContent": ["// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/lib/maps/entities.json');\n", "module.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/", "\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n var i, ch, cache = encodeCache[exclude];\n if (cache) { return cache; }\n\n cache = encodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch);\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n }\n }\n\n for (i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i];\n }\n\n return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n var i, l, code, nextCode, cache,\n result = '';\n\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude;\n exclude = encode.defaultChars;\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true;\n }\n\n cache = getEncodeCache(exclude);\n\n for (i = 0, l = string.length; i < l; i++) {\n code = string.charCodeAt(i);\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3);\n i += 2;\n continue;\n }\n }\n\n if (code < 128) {\n result += cache[code];\n continue;\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n nextCode = string.charCodeAt(i + 1);\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1]);\n i++;\n continue;\n }\n }\n result += '%EF%BF%BD';\n continue;\n }\n\n result += encodeURIComponent(string[i]);\n }\n\n return result;\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n", "\n'use strict';\n\n\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n var i, ch, cache = decodeCache[exclude];\n if (cache) { return cache; }\n\n cache = decodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n cache.push(ch);\n }\n\n for (i = 0; i < exclude.length; i++) {\n ch = exclude.charCodeAt(i);\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n }\n\n return cache;\n}\n\n\n// Decode percent-encoded string.\n//\nfunction decode(string, exclude) {\n var cache;\n\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars;\n }\n\n cache = getDecodeCache(exclude);\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {\n var i, l, b1, b2, b3, b4, chr,\n result = '';\n\n for (i = 0, l = seq.length; i < l; i += 3) {\n b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n if (b1 < 0x80) {\n result += cache[b1];\n continue;\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n if ((b2 & 0xC0) === 0x80) {\n chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F);\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 3;\n continue;\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F);\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 6;\n continue;\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F);\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd';\n } else {\n chr -= 0x10000;\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n }\n\n i += 9;\n continue;\n }\n }\n\n result += '\\ufffd';\n }\n\n return result;\n });\n}\n\n\ndecode.defaultChars = ';/?:@&=+$,#';\ndecode.componentChars = '';\n\n\nmodule.exports = decode;\n", "\n'use strict';\n\n\nmodule.exports = function format(url) {\n var result = '';\n\n result += url.protocol || '';\n result += url.slashes ? '//' : '';\n result += url.auth ? url.auth + '@' : '';\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']';\n } else {\n result += url.hostname || '';\n }\n\n result += url.port ? ':' + url.port : '';\n result += url.pathname || '';\n result += url.search || '';\n result += url.hash || '';\n\n return result;\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\n'use strict';\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.pathname = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = [ '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t' ],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = [ '{', '}', '|', '\\\\', '^', '`' ].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = [ '\\'' ].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape),\n hostEndingChars = [ '/', '?', '#' ],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n /* eslint-disable no-script-url */\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n };\n /* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n if (url && url instanceof Url) { return url; }\n\n var u = new Url();\n u.parse(url, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, slashesDenoteHost) {\n var i, l, lowerProto, hec, slashes,\n rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n lowerProto = proto.toLowerCase();\n this.protocol = proto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = auth;\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length;\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd--; }\n var host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost(host);\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) { continue; }\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n }\n }\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n rest = rest.slice(0, qm);\n }\n if (rest) { this.pathname = rest; }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '';\n }\n\n return this;\n};\n\nUrl.prototype.parseHost = function(host) {\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) { this.hostname = host; }\n};\n\nmodule.exports = urlParse;\n", "'use strict';\n\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse = require('./parse');\n", "module.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/", "module.exports=/[\\0-\\x1F\\x7F-\\x9F]/", "module.exports=/[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/", "module.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/", "'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc = require('./categories/Cc/regex');\nexports.Cf = require('./categories/Cf/regex');\nexports.P = require('./categories/P/regex');\nexports.Z = require('./categories/Z/regex');\n", "// Utilities\n//\n'use strict';\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object');\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n /*eslint no-bitwise:0*/\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) { return false; }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false; }\n if (c === 0x0B) { return false; }\n if (c >= 0x0E && c <= 0x1F) { return false; }\n if (c >= 0x7F && c <= 0x9F) { return false; }\n // out of range\n if (c > 0x10FFFF) { return false; }\n return true;\n}\n\nfunction fromCodePoint(c) {\n /*eslint no-bitwise:0*/\n if (c > 0xffff) {\n c -= 0x10000;\n var surrogate1 = 0xd800 + (c >> 10),\n surrogate2 = 0xdc00 + (c & 0x3ff);\n\n return String.fromCharCode(surrogate1, surrogate2);\n }\n return String.fromCharCode(c);\n}\n\n\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\n\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n var code = 0;\n\n if (has(entities, name)) {\n return entities[name];\n }\n\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n code = name[1].toLowerCase() === 'x' ?\n parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code);\n }\n }\n\n return match;\n}\n\n/*function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n if (str.indexOf('\\\\') < 0) { return str; }\n return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str; }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped; }\n return replaceEntityPattern(match, entity);\n });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;'\n};\n\nfunction replaceUnsafeChar(ch) {\n return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n }\n return str;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isSpace(code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true;\n }\n return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n if (code >= 0x2000 && code <= 0x200A) { return true; }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true;\n }\n return false;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n return UNICODE_PUNCT_RE.test(ch);\n}\n\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n switch (ch) {\n case 0x21/* ! */:\n case 0x22/* \" */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x27/* ' */:\n case 0x28/* ( */:\n case 0x29/* ) */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2C/* , */:\n case 0x2D/* - */:\n case 0x2E/* . */:\n case 0x2F/* / */:\n case 0x3A/* : */:\n case 0x3B/* ; */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x3F/* ? */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7C/* | */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ');\n\n // In node v10 '\u1E9E'.toLowerCase() === '\u1E7E', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('\u1E9E'.toLowerCase() === '\u1E7E') {\n str = str.replace(/\u1E9E/g, '\u00DF');\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // \u0130, \u03F4, \u1E9E, \u2126, \u212A, \u212B - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (\u0398), U+03f4 (\u03F4) and lowercase U+03b8 (\u03B8), U+03d1 (\u03D1)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change \u03D1 (it's already lowercase),\n // and .toUpperCase() doesn't change \u03F4 (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib = {};\nexports.lib.mdurl = require('mdurl');\nexports.lib.ucmicro = require('uc.micro');\n\nexports.assign = assign;\nexports.isString = isString;\nexports.has = has;\nexports.unescapeMd = unescapeMd;\nexports.unescapeAll = unescapeAll;\nexports.isValidEntityCode = isValidEntityCode;\nexports.fromCodePoint = fromCodePoint;\n// exports.replaceEntities = replaceEntities;\nexports.escapeHtml = escapeHtml;\nexports.arrayReplaceAt = arrayReplaceAt;\nexports.isSpace = isSpace;\nexports.isWhiteSpace = isWhiteSpace;\nexports.isMdAsciiPunct = isMdAsciiPunct;\nexports.isPunctChar = isPunctChar;\nexports.escapeRE = escapeRE;\nexports.normalizeReference = normalizeReference;\n", "// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n var level, found, marker, prevPos,\n labelEnd = -1,\n max = state.posMax,\n oldPos = state.pos;\n\n state.pos = start + 1;\n level = 1;\n\n while (state.pos < max) {\n marker = state.src.charCodeAt(state.pos);\n if (marker === 0x5D /* ] */) {\n level--;\n if (level === 0) {\n found = true;\n break;\n }\n }\n\n prevPos = state.pos;\n state.md.inline.skipToken(state);\n if (marker === 0x5B /* [ */) {\n if (prevPos === state.pos - 1) {\n // increase level if we find text `[`, which is not a part of any token\n level++;\n } else if (disableNested) {\n state.pos = oldPos;\n return -1;\n }\n }\n }\n\n if (found) {\n labelEnd = state.pos;\n }\n\n // restore old state\n state.pos = oldPos;\n\n return labelEnd;\n};\n", "// Parse link destination\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkDestination(str, pos, max) {\n var code, level,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (str.charCodeAt(pos) === 0x3C /* < */) {\n pos++;\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === 0x0A /* \\n */) { return result; }\n if (code === 0x3C /* < */) { return result; }\n if (code === 0x3E /* > */) {\n result.pos = pos + 1;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n }\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n pos++;\n }\n\n // no closing '>'\n return result;\n }\n\n // this should be ... } else { ... branch\n\n level = 0;\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x20) { break; }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7F) { break; }\n\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) { break; }\n pos += 2;\n continue;\n }\n\n if (code === 0x28 /* ( */) {\n level++;\n if (level > 32) { return result; }\n }\n\n if (code === 0x29 /* ) */) {\n if (level === 0) { break; }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos) { return result; }\n if (level !== 0) { return result; }\n\n result.str = unescapeAll(str.slice(start, pos));\n result.lines = lines;\n result.pos = pos;\n result.ok = true;\n return result;\n};\n", "// Parse link title\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkTitle(str, pos, max) {\n var code,\n marker,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (pos >= max) { return result; }\n\n marker = str.charCodeAt(pos);\n\n if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; }\n\n pos++;\n\n // if opening marker is \"(\", switch it to closing marker \")\"\n if (marker === 0x28) { marker = 0x29; }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === marker) {\n result.pos = pos + 1;\n result.lines = lines;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n } else if (code === 0x28 /* ( */ && marker === 0x29 /* ) */) {\n return result;\n } else if (code === 0x0A) {\n lines++;\n } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos++;\n if (str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n\n pos++;\n }\n\n return result;\n};\n", "// Just a shortcut for bulk export\n'use strict';\n\n\nexports.parseLinkLabel = require('./parse_link_label');\nexports.parseLinkDestination = require('./parse_link_destination');\nexports.parseLinkTitle = require('./parse_link_title');\n", "/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\n\nvar assign = require('./common/utils').assign;\nvar unescapeAll = require('./common/utils').unescapeAll;\nvar escapeHtml = require('./common/utils').escapeHtml;\n\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar default_rules = {};\n\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<code' + slf.renderAttrs(token) + '>' +\n escapeHtml(tokens[idx].content) +\n '</code>';\n};\n\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<pre' + slf.renderAttrs(token) + '><code>' +\n escapeHtml(tokens[idx].content) +\n '</code></pre>\\n';\n};\n\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n var token = tokens[idx],\n info = token.info ? unescapeAll(token.info).trim() : '',\n langName = '',\n langAttrs = '',\n highlighted, i, arr, tmpAttrs, tmpToken;\n\n if (info) {\n arr = info.split(/(\\s+)/g);\n langName = arr[0];\n langAttrs = arr.slice(2).join('');\n }\n\n if (options.highlight) {\n highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n } else {\n highlighted = escapeHtml(token.content);\n }\n\n if (highlighted.indexOf('<pre') === 0) {\n return highlighted + '\\n';\n }\n\n // If language exists, inject class gently, without modifying original token.\n // May be, one day we will add .deepClone() for token and simplify this part, but\n // now we prefer to keep things local.\n if (info) {\n i = token.attrIndex('class');\n tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\n if (i < 0) {\n tmpAttrs.push([ 'class', options.langPrefix + langName ]);\n } else {\n tmpAttrs[i] = tmpAttrs[i].slice();\n tmpAttrs[i][1] += ' ' + options.langPrefix + langName;\n }\n\n // Fake token just to render attributes\n tmpToken = {\n attrs: tmpAttrs\n };\n\n return '<pre><code' + slf.renderAttrs(tmpToken) + '>'\n + highlighted\n + '</code></pre>\\n';\n }\n\n\n return '<pre><code' + slf.renderAttrs(token) + '>'\n + highlighted\n + '</code></pre>\\n';\n};\n\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n // should be placed on proper position for tests.\n //\n // Replace content with actual value\n\n token.attrs[token.attrIndex('alt')][1] =\n slf.renderInlineAsText(token.children, options, env);\n\n return slf.renderToken(tokens, idx, options);\n};\n\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n return options.xhtmlOut ? '<br />\\n' : '<br>\\n';\n};\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n';\n};\n\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n return escapeHtml(tokens[idx].content);\n};\n\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\n\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer() {\n\n /**\n * Renderer#rules -> Object\n *\n * Contains render rules for tokens. Can be updated and extended.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.renderer.rules.strong_open = function () { return '<b>'; };\n * md.renderer.rules.strong_close = function () { return '</b>'; };\n *\n * var result = md.renderInline(...);\n * ```\n *\n * Each rule is called as independent static function with fixed signature:\n *\n * ```javascript\n * function my_token_render(tokens, idx, options, env, renderer) {\n * // ...\n * return renderedHTML;\n * }\n * ```\n *\n * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n * for more details and examples.\n **/\n this.rules = assign({}, default_rules);\n}\n\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n var i, l, result;\n\n if (!token.attrs) { return ''; }\n\n result = '';\n\n for (i = 0, l = token.attrs.length; i < l; i++) {\n result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n }\n\n return result;\n};\n\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n var nextToken,\n result = '',\n needLf = false,\n token = tokens[idx];\n\n // Tight list paragraphs\n if (token.hidden) {\n return '';\n }\n\n // Insert a newline between hidden paragraph and subsequent opening\n // block-level tag.\n //\n // For example, here we should insert a newline before blockquote:\n // - a\n // >\n //\n if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n result += '\\n';\n }\n\n // Add token name, e.g. `<img`\n result += (token.nesting === -1 ? '</' : '<') + token.tag;\n\n // Encode attributes, e.g. `<img src=\"foo\"`\n result += this.renderAttrs(token);\n\n // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n if (token.nesting === 0 && options.xhtmlOut) {\n result += ' /';\n }\n\n // Check if we need to add a newline after this tag\n if (token.block) {\n needLf = true;\n\n if (token.nesting === 1) {\n if (idx + 1 < tokens.length) {\n nextToken = tokens[idx + 1];\n\n if (nextToken.type === 'inline' || nextToken.hidden) {\n // Block-level tag containing an inline tag.\n //\n needLf = false;\n\n } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n //\n needLf = false;\n }\n }\n }\n }\n\n result += needLf ? '>\\n' : '>';\n\n return result;\n};\n\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n var type,\n result = '',\n rules = this.rules;\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options);\n }\n }\n\n return result;\n};\n\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n var result = '';\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n if (tokens[i].type === 'text') {\n result += tokens[i].content;\n } else if (tokens[i].type === 'image') {\n result += this.renderInlineAsText(tokens[i].children, options, env);\n } else if (tokens[i].type === 'softbreak') {\n result += '\\n';\n }\n }\n\n return result;\n};\n\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n var i, len, type,\n result = '',\n rules = this.rules;\n\n for (i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (type === 'inline') {\n result += this.renderInline(tokens[i].children, options, env);\n } else if (typeof rules[type] !== 'undefined') {\n result += rules[tokens[i].type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options, env);\n }\n }\n\n return result;\n};\n\nmodule.exports = Renderer;\n", "/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = [];\n\n // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n this.__cache__ = null;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n for (var i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i;\n }\n }\n return -1;\n};\n\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n var self = this;\n var chains = [ '' ];\n\n // collect unique names\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName);\n }\n });\n });\n\n self.__cache__ = {};\n\n chains.forEach(function (chain) {\n self.__cache__[chain] = [];\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n if (chain && rule.alt.indexOf(chain) < 0) { return; }\n\n self.__cache__[chain].push(rule.fn);\n });\n });\n};\n\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n var index = this.__find__(name);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + name); }\n\n this.__rules__[index].fn = fn;\n this.__rules__[index].alt = opt.alt || [];\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n var index = this.__find__(beforeName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); }\n\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n var index = this.__find__(afterName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + afterName); }\n\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n var opt = options || {};\n\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and enable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = true;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n this.__rules__.forEach(function (rule) { rule.enabled = false; });\n\n this.enable(list, ignoreInvalid);\n};\n\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and disable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = false;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__();\n }\n\n // Chain can be empty, if rules disabled. But we still have to return Array.\n return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;\n", "// Normalize input string\n\n'use strict';\n\n\n// https://spec.commonmark.org/0.29/#line-ending\nvar NEWLINES_RE = /\\r\\n?|\\n/g;\nvar NULL_RE = /\\0/g;\n\n\nmodule.exports = function normalize(state) {\n var str;\n\n // Normalize newlines\n str = state.src.replace(NEWLINES_RE, '\\n');\n\n // Replace NULL characters\n str = str.replace(NULL_RE, '\\uFFFD');\n\n state.src = str;\n};\n", "'use strict';\n\n\nmodule.exports = function block(state) {\n var token;\n\n if (state.inlineMode) {\n token = new state.Token('inline', '', 0);\n token.content = state.src;\n token.map = [ 0, 1 ];\n token.children = [];\n state.tokens.push(token);\n } else {\n state.md.block.parse(state.src, state.md, state.env, state.tokens);\n }\n};\n", "'use strict';\n\nmodule.exports = function inline(state) {\n var tokens = state.tokens, tok, i, l;\n\n // Parse inlines\n for (i = 0, l = tokens.length; i < l; i++) {\n tok = tokens[i];\n if (tok.type === 'inline') {\n state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n }\n }\n};\n", "// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\n\nfunction isLinkOpen(str) {\n return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n return /^<\\/a\\s*>/i.test(str);\n}\n\n\nmodule.exports = function linkify(state) {\n var i, j, l, tokens, token, currentToken, nodes, ln, text, pos, lastPos,\n level, htmlLinkLevel, url, fullUrl, urlText,\n blockTokens = state.tokens,\n links;\n\n if (!state.md.options.linkify) { return; }\n\n for (j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline' ||\n !state.md.linkify.pretest(blockTokens[j].content)) {\n continue;\n }\n\n tokens = blockTokens[j].children;\n\n htmlLinkLevel = 0;\n\n // We scan from the end, to keep position when new tags added.\n // Use reversed logic in links start/end match\n for (i = tokens.length - 1; i >= 0; i--) {\n currentToken = tokens[i];\n\n // Skip content of markdown links\n if (currentToken.type === 'link_close') {\n i--;\n while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n i--;\n }\n continue;\n }\n\n // Skip content of html tag links\n if (currentToken.type === 'html_inline') {\n if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n htmlLinkLevel--;\n }\n if (isLinkClose(currentToken.content)) {\n htmlLinkLevel++;\n }\n }\n if (htmlLinkLevel > 0) { continue; }\n\n if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n\n text = currentToken.content;\n links = state.md.linkify.match(text);\n\n // Now split string to nodes\n nodes = [];\n level = currentToken.level;\n lastPos = 0;\n\n for (ln = 0; ln < links.length; ln++) {\n\n url = links[ln].url;\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { continue; }\n\n urlText = links[ln].text;\n\n // Linkifier might send raw hostnames like \"example.com\", where url\n // starts with domain name. So we prepend http:// in those cases,\n // and remove it afterwards.\n //\n if (!links[ln].schema) {\n urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '');\n } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '');\n } else {\n urlText = state.md.normalizeLinkText(urlText);\n }\n\n pos = links[ln].index;\n\n if (pos > lastPos) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos, pos);\n token.level = level;\n nodes.push(token);\n }\n\n token = new state.Token('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.level = level++;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n token = new state.Token('text', '', 0);\n token.content = urlText;\n token.level = level;\n nodes.push(token);\n\n token = new state.Token('link_close', 'a', -1);\n token.level = --level;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n lastPos = links[ln].lastIndex;\n }\n if (lastPos < text.length) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos);\n token.level = level;\n nodes.push(token);\n }\n\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n }\n }\n }\n};\n", "// Simple typographic replacements\n//\n// (c) (C) \u2192 \u00A9\n// (tm) (TM) \u2192 \u2122\n// (r) (R) \u2192 \u00AE\n// +- \u2192 \u00B1\n// (p) (P) -> \u00A7\n// ... \u2192 \u2026 (also ?.... \u2192 ?.., !.... \u2192 !..)\n// ???????? \u2192 ???, !!!!! \u2192 !!!, `,,` \u2192 `,`\n// -- \u2192 &ndash;, --- \u2192 &mdash;\n//\n'use strict';\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> \u00BD, \u00BC, \u00BE\n// - miltiplication 2 x 4 -> 2 \u00D7 4\n\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r|p)\\)/i;\n\nvar SCOPED_ABBR_RE = /\\((c|tm|r|p)\\)/ig;\nvar SCOPED_ABBR = {\n c: '\u00A9',\n r: '\u00AE',\n p: '\u00A7',\n tm: '\u2122'\n};\n\nfunction replaceFn(match, name) {\n return SCOPED_ABBR[name.toLowerCase()];\n}\n\nfunction replace_scoped(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\nfunction replace_rare(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n if (RARE_RE.test(token.content)) {\n token.content = token.content\n .replace(/\\+-/g, '\u00B1')\n // .., ..., ....... -> \u2026\n // but ?..... & !..... -> ?.. & !..\n .replace(/\\.{2,}/g, '\u2026').replace(/([?!])\u2026/g, '$1..')\n .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n // em-dash\n .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n // en-dash\n .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013');\n }\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\n\nmodule.exports = function replace(state) {\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline') { continue; }\n\n if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n replace_scoped(state.tokens[blkIdx].children);\n }\n\n if (RARE_RE.test(state.tokens[blkIdx].content)) {\n replace_rare(state.tokens[blkIdx].children);\n }\n\n }\n};\n", "// Convert straight quotation marks to typographic ones\n//\n'use strict';\n\n\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = '\\u2019'; /* \u2019 */\n\n\nfunction replaceAt(str, index, ch) {\n return str.substr(0, index) + ch + str.substr(index + 1);\n}\n\nfunction process_inlines(tokens, state) {\n var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar,\n isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace,\n canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;\n\n stack = [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n\n thisLevel = tokens[i].level;\n\n for (j = stack.length - 1; j >= 0; j--) {\n if (stack[j].level <= thisLevel) { break; }\n }\n stack.length = j + 1;\n\n if (token.type !== 'text') { continue; }\n\n text = token.content;\n pos = 0;\n max = text.length;\n\n /*eslint no-labels:0,block-scoped-var:0*/\n OUTER:\n while (pos < max) {\n QUOTE_RE.lastIndex = pos;\n t = QUOTE_RE.exec(text);\n if (!t) { break; }\n\n canOpen = canClose = true;\n pos = t.index + 1;\n isSingle = (t[0] === \"'\");\n\n // Find previous character,\n // default to space if it's the beginning of the line\n //\n lastChar = 0x20;\n\n if (t.index - 1 >= 0) {\n lastChar = text.charCodeAt(t.index - 1);\n } else {\n for (j = i - 1; j >= 0; j--) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n break;\n }\n }\n\n // Find next character,\n // default to space if it's the end of the line\n //\n nextChar = 0x20;\n\n if (pos < max) {\n nextChar = text.charCodeAt(pos);\n } else {\n for (j = i + 1; j < tokens.length; j++) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n nextChar = tokens[j].content.charCodeAt(0);\n break;\n }\n }\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n canOpen = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n canOpen = false;\n }\n }\n\n if (isLastWhiteSpace) {\n canClose = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n canClose = false;\n }\n }\n\n if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n // special case: 1\"\" - count first quote as an inch\n canClose = canOpen = false;\n }\n }\n\n if (canOpen && canClose) {\n // Replace quotes in the middle of punctuation sequence, but not\n // in the middle of the words, i.e.:\n //\n // 1. foo \" bar \" baz - not replaced\n // 2. foo-\"-bar-\"-baz - replaced\n // 3. foo\"bar\"baz - not replaced\n //\n canOpen = isLastPunctChar;\n canClose = isNextPunctChar;\n }\n\n if (!canOpen && !canClose) {\n // middle of word\n if (isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n continue;\n }\n\n if (canClose) {\n // this could be a closing quote, rewind the stack to get a match\n for (j = stack.length - 1; j >= 0; j--) {\n item = stack[j];\n if (stack[j].level < thisLevel) { break; }\n if (item.single === isSingle && stack[j].level === thisLevel) {\n item = stack[j];\n\n if (isSingle) {\n openQuote = state.md.options.quotes[2];\n closeQuote = state.md.options.quotes[3];\n } else {\n openQuote = state.md.options.quotes[0];\n closeQuote = state.md.options.quotes[1];\n }\n\n // replace token.content *before* tokens[item.token].content,\n // because, if they are pointing at the same token, replaceAt\n // could mess up indices when quote length != 1\n token.content = replaceAt(token.content, t.index, closeQuote);\n tokens[item.token].content = replaceAt(\n tokens[item.token].content, item.pos, openQuote);\n\n pos += closeQuote.length - 1;\n if (item.token === i) { pos += openQuote.length - 1; }\n\n text = token.content;\n max = text.length;\n\n stack.length = j;\n continue OUTER;\n }\n }\n }\n\n if (canOpen) {\n stack.push({\n token: i,\n pos: t.index,\n single: isSingle,\n level: thisLevel\n });\n } else if (canClose && isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n }\n }\n}\n\n\nmodule.exports = function smartquotes(state) {\n /*eslint max-depth:0*/\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline' ||\n !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n continue;\n }\n\n process_inlines(state.tokens[blkIdx].children, state);\n }\n};\n", "// Token class\n\n'use strict';\n\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type;\n\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n this.tag = tag;\n\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n this.attrs = null;\n\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n this.map = null;\n\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n this.nesting = nesting;\n\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n this.level = 0;\n\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n this.children = null;\n\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n this.content = '';\n\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n this.markup = '';\n\n /**\n * Token#info -> String\n *\n * Additional information:\n *\n * - Info string for \"fence\" tokens\n * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n **/\n this.info = '';\n\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n this.meta = null;\n\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n this.block = false;\n\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n this.hidden = false;\n}\n\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n var attrs, i, len;\n\n if (!this.attrs) { return -1; }\n\n attrs = this.attrs;\n\n for (i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) { return i; }\n }\n return -1;\n};\n\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n if (this.attrs) {\n this.attrs.push(attrData);\n } else {\n this.attrs = [ attrData ];\n }\n};\n\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n var idx = this.attrIndex(name),\n attrData = [ name, value ];\n\n if (idx < 0) {\n this.attrPush(attrData);\n } else {\n this.attrs[idx] = attrData;\n }\n};\n\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n var idx = this.attrIndex(name), value = null;\n if (idx >= 0) {\n value = this.attrs[idx][1];\n }\n return value;\n};\n\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n var idx = this.attrIndex(name);\n\n if (idx < 0) {\n this.attrPush([ name, value ]);\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n }\n};\n\n\nmodule.exports = Token;\n", "// Core state object\n//\n'use strict';\n\nvar Token = require('../token');\n\n\nfunction StateCore(src, md, env) {\n this.src = src;\n this.env = env;\n this.tokens = [];\n this.inlineMode = false;\n this.md = md; // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token;\n\n\nmodule.exports = StateCore;\n", "/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n [ 'normalize', require('./rules_core/normalize') ],\n [ 'block', require('./rules_core/block') ],\n [ 'inline', require('./rules_core/inline') ],\n [ 'linkify', require('./rules_core/linkify') ],\n [ 'replacements', require('./rules_core/replacements') ],\n [ 'smartquotes', require('./rules_core/smartquotes') ]\n];\n\n\n/**\n * new Core()\n **/\nfunction Core() {\n /**\n * Core#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of core rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n}\n\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n var i, l, rules;\n\n rules = this.ruler.getRules('');\n\n for (i = 0, l = rules.length; i < l; i++) {\n rules[i](state);\n }\n};\n\nCore.prototype.State = require('./rules_core/state_core');\n\n\nmodule.exports = Core;\n", "// GFM table, https://github.github.com/gfm/#tables-extension-\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction getLine(state, line) {\n var pos = state.bMarks[line] + state.tShift[line],\n max = state.eMarks[line];\n\n return state.src.substr(pos, max - pos);\n}\n\nfunction escapedSplit(str) {\n var result = [],\n pos = 0,\n max = str.length,\n ch,\n isEscaped = false,\n lastPos = 0,\n current = '';\n\n ch = str.charCodeAt(pos);\n\n while (pos < max) {\n if (ch === 0x7c/* | */) {\n if (!isEscaped) {\n // pipe separating cells, '|'\n result.push(current + str.substring(lastPos, pos));\n current = '';\n lastPos = pos + 1;\n } else {\n // escaped pipe, '\\|'\n current += str.substring(lastPos, pos - 1);\n lastPos = pos;\n }\n }\n\n isEscaped = (ch === 0x5c/* \\ */);\n pos++;\n\n ch = str.charCodeAt(pos);\n }\n\n result.push(current + str.substring(lastPos));\n\n return result;\n}\n\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n var ch, lineText, pos, i, l, nextLine, columns, columnCount, token,\n aligns, t, tableLines, tbodyLines, oldParentType, terminate,\n terminatorRules, firstCh, secondCh;\n\n // should have at least two lines\n if (startLine + 2 > endLine) { return false; }\n\n nextLine = startLine + 1;\n\n if (state.sCount[nextLine] < state.blkIndent) { return false; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { return false; }\n\n // first character of the second line should be '|', '-', ':',\n // and no other characters are allowed but spaces;\n // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n firstCh = state.src.charCodeAt(pos++);\n if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false; }\n\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n secondCh = state.src.charCodeAt(pos++);\n if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n return false;\n }\n\n // if first character is '-', then second character must not be a space\n // (due to parsing ambiguity with list)\n if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false; }\n\n while (pos < state.eMarks[nextLine]) {\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false; }\n\n pos++;\n }\n\n lineText = getLine(state, startLine + 1);\n\n columns = lineText.split('|');\n aligns = [];\n for (i = 0; i < columns.length; i++) {\n t = columns[i].trim();\n if (!t) {\n // allow empty columns before and after table, but not in between columns;\n // e.g. allow ` |---| `, disallow ` ---||--- `\n if (i === 0 || i === columns.length - 1) {\n continue;\n } else {\n return false;\n }\n }\n\n if (!/^:?-+:?$/.test(t)) { return false; }\n if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right');\n } else if (t.charCodeAt(0) === 0x3A/* : */) {\n aligns.push('left');\n } else {\n aligns.push('');\n }\n }\n\n lineText = getLine(state, startLine).trim();\n if (lineText.indexOf('|') === -1) { return false; }\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n // header row will define an amount of columns in the entire table,\n // and align row should be exactly the same (the rest of the rows can differ)\n columnCount = columns.length;\n if (columnCount === 0 || columnCount !== aligns.length) { return false; }\n\n if (silent) { return true; }\n\n oldParentType = state.parentType;\n state.parentType = 'table';\n\n // use 'blockquote' lists for termination because it's\n // the most similar to tables\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n token = state.push('table_open', 'table', 1);\n token.map = tableLines = [ startLine, 0 ];\n\n token = state.push('thead_open', 'thead', 1);\n token.map = [ startLine, startLine + 1 ];\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ startLine, startLine + 1 ];\n\n for (i = 0; i < columns.length; i++) {\n token = state.push('th_open', 'th', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i].trim();\n token.children = [];\n\n token = state.push('th_close', 'th', -1);\n }\n\n token = state.push('tr_close', 'tr', -1);\n token = state.push('thead_close', 'thead', -1);\n\n for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) { break; }\n lineText = getLine(state, nextLine).trim();\n if (!lineText) { break; }\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { break; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n if (nextLine === startLine + 2) {\n token = state.push('tbody_open', 'tbody', 1);\n token.map = tbodyLines = [ startLine + 2, 0 ];\n }\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ nextLine, nextLine + 1 ];\n\n for (i = 0; i < columnCount; i++) {\n token = state.push('td_open', 'td', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i] ? columns[i].trim() : '';\n token.children = [];\n\n token = state.push('td_close', 'td', -1);\n }\n token = state.push('tr_close', 'tr', -1);\n }\n\n if (tbodyLines) {\n token = state.push('tbody_close', 'tbody', -1);\n tbodyLines[1] = nextLine;\n }\n\n token = state.push('table_close', 'table', -1);\n tableLines[1] = nextLine;\n\n state.parentType = oldParentType;\n state.line = nextLine;\n return true;\n};\n", "// Code block (4 spaces padded)\n\n'use strict';\n\n\nmodule.exports = function code(state, startLine, endLine/*, silent*/) {\n if (state.md.options.allowIndentation) { return false; }\n\n var nextLine, last, token;\n\n if (state.sCount[startLine] - state.blkIndent < 4) { return false; }\n\n last = nextLine = startLine + 1;\n\n while (nextLine < endLine) {\n if (state.isEmpty(nextLine)) {\n nextLine++;\n continue;\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n nextLine++;\n last = nextLine;\n continue;\n }\n break;\n }\n\n state.line = last;\n\n token = state.push('code_block', 'code', 0);\n token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n';\n token.map = [ startLine, state.line ];\n\n return true;\n};\n", "// fences (``` lang, ~~~ lang)\n\n'use strict';\n\n\nmodule.exports = function fence(state, startLine, endLine, silent) {\n var marker, len, params, nextLine, mem, token, markup,\n haveEndMarker = false,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (pos + 3 > max) { return false; }\n\n marker = state.src.charCodeAt(pos);\n\n if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n return false;\n }\n\n // scan marker length\n mem = pos;\n pos = state.skipChars(pos, marker);\n\n len = pos - mem;\n\n if (len < 3) { return false; }\n\n markup = state.src.slice(mem, pos);\n params = state.src.slice(pos, max);\n\n if (marker === 0x60 /* ` */) {\n if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n return false;\n }\n }\n\n // Since start is found, we can report success here in validation mode\n if (silent) { return true; }\n\n // search end of block\n nextLine = startLine;\n\n for (;;) {\n nextLine++;\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break;\n }\n\n pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break;\n }\n\n if (state.src.charCodeAt(pos) !== marker) { continue; }\n\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue;\n }\n\n pos = state.skipChars(pos, marker);\n\n // closing code fence must be at least as long as the opening one\n if (pos - mem < len) { continue; }\n\n // make sure tail has spaces only\n pos = state.skipSpaces(pos);\n\n if (pos < max) { continue; }\n\n haveEndMarker = true;\n // found!\n break;\n }\n\n // If a fence has heading spaces, they should be removed from its inner block\n len = state.sCount[startLine];\n\n state.line = nextLine + (haveEndMarker ? 1 : 0);\n\n token = state.push('fence', 'code', 0);\n token.info = params;\n token.content = state.getLines(startLine + 1, nextLine, len, true);\n token.markup = markup;\n token.map = [ startLine, state.line ];\n\n return true;\n};\n", "// Block quotes\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function blockquote(state, startLine, endLine, silent) {\n var adjustTab,\n ch,\n i,\n initial,\n l,\n lastLineEmpty,\n lines,\n nextLine,\n offset,\n oldBMarks,\n oldBSCount,\n oldIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n spaceAfterMarker,\n terminate,\n terminatorRules,\n token,\n isOutdented,\n oldLineMax = state.lineMax,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // check the block quote marker\n if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }\n\n // we know that it's going to be a valid blockquote,\n // so no point trying to find the end of it in silent mode\n if (silent) { return true; }\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[startLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[startLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks = [ state.bMarks[startLine] ];\n state.bMarks[startLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[startLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n oldBSCount = [ state.bsCount[startLine] ];\n state.bsCount[startLine] = state.sCount[startLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n lastLineEmpty = pos >= max;\n\n oldSCount = [ state.sCount[startLine] ];\n state.sCount[startLine] = offset - initial;\n\n oldTShift = [ state.tShift[startLine] ];\n state.tShift[startLine] = pos - state.bMarks[startLine];\n\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n oldParentType = state.parentType;\n state.parentType = 'blockquote';\n\n // Search the end of the block\n //\n // Block ends with either:\n // 1. an empty line outside:\n // ```\n // > test\n //\n // ```\n // 2. an empty line inside:\n // ```\n // >\n // test\n // ```\n // 3. another tag:\n // ```\n // > test\n // - - -\n // ```\n for (nextLine = startLine + 1; nextLine < endLine; nextLine++) {\n // check if it's outdented, i.e. it's inside list item and indented\n // less than said list item:\n //\n // ```\n // 1. anything\n // > current blockquote\n // 2. checking this line\n // ```\n isOutdented = state.sCount[nextLine] < state.blkIndent;\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos >= max) {\n // Case 1: line is not inside the blockquote, and this line is empty.\n break;\n }\n\n if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n // This line is inside the blockquote.\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[nextLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[nextLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n state.bMarks[nextLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n lastLineEmpty = pos >= max;\n\n oldBSCount.push(state.bsCount[nextLine]);\n state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] = offset - initial;\n\n oldTShift.push(state.tShift[nextLine]);\n state.tShift[nextLine] = pos - state.bMarks[nextLine];\n continue;\n }\n\n // Case 2: line is not inside the blockquote, and the last line was empty.\n if (lastLineEmpty) { break; }\n\n // Case 3: another tag found.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) {\n // Quirk to enforce \"hard termination mode\" for paragraphs;\n // normally if you call `tokenize(state, startLine, nextLine)`,\n // paragraphs will look below nextLine for paragraph continuation,\n // but if blockquote is terminated by another tag, they shouldn't\n state.lineMax = nextLine;\n\n if (state.blkIndent !== 0) {\n // state.blkIndent was non-zero, we now set it to zero,\n // so we need to re-calculate all offsets to appear as\n // if indent wasn't changed\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] -= state.blkIndent;\n }\n\n break;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n\n // A negative indentation means that this is a paragraph continuation\n //\n state.sCount[nextLine] = -1;\n }\n\n oldIndent = state.blkIndent;\n state.blkIndent = 0;\n\n token = state.push('blockquote_open', 'blockquote', 1);\n token.markup = '>';\n token.map = lines = [ startLine, 0 ];\n\n state.md.block.tokenize(state, startLine, nextLine);\n\n token = state.push('blockquote_close', 'blockquote', -1);\n token.markup = '>';\n\n state.lineMax = oldLineMax;\n state.parentType = oldParentType;\n lines[1] = state.line;\n\n // Restore original tShift; this might not be necessary since the parser\n // has already been here, but just to make sure we can do that.\n for (i = 0; i < oldTShift.length; i++) {\n state.bMarks[i + startLine] = oldBMarks[i];\n state.tShift[i + startLine] = oldTShift[i];\n state.sCount[i + startLine] = oldSCount[i];\n state.bsCount[i + startLine] = oldBSCount[i];\n }\n state.blkIndent = oldIndent;\n\n return true;\n};\n", "// Horizontal rule\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function hr(state, startLine, endLine, silent) {\n var marker, cnt, ch, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n marker = state.src.charCodeAt(pos++);\n\n // Check hr marker\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x5F/* _ */) {\n return false;\n }\n\n // markers can be mixed with spaces, but there should be at least 3 of them\n\n cnt = 1;\n while (pos < max) {\n ch = state.src.charCodeAt(pos++);\n if (ch !== marker && !isSpace(ch)) { return false; }\n if (ch === marker) { cnt++; }\n }\n\n if (cnt < 3) { return false; }\n\n if (silent) { return true; }\n\n state.line = startLine + 1;\n\n token = state.push('hr', 'hr', 0);\n token.map = [ startLine, state.line ];\n token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\n return true;\n};\n", "// Lists\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker(state, startLine) {\n var marker, pos, max, ch;\n\n pos = state.bMarks[startLine] + state.tShift[startLine];\n max = state.eMarks[startLine];\n\n marker = state.src.charCodeAt(pos++);\n // Check bullet\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x2B/* + */) {\n return -1;\n }\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" -test \" - is not a list item\n return -1;\n }\n }\n\n return pos;\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker(state, startLine) {\n var ch,\n start = state.bMarks[startLine] + state.tShift[startLine],\n pos = start,\n max = state.eMarks[startLine];\n\n // List marker should have at least 2 chars (digit + dot)\n if (pos + 1 >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; }\n\n for (;;) {\n // EOL -> fail\n if (pos >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n\n // List marker should have no more than 9 digits\n // (prevents integer overflow in browsers)\n if (pos - start >= 10) { return -1; }\n\n continue;\n }\n\n // found valid marker\n if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n break;\n }\n\n return -1;\n }\n\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" 1.test \" - is not a list item\n return -1;\n }\n }\n return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n var i, l,\n level = state.level + 2;\n\n for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n state.tokens[i + 2].hidden = true;\n state.tokens[i].hidden = true;\n i += 2;\n }\n }\n}\n\n\nmodule.exports = function list(state, startLine, endLine, silent) {\n var ch,\n contentStart,\n i,\n indent,\n indentAfterMarker,\n initial,\n isOrdered,\n itemLines,\n l,\n listLines,\n listTokIdx,\n markerCharCode,\n markerValue,\n max,\n nextLine,\n offset,\n oldListIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n oldTight,\n pos,\n posAfterMarker,\n prevEmptyEnd,\n start,\n terminate,\n terminatorRules,\n token,\n isTerminatingParagraph = false,\n tight = true;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // Special case:\n // - item 1\n // - item 2\n // - item 3\n // - item 4\n // - this one is a paragraph continuation\n if (!state.md.options.allowIndentation &&\n state.listIndent >= 0 &&\n state.sCount[startLine] - state.listIndent >= 4 &&\n state.sCount[startLine] < state.blkIndent) {\n return false;\n }\n\n // limit conditions when list can interrupt\n // a paragraph (validation mode only)\n if (silent && state.parentType === 'paragraph') {\n // Next list item should still terminate previous list item;\n //\n // This code can fail if plugins use blkIndent as well as lists,\n // but I hope the spec gets fixed long before that happens.\n //\n if (state.sCount[startLine] >= state.blkIndent) {\n isTerminatingParagraph = true;\n }\n }\n\n // Detect list type and position after marker\n if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n isOrdered = true;\n start = state.bMarks[startLine] + state.tShift[startLine];\n markerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\n // If we're starting a new ordered list right after\n // a paragraph, it should start with 1.\n if (isTerminatingParagraph && markerValue !== 1) return false;\n\n } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n isOrdered = false;\n\n } else {\n return false;\n }\n\n // If we're starting a new unordered list right after\n // a paragraph, first line should not be empty.\n if (isTerminatingParagraph) {\n if (state.skipSpaces(posAfterMarker) >= state.eMarks[startLine]) return false;\n }\n\n // We should terminate list on style change. Remember first one to compare.\n markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n // For validation mode we can terminate immediately\n if (silent) { return true; }\n\n // Start list\n listTokIdx = state.tokens.length;\n\n if (isOrdered) {\n token = state.push('ordered_list_open', 'ol', 1);\n if (markerValue !== 1) {\n token.attrs = [ [ 'start', markerValue ] ];\n }\n\n } else {\n token = state.push('bullet_list_open', 'ul', 1);\n }\n\n token.map = listLines = [ startLine, 0 ];\n token.markup = String.fromCharCode(markerCharCode);\n\n //\n // Iterate list items\n //\n\n nextLine = startLine;\n prevEmptyEnd = false;\n terminatorRules = state.md.block.ruler.getRules('list');\n\n oldParentType = state.parentType;\n state.parentType = 'list';\n\n while (nextLine < endLine) {\n pos = posAfterMarker;\n max = state.eMarks[nextLine];\n\n initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n } else if (ch === 0x20) {\n offset++;\n } else {\n break;\n }\n\n pos++;\n }\n\n contentStart = pos;\n\n if (contentStart >= max) {\n // trimming space in \"- \\n 3\" case, indent is 1 here\n indentAfterMarker = 1;\n } else {\n indentAfterMarker = offset - initial;\n }\n\n // If we have more than 4 spaces, the indent is 1\n // (the rest is just indented code block)\n if (!state.md.options.allowIndentation && indentAfterMarker > 4) { indentAfterMarker = 1; }\n\n // \" - test\"\n // ^^^^^ - calculating total length of this thing\n indent = initial + indentAfterMarker;\n\n // Run subparser & write tokens\n token = state.push('list_item_open', 'li', 1);\n token.markup = String.fromCharCode(markerCharCode);\n token.map = itemLines = [ startLine, 0 ];\n if (isOrdered) {\n token.info = state.src.slice(start, posAfterMarker - 1);\n }\n\n // change current state, then restore it after parser subcall\n oldTight = state.tight;\n oldTShift = state.tShift[startLine];\n oldSCount = state.sCount[startLine];\n\n // - example list\n // ^ listIndent position will be here\n // ^ blkIndent position will be here\n //\n oldListIndent = state.listIndent;\n state.listIndent = state.blkIndent;\n state.blkIndent = indent;\n\n state.tight = true;\n state.tShift[startLine] = contentStart - state.bMarks[startLine];\n state.sCount[startLine] = offset;\n\n if (contentStart >= max && state.isEmpty(startLine + 1)) {\n // workaround for this case\n // (list item is empty, list terminates before \"foo\"):\n // ~~~~~~~~\n // -\n //\n // foo\n // ~~~~~~~~\n state.line = Math.min(state.line + 2, endLine);\n } else {\n state.md.block.tokenize(state, startLine, endLine, true);\n }\n\n // If any of list item is tight, mark list as tight\n if (!state.tight || prevEmptyEnd) {\n tight = false;\n }\n // Item become loose if finish with empty line,\n // but we should filter last element, because it means list finish\n prevEmptyEnd = (state.line - startLine) > 1 && state.isEmpty(state.line - 1);\n\n state.blkIndent = state.listIndent;\n state.listIndent = oldListIndent;\n state.tShift[startLine] = oldTShift;\n state.sCount[startLine] = oldSCount;\n state.tight = oldTight;\n\n token = state.push('list_item_close', 'li', -1);\n token.markup = String.fromCharCode(markerCharCode);\n\n nextLine = startLine = state.line;\n itemLines[1] = nextLine;\n contentStart = state.bMarks[startLine];\n\n if (nextLine >= endLine) { break; }\n\n //\n // Try to check if list is terminated or continued.\n //\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { break; }\n\n // fail if terminating block found\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n\n // fail if list has another type\n if (isOrdered) {\n posAfterMarker = skipOrderedListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n start = state.bMarks[nextLine] + state.tShift[nextLine];\n } else {\n posAfterMarker = skipBulletListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n }\n\n if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; }\n }\n\n // Finalize list\n if (isOrdered) {\n token = state.push('ordered_list_close', 'ol', -1);\n } else {\n token = state.push('bullet_list_close', 'ul', -1);\n }\n token.markup = String.fromCharCode(markerCharCode);\n\n listLines[1] = nextLine;\n state.line = nextLine;\n\n state.parentType = oldParentType;\n\n // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx);\n }\n\n return true;\n};\n", "'use strict';\n\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function reference(state, startLine, _endLine, silent) {\n var ch,\n destEndPos,\n destEndLineNo,\n endLine,\n href,\n i,\n l,\n label,\n labelEnd,\n oldParentType,\n res,\n start,\n str,\n terminate,\n terminatorRules,\n title,\n lines = 0,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine],\n nextLine = startLine + 1;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; }\n\n // Simple check to quickly interrupt scan on [link](url) at the start of line.\n // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n while (++pos < max) {\n if (state.src.charCodeAt(pos) === 0x5D /* ] */ &&\n state.src.charCodeAt(pos - 1) !== 0x5C/* \\ */) {\n if (pos + 1 === max) { return false; }\n if (state.src.charCodeAt(pos + 1) !== 0x3A/* : */) { return false; }\n break;\n }\n }\n\n endLine = state.lineMax;\n\n // jump line-by-line until empty one or EOF\n terminatorRules = state.md.block.ruler.getRules('reference');\n\n oldParentType = state.parentType;\n state.parentType = 'reference';\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n max = str.length;\n\n for (pos = 1; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x5B /* [ */) {\n return false;\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos;\n break;\n } else if (ch === 0x0A /* \\n */) {\n lines++;\n } else if (ch === 0x5C /* \\ */) {\n pos++;\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; }\n\n // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n for (pos = labelEnd + 2; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n res = state.md.helpers.parseLinkDestination(str, pos, max);\n if (!res.ok) { return false; }\n\n href = state.md.normalizeLink(res.str);\n if (!state.md.validateLink(href)) { return false; }\n\n pos = res.pos;\n lines += res.lines;\n\n // save cursor state, we could require to rollback later\n destEndPos = pos;\n destEndLineNo = lines;\n\n // [label]: destination 'title'\n // ^^^ skipping those spaces\n start = pos;\n for (; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^ parse this\n res = state.md.helpers.parseLinkTitle(str, pos, max);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n lines += res.lines;\n } else {\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n }\n\n // skip trailing spaces until the rest of the line\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n // garbage at the end of the line\n return false;\n }\n\n label = normalizeReference(str.slice(1, labelEnd));\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false;\n }\n\n // Reference can not terminate anything. This check is for safety only.\n /*istanbul ignore if*/\n if (silent) { return true; }\n\n if (typeof state.env.references === 'undefined') {\n state.env.references = {};\n }\n if (typeof state.env.references[label] === 'undefined') {\n state.env.references[label] = { title: title, href: href };\n }\n\n state.parentType = oldParentType;\n\n state.line = startLine + lines + 1;\n return true;\n};\n", "// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n\n'use strict';\n\n\nmodule.exports = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'section',\n 'source',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n];\n", "// Regexps to match html elements\n\n'use strict';\n\nvar attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\n\nvar unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\n\nvar attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\n\nvar attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\n\nvar open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\n\nvar close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing = '<[?][\\\\s\\\\S]*?[?]>';\nvar declaration = '<![A-Z]+\\\\s+[^>]*>';\nvar cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\n\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\n\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;\n", "// HTML block\n\n'use strict';\n\n\nvar block_names = require('../common/html_blocks');\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE;\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nvar HTML_SEQUENCES = [\n [ /^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true ],\n [ /^<!--/, /-->/, true ],\n [ /^<\\?/, /\\?>/, true ],\n [ /^<![A-Z]/, />/, true ],\n [ /^<!\\[CDATA\\[/, /\\]\\]>/, true ],\n [ new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true ],\n [ new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false ]\n];\n\n\nmodule.exports = function html_block(state, startLine, endLine, silent) {\n var i, nextLine, token, lineText,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (!state.md.options.html) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n lineText = state.src.slice(pos, max);\n\n for (i = 0; i < HTML_SEQUENCES.length; i++) {\n if (HTML_SEQUENCES[i][0].test(lineText)) { break; }\n }\n\n if (i === HTML_SEQUENCES.length) { return false; }\n\n if (silent) {\n // true if this sequence can be a terminator, false otherwise\n return HTML_SEQUENCES[i][2];\n }\n\n nextLine = startLine + 1;\n\n // If we are here - we detected HTML block.\n // Let's roll down till block end.\n if (!HTML_SEQUENCES[i][1].test(lineText)) {\n for (; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n lineText = state.src.slice(pos, max);\n\n if (HTML_SEQUENCES[i][1].test(lineText)) {\n if (lineText.length !== 0) { nextLine++; }\n break;\n }\n }\n }\n\n state.line = nextLine;\n\n token = state.push('html_block', '', 0);\n token.map = [ startLine, nextLine ];\n token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\n return true;\n};\n", "// heading (#, ##, ...)\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n var ch, level, tmp, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x23/* # */ || pos >= max) { return false; }\n\n // count heading level\n level = 1;\n ch = state.src.charCodeAt(++pos);\n while (ch === 0x23/* # */ && pos < max && level <= 6) {\n level++;\n ch = state.src.charCodeAt(++pos);\n }\n\n if (level > 6 || (pos < max && !isSpace(ch))) { return false; }\n\n if (silent) { return true; }\n\n // Let's cut tails like ' ### ' from the end of string\n\n max = state.skipSpacesBack(max, pos);\n tmp = state.skipCharsBack(max, 0x23, pos); // #\n if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n max = tmp;\n }\n\n state.line = startLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = '########'.slice(0, level);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = state.src.slice(pos, max).trim();\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = '########'.slice(0, level);\n\n return true;\n};\n", "// lheading (---, ===)\n\n'use strict';\n\n\nmodule.exports = function lheading(state, startLine, endLine/*, silent*/) {\n var content, terminate, i, l, token, pos, max, level, marker,\n nextLine = startLine + 1, oldParentType,\n terminatorRules = state.md.block.ruler.getRules('paragraph');\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n //\n // Check for underline in setext header\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max) {\n marker = state.src.charCodeAt(pos);\n\n if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n pos = state.skipChars(pos, marker);\n pos = state.skipSpaces(pos);\n\n if (pos >= max) {\n level = (marker === 0x3D/* = */ ? 1 : 2);\n break;\n }\n }\n }\n }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n if (!level) {\n // Didn't find valid underline\n return false;\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = String.fromCharCode(marker);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line - 1 ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = String.fromCharCode(marker);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Paragraph\n\n'use strict';\n\n\nmodule.exports = function paragraph(state, startLine/*, endLine*/) {\n var content, terminate, i, l, token, oldParentType,\n nextLine = startLine + 1,\n terminatorRules = state.md.block.ruler.getRules('paragraph'),\n endLine = state.lineMax;\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph';\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine;\n\n token = state.push('paragraph_open', 'p', 1);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('paragraph_close', 'p', -1);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Parser state class\n\n'use strict';\n\nvar Token = require('../token');\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction StateBlock(src, md, env, tokens) {\n var ch, s, start, pos, len, indent, offset, indent_found;\n\n this.src = src;\n\n // link to parser instance\n this.md = md;\n\n this.env = env;\n\n //\n // Internal state vartiables\n //\n\n this.tokens = tokens;\n\n this.bMarks = []; // line begin offsets for fast jumps\n this.eMarks = []; // line end offsets for fast jumps\n this.tShift = []; // offsets of the first non-space characters (tabs not expanded)\n this.sCount = []; // indents for each line (tabs expanded)\n\n // An amount of virtual spaces (tabs expanded) between beginning\n // of each line (bMarks) and real beginning of that line.\n //\n // It exists only as a hack because blockquotes override bMarks\n // losing information in the process.\n //\n // It's used only when expanding tabs, you can think about it as\n // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n // means first tab should be expanded to 4-21%4 === 3 spaces.\n //\n this.bsCount = [];\n\n // block parser variables\n this.blkIndent = 0; // required block content indent (for example, if we are\n // inside a list, it would be positioned after list marker)\n this.line = 0; // line index in src\n this.lineMax = 0; // lines count\n this.tight = false; // loose/tight mode for lists\n this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any)\n this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n\n // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n // used in lists to determine if they interrupt a paragraph\n this.parentType = 'root';\n\n this.level = 0;\n\n // renderer\n this.result = '';\n\n // Create caches\n // Generate markers.\n s = this.src;\n indent_found = false;\n\n for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n ch = s.charCodeAt(pos);\n\n if (!indent_found) {\n if (isSpace(ch)) {\n indent++;\n\n if (ch === 0x09) {\n offset += 4 - offset % 4;\n } else {\n offset++;\n }\n continue;\n } else {\n indent_found = true;\n }\n }\n\n if (ch === 0x0A || pos === len - 1) {\n if (ch !== 0x0A) { pos++; }\n this.bMarks.push(start);\n this.eMarks.push(pos);\n this.tShift.push(indent);\n this.sCount.push(offset);\n this.bsCount.push(0);\n\n indent_found = false;\n indent = 0;\n offset = 0;\n start = pos + 1;\n }\n }\n\n // Push fake entry to simplify cache bounds checks\n this.bMarks.push(s.length);\n this.eMarks.push(s.length);\n this.tShift.push(0);\n this.sCount.push(0);\n this.bsCount.push(0);\n\n this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n var token = new Token(type, tag, nesting);\n token.block = true;\n\n if (nesting < 0) this.level--; // closing tag\n token.level = this.level;\n if (nesting > 0) this.level++; // opening tag\n\n this.tokens.push(token);\n return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n for (var max = this.lineMax; from < max; from++) {\n if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n break;\n }\n }\n return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n var ch;\n\n for (var max = this.src.length; pos < max; pos++) {\n ch = this.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n }\n return pos;\n};\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1; }\n }\n return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n for (var max = this.src.length; pos < max; pos++) {\n if (this.src.charCodeAt(pos) !== code) { break; }\n }\n return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }\n }\n return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n var i, lineIndent, ch, first, last, queue, lineStart,\n line = begin;\n\n if (begin >= end) {\n return '';\n }\n\n queue = new Array(end - begin);\n\n for (i = 0; line < end; line++, i++) {\n lineIndent = 0;\n lineStart = first = this.bMarks[line];\n\n if (line + 1 < end || keepLastLF) {\n // No need for bounds check because we have fake entry on tail.\n last = this.eMarks[line] + 1;\n } else {\n last = this.eMarks[line];\n }\n\n while (first < last && lineIndent < indent) {\n ch = this.src.charCodeAt(first);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n } else {\n lineIndent++;\n }\n } else if (first - lineStart < this.tShift[line]) {\n // patched tShift masked characters to look like spaces (blockquotes, list markers)\n lineIndent++;\n } else {\n break;\n }\n\n first++;\n }\n\n if (lineIndent > indent) {\n // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n // with indent=2 becomes ' \\tfoobar'\n queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n } else {\n queue[i] = this.src.slice(first, last);\n }\n }\n\n return queue.join('');\n};\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token;\n\n\nmodule.exports = StateBlock;\n", "/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n // First 2 params - rule name & source. Secondary array - list of rules,\n // which can be terminated by this one.\n [ 'table', require('./rules_block/table'), [ 'paragraph', 'reference' ] ],\n [ 'code', require('./rules_block/code') ],\n [ 'fence', require('./rules_block/fence'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'blockquote', require('./rules_block/blockquote'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'hr', require('./rules_block/hr'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'list', require('./rules_block/list'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'reference', require('./rules_block/reference') ],\n [ 'html_block', require('./rules_block/html_block'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'heading', require('./rules_block/heading'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'lheading', require('./rules_block/lheading') ],\n [ 'paragraph', require('./rules_block/paragraph') ]\n];\n\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock() {\n /**\n * ParserBlock#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of block rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() });\n }\n}\n\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n line = startLine,\n hasEmptyLines = false,\n maxNesting = state.md.options.maxNesting;\n\n while (line < endLine) {\n state.line = line = state.skipEmptyLines(line);\n if (line >= endLine) { break; }\n\n // Termination condition for nested calls.\n // Nested calls currently used for blockquotes & lists\n if (state.sCount[line] < state.blkIndent) { break; }\n\n // If nesting level exceeded - skip tail to the end. That's not ordinary\n // situation and we should not care about content.\n if (state.level >= maxNesting) {\n state.line = endLine;\n break;\n }\n\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.line`\n // - update `state.tokens`\n // - return true\n\n for (i = 0; i < len; i++) {\n ok = rules[i](state, line, endLine, false);\n if (ok) { break; }\n }\n\n // set state.tight if we had an empty line before current tag\n // i.e. latest empty line should not count\n state.tight = !hasEmptyLines;\n\n // paragraph might \"eat\" one newline after it in nested lists\n if (state.isEmpty(state.line - 1)) {\n hasEmptyLines = true;\n }\n\n line = state.line;\n\n if (line < endLine && state.isEmpty(line)) {\n hasEmptyLines = true;\n line++;\n state.line = line;\n }\n }\n};\n\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n var state;\n\n if (!src) { return; }\n\n state = new this.State(src, md, env, outTokens);\n\n this.tokenize(state, state.line, state.lineMax);\n};\n\n\nParserBlock.prototype.State = require('./rules_block/state_block');\n\n\nmodule.exports = ParserBlock;\n", "// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n'use strict';\n\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar(ch) {\n switch (ch) {\n case 0x0A/* \\n */:\n case 0x21/* ! */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2D/* - */:\n case 0x3A/* : */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos;\n\n while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n pos++;\n }\n\n if (pos === state.pos) { return false; }\n\n if (!silent) { state.pending += state.src.slice(state.pos, pos); }\n\n state.pos = pos;\n\n return true;\n};\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos,\n idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n // first char is terminator -> empty text\n if (idx === 0) { return false; }\n\n // no terminator -> text till end of string\n if (idx < 0) {\n if (!silent) { state.pending += state.src.slice(pos); }\n state.pos = state.src.length;\n return true;\n }\n\n if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n state.pos += idx;\n\n return true;\n};*/\n", "// Proceess '\\n'\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function newline(state, silent) {\n var pmax, max, ws, pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false; }\n\n pmax = state.pending.length - 1;\n max = state.posMax;\n\n // ' \\n' -> hardbreak\n // Lookup in pending chars is bad practice! Don't copy to other rules!\n // Pending string is stored in concat mode, indexed lookups will cause\n // convertion to flat mode.\n if (!silent) {\n if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n // Find whitespaces tail of pending chars.\n ws = pmax - 1;\n while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--;\n\n state.pending = state.pending.slice(0, ws);\n state.push('hardbreak', 'br', 0);\n } else {\n state.pending = state.pending.slice(0, -1);\n state.push('softbreak', 'br', 0);\n }\n\n } else {\n state.push('softbreak', 'br', 0);\n }\n }\n\n pos++;\n\n // skip heading spaces for next line\n while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++; }\n\n state.pos = pos;\n return true;\n};\n", "// Process escaped chars and hardbreaks\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) { ESCAPED.push(0); }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; });\n\n\nmodule.exports = function escape(state, silent) {\n var ch, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) { return false; }\n\n pos++;\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch < 256 && ESCAPED[ch] !== 0) {\n if (!silent) { state.pending += state.src[pos]; }\n state.pos += 2;\n return true;\n }\n\n if (ch === 0x0A) {\n if (!silent) {\n state.push('hardbreak', 'br', 0);\n }\n\n pos++;\n // skip leading whitespaces from next line\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n state.pos = pos;\n return true;\n }\n }\n\n if (!silent) { state.pending += '\\\\'; }\n state.pos++;\n return true;\n};\n", "// Parse backticks\n\n'use strict';\n\n\nmodule.exports = function backtick(state, silent) {\n var start, max, marker, token, matchStart, matchEnd, openerLength, closerLength,\n pos = state.pos,\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x60/* ` */) { return false; }\n\n start = pos;\n pos++;\n max = state.posMax;\n\n // scan marker length\n while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }\n\n marker = state.src.slice(start, pos);\n openerLength = marker.length;\n\n if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n }\n\n matchStart = matchEnd = pos;\n\n // Nothing found in the cache, scan until the end of the line (or until marker is found)\n while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n matchEnd = matchStart + 1;\n\n // scan marker length\n while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }\n\n closerLength = matchEnd - matchStart;\n\n if (closerLength === openerLength) {\n // Found matching closer length.\n if (!silent) {\n token = state.push('code_inline', 'code', 0);\n token.markup = marker;\n token.content = state.src.slice(pos, matchStart)\n .replace(/\\n/g, ' ')\n .replace(/^ (.+) $/, '$1');\n }\n state.pos = matchEnd;\n return true;\n }\n\n // Some different length found, put it in cache as upper limit of where closer can be found\n state.backticks[closerLength] = matchStart;\n }\n\n // Scanned through the end, didn't find anything\n state.backticksScanned = true;\n\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n};\n", "// ~~strike through~~\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function strikethrough(state, silent) {\n var i, scanned, token, len, ch,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x7E/* ~ */) { return false; }\n\n scanned = state.scanDelims(state.pos, true);\n len = scanned.length;\n ch = String.fromCharCode(marker);\n\n if (len < 2) { return false; }\n\n if (len % 2) {\n token = state.push('text', '', 0);\n token.content = ch;\n len--;\n }\n\n for (i = 0; i < len; i += 2) {\n token = state.push('text', '', 0);\n token.content = ch + ch;\n\n state.delimiters.push({\n marker: marker,\n length: 0, // disable \"rule of 3\" length checks meant for emphasis\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i, j,\n startDelim,\n endDelim,\n token,\n loneMarkers = [],\n max = delimiters.length;\n\n for (i = 0; i < max; i++) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x7E/* ~ */) {\n continue;\n }\n\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n token = state.tokens[startDelim.token];\n token.type = 's_open';\n token.tag = 's';\n token.nesting = 1;\n token.markup = '~~';\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = 's_close';\n token.tag = 's';\n token.nesting = -1;\n token.markup = '~~';\n token.content = '';\n\n if (state.tokens[endDelim.token - 1].type === 'text' &&\n state.tokens[endDelim.token - 1].content === '~') {\n\n loneMarkers.push(endDelim.token - 1);\n }\n }\n\n // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n while (loneMarkers.length) {\n i = loneMarkers.pop();\n j = i + 1;\n\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++;\n }\n\n j--;\n\n if (i !== j) {\n token = state.tokens[j];\n state.tokens[j] = state.tokens[i];\n state.tokens[i] = token;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function strikethrough(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process *this* and _that_\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function emphasis(state, silent) {\n var i, scanned, token,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false; }\n\n scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n for (i = 0; i < scanned.length; i++) {\n token = state.push('text', '', 0);\n token.content = String.fromCharCode(marker);\n\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker: marker,\n\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n\n // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i,\n startDelim,\n endDelim,\n token,\n ch,\n isStrong,\n max = delimiters.length;\n\n for (i = max - 1; i >= 0; i--) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n continue;\n }\n\n // Process only opening markers\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n //\n isStrong = i > 0 &&\n delimiters[i - 1].end === startDelim.end + 1 &&\n // check that first two markers match and adjacent\n delimiters[i - 1].marker === startDelim.marker &&\n delimiters[i - 1].token === startDelim.token - 1 &&\n // check that last two markers are adjacent (we can safely assume they match)\n delimiters[startDelim.end + 1].token === endDelim.token + 1;\n\n ch = String.fromCharCode(startDelim.marker);\n\n token = state.tokens[startDelim.token];\n token.type = isStrong ? 'strong_open' : 'em_open';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = 1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = isStrong ? 'strong_close' : 'em_close';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = -1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n if (isStrong) {\n state.tokens[delimiters[i - 1].token].content = '';\n state.tokens[delimiters[startDelim.end + 1].token].content = '';\n i--;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process [link](<to> \"stuff\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function link(state, silent) {\n var attrs,\n code,\n label,\n labelEnd,\n labelStart,\n pos,\n res,\n ref,\n token,\n href = '',\n title = '',\n oldPos = state.pos,\n max = state.posMax,\n start = state.pos,\n parseReference = true;\n\n if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 1;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // might have found a valid shortcut link, disable reference parsing\n parseReference = false;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n }\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n // parsing a valid shortcut link failed, fallback to reference\n parseReference = true;\n }\n pos++;\n }\n\n if (parseReference) {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n state.pos = labelStart;\n state.posMax = labelEnd;\n\n token = state.push('link_open', 'a', 1);\n token.attrs = attrs = [ [ 'href', href ] ];\n if (title) {\n attrs.push([ 'title', title ]);\n }\n\n state.md.inline.tokenize(state);\n\n token = state.push('link_close', 'a', -1);\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n", "// Process ![image](<src> \"title\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function image(state, silent) {\n var attrs,\n code,\n content,\n label,\n labelEnd,\n labelStart,\n pos,\n ref,\n res,\n title,\n token,\n tokens,\n start,\n href = '',\n oldPos = state.pos,\n max = state.posMax;\n\n if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false; }\n if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 2;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n } else {\n title = '';\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n state.pos = oldPos;\n return false;\n }\n pos++;\n } else {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n content = state.src.slice(labelStart, labelEnd);\n\n state.md.inline.parse(\n content,\n state.md,\n state.env,\n tokens = []\n );\n\n token = state.push('image', 'img', 0);\n token.attrs = attrs = [ [ 'src', href ], [ 'alt', '' ] ];\n token.children = tokens;\n token.content = content;\n\n if (title) {\n attrs.push([ 'title', title ]);\n }\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n", "// Process autolinks '<protocol:...>'\n\n'use strict';\n\n\n/*eslint max-len:0*/\nvar EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;\nvar AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)$/;\n\n\nmodule.exports = function autolink(state, silent) {\n var url, fullUrl, token, ch, start, max,\n pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n start = state.pos;\n max = state.posMax;\n\n for (;;) {\n if (++pos >= max) return false;\n\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x3C /* < */) return false;\n if (ch === 0x3E /* > */) break;\n }\n\n url = state.src.slice(start + 1, pos);\n\n if (AUTOLINK_RE.test(url)) {\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n if (EMAIL_RE.test(url)) {\n fullUrl = state.md.normalizeLink('mailto:' + url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n return false;\n};\n", "// Process html tags\n\n'use strict';\n\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\n\n\nfunction isLetter(ch) {\n /*eslint no-bitwise:0*/\n var lc = ch | 0x20; // to lower case\n return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);\n}\n\n\nmodule.exports = function html_inline(state, silent) {\n var ch, match, max, token,\n pos = state.pos;\n\n if (!state.md.options.html) { return false; }\n\n // Check start\n max = state.posMax;\n if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n pos + 2 >= max) {\n return false;\n }\n\n // Quick fail on second char\n ch = state.src.charCodeAt(pos + 1);\n if (ch !== 0x21/* ! */ &&\n ch !== 0x3F/* ? */ &&\n ch !== 0x2F/* / */ &&\n !isLetter(ch)) {\n return false;\n }\n\n match = state.src.slice(pos).match(HTML_TAG_RE);\n if (!match) { return false; }\n\n if (!silent) {\n token = state.push('html_inline', '', 0);\n token.content = state.src.slice(pos, pos + match[0].length);\n }\n state.pos += match[0].length;\n return true;\n};\n", "// Process html entity - &#123;, &#xAF;, &quot;, ...\n\n'use strict';\n\nvar entities = require('../common/entities');\nvar has = require('../common/utils').has;\nvar isValidEntityCode = require('../common/utils').isValidEntityCode;\nvar fromCodePoint = require('../common/utils').fromCodePoint;\n\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\n\n\nmodule.exports = function entity(state, silent) {\n var ch, code, match, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x26/* & */) { return false; }\n\n if (pos + 1 < max) {\n ch = state.src.charCodeAt(pos + 1);\n\n if (ch === 0x23 /* # */) {\n match = state.src.slice(pos).match(DIGITAL_RE);\n if (match) {\n if (!silent) {\n code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n state.pending += isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n }\n state.pos += match[0].length;\n return true;\n }\n } else {\n match = state.src.slice(pos).match(NAMED_RE);\n if (match) {\n if (has(entities, match[1])) {\n if (!silent) { state.pending += entities[match[1]]; }\n state.pos += match[0].length;\n return true;\n }\n }\n }\n }\n\n if (!silent) { state.pending += '&'; }\n state.pos++;\n return true;\n};\n", "// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\n\nfunction processDelimiters(state, delimiters) {\n var closerIdx, openerIdx, closer, opener, minOpenerIdx, newMinOpenerIdx,\n isOddMatch, lastJump,\n openersBottom = {},\n max = delimiters.length;\n\n if (!max) return;\n\n // headerIdx is the first delimiter of the current (where closer is) delimiter run\n var headerIdx = 0;\n var lastTokenIdx = -2; // needs any value lower than -1\n var jumps = [];\n\n for (closerIdx = 0; closerIdx < max; closerIdx++) {\n closer = delimiters[closerIdx];\n\n jumps.push(0);\n\n // markers belong to same delimiter run if:\n // - they have adjacent tokens\n // - AND markers are the same\n //\n if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n headerIdx = closerIdx;\n }\n\n lastTokenIdx = closer.token;\n\n // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n closer.length = closer.length || 0;\n\n if (!closer.close) continue;\n\n // Previously calculated lower bounds (previous fails)\n // for each marker, each delimiter length modulo 3,\n // and for whether this closer can be an opener;\n // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [ -1, -1, -1, -1, -1, -1 ];\n }\n\n minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)];\n\n openerIdx = headerIdx - jumps[headerIdx] - 1;\n\n newMinOpenerIdx = openerIdx;\n\n for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n opener = delimiters[openerIdx];\n\n if (opener.marker !== closer.marker) continue;\n\n if (opener.open && opener.end < 0) {\n\n isOddMatch = false;\n\n // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true;\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ?\n jumps[openerIdx - 1] + 1 :\n 0;\n\n jumps[closerIdx] = closerIdx - openerIdx + lastJump;\n jumps[openerIdx] = lastJump;\n\n closer.open = false;\n opener.end = closerIdx;\n opener.close = false;\n newMinOpenerIdx = -1;\n // treat next token as start of run,\n // it optimizes skips in **<...>**a**<...>** pathological case\n lastTokenIdx = -2;\n break;\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx;\n }\n }\n}\n\n\nmodule.exports = function link_pairs(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n processDelimiters(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n'use strict';\n\n\nmodule.exports = function text_collapse(state) {\n var curr, last,\n level = 0,\n tokens = state.tokens,\n max = state.tokens.length;\n\n for (curr = last = 0; curr < max; curr++) {\n // re-calculate levels after emphasis/strikethrough turns some text nodes\n // into opening/closing tags\n if (tokens[curr].nesting < 0) level--; // closing tag\n tokens[curr].level = level;\n if (tokens[curr].nesting > 0) level++; // opening tag\n\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n } else {\n if (curr !== last) { tokens[last] = tokens[curr]; }\n\n last++;\n }\n }\n\n if (curr !== last) {\n tokens.length = last;\n }\n};\n", "// Inline parser state\n\n'use strict';\n\n\nvar Token = require('../token');\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\n\nfunction StateInline(src, md, env, outTokens) {\n this.src = src;\n this.env = env;\n this.md = md;\n this.tokens = outTokens;\n this.tokens_meta = Array(outTokens.length);\n\n this.pos = 0;\n this.posMax = this.src.length;\n this.level = 0;\n this.pending = '';\n this.pendingLevel = 0;\n\n // Stores { start: end } pairs. Useful for backtrack\n // optimization of pairs parse (emphasis, strikes).\n this.cache = {};\n\n // List of emphasis-like delimiters for current tag\n this.delimiters = [];\n\n // Stack of delimiter lists for upper level tags\n this._prev_delimiters = [];\n\n // backtick length => last seen position\n this.backticks = {};\n this.backticksScanned = false;\n}\n\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n var token = new Token('text', '', 0);\n token.content = this.pending;\n token.level = this.pendingLevel;\n this.tokens.push(token);\n this.pending = '';\n return token;\n};\n\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n if (this.pending) {\n this.pushPending();\n }\n\n var token = new Token(type, tag, nesting);\n var token_meta = null;\n\n if (nesting < 0) {\n // closing tag\n this.level--;\n this.delimiters = this._prev_delimiters.pop();\n }\n\n token.level = this.level;\n\n if (nesting > 0) {\n // opening tag\n this.level++;\n this._prev_delimiters.push(this.delimiters);\n this.delimiters = [];\n token_meta = { delimiters: this.delimiters };\n }\n\n this.pendingLevel = this.level;\n this.tokens.push(token);\n this.tokens_meta.push(token_meta);\n return token;\n};\n\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n// - start - position to scan from (it should point at a valid marker);\n// - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n var pos = start, lastChar, nextChar, count, can_open, can_close,\n isLastWhiteSpace, isLastPunctChar,\n isNextWhiteSpace, isNextPunctChar,\n left_flanking = true,\n right_flanking = true,\n max = this.posMax,\n marker = this.src.charCodeAt(start);\n\n // treat beginning of the line as a whitespace\n lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n\n while (pos < max && this.src.charCodeAt(pos) === marker) { pos++; }\n\n count = pos - start;\n\n // treat end of the line as a whitespace\n nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n left_flanking = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n left_flanking = false;\n }\n }\n\n if (isLastWhiteSpace) {\n right_flanking = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n right_flanking = false;\n }\n }\n\n if (!canSplitWord) {\n can_open = left_flanking && (!right_flanking || isLastPunctChar);\n can_close = right_flanking && (!left_flanking || isNextPunctChar);\n } else {\n can_open = left_flanking;\n can_close = right_flanking;\n }\n\n return {\n can_open: can_open,\n can_close: can_close,\n length: count\n };\n};\n\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token;\n\n\nmodule.exports = StateInline;\n", "/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Parser rules\n\nvar _rules = [\n [ 'text', require('./rules_inline/text') ],\n [ 'newline', require('./rules_inline/newline') ],\n [ 'escape', require('./rules_inline/escape') ],\n [ 'backticks', require('./rules_inline/backticks') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').tokenize ],\n [ 'emphasis', require('./rules_inline/emphasis').tokenize ],\n [ 'link', require('./rules_inline/link') ],\n [ 'image', require('./rules_inline/image') ],\n [ 'autolink', require('./rules_inline/autolink') ],\n [ 'html_inline', require('./rules_inline/html_inline') ],\n [ 'entity', require('./rules_inline/entity') ]\n];\n\nvar _rules2 = [\n [ 'balance_pairs', require('./rules_inline/balance_pairs') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').postProcess ],\n [ 'emphasis', require('./rules_inline/emphasis').postProcess ],\n [ 'text_collapse', require('./rules_inline/text_collapse') ]\n];\n\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline() {\n var i;\n\n /**\n * ParserInline#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of inline rules.\n **/\n this.ruler = new Ruler();\n\n for (i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n\n /**\n * ParserInline#ruler2 -> Ruler\n *\n * [[Ruler]] instance. Second ruler used for post-processing\n * (e.g. in emphasis-like rules).\n **/\n this.ruler2 = new Ruler();\n\n for (i = 0; i < _rules2.length; i++) {\n this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n }\n}\n\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n var ok, i, pos = state.pos,\n rules = this.ruler.getRules(''),\n len = rules.length,\n maxNesting = state.md.options.maxNesting,\n cache = state.cache;\n\n\n if (typeof cache[pos] !== 'undefined') {\n state.pos = cache[pos];\n return;\n }\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n // Increment state.level and decrement it later to limit recursion.\n // It's harmless to do here, because no tokens are created. But ideally,\n // we'd need a separate private state variable for this purpose.\n //\n state.level++;\n ok = rules[i](state, true);\n state.level--;\n\n if (ok) { break; }\n }\n } else {\n // Too much nesting, just skip until the end of the paragraph.\n //\n // NOTE: this will cause links to behave incorrectly in the following case,\n // when an amount of `[` is exactly equal to `maxNesting + 1`:\n //\n // [[[[[[[[[[[[[[[[[[[[[foo]()\n //\n // TODO: remove this workaround when CM standard will allow nested links\n // (we can replace it by preventing links from being parsed in\n // validation mode)\n //\n state.pos = state.posMax;\n }\n\n if (!ok) { state.pos++; }\n cache[pos] = state.pos;\n};\n\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n end = state.posMax,\n maxNesting = state.md.options.maxNesting;\n\n while (state.pos < end) {\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.pos`\n // - update `state.tokens`\n // - return true\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n ok = rules[i](state, false);\n if (ok) { break; }\n }\n }\n\n if (ok) {\n if (state.pos >= end) { break; }\n continue;\n }\n\n state.pending += state.src[state.pos++];\n }\n\n if (state.pending) {\n state.pushPending();\n }\n};\n\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n var i, rules, len;\n var state = new this.State(str, md, env, outTokens);\n\n this.tokenize(state);\n\n rules = this.ruler2.getRules('');\n len = rules.length;\n\n for (i = 0; i < len; i++) {\n rules[i](state);\n }\n};\n\n\nParserInline.prototype.State = require('./rules_inline/state_inline');\n\n\nmodule.exports = ParserInline;\n", "'use strict';\n\n\nmodule.exports = function (opts) {\n var re = {};\n\n // Use direct extract instead of `regenerate` to reduse browserified size\n re.src_Any = require('uc.micro/properties/Any/regex').source;\n re.src_Cc = require('uc.micro/categories/Cc/regex').source;\n re.src_Z = require('uc.micro/categories/Z/regex').source;\n re.src_P = require('uc.micro/categories/P/regex').source;\n\n // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|');\n\n // \\p{\\Z\\Cc} (white spaces + control)\n re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|');\n\n // Experimental. List of chars, completely prohibited in links\n // because can separate it from other part of text\n var text_separators = '[><\\uff5c]';\n\n // All possible word characters (everything without punctuation, spaces & controls)\n // Defined via punctuation & spaces to save space\n // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';\n // The same as abothe but without [0-9]\n // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n ////////////////////////////////////////////////////////////////////////////////\n\n re.src_ip4 =\n\n '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n\n re.src_port =\n\n '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n re.src_host_terminator =\n\n '(?=$|' + text_separators + '|' + re.src_ZPCc + ')(?!-|_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n\n re.src_path =\n\n '(?:' +\n '[/?#]' +\n '(?:' +\n '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n \"\\\\'(?=\" + re.src_pseudo_letter + '|[-]).|' + // allow `I'm_king` if no pair found\n '\\\\.{2,}[a-zA-Z0-9%/&]|' + // google has many dots in \"google search\" links (#66, #81).\n // github has ... in commit range links,\n // Restrict to\n // - english\n // - percent-encoded\n // - parts of file path\n // - params separator\n // until more examples found.\n '\\\\.(?!' + re.src_ZCc + '|[.]).|' +\n (opts && opts['---'] ?\n '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n :\n '\\\\-+|'\n ) +\n ',(?!' + re.src_ZCc + ').|' + // allow `,,,` in paths\n ';(?!' + re.src_ZCc + ').|' + // allow `;` if not followed by space-like char\n '\\\\!+(?!' + re.src_ZCc + '|[!]).|' + // allow `!!!` in paths, but not at the end\n '\\\\?(?!' + re.src_ZCc + '|[?]).' +\n ')+' +\n '|\\\\/' +\n ')?';\n\n // Allow anything in markdown spec, forbid quote (\") at the first position\n // because emails enclosed in quotes are far more common\n re.src_email_name =\n\n '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n\n re.src_xn =\n\n 'xn--[a-z0-9\\\\-]{1,59}';\n\n // More to read about domain names\n // http://serverfault.com/questions/638260/\n\n re.src_domain_root =\n\n // Allow letters & digits (http://test1)\n '(?:' +\n re.src_xn +\n '|' +\n re.src_pseudo_letter + '{1,63}' +\n ')';\n\n re.src_domain =\n\n '(?:' +\n re.src_xn +\n '|' +\n '(?:' + re.src_pseudo_letter + ')' +\n '|' +\n '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n ')';\n\n re.src_host =\n\n '(?:' +\n // Don't need IP check, because digits are already allowed in normal domain names\n // src_ip4 +\n // '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/*_root*/ + ')' +\n ')';\n\n re.tpl_host_fuzzy =\n\n '(?:' +\n re.src_ip4 +\n '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n ')';\n\n re.tpl_host_no_ip_fuzzy =\n\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n\n re.src_host_strict =\n\n re.src_host + re.src_host_terminator;\n\n re.tpl_host_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_host_terminator;\n\n re.src_host_port_strict =\n\n re.src_host + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_no_ip_fuzzy_strict =\n\n re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n\n ////////////////////////////////////////////////////////////////////////////////\n // Main rules\n\n // Rude test fuzzy links by host, for quick deny\n re.tpl_host_fuzzy_test =\n\n 'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n\n re.tpl_email_fuzzy =\n\n '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n\n re.tpl_link_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n\n re.tpl_link_no_ip_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n\n return re;\n};\n", "'use strict';\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\nfunction isRegExp(obj) { return _class(obj) === '[object RegExp]'; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\n\n\nfunction escapeRE(str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&'); }\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n fuzzyLink: true,\n fuzzyEmail: true,\n fuzzyIP: false\n};\n\n\nfunction isOptionsObj(obj) {\n return Object.keys(obj || {}).reduce(function (acc, k) {\n return acc || defaultOptions.hasOwnProperty(k);\n }, false);\n}\n\n\nvar defaultSchemas = {\n 'http:': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.http = new RegExp(\n '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n );\n }\n if (self.re.http.test(tail)) {\n return tail.match(self.re.http)[0].length;\n }\n return 0;\n }\n },\n 'https:': 'http:',\n 'ftp:': 'http:',\n '//': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.no_http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.no_http = new RegExp(\n '^' +\n self.re.src_auth +\n // Don't allow single-level domains, because of false positives like '//test'\n // with code comments\n '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n self.re.src_port +\n self.re.src_host_terminator +\n self.re.src_path,\n\n 'i'\n );\n }\n\n if (self.re.no_http.test(tail)) {\n // should not be `://` & `///`, that protects from errors in protocol name\n if (pos >= 3 && text[pos - 3] === ':') { return 0; }\n if (pos >= 3 && text[pos - 3] === '/') { return 0; }\n return tail.match(self.re.no_http)[0].length;\n }\n return 0;\n }\n },\n 'mailto:': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.mailto) {\n self.re.mailto = new RegExp(\n '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n );\n }\n if (self.re.mailto.test(tail)) {\n return tail.match(self.re.mailto)[0].length;\n }\n return 0;\n }\n }\n};\n\n/*eslint-disable max-len*/\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444'.split('|');\n\n/*eslint-enable max-len*/\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n self.__index__ = -1;\n self.__text_cache__ = '';\n}\n\nfunction createValidator(re) {\n return function (text, pos) {\n var tail = text.slice(pos);\n\n if (re.test(tail)) {\n return tail.match(re)[0].length;\n }\n return 0;\n };\n}\n\nfunction createNormalizer() {\n return function (match, self) {\n self.normalize(match);\n };\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile(self) {\n\n // Load & clone RE patterns.\n var re = self.re = require('./lib/re')(self.__opts__);\n\n // Define dynamic patterns\n var tlds = self.__tlds__.slice();\n\n self.onCompile();\n\n if (!self.__tlds_replaced__) {\n tlds.push(tlds_2ch_src_re);\n }\n tlds.push(re.src_xn);\n\n re.src_tlds = tlds.join('|');\n\n function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); }\n\n re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n //\n // Compile each schema\n //\n\n var aliases = [];\n\n self.__compiled__ = {}; // Reset compiled data\n\n function schemaError(name, val) {\n throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n }\n\n Object.keys(self.__schemas__).forEach(function (name) {\n var val = self.__schemas__[name];\n\n // skip disabled methods\n if (val === null) { return; }\n\n var compiled = { validate: null, link: null };\n\n self.__compiled__[name] = compiled;\n\n if (isObject(val)) {\n if (isRegExp(val.validate)) {\n compiled.validate = createValidator(val.validate);\n } else if (isFunction(val.validate)) {\n compiled.validate = val.validate;\n } else {\n schemaError(name, val);\n }\n\n if (isFunction(val.normalize)) {\n compiled.normalize = val.normalize;\n } else if (!val.normalize) {\n compiled.normalize = createNormalizer();\n } else {\n schemaError(name, val);\n }\n\n return;\n }\n\n if (isString(val)) {\n aliases.push(name);\n return;\n }\n\n schemaError(name, val);\n });\n\n //\n // Compile postponed aliases\n //\n\n aliases.forEach(function (alias) {\n if (!self.__compiled__[self.__schemas__[alias]]) {\n // Silently fail on missed schemas to avoid errons on disable.\n // schemaError(alias, self.__schemas__[alias]);\n return;\n }\n\n self.__compiled__[alias].validate =\n self.__compiled__[self.__schemas__[alias]].validate;\n self.__compiled__[alias].normalize =\n self.__compiled__[self.__schemas__[alias]].normalize;\n });\n\n //\n // Fake record for guessed links\n //\n self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n //\n // Build schema condition\n //\n var slist = Object.keys(self.__compiled__)\n .filter(function (name) {\n // Filter disabled & fake schemas\n return name.length > 0 && self.__compiled__[name];\n })\n .map(escapeRE)\n .join('|');\n // (?!_) cause 1.5x slowdown\n self.re.schema_test = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');\n self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');\n\n self.re.pretest = RegExp(\n '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n 'i'\n );\n\n //\n // Cleanup\n //\n\n resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match(self, shift) {\n var start = self.__index__,\n end = self.__last_index__,\n text = self.__text_cache__.slice(start, end);\n\n /**\n * Match#schema -> String\n *\n * Prefix (protocol) for matched string.\n **/\n this.schema = self.__schema__.toLowerCase();\n /**\n * Match#index -> Number\n *\n * First position of matched string.\n **/\n this.index = start + shift;\n /**\n * Match#lastIndex -> Number\n *\n * Next position after matched string.\n **/\n this.lastIndex = end + shift;\n /**\n * Match#raw -> String\n *\n * Matched string.\n **/\n this.raw = text;\n /**\n * Match#text -> String\n *\n * Notmalized text of matched string.\n **/\n this.text = text;\n /**\n * Match#url -> String\n *\n * Normalized url of matched string.\n **/\n this.url = text;\n}\n\nfunction createMatch(self, shift) {\n var match = new Match(self, shift);\n\n self.__compiled__[match.schema].normalize(match, self);\n\n return match;\n}\n\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n * for example). `linkify-it` makes shure that prefix is not preceeded with\n * alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n * - _String_ - just alias to existing rule\n * - _Object_\n * - _validate_ - validator function (should return matched length on success),\n * or `RegExp`.\n * - _normalize_ - optional function to normalize text & url of matched result\n * (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n * like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt(schemas, options) {\n if (!(this instanceof LinkifyIt)) {\n return new LinkifyIt(schemas, options);\n }\n\n if (!options) {\n if (isOptionsObj(schemas)) {\n options = schemas;\n schemas = {};\n }\n }\n\n this.__opts__ = assign({}, defaultOptions, options);\n\n // Cache last tested result. Used to skip repeating steps on next `match` call.\n this.__index__ = -1;\n this.__last_index__ = -1; // Next scan position\n this.__schema__ = '';\n this.__text_cache__ = '';\n\n this.__schemas__ = assign({}, defaultSchemas, schemas);\n this.__compiled__ = {};\n\n this.__tlds__ = tlds_default;\n this.__tlds_replaced__ = false;\n\n this.re = {};\n\n compile(this);\n}\n\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add(schema, definition) {\n this.__schemas__[schema] = definition;\n compile(this);\n return this;\n};\n\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set(options) {\n this.__opts__ = assign(this.__opts__, options);\n return this;\n};\n\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test(text) {\n // Reset scan cache\n this.__text_cache__ = text;\n this.__index__ = -1;\n\n if (!text.length) { return false; }\n\n var m, ml, me, len, shift, next, re, tld_pos, at_pos;\n\n // try to scan for link with schema - that's the most simple rule\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search;\n re.lastIndex = 0;\n while ((m = re.exec(text)) !== null) {\n len = this.testSchemaAt(text, m[2], re.lastIndex);\n if (len) {\n this.__schema__ = m[2];\n this.__index__ = m.index + m[1].length;\n this.__last_index__ = m.index + m[0].length + len;\n break;\n }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n // guess schemaless links\n tld_pos = text.search(this.re.host_fuzzy_test);\n if (tld_pos >= 0) {\n // if tld is located after found link - no need to check fuzzy pattern\n if (this.__index__ < 0 || tld_pos < this.__index__) {\n if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n\n shift = ml.index + ml[1].length;\n\n if (this.__index__ < 0 || shift < this.__index__) {\n this.__schema__ = '';\n this.__index__ = shift;\n this.__last_index__ = ml.index + ml[0].length;\n }\n }\n }\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n // guess schemaless emails\n at_pos = text.indexOf('@');\n if (at_pos >= 0) {\n // We can't skip this check, because this cases are possible:\n // 192.168.1.1@gmail.com, my.in@example.com\n if ((me = text.match(this.re.email_fuzzy)) !== null) {\n\n shift = me.index + me[1].length;\n next = me.index + me[0].length;\n\n if (this.__index__ < 0 || shift < this.__index__ ||\n (shift === this.__index__ && next > this.__last_index__)) {\n this.__schema__ = 'mailto:';\n this.__index__ = shift;\n this.__last_index__ = next;\n }\n }\n }\n }\n\n return this.__index__ >= 0;\n};\n\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest(text) {\n return this.re.pretest.test(text);\n};\n\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n // If not supported schema check requested - terminate\n if (!this.__compiled__[schema.toLowerCase()]) {\n return 0;\n }\n return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n * protocol-neutral links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match(text) {\n var shift = 0, result = [];\n\n // Try to take previous element from cache, if .test() called before\n if (this.__index__ >= 0 && this.__text_cache__ === text) {\n result.push(createMatch(this, shift));\n shift = this.__last_index__;\n }\n\n // Cut head if cache was used\n var tail = shift ? text.slice(shift) : text;\n\n // Scan string until end reached\n while (this.test(tail)) {\n result.push(createMatch(this, shift));\n\n tail = tail.slice(this.__last_index__);\n shift += this.__last_index__;\n }\n\n if (result.length) {\n return result;\n }\n\n return null;\n};\n\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444\n * are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n list = Array.isArray(list) ? list : [ list ];\n\n if (!keepOld) {\n this.__tlds__ = list.slice();\n this.__tlds_replaced__ = true;\n compile(this);\n return this;\n }\n\n this.__tlds__ = this.__tlds__.concat(list)\n .sort()\n .filter(function (el, idx, arr) {\n return el !== arr[idx - 1];\n })\n .reverse();\n\n compile(this);\n return this;\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize(match) {\n\n // Do minimal possible changes by default. Need to collect feedback prior\n // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n if (!match.schema) { match.url = 'http://' + match.url; }\n\n if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n match.url = 'mailto:' + match.url;\n }\n};\n\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\n\n\nmodule.exports = LinkifyIt;\n", "'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nmodule.exports = punycode;\n", "// markdown-it default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 100 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {},\n block: {},\n inline: {}\n }\n};\n", "// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Commonmark default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: true, // Enable HTML tags in source\n xhtmlOut: true, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'blockquote',\n 'code',\n 'fence',\n 'heading',\n 'hr',\n 'html_block',\n 'lheading',\n 'list',\n 'reference',\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'autolink',\n 'backticks',\n 'emphasis',\n 'entity',\n 'escape',\n 'html_inline',\n 'image',\n 'link',\n 'newline',\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'emphasis',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Main parser class\n\n'use strict';\n\n\nvar utils = require('./common/utils');\nvar helpers = require('./helpers');\nvar Renderer = require('./renderer');\nvar ParserCore = require('./parser_core');\nvar ParserBlock = require('./parser_block');\nvar ParserInline = require('./parser_inline');\nvar LinkifyIt = require('linkify-it');\nvar mdurl = require('mdurl');\nvar punycode = require('punycode');\n\n\nvar config = {\n default: require('./presets/default'),\n zero: require('./presets/zero'),\n commonmark: require('./presets/commonmark')\n};\n\n////////////////////////////////////////////////////////////////////////////////\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\n\nfunction validateLink(url) {\n // url should be normalized at this point, and existing entities are decoded\n var str = url.trim().toLowerCase();\n\n return BAD_PROTO_RE.test(str) ? (GOOD_DATA_RE.test(str) ? true : false) : true;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar RECODE_HOSTNAME_FOR = [ 'http:', 'https:', 'mailto:' ];\n\nfunction normalizeLink(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toASCII(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n return mdurl.encode(mdurl.format(parsed));\n}\n\nfunction normalizeLinkText(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toUnicode(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%');\n}\n\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n * md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n * configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n * similar to GFM, used when no preset name given. Enables all available rules,\n * but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n * all rules disabled. Useful to quickly setup your config via `.enable()`.\n * For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n * That's not safe! You may need external sanitizer to protect output from XSS.\n * It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n * (`<br />`). This is needed only for full CommonMark compatibility. In real\n * world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n * Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__ - `false`. Set `true` to enable [some language-neutral\n * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n * quotes beautification (smartquotes).\n * - __quotes__ - `\u201C\u201D\u2018\u2019`, String or Array. Double + single quotes replacement\n * pairs, when typographer enabled and smartquotes on. For example, you can\n * use `'\u00AB\u00BB\u201E\u201C'` for Russian, `'\u201E\u201C\u201A\u2018'` for German, and\n * `['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n * Highlighter `function (str, lang)` should return escaped HTML. It can also\n * return empty string if the source was not changed and should be escaped\n * externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n * html: true,\n * linkify: true,\n * typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n * } catch (__) {}\n * }\n *\n * return ''; // use external default escaping\n * }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return '<pre class=\"hljs\"><code>' +\n * hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n * '</code></pre>';\n * } catch (__) {}\n * }\n *\n * return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n * }\n * });\n * ```\n *\n **/\nfunction MarkdownIt(presetName, options) {\n if (!(this instanceof MarkdownIt)) {\n return new MarkdownIt(presetName, options);\n }\n\n if (!options) {\n if (!utils.isString(presetName)) {\n options = presetName || {};\n presetName = 'default';\n }\n }\n\n /**\n * MarkdownIt#inline -> ParserInline\n *\n * Instance of [[ParserInline]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.inline = new ParserInline();\n\n /**\n * MarkdownIt#block -> ParserBlock\n *\n * Instance of [[ParserBlock]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.block = new ParserBlock();\n\n /**\n * MarkdownIt#core -> Core\n *\n * Instance of [[Core]] chain executor. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.core = new ParserCore();\n\n /**\n * MarkdownIt#renderer -> Renderer\n *\n * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n * rules for new token types, generated by plugins.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * function myToken(tokens, idx, options, env, self) {\n * //...\n * return result;\n * };\n *\n * md.renderer.rules['my_token'] = myToken\n * ```\n *\n * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n **/\n this.renderer = new Renderer();\n\n /**\n * MarkdownIt#linkify -> LinkifyIt\n *\n * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n * rule.\n **/\n this.linkify = new LinkifyIt();\n\n /**\n * MarkdownIt#validateLink(url) -> Boolean\n *\n * Link validation function. CommonMark allows too much in links. By default\n * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n * except some embedded image types.\n *\n * You can change this behaviour:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * // enable everything\n * md.validateLink = function () { return true; }\n * ```\n **/\n this.validateLink = validateLink;\n\n /**\n * MarkdownIt#normalizeLink(url) -> String\n *\n * Function used to encode link url to a machine-readable format,\n * which includes url-encoding, punycode, etc.\n **/\n this.normalizeLink = normalizeLink;\n\n /**\n * MarkdownIt#normalizeLinkText(url) -> String\n *\n * Function used to decode link url to a human-readable format`\n **/\n this.normalizeLinkText = normalizeLinkText;\n\n\n // Expose utils & helpers for easy acces from plugins\n\n /**\n * MarkdownIt#utils -> utils\n *\n * Assorted utility functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js).\n **/\n this.utils = utils;\n\n /**\n * MarkdownIt#helpers -> helpers\n *\n * Link components parser functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n **/\n this.helpers = utils.assign({}, helpers);\n\n\n this.options = {};\n this.configure(presetName);\n\n if (options) { this.set(options); }\n}\n\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .set({ html: true, breaks: true })\n * .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n utils.assign(this.options, options);\n return this;\n};\n\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n var self = this, presetName;\n\n if (utils.isString(presets)) {\n presetName = presets;\n presets = config[presetName];\n if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name'); }\n }\n\n if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty'); }\n\n if (presets.options) { self.set(presets.options); }\n\n if (presets.components) {\n Object.keys(presets.components).forEach(function (name) {\n if (presets.components[name].rules) {\n self[name].ruler.enableOnly(presets.components[name].rules);\n }\n if (presets.components[name].rules2) {\n self[name].ruler2.enableOnly(presets.components[name].rules2);\n }\n });\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .enable(['sub', 'sup'])\n * .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.enable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.enable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n }\n\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.disable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.disable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n * .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n * });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n var args = [ this ].concat(Array.prototype.slice.call(arguments, 1));\n plugin.apply(plugin, args);\n return this;\n};\n\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n if (typeof src !== 'string') {\n throw new Error('Input data should be a String');\n }\n\n var state = new this.core.State(src, this, env);\n\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parse(src, env), this.options, env);\n};\n\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n var state = new this.core.State(src, this, env);\n\n state.inlineMode = true;\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\n\nmodule.exports = MarkdownIt;\n", "// Generated by PEG.js v0.11.0-master.b7b87ea, https://pegjs.org/\n\n'use strict';\n\nfunction peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = 'SyntaxError';\n\n // istanbul ignore next\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\npeg$SyntaxError.buildMessage = function (expected, found, location) {\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 + ']';\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 not: function (expectation) {\n return 'not ' + describeExpectation(expectation.expected);\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) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\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) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\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 (\n descriptions.slice(0, -1).join(', ') +\n ', or ' +\n descriptions[descriptions.length - 1]\n );\n }\n }\n\n function describeFound(found) {\n return found ? '\"' + literalEscape(found) + '\"' : 'end of input';\n }\n\n return (\n 'Expected ' +\n describeExpected(expected) +\n ' but ' +\n describeFound(found) +\n ' found.'\n );\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n\n var peg$startRuleFunctions = { Top: peg$parseTop };\n var peg$startRuleFunction = peg$parseTop;\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 = 'null';\n var peg$c10 = 'true';\n var peg$c11 = 'false';\n var peg$c12 = '{';\n var peg$c13 = '}';\n var peg$c14 = ':';\n var peg$c15 = '-';\n var peg$c16 = '\"';\n var peg$c17 = '\\\\';\n\n var peg$r0 = /^[$@]/;\n var peg$r1 = /^[0-9]/;\n var peg$r2 = /^[^\\0-\\x1F\"\\\\]/;\n var peg$r3 = /^[a-zA-Z0-9_\\-]/;\n var peg$r4 = /^[ \\n\\t]/;\n\n var peg$e0 = peg$literalExpectation('/', false);\n var peg$e1 = peg$otherExpectation('tag name');\n var peg$e2 = peg$otherExpectation('class');\n var peg$e3 = peg$otherExpectation('id');\n var peg$e4 = peg$literalExpectation('=', false);\n var peg$e5 = peg$literalExpectation('(', false);\n var peg$e6 = peg$literalExpectation(')', false);\n var peg$e7 = peg$literalExpectation(',', false);\n var peg$e8 = peg$otherExpectation('variable');\n var peg$e9 = peg$otherExpectation('null');\n var peg$e10 = peg$otherExpectation('boolean');\n var peg$e11 = peg$literalExpectation('[', false);\n var peg$e12 = peg$literalExpectation(']', false);\n var peg$e13 = peg$literalExpectation('{', false);\n var peg$e14 = peg$literalExpectation('}', false);\n var peg$e15 = peg$literalExpectation(':', false);\n var peg$e16 = peg$otherExpectation('number');\n var peg$e17 = peg$otherExpectation('string');\n var peg$e18 = peg$otherExpectation('identifier');\n var peg$e19 = peg$otherExpectation('whitespace');\n\n var peg$f0 = function (variable) {\n return { type: 'variable', meta: { variable } };\n };\n var peg$f1 = function (attributes) {\n return { type: 'annotation', meta: { attributes } };\n };\n var peg$f2 = function (tag, value) {\n return value;\n };\n var peg$f3 = function (tag, primary, attributes, close) {\n if (primary) {\n attributes = attributes || [];\n attributes.unshift({\n type: 'attribute',\n name: 'primary',\n value: primary,\n });\n }\n\n const [type, nesting] = close ? ['tag', 0] : ['tag_open', 1];\n return { type, nesting, meta: { tag, attributes } };\n };\n var peg$f4 = function (tag) {\n return { type: 'tag_close', nesting: -1, meta: { tag } };\n };\n var peg$f5 = function (head, tail) {\n return !head ? [] : [head, ...tail];\n };\n var peg$f6 = function (item) {\n return item;\n };\n var peg$f7 = function (ids) {\n return ids;\n };\n var peg$f8 = function (classes) {\n return classes;\n };\n var peg$f9 = function (attribute) {\n return attribute;\n };\n var peg$f10 = function (name) {\n return { type: 'class', name, value: true };\n };\n var peg$f11 = function (value) {\n return { type: 'attribute', name: 'id', value };\n };\n var peg$f12 = function (name, value) {\n return { type: 'attribute', name, value };\n };\n var peg$f13 = function (name, head, tail) {\n return head ? [head, ...tail] : [];\n };\n var peg$f14 = function (name, params) {\n let parameters = {};\n for (let [index, { name, value }] of params.entries())\n parameters[name || index] = value;\n return new Function(name, parameters);\n };\n var peg$f15 = function (name) {\n return name;\n };\n var peg$f16 = function (name, value) {\n return { name, value };\n };\n var peg$f17 = function (value) {\n return value;\n };\n var peg$f18 = function (prefix, head, tail) {\n if (prefix === '@') return [head, ...tail];\n return new Variable([head, ...tail]);\n };\n var peg$f19 = function () {\n return null;\n };\n var peg$f20 = function () {\n return true;\n };\n var peg$f21 = function () {\n return false;\n };\n var peg$f22 = function (head, tail) {\n return [head, ...tail];\n };\n var peg$f23 = function (value) {\n return value || [];\n };\n var peg$f24 = function (head, tail) {\n return Object.assign(head, ...tail);\n };\n var peg$f25 = function (value) {\n return value || {};\n };\n var peg$f26 = function (key, value) {\n return key === '$$mdtype' ? {} : { [key]: value };\n };\n var peg$f27 = function () {\n return parseFloat(text());\n };\n var peg$f28 = function (value) {\n return value.join('');\n };\n var peg$f29 = function (sequence) {\n return sequence;\n };\n\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$expected = [];\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(\n 'Can\\'t start parsing from rule \"' + options.startRule + '\".'\n );\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 [peg$savedPos, peg$currPos];\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location =\n 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 =\n 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 {\n type: 'class',\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase,\n };\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 var peg$VALIDFILENAME =\n typeof options.filename === 'string' && options.filename.length > 0;\n function peg$computeLocation(startPos, endPos) {\n var loc = {};\n\n if (peg$VALIDFILENAME) loc.filename = options.filename;\n\n var startPosDetails = peg$computePosDetails(startPos);\n loc.start = {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column,\n };\n\n var endPosDetails = peg$computePosDetails(endPos);\n loc.end = {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column,\n };\n\n return loc;\n }\n\n function peg$begin() {\n peg$expected.push({ pos: peg$currPos, variants: [] });\n }\n\n function peg$expect(expected) {\n var top = peg$expected[peg$expected.length - 1];\n\n if (peg$currPos < top.pos) {\n return;\n }\n\n if (peg$currPos > top.pos) {\n top.pos = peg$currPos;\n top.variants = [];\n }\n\n top.variants.push(expected);\n }\n\n function peg$end(invert) {\n var expected = peg$expected.pop();\n var top = peg$expected[peg$expected.length - 1];\n var variants = expected.variants;\n\n if (top.pos !== expected.pos) {\n return;\n }\n\n if (invert) {\n variants = variants.map(function (e) {\n return e.type === 'not' ? e.expected : { type: 'not', expected: e };\n });\n }\n\n Array.prototype.push.apply(top.variants, variants);\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, location),\n expected,\n found,\n location\n );\n }\n\n function peg$buildError() {\n var expected = peg$expected[0];\n var failPos = expected.pos;\n\n return peg$buildStructuredError(\n expected.variants,\n failPos < input.length ? input.charAt(failPos) : null,\n failPos < input.length\n ? peg$computeLocation(failPos, failPos + 1)\n : peg$computeLocation(failPos, failPos)\n );\n }\n\n function peg$parseTop() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseTopLevelValue();\n if (s0 === peg$FAILED) {\n s0 = peg$parseAnnotation();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagOpen();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagClose();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseTopLevelValue() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseVariable();\n if (s1 === peg$FAILED) {\n s1 = peg$parseFunction();\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseAnnotation() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributes();\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 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$parseTagOpen() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagName();\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$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n peg$savedPos = s3;\n s3 = peg$f2(s1, s4);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseTagAttributes();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n s6 = peg$parse_();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parse_();\n }\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s6 = peg$c0;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s3, s4, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagClose() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagName();\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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagName() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e1);\n peg$silentFails++;\n s0 = peg$parseIdentifier();\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttributes() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributesItem();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseTagAttributesTail();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseTagAttributesTail();\n }\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$parseTagAttributesTail() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagAttributesItem();\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$parseTagAttributesItem() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutId();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f7(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutClass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagAttribute();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f9(s1);\n }\n s0 = s1;\n }\n }\n\n return s0;\n }\n\n function peg$parseTagShortcutClass() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e2);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagShortcutId() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e3);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\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 peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttribute() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseValue();\n if (s3 !== 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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunction() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e5);\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c4;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$currPos;\n s5 = peg$parseFunctionParameter();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s6 = [];\n s7 = peg$parseFunctionParameterTail();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parseFunctionParameterTail();\n }\n peg$savedPos = s4;\n s4 = peg$f13(s1, s5, s6);\n rule$expects(peg$e6);\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c5;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s1, 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 return s0;\n }\n\n function peg$parseFunctionParameter() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s3 = peg$c3;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f15(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 s1 = null;\n }\n s2 = peg$parseValue();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunctionParameterTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\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 rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$parseFunctionParameter();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\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$parseTrailingComma() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\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 rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\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 if (s0 === peg$FAILED) {\n s0 = null;\n }\n\n return s0;\n }\n\n function peg$parseVariable() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e8);\n peg$silentFails++;\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 }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseVariableTail();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseVariableTail();\n }\n peg$savedPos = s0;\n s0 = peg$f18(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 peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseVariableTail() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\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 if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseValueNumber();\n if (s2 === peg$FAILED) {\n s2 = peg$parseValueString();\n }\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 }\n if (s3 !== 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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseValue() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseValueNull();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueBoolean();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueString();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueArray();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueHash();\n if (s0 === peg$FAILED) {\n s0 = peg$parseFunction();\n if (s0 === peg$FAILED) {\n s0 = peg$parseVariable();\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseValueNull() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e9);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c9) {\n s1 = peg$c9;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19();\n }\n s0 = s1;\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueBoolean() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e10);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c10) {\n s1 = peg$c10;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f20();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c11) {\n s1 = peg$c11;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f21();\n }\n s0 = s1;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueArray() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e11);\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\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$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueArrayTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueArrayTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f22(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e12);\n if (input.charCodeAt(peg$currPos) === 93) {\n s5 = peg$c8;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(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$parseValueArrayTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\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 rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\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$parseValueHash() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e13);\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\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$currPos;\n s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueHashTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueHashTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f24(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e14);\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\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\n return s0;\n }\n\n function peg$parseValueHashTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\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 rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s4);\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$parseValueHashItem() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 === peg$FAILED) {\n s1 = peg$parseValueString();\n }\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e15);\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c14;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f26(s1, 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 return s0;\n }\n\n function peg$parseValueNumber() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e16);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\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 }\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 }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\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 }\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 }\n }\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 s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f27();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueString() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e17);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseValueStringChars();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseValueStringChars();\n }\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c16;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\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$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueStringChars() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\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 }\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueStringEscapes();\n }\n\n return s0;\n }\n\n function peg$parseValueStringEscapes() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c17;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s2 = peg$c16;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c17;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n }\n if (s2 !== 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\n return s0;\n }\n\n function peg$parseIdentifier() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e18);\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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\n return s0;\n }\n\n function peg$parse_() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e19);\n peg$silentFails++;\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n const { Variable, Function } = options;\n\n peg$begin();\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$expect(peg$endExpectation());\n }\n\n throw peg$buildError();\n }\n}\n\nmodule.exports = {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse,\n};\n", "'use strict';\n\n\nmodule.exports = require('./lib/');\n", "import MarkdownIt from 'markdown-it/lib';\nimport annotations from './plugins/annotations';\nimport frontmatter from './plugins/frontmatter';\nimport type Token from 'markdown-it/lib/token';\n\nexport default class Tokenizer {\n private parser: MarkdownIt;\n\n constructor(\n config: MarkdownIt.Options & { allowIndentation?: boolean } = {}\n ) {\n this.parser = new MarkdownIt(config);\n this.parser.use(annotations, 'annotations', {});\n this.parser.use(frontmatter, 'frontmatter', {});\n this.parser.disable('lheading');\n }\n\n tokenize(content: string): Token[] {\n return this.parser.parse(content.toString(), {});\n }\n}\n", "import { parse, SyntaxError } from './grammar/tag';\nimport Variable from './ast/variable';\nimport Function from './ast/function';\n\nimport type Token from 'markdown-it/lib/token';\n\nenum STATES {\n normal,\n string,\n escape,\n}\n\nexport const OPEN = '{%';\nexport const CLOSE = '%}';\n\nexport function findTagEnd(content: string, start = 0) {\n let state = STATES.normal;\n for (let pos = start; pos < content.length; pos++) {\n const char = content[pos];\n\n switch (state) {\n case STATES.string:\n switch (char) {\n case '\"':\n state = STATES.normal;\n break;\n case '\\\\':\n state = STATES.escape;\n break;\n }\n break;\n case STATES.escape:\n state = STATES.string;\n break;\n case STATES.normal:\n if (char === '\"') state = STATES.string;\n else if (content.startsWith(CLOSE, pos)) return pos;\n }\n }\n}\n\nfunction parseTag(content: string, line: number, contentStart: number) {\n try {\n return parse(content, { Variable, Function });\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = {\n start: { line, character: start.offset + contentStart },\n end: { line: line + 1, character: end.offset + contentStart },\n };\n\n return { type: 'error', meta: { error: { message, location } } };\n }\n}\n\nexport function parseTags(content: string, firstLine = 0): Token[] {\n let line = firstLine + 1;\n const output = [];\n let start = 0;\n\n for (let pos = 0; pos < content.length; pos++) {\n if (content[pos] === '\\n') {\n line++;\n continue;\n }\n\n if (!content.startsWith(OPEN, pos)) continue;\n\n const end = findTagEnd(content, pos) || 0;\n const text = content.slice(pos, end + CLOSE.length);\n const inner = content.slice(pos + OPEN.length, end);\n const lineStart = content.lastIndexOf('\\n', pos);\n const lineEnd = content.indexOf('\\n', end);\n const lineContent = content.slice(lineStart, lineEnd);\n const tag = parseTag(inner.trim(), line, pos - lineStart);\n\n // Throw away excess whitespace introduced by block-level tags\n const precedingTextEnd = lineContent.trim() === text ? lineStart : pos;\n const precedingText = content.slice(start, precedingTextEnd);\n\n output.push({\n type: 'text',\n start,\n end: pos - 1,\n content: precedingText,\n });\n\n output.push({\n map: [line, line + 1],\n position: {\n start: pos - lineStart,\n end: pos - lineStart + text.length,\n },\n start: pos,\n end: pos + text.length - 1,\n info: text,\n ...tag,\n });\n\n start = end + CLOSE.length;\n pos = start - 1;\n }\n\n output.push({\n type: 'text',\n start,\n end: content.length - 1,\n content: content.slice(start),\n });\n\n return output;\n}\n", "import type { Config, AstType } from '../types';\n\nexport default class Variable implements AstType {\n readonly $$mdtype = 'Variable';\n\n path;\n\n constructor(path: (string | number)[] = []) {\n this.path = path;\n }\n\n resolve({ variables }: Config = {}) {\n return variables instanceof Function\n ? variables(this.path)\n : this.path.reduce((obj = {}, key) => obj[key], variables);\n }\n}\n", "import type {\n AstType,\n Config,\n Function as AstFunction,\n Scalar,\n} from '../types';\n\nexport function isAst(value?: any): value is AstType {\n return !!value?.$$mdtype;\n}\n\nexport function isFunction(value?: any): value is AstFunction {\n return !!(value?.$$mdtype === 'Function');\n}\n\nexport function* getAstValues(value: any): Generator<AstType, void, unknown> {\n if (value == null || typeof value !== 'object') return;\n\n if (Array.isArray(value)) for (const v of value) yield* getAstValues(v);\n\n if (isAst(value)) yield value;\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return;\n\n for (const v of Object.values(value)) yield* getAstValues(v);\n}\n\nexport function resolve(value: any, config: Config = {}): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => resolve(item, config));\n\n if (isAst(value) && value?.resolve instanceof Function)\n return value.resolve(config);\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = resolve(v, config);\n return output;\n}\n", "import { resolve } from './base';\nimport type { Config, AstType } from '../types';\n\nexport default class Function implements AstType {\n readonly $$mdtype = 'Function';\n\n name;\n parameters;\n\n constructor(name: string, parameters: Record<string, any>) {\n this.name = name;\n this.parameters = parameters;\n }\n\n resolve(config: Config = {}) {\n const fn = config?.functions?.[this.name];\n if (!fn) return null;\n\n const parameters = resolve(this.parameters, config);\n return fn.transform?.(parameters, config);\n }\n}\n", "import { findTagEnd, parseTags } from '../../utils';\nimport { parse, SyntaxError } from '../../grammar/tag';\nimport Variable from '../../ast/variable';\nimport Function from '../../ast/function';\n\nimport type { AttributeValue } from '../../types';\nimport type MarkdownIt from 'markdown-it/lib';\nimport type StateCore from 'markdown-it/lib/rules_core/state_core';\nimport type StateInline from 'markdown-it/lib/rules_inline/state_inline';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\nimport type Token from 'markdown-it/lib/token';\n\nimport { OPEN, CLOSE } from '../../utils';\n\nfunction createToken(\n state: StateBlock | StateInline,\n content: string,\n contentStart?: number\n): Token {\n try {\n const { type, meta, nesting = 0 } = parse(content, { Variable, Function });\n const token = state.push(type, '', nesting);\n token.info = content;\n token.meta = meta;\n\n return token;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = contentStart\n ? {\n start: { offset: start.offset + contentStart },\n end: { offset: end.offset + contentStart },\n }\n : null;\n\n const token = state.push('error', '', 0);\n token.meta = { error: { message, location } };\n return token;\n }\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n const start = state.bMarks[startLine] + state.tShift[startLine];\n const finish = state.eMarks[startLine];\n\n if (!state.src.startsWith(OPEN, start)) return false;\n\n const tagEnd = findTagEnd(state.src, start);\n const lastPossible = state.src.slice(0, finish).trim().length;\n\n if (!tagEnd || tagEnd < lastPossible - CLOSE.length) return false;\n\n const contentStart = start + OPEN.length;\n const content = state.src.slice(contentStart, tagEnd).trim();\n const lines = content.split('\\n').length;\n\n if (content[0] === '$') return false;\n\n if (silent) return true;\n\n const token = createToken(state, content, contentStart);\n token.map = [startLine, startLine + lines];\n state.line += lines;\n return true;\n}\n\nfunction inline(state: StateInline, silent: boolean): boolean {\n if (!state.src.startsWith(OPEN, state.pos)) return false;\n\n const tagEnd = findTagEnd(state.src, state.pos);\n if (!tagEnd) return false;\n\n const content = state.src.slice(state.pos + OPEN.length, tagEnd);\n if (!silent) createToken(state, content.trim());\n\n state.pos = tagEnd + CLOSE.length;\n return true;\n}\n\nfunction core(state: StateCore) {\n let token: Token;\n for (token of state.tokens) {\n if (token.type !== 'fence') continue;\n\n if (token.info.includes(OPEN)) {\n const start = token.info.indexOf(OPEN);\n const end = findTagEnd(token.info, start);\n const content = token.info.slice(start + OPEN.length, end);\n\n try {\n const { meta } = parse(content.trim(), { Variable, Function });\n token.meta = meta;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n if (!token.errors) token.errors = [];\n token.errors.push({\n id: 'fence-tag-error',\n level: 'error',\n message: `Syntax error in fence tag: ${\n (error as SyntaxError).message\n }`,\n });\n }\n }\n\n if (\n token?.meta?.attributes?.find(\n (attr: AttributeValue) => attr.name === 'process' && !attr.value\n )\n )\n continue;\n\n token.children = parseTags(token.content, token.map[0]);\n }\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('paragraph', 'annotations', block, {\n alt: ['paragraph', 'blockquote'],\n });\n md.inline.ruler.push('containers', inline);\n md.core.ruler.push('annotations', core);\n}\n", "import type MarkdownIt from 'markdown-it/lib';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\n\nconst fence = '---';\n\nfunction getLine(state: StateBlock, n: number) {\n return state.src.slice(state.bMarks[n], state.eMarks[n]).trim();\n}\n\nfunction findClose(state: StateBlock, endLine: number) {\n for (let line = 1; line < endLine; line++)\n if (getLine(state, line) === fence) return line;\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n if (startLine != 0 || getLine(state, 0) != fence) return false;\n\n const close = findClose(state, endLine);\n\n if (!close) return false;\n if (silent) return true;\n\n const token = state.push('frontmatter', '', 0);\n token.content = state.src.slice(state.eMarks[0], state.bMarks[close]).trim();\n token.map = [0, close];\n token.hidden = true;\n\n state.line = close + 1;\n return true;\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('hr', 'frontmatter', block);\n}\n", "import type { RenderableTreeNode } from '../types';\n\nexport default class Tag {\n readonly $$mdtype = 'Tag' as const;\n\n name: string;\n attributes: Record<string, any>;\n children: RenderableTreeNode[];\n\n constructor(\n name = 'div',\n attributes = {},\n children: RenderableTreeNode[] = []\n ) {\n this.name = name;\n this.attributes = attributes;\n this.children = children;\n }\n}\n", "import { CustomAttributeTypeInterface, ValidationError } from '../types';\n\nexport class Class implements CustomAttributeTypeInterface {\n validate(value: any): ValidationError[] {\n if (typeof value === 'string' || typeof value === 'object') return [];\n\n return [\n {\n id: 'attribute-type-invalid',\n level: 'error',\n message: `Attribute 'class' must be type 'string | object'`,\n },\n ];\n }\n\n transform(value: any) {\n if (!value || typeof value === 'string') return value;\n\n const classes = [];\n for (const [k, v] of Object.entries(value ?? {})) if (v) classes.push(k);\n return classes.join(' ');\n }\n}\n", "import Tag from './ast/tag';\nimport { Class } from './schema-types/class';\nimport type {\n Config,\n Node,\n NodeType,\n Schema,\n RenderableTreeNode,\n RenderableTreeNodes,\n} from './types';\n\ntype AttributesSchema = Schema['attributes'];\n\nexport const globalAttributes: AttributesSchema = {\n class: { type: Class, render: true },\n id: { type: String, render: true },\n};\n\nexport interface Transformer {\n findSchema(node: Node, config: Config): Schema | undefined;\n node(node: Node, config: Config): RenderableTreeNodes;\n attributes(node: Node, config: Config): Record<string, any>;\n children(node: Node, config: Config): RenderableTreeNode[];\n}\n\nexport default {\n findSchema(node: Node, { nodes = {}, tags = {} }: Config = {}) {\n return node.tag ? tags[node.tag] : nodes[node.type as NodeType];\n },\n\n attributes(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n const output: Record<string, any> = {};\n\n const attrs = { ...globalAttributes, ...schema.attributes };\n for (const [key, attr] of Object.entries(attrs)) {\n if (attr.render == false) continue;\n\n const name = typeof attr.render === 'string' ? attr.render : key;\n\n let value = node.attributes[key];\n if (typeof attr.type === 'function') {\n const instance: any = new attr.type();\n if (instance.transform) {\n value = instance.transform(value, config);\n }\n }\n value = value === undefined ? attr.default : value;\n\n if (value === undefined) continue;\n output[name] = value;\n }\n\n return output;\n },\n\n children(node: Node, config: Config = {}) {\n return node.children.flatMap((child) => this.node(child, config));\n },\n\n node(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n if (schema && schema.transform instanceof Function)\n return schema.transform(node, config);\n\n const children = this.children(node, config);\n if (!schema || !schema.render) return children;\n\n const attributes = this.attributes(node, config);\n return new Tag(schema.render, attributes, children);\n },\n} as Transformer;\n", "import { resolve } from './base';\nimport transformer from '../transformer';\nimport type {\n AstType,\n Location,\n Config,\n RenderableTreeNode,\n RenderableTreeNodes,\n Schema,\n ValidationError,\n} from '../types';\n\nexport default class Node implements AstType {\n readonly $$mdtype = 'Node';\n\n attributes: Record<string, any>;\n children: Node[];\n errors: ValidationError[] = [];\n lines: number[] = [];\n type: string;\n tag?: string;\n\n inline = false;\n location?: Location;\n\n constructor(\n type = 'node',\n attributes: Record<string, any> = {},\n children: Node[] = [],\n tag?: string\n ) {\n this.attributes = attributes;\n this.children = children;\n this.type = type;\n this.tag = tag;\n }\n\n *walk(): Generator<Node, void, unknown> {\n for (const child of this.children) {\n yield child;\n yield* child.walk();\n }\n }\n\n push(node: Node) {\n this.children.push(node);\n }\n\n resolve(config: Config = {}): Node {\n return Object.assign(new Node(), this, {\n children: this.children.map((child) => child.resolve(config)),\n attributes: resolve(this.attributes, config),\n });\n }\n\n findSchema(config: Config = {}): Schema | undefined {\n return transformer.findSchema(this, config);\n }\n\n transformAttributes(config: Config = {}) {\n return transformer.attributes(this, config);\n }\n\n transformChildren(config: Config): RenderableTreeNode[] {\n return transformer.children(this, config);\n }\n\n transform(config: Config): RenderableTreeNodes {\n return transformer.node(this, config);\n }\n}\n", "import Node from './node';\nimport Function from './function';\nimport Variable from './variable';\nimport * as base from './base';\n\nimport type { AstType } from '../types';\n\nconst AstTypes = {\n Function,\n Node,\n Variable,\n};\n\nfunction reviver(_: string, value: AstType): any {\n if (!value) return value;\n const klass = AstTypes[value.$$mdtype] as any;\n return klass ? Object.assign(new klass(), value) : value;\n}\n\nfunction fromJSON(text: string): Node | Node[] {\n return JSON.parse(text, reviver);\n}\n\nexport default {\n ...AstTypes,\n ...base,\n fromJSON,\n};\n", "import Ast from '../ast/index';\n\nimport type { Node } from '../types';\n\nfunction convertToRow(node: Node, cellType = 'td') {\n node.type = 'tr';\n node.attributes = {};\n\n for (const cell of node.children) cell.type = cellType;\n\n return node;\n}\n\nexport default function transform(document: Node) {\n for (const node of document.walk()) {\n if (node.type !== 'tag' || node.tag !== 'table') continue;\n\n const [first, ...rest] = node.children;\n if (!first || first.type === 'table') continue;\n\n const table = new Ast.Node('table', node.attributes, [\n new Ast.Node('thead'),\n new Ast.Node('tbody'),\n ]);\n\n const [thead, tbody] = table.children;\n\n if (first.type === 'list') thead.push(convertToRow(first, 'th'));\n\n for (const row of rest) {\n // Convert lists to rows with special-case support for conditionals\n // When a conditional is encountered, convert all of its top-level lists to rows\n if (row.type === 'list') convertToRow(row);\n else if (row.type === 'tag' && row.tag == 'if') {\n const children = [];\n\n for (const child of row.children) {\n // Replace children and skip HRs in order to support conditionals with multiple rows\n if (child.type === 'hr') continue;\n if (child.type === 'list') convertToRow(child);\n children.push(child);\n }\n\n row.children = children;\n } else continue;\n tbody.push(row);\n }\n\n node.children = [table];\n }\n}\n", "import table from './table';\nexport default [table];\n", "import Node from './ast/node';\nimport transforms from './transforms/index';\n\nimport type { AttributeValue } from './types';\n\nimport type Token from 'markdown-it/lib/token';\n\nconst mappings: Record<string, string> = {\n ordered_list: 'list',\n bullet_list: 'list',\n code_inline: 'code',\n list_item: 'item',\n variable: 'text',\n};\n\nfunction annotate(node: Node, attributes: AttributeValue[]) {\n for (const { name, value, type } of attributes)\n if (type === 'attribute') node.attributes[name] = value;\n else if (type === 'class')\n if (node.attributes.class) node.attributes.class[name] = value;\n else node.attributes.class = { [name]: value };\n}\n\nfunction handleAttrs(token: Token, type: string) {\n switch (type) {\n case 'heading':\n return { level: Number(token.tag.replace('h', '')) };\n case 'list':\n return { ordered: token.type.startsWith('ordered') };\n case 'link': {\n const attrs = Object.fromEntries(token.attrs);\n return { href: attrs.href };\n }\n case 'image': {\n const attrs = Object.fromEntries(token.attrs);\n return { alt: token.content, src: attrs.src };\n }\n case 'text':\n case 'code':\n return { content: (token.meta || {}).variable || token.content };\n case 'fence': {\n const [language] = token.info.split(' ', 1);\n return language === ''\n ? { content: token.content }\n : { content: token.content, language };\n }\n default:\n return {};\n }\n}\n\nfunction handleToken(\n token: Token,\n nodes: Node[],\n file?: string,\n inlineParent?: Node\n) {\n if (token.type === 'frontmatter') {\n nodes[0].attributes.frontmatter = token.content;\n return;\n }\n\n if (token.hidden || (token.type === 'text' && token.content === '')) return;\n\n const errors = token.errors || [];\n const parent = nodes[nodes.length - 1];\n const { tag, attributes, error } = token.meta || {};\n\n if (token.type === 'annotation') {\n if (inlineParent) return annotate(inlineParent, attributes);\n\n return parent.errors.push({\n id: 'no-inline-annotations',\n level: 'error',\n message: `Can't apply inline annotations to '${parent.type}'`,\n });\n }\n\n let typeName = token.type.replace(/_(open|close)$/, '');\n if (mappings[typeName]) typeName = mappings[typeName];\n\n if (typeName === 'error') {\n const { message, location } = error;\n errors.push({ id: 'parse-error', level: 'critical', message, location });\n }\n\n if (token.nesting < 0) {\n if (parent.type === typeName) {\n if (parent.lines && token.map) parent.lines.push(...token.map);\n return nodes.pop();\n }\n\n errors.push({\n id: 'missing-opening',\n level: 'critical',\n message: `Node '${typeName}' is missing opening`,\n });\n }\n\n const attrs = handleAttrs(token, typeName);\n const node = new Node(typeName, attrs, undefined, tag || undefined);\n const { position = {} } = token;\n\n node.errors = errors;\n node.lines = token.map || parent.lines || [];\n node.location = {\n file,\n start: {\n line: node.lines[0],\n character: position.start,\n },\n end: {\n line: node.lines[1],\n character: position.end,\n },\n };\n\n if (inlineParent) node.inline = true;\n\n if (attributes && ['tag', 'fence', 'image'].includes(typeName))\n annotate(node, attributes);\n\n parent.push(node);\n if (token.nesting > 0) nodes.push(node);\n\n if (!Array.isArray(token.children)) return;\n\n inlineParent = parent;\n\n nodes.push(node);\n\n const isLeafNode = typeName === 'image';\n if (!isLeafNode) {\n for (const child of token.children)\n handleToken(child, nodes, file, inlineParent);\n }\n\n nodes.pop();\n}\n\nexport default function parser(tokens: Token[], file?: string) {\n const doc = new Node('document');\n const nodes = [doc];\n\n for (const token of tokens) handleToken(token, nodes, file);\n\n if (nodes.length > 1)\n for (const node of nodes.slice(1))\n node.errors.push({\n id: 'missing-closing',\n level: 'critical',\n message: `Node '${node.tag || node.type}' is missing closing`,\n });\n\n for (const transform of transforms) transform(doc);\n\n return doc;\n}\n", "import type { Schema } from './types';\nimport Tag from './ast/tag';\n\nexport const document: Schema = {\n render: 'article',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n frontmatter: { render: false },\n },\n};\n\nexport const heading: Schema = {\n children: ['inline'],\n attributes: {\n level: { type: Number, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n `h${node.attributes['level']}`,\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const paragraph: Schema = {\n render: 'p',\n children: ['inline'],\n};\n\nexport const image: Schema = {\n render: 'img',\n attributes: {\n src: { type: String, required: true },\n alt: { type: String },\n // width/height attributes will need to be to be implemented as an extension to markdown-it\n },\n};\n\nexport const fence: Schema = {\n render: 'pre',\n attributes: {\n content: { type: String, render: false, required: true },\n language: { type: String, render: 'data-language' },\n process: { type: Boolean, render: false, default: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n const children = node.children.length\n ? node.transformChildren(config)\n : [node.attributes.content];\n\n return new Tag('pre', attributes, children);\n },\n};\n\nexport const blockquote: Schema = {\n render: 'blockquote',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const item: Schema = {\n render: 'li',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const list: Schema = {\n children: ['item'],\n attributes: {\n ordered: { type: Boolean, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n node.attributes.ordered ? 'ol' : 'ul',\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const hr: Schema = {\n render: 'hr',\n};\n\nexport const table: Schema = {\n render: 'table',\n};\n\nexport const td: Schema = {\n render: 'td',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n colspan: { type: Number },\n rowspan: { type: Number },\n align: { type: String },\n },\n};\n\nexport const th: Schema = {\n render: 'th',\n attributes: {\n width: { type: Number },\n align: { type: String },\n },\n};\n\nexport const tr: Schema = {\n render: 'tr',\n children: ['th', 'td'],\n};\n\nexport const tbody: Schema = {\n render: 'tbody',\n children: ['tr', 'tag'],\n};\n\nexport const thead: Schema = {\n render: 'thead',\n children: ['tr'],\n};\n\nexport const strong: Schema = {\n render: 'strong',\n children: ['em', 's', 'link', 'code', 'text', 'tag'],\n};\n\nexport const em: Schema = {\n render: 'em',\n children: ['strong', 's', 'link', 'code', 'text', 'tag'],\n};\n\nexport const s: Schema = {\n render: 's',\n children: ['strong', 'em', 'link', 'code', 'text', 'tag'],\n};\n\nexport const inline: Schema = {\n children: [\n 'strong',\n 'em',\n 's',\n 'code',\n 'text',\n 'tag',\n 'link',\n 'image',\n 'hardbreak',\n 'softbreak',\n ],\n};\n\nexport const link: Schema = {\n render: 'a',\n children: ['strong', 'em', 's', 'code', 'text', 'tag'],\n attributes: {\n href: { type: String, required: true },\n title: { type: String },\n },\n};\n\nexport const code: Schema = {\n render: 'code',\n attributes: {\n content: { type: String, render: false, required: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n return new Tag('code', attributes, [node.attributes.content]);\n },\n};\n\nexport const text: Schema = {\n attributes: {\n content: { type: String, required: true },\n },\n transform(node) {\n return node.attributes.content;\n },\n};\n\nexport const hardbreak: Schema = {\n render: 'br',\n};\n\nexport const softbreak: Schema = {\n transform(_node, _config) {\n return ' ';\n },\n};\n\nexport const error = {};\n", "import type { Node, Schema, Value } from '../types';\n\ntype Condition = { condition: Value; children: Node[] };\n\nexport function truthy(value: any) {\n return value !== false && value !== undefined && value !== null;\n}\n\nfunction renderConditions(node: Node) {\n const conditions: Condition[] = [\n { condition: node.attributes.primary, children: [] },\n ];\n for (const child of node.children) {\n if (child.type === 'tag' && child.tag === 'else')\n conditions.push({\n condition:\n 'primary' in child.attributes ? child.attributes.primary : true,\n children: [],\n });\n else conditions[conditions.length - 1].children.push(child);\n }\n\n return conditions;\n}\n\nexport const tagIf: Schema = {\n attributes: {\n primary: { type: Object, render: false },\n },\n\n transform(node, config) {\n const conditions = renderConditions(node);\n for (const { condition, children } of conditions)\n if (truthy(condition))\n return children.flatMap((child) => child.transform(config));\n return [];\n },\n};\n\nexport const tagElse: Schema = {\n selfClosing: true,\n attributes: {\n primary: { type: Object, render: false },\n },\n};\n", "import type { Node, Config, Schema } from '../types';\n\nexport const partial: Schema = {\n selfClosing: true,\n attributes: {\n file: { type: String, render: false, required: true },\n variables: { type: Object, render: false },\n },\n\n transform(node: Node, config: Config) {\n const { partials = {} } = config;\n const { file, variables } = node.attributes;\n const partial: Node | Node[] = partials[file];\n\n if (!partial) return null;\n\n const scopedConfig = {\n ...config,\n variables: {\n ...config.variables,\n ...variables,\n ['$$partial:filename']: file,\n },\n };\n\n const transformChildren = (part: Node) =>\n part.resolve(scopedConfig).transformChildren(scopedConfig);\n\n return Array.isArray(partial)\n ? partial.flatMap(transformChildren)\n : transformChildren(partial);\n },\n};\n", "import type { Schema } from '../types';\n\nexport const table: Schema = {\n children: ['table'],\n};\n", "import { tagIf, tagElse } from './conditional';\nimport { partial } from './partial';\nimport { table } from './table';\n\nexport default {\n if: tagIf,\n else: tagElse,\n partial,\n table,\n};\n", "import type { ConfigFunction } from '../types';\nimport { truthy } from '../tags/conditional';\n\nconst and: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).every((x) => truthy(x));\n },\n};\n\nconst or: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).find((x) => truthy(x)) !== undefined;\n },\n};\n\nconst not: ConfigFunction = {\n parameters: {\n 0: { required: true },\n },\n\n transform(parameters) {\n return !truthy(parameters[0]);\n },\n};\n\nconst equals: ConfigFunction = {\n transform(parameters) {\n const values = Object.values(parameters);\n return values.every((v) => v === values[0]);\n },\n};\n\nconst debug: ConfigFunction = {\n transform(parameters) {\n return JSON.stringify(parameters[0], null, 2);\n },\n};\n\nconst defaultFn: ConfigFunction = {\n transform(parameters) {\n return parameters[0] === undefined ? parameters[1] : parameters[0];\n },\n};\n\nexport default { and, or, not, equals, default: defaultFn, debug };\n", "import MarkdownIt from 'markdown-it';\nimport type { RenderableTreeNodes } from '../types';\nconst { escapeHtml } = MarkdownIt().utils;\n\n// HTML elements that do not have a matching close tag\n// Defined in the HTML standard: https://html.spec.whatwg.org/#void-elements\nconst voidElements = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nexport default function render(node: RenderableTreeNodes): string {\n if (typeof node === 'string') return escapeHtml(node);\n\n if (Array.isArray(node)) return node.map(render).join('');\n\n if (node === null || typeof node !== 'object') return '';\n\n const { name, attributes, children = [] } = node;\n\n if (!name) return render(children);\n\n let output = `<${name}`;\n for (const [k, v] of Object.entries(attributes ?? {}))\n output += ` ${k}=\"${escapeHtml(String(v))}\"`;\n output += '>';\n\n if (voidElements.has(name)) return output;\n\n if (children.length) output += render(children);\n output += `</${name}>`;\n\n return output;\n}\n", "import type { ComponentType } from 'react';\n\ntype Component = ComponentType<unknown>;\n\nexport function tagName(\n name: string,\n components: Record<string, Component> | ((string: string) => Component)\n): string | Component {\n return typeof name !== 'string'\n ? 'Fragment'\n : name[0] !== name[0].toUpperCase()\n ? name\n : components instanceof Function\n ? components(name)\n : components[name];\n}\n", "import { tagName } from './shared';\nimport type { createElement, Fragment, ReactNode } from 'react';\nimport type { RenderableTreeNodes, Scalar } from '../../types';\n\ntype ReactShape = Readonly<{\n createElement: typeof createElement;\n Fragment: typeof Fragment;\n}>;\n\nexport default function dynamic(\n node: RenderableTreeNodes,\n React: ReactShape,\n { components = {} } = {}\n) {\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => deepRender(item));\n\n if (value.$$mdtype === 'Tag') return render(value);\n\n if (typeof value !== 'object') return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = deepRender(v);\n return output;\n }\n\n function render(node: RenderableTreeNodes): ReactNode {\n if (Array.isArray(node))\n return React.createElement(React.Fragment, null, ...node.map(render));\n\n if (node === null || typeof node !== 'object') return node;\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return React.createElement(\n tagName(name, components),\n Object.keys(attrs).length == 0 ? null : deepRender(attrs),\n ...children.map(render)\n );\n }\n\n return render(node);\n}\n", "import { tagName } from './shared';\nimport type { RenderableTreeNode, RenderableTreeNodes } from '../../types';\n\nfunction renderArray(children: RenderableTreeNode[]): string {\n return children.map(render).join(', ');\n}\n\nfunction deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return JSON.stringify(value);\n\n if (Array.isArray(value))\n return `[${value.map((item) => deepRender(item)).join(', ')}]`;\n\n if (value.$$mdtype === 'Tag') return render(value);\n\n if (typeof value !== 'object') return JSON.stringify(value);\n\n const object = Object.entries(value)\n .map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(': '))\n .join(', ');\n\n return `{${object}}`;\n}\n\nfunction render(node: RenderableTreeNodes): string {\n if (Array.isArray(node))\n return `React.createElement(React.Fragment, null, ${renderArray(node)})`;\n\n if (node === null || typeof node !== 'object') return JSON.stringify(node);\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return `React.createElement(\n tagName(${JSON.stringify(name)}, components),\n ${Object.keys(attrs).length == 0 ? 'null' : deepRender(attrs)},\n ${renderArray(children)})`;\n}\n\nexport default function reactStatic(node: RenderableTreeNodes): string {\n return `\n (({components = {}} = {}) => {\n ${tagName}\n return ${render(node)};\n })\n`;\n}\n", "import html from './html';\nimport react from './react/react';\nimport reactStatic from './react/static';\n\nexport default { html, react, reactStatic };\n", "import { globalAttributes } from './transformer';\nimport Ast from './ast/index';\n\nimport type {\n Node,\n Function,\n Config,\n SchemaAttribute,\n ValidationError,\n Value,\n} from './types';\n\nconst TypeMappings = {\n String: String,\n Number: Number,\n Array: Array,\n Object: Object,\n Boolean: Boolean,\n} as const;\n\ntype TypeParam = NonNullable<SchemaAttribute['type']>;\n\nexport function validateType(\n type: TypeParam,\n value: Value,\n config: Config\n): boolean | ValidationError[] {\n if (!type) return true;\n\n if (Ast.isFunction(value) && config.validation?.validateFunctions) {\n const schema = config.functions?.[value.name];\n return !schema?.returns\n ? true\n : Array.isArray(schema.returns)\n ? schema.returns.find((t) => t === type) !== undefined\n : schema.returns === type;\n }\n\n if (Ast.isAst(value)) return true;\n\n if (Array.isArray(type))\n return type.some((t) => validateType(t, value, config));\n\n if (typeof type === 'string') type = TypeMappings[type];\n\n if (typeof type === 'function') {\n const instance: any = new type();\n if (instance.validate) {\n return instance.validate(value, config);\n }\n }\n\n return value != null && value.constructor === type;\n}\n\nfunction typeToString(type: TypeParam): string {\n if (typeof type === 'string') return type;\n\n if (Array.isArray(type)) return type.map(typeToString).join(' | ');\n\n return type.name;\n}\n\nfunction validateFunction(fn: Function, config: Config): ValidationError[] {\n const schema = config.functions?.[fn.name];\n const errors: ValidationError[] = [];\n\n if (!schema)\n return [\n {\n id: 'function-undefined',\n level: 'critical',\n message: `Undefined function '${fn.name}'`,\n },\n ];\n\n if (schema.validate) errors.push(...schema.validate(fn, config));\n\n if (schema.parameters) {\n for (const [key, value] of Object.entries(fn.parameters)) {\n const param = schema.parameters?.[key];\n\n if (!param) {\n errors.push({\n id: 'parameter-undefined',\n level: 'error',\n message: `Invalid parameter '${key}'`,\n });\n\n continue;\n }\n\n if (Ast.isAst(value) && !Ast.isFunction(value)) continue;\n\n if (param.type) {\n const valid = validateType(param.type, value, config);\n if (valid === false) {\n errors.push({\n id: 'parameter-type-invalid',\n level: 'error',\n message: `Parameter '${key}' of '${\n fn.name\n }' must be type '${typeToString(param.type)}'`,\n });\n } else if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n }\n }\n\n for (const [key, { required }] of Object.entries(schema.parameters ?? {}))\n if (required && fn.parameters[key] === undefined)\n errors.push({\n id: 'parameter-missing-required',\n level: 'error',\n message: `Missing required parameter '${key}'`,\n });\n\n return errors;\n}\n\nexport default function validate(node: Node, config: Config) {\n const schema = node.findSchema(config);\n const errors: ValidationError[] = [...(node.errors || [])];\n\n if (!schema) {\n errors.push({\n id: node.tag ? 'tag-undefined' : 'node-undefined',\n level: 'critical',\n message: node.tag\n ? `Undefined tag '${node.tag}'`\n : `Undefined node '${node.type}'`,\n });\n\n return errors;\n }\n\n if (schema.selfClosing && node.children.length > 0)\n errors.push({\n id: 'tag-selfclosing-has-children',\n level: 'critical',\n message: `Tag '${node.tag}' should be self-closing`,\n });\n\n const attributes = {\n ...globalAttributes,\n ...schema.attributes,\n };\n\n if (schema.validate) errors.push(...schema.validate(node, config));\n\n for (let [key, value] of Object.entries(node.attributes)) {\n const attrib = attributes[key];\n\n if (!attrib) {\n errors.push({\n id: 'attribute-undefined',\n level: 'error',\n message: `Invalid attribute '${key}'`,\n });\n\n continue;\n }\n\n let { type, matches, errorLevel } = attrib;\n\n if (Ast.isAst(value)) {\n if (Ast.isFunction(value) && config.validation?.validateFunctions)\n errors.push(...validateFunction(value, config));\n else continue;\n }\n\n value = value as string;\n if (key === 'id' && value.match(/^[0-9]/))\n errors.push({\n id: 'attribute-value-invalid',\n level: 'error',\n message: 'The ID attribute must not start with a number',\n });\n\n if (type) {\n const valid = validateType(type, value, config);\n if (valid === false) {\n errors.push({\n id: 'attribute-type-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must be type '${typeToString(type)}'`,\n });\n }\n if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n\n if (typeof matches === 'function') matches = matches(config);\n\n if (Array.isArray(matches) && !matches.includes(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match one of ${JSON.stringify(\n matches\n )}`,\n });\n\n if (matches instanceof RegExp && !matches.test(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match ${matches}`,\n });\n }\n\n for (const [key, { required }] of Object.entries(attributes))\n if (required && node.attributes[key] === undefined)\n errors.push({\n id: 'attribute-missing-required',\n level: 'error',\n message: `Missing required attribute '${key}'`,\n });\n\n for (const { type } of node.children) {\n if (schema.children && type !== 'error' && !schema.children.includes(type))\n errors.push({\n id: 'child-invalid',\n level: 'warning',\n message: `Can't nest '${type}' in '${node.tag || node.type}'`,\n });\n }\n\n return errors;\n}\n", "import Tokenizer from './src/tokenizer';\nimport parser from './src/parser';\nimport Node from './src/ast/node';\nimport Tag from './src/ast/tag';\nimport Ast from './src/ast/index';\nimport * as nodes from './src/schema';\nimport tags from './src/tags/index';\nimport { truthy } from './src/tags/conditional';\nimport functions from './src/functions/index';\nimport renderers from './src/renderers/index';\nimport transformer from './src/transformer';\nimport validator from './src/validator';\nimport { parseTags } from './src/utils';\nimport transforms from './src/transforms/index';\n\nimport type Token from 'markdown-it/lib/token';\nimport type { Config, RenderableTreeNode, ValidateError } from './src/types';\n\nexport * from './src/types';\n\nconst tokenizer = new Tokenizer();\n\nfunction mergeConfig(config: Config = {}): Config {\n return {\n ...config,\n tags: {\n ...tags,\n ...config.tags,\n },\n nodes: {\n ...nodes,\n ...config.nodes,\n },\n functions: {\n ...functions,\n ...config.functions,\n },\n };\n}\n\nexport function parse(content: string | Token[], file?: string): Node {\n if (typeof content === 'string') content = tokenizer.tokenize(content);\n return parser(content, file);\n}\n\nexport function resolve<C extends Config = Config>(\n content: Node,\n config: C\n): Node;\nexport function resolve<C extends Config = Config>(\n content: Node[],\n config: C\n): Node[];\nexport function resolve<C extends Config = Config>(\n content: any,\n config: C\n): any {\n if (Array.isArray(content))\n return content.flatMap((child) => child.resolve(config));\n\n return content.resolve(config);\n}\n\nexport function transform<C extends Config = Config>(\n node: Node,\n config?: C\n): RenderableTreeNode;\nexport function transform<C extends Config = Config>(\n nodes: Node[],\n config?: C\n): RenderableTreeNode[];\nexport function transform<C extends Config = Config>(\n nodes: any,\n options?: C\n): any {\n const config = mergeConfig(options);\n const content = resolve(nodes, config);\n\n if (Array.isArray(content))\n return content.flatMap((child) => child.transform(config));\n return content.transform(config);\n}\n\nexport function validate<C extends Config = Config>(\n content: Node,\n options?: C\n): ValidateError[] {\n const config = mergeConfig(options);\n\n const output = [];\n for (const node of [content, ...content.walk()]) {\n const { type, lines, location } = node;\n const errors = validator(node, config);\n\n for (const error of errors) output.push({ type, lines, location, error });\n }\n\n return output;\n}\n\nexport function createElement(\n name: string | { key?: string | number },\n attributes = {},\n ...children: any[]\n) {\n return { name, attributes, children };\n}\n\nexport default {\n nodes,\n tags,\n functions,\n renderers,\n transforms,\n Ast,\n Tag,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n parse,\n transform,\n validate,\n createElement,\n truthy,\n};\n\nexport {\n nodes,\n tags,\n functions,\n transforms,\n renderers,\n Ast,\n Tag,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n truthy,\n};\n"],
657+- "mappings": "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",
658++ "sources": ["../node_modules/markdown-it/lib/common/entities.js", "../node_modules/uc.micro/categories/P/regex.js", "../node_modules/mdurl/encode.js", "../node_modules/mdurl/decode.js", "../node_modules/mdurl/format.js", "../node_modules/mdurl/parse.js", "../node_modules/mdurl/index.js", "../node_modules/uc.micro/properties/Any/regex.js", "../node_modules/uc.micro/categories/Cc/regex.js", "../node_modules/uc.micro/categories/Cf/regex.js", "../node_modules/uc.micro/categories/Z/regex.js", "../node_modules/uc.micro/index.js", "../node_modules/markdown-it/lib/common/utils.js", "../node_modules/markdown-it/lib/helpers/parse_link_label.js", "../node_modules/markdown-it/lib/helpers/parse_link_destination.js", "../node_modules/markdown-it/lib/helpers/parse_link_title.js", "../node_modules/markdown-it/lib/helpers/index.js", "../node_modules/markdown-it/lib/renderer.js", "../node_modules/markdown-it/lib/ruler.js", "../node_modules/markdown-it/lib/rules_core/normalize.js", "../node_modules/markdown-it/lib/rules_core/block.js", "../node_modules/markdown-it/lib/rules_core/inline.js", "../node_modules/markdown-it/lib/rules_core/linkify.js", "../node_modules/markdown-it/lib/rules_core/replacements.js", "../node_modules/markdown-it/lib/rules_core/smartquotes.js", "../node_modules/markdown-it/lib/token.js", "../node_modules/markdown-it/lib/rules_core/state_core.js", "../node_modules/markdown-it/lib/parser_core.js", "../node_modules/markdown-it/lib/rules_block/table.js", "../node_modules/markdown-it/lib/rules_block/code.js", "../node_modules/markdown-it/lib/rules_block/fence.js", "../node_modules/markdown-it/lib/rules_block/blockquote.js", "../node_modules/markdown-it/lib/rules_block/hr.js", "../node_modules/markdown-it/lib/rules_block/list.js", "../node_modules/markdown-it/lib/rules_block/reference.js", "../node_modules/markdown-it/lib/common/html_blocks.js", "../node_modules/markdown-it/lib/common/html_re.js", "../node_modules/markdown-it/lib/rules_block/html_block.js", "../node_modules/markdown-it/lib/rules_block/heading.js", "../node_modules/markdown-it/lib/rules_block/lheading.js", "../node_modules/markdown-it/lib/rules_block/paragraph.js", "../node_modules/markdown-it/lib/rules_block/state_block.js", "../node_modules/markdown-it/lib/parser_block.js", "../node_modules/markdown-it/lib/rules_inline/text.js", "../node_modules/markdown-it/lib/rules_inline/newline.js", "../node_modules/markdown-it/lib/rules_inline/escape.js", "../node_modules/markdown-it/lib/rules_inline/backticks.js", "../node_modules/markdown-it/lib/rules_inline/strikethrough.js", "../node_modules/markdown-it/lib/rules_inline/emphasis.js", "../node_modules/markdown-it/lib/rules_inline/link.js", "../node_modules/markdown-it/lib/rules_inline/image.js", "../node_modules/markdown-it/lib/rules_inline/autolink.js", "../node_modules/markdown-it/lib/rules_inline/html_inline.js", "../node_modules/markdown-it/lib/rules_inline/entity.js", "../node_modules/markdown-it/lib/rules_inline/balance_pairs.js", "../node_modules/markdown-it/lib/rules_inline/text_collapse.js", "../node_modules/markdown-it/lib/rules_inline/state_inline.js", "../node_modules/markdown-it/lib/parser_inline.js", "../node_modules/linkify-it/lib/re.js", "../node_modules/linkify-it/index.js", "../node_modules/punycode/punycode.js", "../node_modules/markdown-it/lib/presets/default.js", "../node_modules/markdown-it/lib/presets/zero.js", "../node_modules/markdown-it/lib/presets/commonmark.js", "../node_modules/markdown-it/lib/index.js", "../src/grammar/tag.js", "../node_modules/markdown-it-sup/index.js", "../node_modules/markdown-it/index.js", "../src/tokenizer/index.ts", "../src/utils.ts", "../src/ast/variable.ts", "../src/ast/base.ts", "../src/ast/function.ts", "../src/tokenizer/plugins/annotations.ts", "../src/tokenizer/plugins/frontmatter.ts", "../src/ast/tag.ts", "../src/schema-types/class.ts", "../src/transformer.ts", "../src/ast/node.ts", "../src/ast/index.ts", "../src/transforms/table.ts", "../src/transforms/index.ts", "../src/parser.ts", "../src/schema.ts", "../src/ast/raw.ts", "../src/tags/conditional.ts", "../src/tags/partial.ts", "../src/tags/table.ts", "../src/tags/index.ts", "../src/functions/index.ts", "../src/renderers/html.ts", "../src/renderers/react/shared.ts", "../src/renderers/react/react.ts", "../src/renderers/react/static.ts", "../src/renderers/index.ts", "../src/validator.ts", "../index.ts"],
659++ "sourcesContent": ["// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/lib/maps/entities.json');\n", "module.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/", "\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n var i, ch, cache = encodeCache[exclude];\n if (cache) { return cache; }\n\n cache = encodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch);\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n }\n }\n\n for (i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i];\n }\n\n return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n var i, l, code, nextCode, cache,\n result = '';\n\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude;\n exclude = encode.defaultChars;\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true;\n }\n\n cache = getEncodeCache(exclude);\n\n for (i = 0, l = string.length; i < l; i++) {\n code = string.charCodeAt(i);\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3);\n i += 2;\n continue;\n }\n }\n\n if (code < 128) {\n result += cache[code];\n continue;\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n nextCode = string.charCodeAt(i + 1);\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1]);\n i++;\n continue;\n }\n }\n result += '%EF%BF%BD';\n continue;\n }\n\n result += encodeURIComponent(string[i]);\n }\n\n return result;\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n", "\n'use strict';\n\n\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n var i, ch, cache = decodeCache[exclude];\n if (cache) { return cache; }\n\n cache = decodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n cache.push(ch);\n }\n\n for (i = 0; i < exclude.length; i++) {\n ch = exclude.charCodeAt(i);\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n }\n\n return cache;\n}\n\n\n// Decode percent-encoded string.\n//\nfunction decode(string, exclude) {\n var cache;\n\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars;\n }\n\n cache = getDecodeCache(exclude);\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {\n var i, l, b1, b2, b3, b4, chr,\n result = '';\n\n for (i = 0, l = seq.length; i < l; i += 3) {\n b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n if (b1 < 0x80) {\n result += cache[b1];\n continue;\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n if ((b2 & 0xC0) === 0x80) {\n chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F);\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 3;\n continue;\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F);\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 6;\n continue;\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F);\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd';\n } else {\n chr -= 0x10000;\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n }\n\n i += 9;\n continue;\n }\n }\n\n result += '\\ufffd';\n }\n\n return result;\n });\n}\n\n\ndecode.defaultChars = ';/?:@&=+$,#';\ndecode.componentChars = '';\n\n\nmodule.exports = decode;\n", "\n'use strict';\n\n\nmodule.exports = function format(url) {\n var result = '';\n\n result += url.protocol || '';\n result += url.slashes ? '//' : '';\n result += url.auth ? url.auth + '@' : '';\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']';\n } else {\n result += url.hostname || '';\n }\n\n result += url.port ? ':' + url.port : '';\n result += url.pathname || '';\n result += url.search || '';\n result += url.hash || '';\n\n return result;\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\n'use strict';\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.pathname = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = [ '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t' ],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = [ '{', '}', '|', '\\\\', '^', '`' ].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = [ '\\'' ].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape),\n hostEndingChars = [ '/', '?', '#' ],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n /* eslint-disable no-script-url */\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n };\n /* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n if (url && url instanceof Url) { return url; }\n\n var u = new Url();\n u.parse(url, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, slashesDenoteHost) {\n var i, l, lowerProto, hec, slashes,\n rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n lowerProto = proto.toLowerCase();\n this.protocol = proto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = auth;\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length;\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd--; }\n var host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost(host);\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) { continue; }\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n }\n }\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n rest = rest.slice(0, qm);\n }\n if (rest) { this.pathname = rest; }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '';\n }\n\n return this;\n};\n\nUrl.prototype.parseHost = function(host) {\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) { this.hostname = host; }\n};\n\nmodule.exports = urlParse;\n", "'use strict';\n\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse = require('./parse');\n", "module.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/", "module.exports=/[\\0-\\x1F\\x7F-\\x9F]/", "module.exports=/[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/", "module.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/", "'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc = require('./categories/Cc/regex');\nexports.Cf = require('./categories/Cf/regex');\nexports.P = require('./categories/P/regex');\nexports.Z = require('./categories/Z/regex');\n", "// Utilities\n//\n'use strict';\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object');\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n /*eslint no-bitwise:0*/\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) { return false; }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false; }\n if (c === 0x0B) { return false; }\n if (c >= 0x0E && c <= 0x1F) { return false; }\n if (c >= 0x7F && c <= 0x9F) { return false; }\n // out of range\n if (c > 0x10FFFF) { return false; }\n return true;\n}\n\nfunction fromCodePoint(c) {\n /*eslint no-bitwise:0*/\n if (c > 0xffff) {\n c -= 0x10000;\n var surrogate1 = 0xd800 + (c >> 10),\n surrogate2 = 0xdc00 + (c & 0x3ff);\n\n return String.fromCharCode(surrogate1, surrogate2);\n }\n return String.fromCharCode(c);\n}\n\n\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\n\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n var code = 0;\n\n if (has(entities, name)) {\n return entities[name];\n }\n\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n code = name[1].toLowerCase() === 'x' ?\n parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code);\n }\n }\n\n return match;\n}\n\n/*function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n if (str.indexOf('\\\\') < 0) { return str; }\n return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str; }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped; }\n return replaceEntityPattern(match, entity);\n });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;'\n};\n\nfunction replaceUnsafeChar(ch) {\n return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n }\n return str;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isSpace(code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true;\n }\n return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n if (code >= 0x2000 && code <= 0x200A) { return true; }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true;\n }\n return false;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n return UNICODE_PUNCT_RE.test(ch);\n}\n\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n switch (ch) {\n case 0x21/* ! */:\n case 0x22/* \" */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x27/* ' */:\n case 0x28/* ( */:\n case 0x29/* ) */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2C/* , */:\n case 0x2D/* - */:\n case 0x2E/* . */:\n case 0x2F/* / */:\n case 0x3A/* : */:\n case 0x3B/* ; */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x3F/* ? */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7C/* | */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ');\n\n // In node v10 '\u1E9E'.toLowerCase() === '\u1E7E', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('\u1E9E'.toLowerCase() === '\u1E7E') {\n str = str.replace(/\u1E9E/g, '\u00DF');\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // \u0130, \u03F4, \u1E9E, \u2126, \u212A, \u212B - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (\u0398), U+03f4 (\u03F4) and lowercase U+03b8 (\u03B8), U+03d1 (\u03D1)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change \u03D1 (it's already lowercase),\n // and .toUpperCase() doesn't change \u03F4 (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib = {};\nexports.lib.mdurl = require('mdurl');\nexports.lib.ucmicro = require('uc.micro');\n\nexports.assign = assign;\nexports.isString = isString;\nexports.has = has;\nexports.unescapeMd = unescapeMd;\nexports.unescapeAll = unescapeAll;\nexports.isValidEntityCode = isValidEntityCode;\nexports.fromCodePoint = fromCodePoint;\n// exports.replaceEntities = replaceEntities;\nexports.escapeHtml = escapeHtml;\nexports.arrayReplaceAt = arrayReplaceAt;\nexports.isSpace = isSpace;\nexports.isWhiteSpace = isWhiteSpace;\nexports.isMdAsciiPunct = isMdAsciiPunct;\nexports.isPunctChar = isPunctChar;\nexports.escapeRE = escapeRE;\nexports.normalizeReference = normalizeReference;\n", "// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n var level, found, marker, prevPos,\n labelEnd = -1,\n max = state.posMax,\n oldPos = state.pos;\n\n state.pos = start + 1;\n level = 1;\n\n while (state.pos < max) {\n marker = state.src.charCodeAt(state.pos);\n if (marker === 0x5D /* ] */) {\n level--;\n if (level === 0) {\n found = true;\n break;\n }\n }\n\n prevPos = state.pos;\n state.md.inline.skipToken(state);\n if (marker === 0x5B /* [ */) {\n if (prevPos === state.pos - 1) {\n // increase level if we find text `[`, which is not a part of any token\n level++;\n } else if (disableNested) {\n state.pos = oldPos;\n return -1;\n }\n }\n }\n\n if (found) {\n labelEnd = state.pos;\n }\n\n // restore old state\n state.pos = oldPos;\n\n return labelEnd;\n};\n", "// Parse link destination\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkDestination(str, pos, max) {\n var code, level,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (str.charCodeAt(pos) === 0x3C /* < */) {\n pos++;\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === 0x0A /* \\n */) { return result; }\n if (code === 0x3C /* < */) { return result; }\n if (code === 0x3E /* > */) {\n result.pos = pos + 1;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n }\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n pos++;\n }\n\n // no closing '>'\n return result;\n }\n\n // this should be ... } else { ... branch\n\n level = 0;\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x20) { break; }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7F) { break; }\n\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) { break; }\n pos += 2;\n continue;\n }\n\n if (code === 0x28 /* ( */) {\n level++;\n if (level > 32) { return result; }\n }\n\n if (code === 0x29 /* ) */) {\n if (level === 0) { break; }\n level--;\n }\n\n pos++;\n }\n\n if (start === pos) { return result; }\n if (level !== 0) { return result; }\n\n result.str = unescapeAll(str.slice(start, pos));\n result.lines = lines;\n result.pos = pos;\n result.ok = true;\n return result;\n};\n", "// Parse link title\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkTitle(str, pos, max) {\n var code,\n marker,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (pos >= max) { return result; }\n\n marker = str.charCodeAt(pos);\n\n if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; }\n\n pos++;\n\n // if opening marker is \"(\", switch it to closing marker \")\"\n if (marker === 0x28) { marker = 0x29; }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n if (code === marker) {\n result.pos = pos + 1;\n result.lines = lines;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n } else if (code === 0x28 /* ( */ && marker === 0x29 /* ) */) {\n return result;\n } else if (code === 0x0A) {\n lines++;\n } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos++;\n if (str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n\n pos++;\n }\n\n return result;\n};\n", "// Just a shortcut for bulk export\n'use strict';\n\n\nexports.parseLinkLabel = require('./parse_link_label');\nexports.parseLinkDestination = require('./parse_link_destination');\nexports.parseLinkTitle = require('./parse_link_title');\n", "/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\n\nvar assign = require('./common/utils').assign;\nvar unescapeAll = require('./common/utils').unescapeAll;\nvar escapeHtml = require('./common/utils').escapeHtml;\n\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar default_rules = {};\n\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<code' + slf.renderAttrs(token) + '>' +\n escapeHtml(tokens[idx].content) +\n '</code>';\n};\n\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n return '<pre' + slf.renderAttrs(token) + '><code>' +\n escapeHtml(tokens[idx].content) +\n '</code></pre>\\n';\n};\n\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n var token = tokens[idx],\n info = token.info ? unescapeAll(token.info).trim() : '',\n langName = '',\n langAttrs = '',\n highlighted, i, arr, tmpAttrs, tmpToken;\n\n if (info) {\n arr = info.split(/(\\s+)/g);\n langName = arr[0];\n langAttrs = arr.slice(2).join('');\n }\n\n if (options.highlight) {\n highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n } else {\n highlighted = escapeHtml(token.content);\n }\n\n if (highlighted.indexOf('<pre') === 0) {\n return highlighted + '\\n';\n }\n\n // If language exists, inject class gently, without modifying original token.\n // May be, one day we will add .deepClone() for token and simplify this part, but\n // now we prefer to keep things local.\n if (info) {\n i = token.attrIndex('class');\n tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\n if (i < 0) {\n tmpAttrs.push([ 'class', options.langPrefix + langName ]);\n } else {\n tmpAttrs[i] = tmpAttrs[i].slice();\n tmpAttrs[i][1] += ' ' + options.langPrefix + langName;\n }\n\n // Fake token just to render attributes\n tmpToken = {\n attrs: tmpAttrs\n };\n\n return '<pre><code' + slf.renderAttrs(tmpToken) + '>'\n + highlighted\n + '</code></pre>\\n';\n }\n\n\n return '<pre><code' + slf.renderAttrs(token) + '>'\n + highlighted\n + '</code></pre>\\n';\n};\n\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n\n // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n // should be placed on proper position for tests.\n //\n // Replace content with actual value\n\n token.attrs[token.attrIndex('alt')][1] =\n slf.renderInlineAsText(token.children, options, env);\n\n return slf.renderToken(tokens, idx, options);\n};\n\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n return options.xhtmlOut ? '<br />\\n' : '<br>\\n';\n};\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n';\n};\n\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n return escapeHtml(tokens[idx].content);\n};\n\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n return tokens[idx].content;\n};\n\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer() {\n\n /**\n * Renderer#rules -> Object\n *\n * Contains render rules for tokens. Can be updated and extended.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.renderer.rules.strong_open = function () { return '<b>'; };\n * md.renderer.rules.strong_close = function () { return '</b>'; };\n *\n * var result = md.renderInline(...);\n * ```\n *\n * Each rule is called as independent static function with fixed signature:\n *\n * ```javascript\n * function my_token_render(tokens, idx, options, env, renderer) {\n * // ...\n * return renderedHTML;\n * }\n * ```\n *\n * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n * for more details and examples.\n **/\n this.rules = assign({}, default_rules);\n}\n\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n var i, l, result;\n\n if (!token.attrs) { return ''; }\n\n result = '';\n\n for (i = 0, l = token.attrs.length; i < l; i++) {\n result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n }\n\n return result;\n};\n\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n var nextToken,\n result = '',\n needLf = false,\n token = tokens[idx];\n\n // Tight list paragraphs\n if (token.hidden) {\n return '';\n }\n\n // Insert a newline between hidden paragraph and subsequent opening\n // block-level tag.\n //\n // For example, here we should insert a newline before blockquote:\n // - a\n // >\n //\n if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n result += '\\n';\n }\n\n // Add token name, e.g. `<img`\n result += (token.nesting === -1 ? '</' : '<') + token.tag;\n\n // Encode attributes, e.g. `<img src=\"foo\"`\n result += this.renderAttrs(token);\n\n // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n if (token.nesting === 0 && options.xhtmlOut) {\n result += ' /';\n }\n\n // Check if we need to add a newline after this tag\n if (token.block) {\n needLf = true;\n\n if (token.nesting === 1) {\n if (idx + 1 < tokens.length) {\n nextToken = tokens[idx + 1];\n\n if (nextToken.type === 'inline' || nextToken.hidden) {\n // Block-level tag containing an inline tag.\n //\n needLf = false;\n\n } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n //\n needLf = false;\n }\n }\n }\n }\n\n result += needLf ? '>\\n' : '>';\n\n return result;\n};\n\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n var type,\n result = '',\n rules = this.rules;\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options);\n }\n }\n\n return result;\n};\n\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n var result = '';\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n if (tokens[i].type === 'text') {\n result += tokens[i].content;\n } else if (tokens[i].type === 'image') {\n result += this.renderInlineAsText(tokens[i].children, options, env);\n } else if (tokens[i].type === 'softbreak') {\n result += '\\n';\n }\n }\n\n return result;\n};\n\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n var i, len, type,\n result = '',\n rules = this.rules;\n\n for (i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (type === 'inline') {\n result += this.renderInline(tokens[i].children, options, env);\n } else if (typeof rules[type] !== 'undefined') {\n result += rules[tokens[i].type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options, env);\n }\n }\n\n return result;\n};\n\nmodule.exports = Renderer;\n", "/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = [];\n\n // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n this.__cache__ = null;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n for (var i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i;\n }\n }\n return -1;\n};\n\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n var self = this;\n var chains = [ '' ];\n\n // collect unique names\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName);\n }\n });\n });\n\n self.__cache__ = {};\n\n chains.forEach(function (chain) {\n self.__cache__[chain] = [];\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return; }\n\n if (chain && rule.alt.indexOf(chain) < 0) { return; }\n\n self.__cache__[chain].push(rule.fn);\n });\n });\n};\n\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n var index = this.__find__(name);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + name); }\n\n this.__rules__[index].fn = fn;\n this.__rules__[index].alt = opt.alt || [];\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n var index = this.__find__(beforeName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); }\n\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n var index = this.__find__(afterName);\n var opt = options || {};\n\n if (index === -1) { throw new Error('Parser rule not found: ' + afterName); }\n\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n var opt = options || {};\n\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and enable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = true;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n this.__rules__.forEach(function (rule) { rule.enabled = false; });\n\n this.enable(list, ignoreInvalid);\n};\n\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [ list ]; }\n\n var result = [];\n\n // Search by name and disable\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) { return; }\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n this.__rules__[idx].enabled = false;\n result.push(name);\n }, this);\n\n this.__cache__ = null;\n return result;\n};\n\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__();\n }\n\n // Chain can be empty, if rules disabled. But we still have to return Array.\n return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;\n", "// Normalize input string\n\n'use strict';\n\n\n// https://spec.commonmark.org/0.29/#line-ending\nvar NEWLINES_RE = /\\r\\n?|\\n/g;\nvar NULL_RE = /\\0/g;\n\n\nmodule.exports = function normalize(state) {\n var str;\n\n // Normalize newlines\n str = state.src.replace(NEWLINES_RE, '\\n');\n\n // Replace NULL characters\n str = str.replace(NULL_RE, '\\uFFFD');\n\n state.src = str;\n};\n", "'use strict';\n\n\nmodule.exports = function block(state) {\n var token;\n\n if (state.inlineMode) {\n token = new state.Token('inline', '', 0);\n token.content = state.src;\n token.map = [ 0, 1 ];\n token.children = [];\n state.tokens.push(token);\n } else {\n state.md.block.parse(state.src, state.md, state.env, state.tokens);\n }\n};\n", "'use strict';\n\nmodule.exports = function inline(state) {\n var tokens = state.tokens, tok, i, l;\n\n // Parse inlines\n for (i = 0, l = tokens.length; i < l; i++) {\n tok = tokens[i];\n if (tok.type === 'inline') {\n state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n }\n }\n};\n", "// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\n\nfunction isLinkOpen(str) {\n return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n return /^<\\/a\\s*>/i.test(str);\n}\n\n\nmodule.exports = function linkify(state) {\n var i, j, l, tokens, token, currentToken, nodes, ln, text, pos, lastPos,\n level, htmlLinkLevel, url, fullUrl, urlText,\n blockTokens = state.tokens,\n links;\n\n if (!state.md.options.linkify) { return; }\n\n for (j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline' ||\n !state.md.linkify.pretest(blockTokens[j].content)) {\n continue;\n }\n\n tokens = blockTokens[j].children;\n\n htmlLinkLevel = 0;\n\n // We scan from the end, to keep position when new tags added.\n // Use reversed logic in links start/end match\n for (i = tokens.length - 1; i >= 0; i--) {\n currentToken = tokens[i];\n\n // Skip content of markdown links\n if (currentToken.type === 'link_close') {\n i--;\n while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n i--;\n }\n continue;\n }\n\n // Skip content of html tag links\n if (currentToken.type === 'html_inline') {\n if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n htmlLinkLevel--;\n }\n if (isLinkClose(currentToken.content)) {\n htmlLinkLevel++;\n }\n }\n if (htmlLinkLevel > 0) { continue; }\n\n if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n\n text = currentToken.content;\n links = state.md.linkify.match(text);\n\n // Now split string to nodes\n nodes = [];\n level = currentToken.level;\n lastPos = 0;\n\n for (ln = 0; ln < links.length; ln++) {\n\n url = links[ln].url;\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { continue; }\n\n urlText = links[ln].text;\n\n // Linkifier might send raw hostnames like \"example.com\", where url\n // starts with domain name. So we prepend http:// in those cases,\n // and remove it afterwards.\n //\n if (!links[ln].schema) {\n urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '');\n } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '');\n } else {\n urlText = state.md.normalizeLinkText(urlText);\n }\n\n pos = links[ln].index;\n\n if (pos > lastPos) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos, pos);\n token.level = level;\n nodes.push(token);\n }\n\n token = new state.Token('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.level = level++;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n token = new state.Token('text', '', 0);\n token.content = urlText;\n token.level = level;\n nodes.push(token);\n\n token = new state.Token('link_close', 'a', -1);\n token.level = --level;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n\n lastPos = links[ln].lastIndex;\n }\n if (lastPos < text.length) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos);\n token.level = level;\n nodes.push(token);\n }\n\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n }\n }\n }\n};\n", "// Simple typographic replacements\n//\n// (c) (C) \u2192 \u00A9\n// (tm) (TM) \u2192 \u2122\n// (r) (R) \u2192 \u00AE\n// +- \u2192 \u00B1\n// (p) (P) -> \u00A7\n// ... \u2192 \u2026 (also ?.... \u2192 ?.., !.... \u2192 !..)\n// ???????? \u2192 ???, !!!!! \u2192 !!!, `,,` \u2192 `,`\n// -- \u2192 &ndash;, --- \u2192 &mdash;\n//\n'use strict';\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> \u00BD, \u00BC, \u00BE\n// - miltiplication 2 x 4 -> 2 \u00D7 4\n\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r|p)\\)/i;\n\nvar SCOPED_ABBR_RE = /\\((c|tm|r|p)\\)/ig;\nvar SCOPED_ABBR = {\n c: '\u00A9',\n r: '\u00AE',\n p: '\u00A7',\n tm: '\u2122'\n};\n\nfunction replaceFn(match, name) {\n return SCOPED_ABBR[name.toLowerCase()];\n}\n\nfunction replace_scoped(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\nfunction replace_rare(inlineTokens) {\n var i, token, inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n if (RARE_RE.test(token.content)) {\n token.content = token.content\n .replace(/\\+-/g, '\u00B1')\n // .., ..., ....... -> \u2026\n // but ?..... & !..... -> ?.. & !..\n .replace(/\\.{2,}/g, '\u2026').replace(/([?!])\u2026/g, '$1..')\n .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n // em-dash\n .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n // en-dash\n .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013');\n }\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\n\nmodule.exports = function replace(state) {\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline') { continue; }\n\n if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n replace_scoped(state.tokens[blkIdx].children);\n }\n\n if (RARE_RE.test(state.tokens[blkIdx].content)) {\n replace_rare(state.tokens[blkIdx].children);\n }\n\n }\n};\n", "// Convert straight quotation marks to typographic ones\n//\n'use strict';\n\n\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = '\\u2019'; /* \u2019 */\n\n\nfunction replaceAt(str, index, ch) {\n return str.substr(0, index) + ch + str.substr(index + 1);\n}\n\nfunction process_inlines(tokens, state) {\n var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar,\n isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace,\n canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;\n\n stack = [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n\n thisLevel = tokens[i].level;\n\n for (j = stack.length - 1; j >= 0; j--) {\n if (stack[j].level <= thisLevel) { break; }\n }\n stack.length = j + 1;\n\n if (token.type !== 'text') { continue; }\n\n text = token.content;\n pos = 0;\n max = text.length;\n\n /*eslint no-labels:0,block-scoped-var:0*/\n OUTER:\n while (pos < max) {\n QUOTE_RE.lastIndex = pos;\n t = QUOTE_RE.exec(text);\n if (!t) { break; }\n\n canOpen = canClose = true;\n pos = t.index + 1;\n isSingle = (t[0] === \"'\");\n\n // Find previous character,\n // default to space if it's the beginning of the line\n //\n lastChar = 0x20;\n\n if (t.index - 1 >= 0) {\n lastChar = text.charCodeAt(t.index - 1);\n } else {\n for (j = i - 1; j >= 0; j--) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n break;\n }\n }\n\n // Find next character,\n // default to space if it's the end of the line\n //\n nextChar = 0x20;\n\n if (pos < max) {\n nextChar = text.charCodeAt(pos);\n } else {\n for (j = i + 1; j < tokens.length; j++) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n nextChar = tokens[j].content.charCodeAt(0);\n break;\n }\n }\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n canOpen = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n canOpen = false;\n }\n }\n\n if (isLastWhiteSpace) {\n canClose = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n canClose = false;\n }\n }\n\n if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n // special case: 1\"\" - count first quote as an inch\n canClose = canOpen = false;\n }\n }\n\n if (canOpen && canClose) {\n // Replace quotes in the middle of punctuation sequence, but not\n // in the middle of the words, i.e.:\n //\n // 1. foo \" bar \" baz - not replaced\n // 2. foo-\"-bar-\"-baz - replaced\n // 3. foo\"bar\"baz - not replaced\n //\n canOpen = isLastPunctChar;\n canClose = isNextPunctChar;\n }\n\n if (!canOpen && !canClose) {\n // middle of word\n if (isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n continue;\n }\n\n if (canClose) {\n // this could be a closing quote, rewind the stack to get a match\n for (j = stack.length - 1; j >= 0; j--) {\n item = stack[j];\n if (stack[j].level < thisLevel) { break; }\n if (item.single === isSingle && stack[j].level === thisLevel) {\n item = stack[j];\n\n if (isSingle) {\n openQuote = state.md.options.quotes[2];\n closeQuote = state.md.options.quotes[3];\n } else {\n openQuote = state.md.options.quotes[0];\n closeQuote = state.md.options.quotes[1];\n }\n\n // replace token.content *before* tokens[item.token].content,\n // because, if they are pointing at the same token, replaceAt\n // could mess up indices when quote length != 1\n token.content = replaceAt(token.content, t.index, closeQuote);\n tokens[item.token].content = replaceAt(\n tokens[item.token].content, item.pos, openQuote);\n\n pos += closeQuote.length - 1;\n if (item.token === i) { pos += openQuote.length - 1; }\n\n text = token.content;\n max = text.length;\n\n stack.length = j;\n continue OUTER;\n }\n }\n }\n\n if (canOpen) {\n stack.push({\n token: i,\n pos: t.index,\n single: isSingle,\n level: thisLevel\n });\n } else if (canClose && isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n }\n }\n}\n\n\nmodule.exports = function smartquotes(state) {\n /*eslint max-depth:0*/\n var blkIdx;\n\n if (!state.md.options.typographer) { return; }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n if (state.tokens[blkIdx].type !== 'inline' ||\n !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n continue;\n }\n\n process_inlines(state.tokens[blkIdx].children, state);\n }\n};\n", "// Token class\n\n'use strict';\n\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type;\n\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n this.tag = tag;\n\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n this.attrs = null;\n\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n this.map = null;\n\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n this.nesting = nesting;\n\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n this.level = 0;\n\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n this.children = null;\n\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n this.content = '';\n\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n this.markup = '';\n\n /**\n * Token#info -> String\n *\n * Additional information:\n *\n * - Info string for \"fence\" tokens\n * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n **/\n this.info = '';\n\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n this.meta = null;\n\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n this.block = false;\n\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n this.hidden = false;\n}\n\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n var attrs, i, len;\n\n if (!this.attrs) { return -1; }\n\n attrs = this.attrs;\n\n for (i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) { return i; }\n }\n return -1;\n};\n\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n if (this.attrs) {\n this.attrs.push(attrData);\n } else {\n this.attrs = [ attrData ];\n }\n};\n\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n var idx = this.attrIndex(name),\n attrData = [ name, value ];\n\n if (idx < 0) {\n this.attrPush(attrData);\n } else {\n this.attrs[idx] = attrData;\n }\n};\n\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n var idx = this.attrIndex(name), value = null;\n if (idx >= 0) {\n value = this.attrs[idx][1];\n }\n return value;\n};\n\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n var idx = this.attrIndex(name);\n\n if (idx < 0) {\n this.attrPush([ name, value ]);\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n }\n};\n\n\nmodule.exports = Token;\n", "// Core state object\n//\n'use strict';\n\nvar Token = require('../token');\n\n\nfunction StateCore(src, md, env) {\n this.src = src;\n this.env = env;\n this.tokens = [];\n this.inlineMode = false;\n this.md = md; // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token;\n\n\nmodule.exports = StateCore;\n", "/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n [ 'normalize', require('./rules_core/normalize') ],\n [ 'block', require('./rules_core/block') ],\n [ 'inline', require('./rules_core/inline') ],\n [ 'linkify', require('./rules_core/linkify') ],\n [ 'replacements', require('./rules_core/replacements') ],\n [ 'smartquotes', require('./rules_core/smartquotes') ]\n];\n\n\n/**\n * new Core()\n **/\nfunction Core() {\n /**\n * Core#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of core rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n}\n\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n var i, l, rules;\n\n rules = this.ruler.getRules('');\n\n for (i = 0, l = rules.length; i < l; i++) {\n rules[i](state);\n }\n};\n\nCore.prototype.State = require('./rules_core/state_core');\n\n\nmodule.exports = Core;\n", "// GFM table, https://github.github.com/gfm/#tables-extension-\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction getLine(state, line) {\n var pos = state.bMarks[line] + state.tShift[line],\n max = state.eMarks[line];\n\n return state.src.substr(pos, max - pos);\n}\n\nfunction escapedSplit(str) {\n var result = [],\n pos = 0,\n max = str.length,\n ch,\n isEscaped = false,\n lastPos = 0,\n current = '';\n\n ch = str.charCodeAt(pos);\n\n while (pos < max) {\n if (ch === 0x7c/* | */) {\n if (!isEscaped) {\n // pipe separating cells, '|'\n result.push(current + str.substring(lastPos, pos));\n current = '';\n lastPos = pos + 1;\n } else {\n // escaped pipe, '\\|'\n current += str.substring(lastPos, pos - 1);\n lastPos = pos;\n }\n }\n\n isEscaped = (ch === 0x5c/* \\ */);\n pos++;\n\n ch = str.charCodeAt(pos);\n }\n\n result.push(current + str.substring(lastPos));\n\n return result;\n}\n\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n var ch, lineText, pos, i, l, nextLine, columns, columnCount, token,\n aligns, t, tableLines, tbodyLines, oldParentType, terminate,\n terminatorRules, firstCh, secondCh;\n\n // should have at least two lines\n if (startLine + 2 > endLine) { return false; }\n\n nextLine = startLine + 1;\n\n if (state.sCount[nextLine] < state.blkIndent) { return false; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { return false; }\n\n // first character of the second line should be '|', '-', ':',\n // and no other characters are allowed but spaces;\n // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n firstCh = state.src.charCodeAt(pos++);\n if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false; }\n\n if (pos >= state.eMarks[nextLine]) { return false; }\n\n secondCh = state.src.charCodeAt(pos++);\n if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n return false;\n }\n\n // if first character is '-', then second character must not be a space\n // (due to parsing ambiguity with list)\n if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false; }\n\n while (pos < state.eMarks[nextLine]) {\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false; }\n\n pos++;\n }\n\n lineText = getLine(state, startLine + 1);\n\n columns = lineText.split('|');\n aligns = [];\n for (i = 0; i < columns.length; i++) {\n t = columns[i].trim();\n if (!t) {\n // allow empty columns before and after table, but not in between columns;\n // e.g. allow ` |---| `, disallow ` ---||--- `\n if (i === 0 || i === columns.length - 1) {\n continue;\n } else {\n return false;\n }\n }\n\n if (!/^:?-+:?$/.test(t)) { return false; }\n if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right');\n } else if (t.charCodeAt(0) === 0x3A/* : */) {\n aligns.push('left');\n } else {\n aligns.push('');\n }\n }\n\n lineText = getLine(state, startLine).trim();\n if (lineText.indexOf('|') === -1) { return false; }\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n // header row will define an amount of columns in the entire table,\n // and align row should be exactly the same (the rest of the rows can differ)\n columnCount = columns.length;\n if (columnCount === 0 || columnCount !== aligns.length) { return false; }\n\n if (silent) { return true; }\n\n oldParentType = state.parentType;\n state.parentType = 'table';\n\n // use 'blockquote' lists for termination because it's\n // the most similar to tables\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n token = state.push('table_open', 'table', 1);\n token.map = tableLines = [ startLine, 0 ];\n\n token = state.push('thead_open', 'thead', 1);\n token.map = [ startLine, startLine + 1 ];\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ startLine, startLine + 1 ];\n\n for (i = 0; i < columns.length; i++) {\n token = state.push('th_open', 'th', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i].trim();\n token.children = [];\n\n token = state.push('th_close', 'th', -1);\n }\n\n token = state.push('tr_close', 'tr', -1);\n token = state.push('thead_close', 'thead', -1);\n\n for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) { break; }\n lineText = getLine(state, nextLine).trim();\n if (!lineText) { break; }\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { break; }\n columns = escapedSplit(lineText);\n if (columns.length && columns[0] === '') columns.shift();\n if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n if (nextLine === startLine + 2) {\n token = state.push('tbody_open', 'tbody', 1);\n token.map = tbodyLines = [ startLine + 2, 0 ];\n }\n\n token = state.push('tr_open', 'tr', 1);\n token.map = [ nextLine, nextLine + 1 ];\n\n for (i = 0; i < columnCount; i++) {\n token = state.push('td_open', 'td', 1);\n if (aligns[i]) {\n token.attrs = [ [ 'style', 'text-align:' + aligns[i] ] ];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i] ? columns[i].trim() : '';\n token.children = [];\n\n token = state.push('td_close', 'td', -1);\n }\n token = state.push('tr_close', 'tr', -1);\n }\n\n if (tbodyLines) {\n token = state.push('tbody_close', 'tbody', -1);\n tbodyLines[1] = nextLine;\n }\n\n token = state.push('table_close', 'table', -1);\n tableLines[1] = nextLine;\n\n state.parentType = oldParentType;\n state.line = nextLine;\n return true;\n};\n", "// Code block (4 spaces padded)\n\n'use strict';\n\n\nmodule.exports = function code(state, startLine, endLine/*, silent*/) {\n if (state.md.options.allowIndentation) { return false; }\n\n var nextLine, last, token;\n\n if (state.sCount[startLine] - state.blkIndent < 4) { return false; }\n\n last = nextLine = startLine + 1;\n\n while (nextLine < endLine) {\n if (state.isEmpty(nextLine)) {\n nextLine++;\n continue;\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n nextLine++;\n last = nextLine;\n continue;\n }\n break;\n }\n\n state.line = last;\n\n token = state.push('code_block', 'code', 0);\n token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n';\n token.map = [ startLine, state.line ];\n\n return true;\n};\n", "// fences (``` lang, ~~~ lang)\n\n'use strict';\n\n\nmodule.exports = function fence(state, startLine, endLine, silent) {\n var marker, len, params, nextLine, mem, token, markup,\n haveEndMarker = false,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (pos + 3 > max) { return false; }\n\n marker = state.src.charCodeAt(pos);\n\n if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n return false;\n }\n\n // scan marker length\n mem = pos;\n pos = state.skipChars(pos, marker);\n\n len = pos - mem;\n\n if (len < 3) { return false; }\n\n markup = state.src.slice(mem, pos);\n params = state.src.slice(pos, max);\n\n if (marker === 0x60 /* ` */) {\n if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n return false;\n }\n }\n\n // Since start is found, we can report success here in validation mode\n if (silent) { return true; }\n\n // search end of block\n nextLine = startLine;\n\n for (;;) {\n nextLine++;\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break;\n }\n\n pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break;\n }\n\n if (state.src.charCodeAt(pos) !== marker) { continue; }\n\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue;\n }\n\n pos = state.skipChars(pos, marker);\n\n // closing code fence must be at least as long as the opening one\n if (pos - mem < len) { continue; }\n\n // make sure tail has spaces only\n pos = state.skipSpaces(pos);\n\n if (pos < max) { continue; }\n\n haveEndMarker = true;\n // found!\n break;\n }\n\n // If a fence has heading spaces, they should be removed from its inner block\n len = state.sCount[startLine];\n\n state.line = nextLine + (haveEndMarker ? 1 : 0);\n\n token = state.push('fence', 'code', 0);\n token.info = params;\n token.content = state.getLines(startLine + 1, nextLine, len, true);\n token.markup = markup;\n token.map = [ startLine, state.line ];\n\n return true;\n};\n", "// Block quotes\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function blockquote(state, startLine, endLine, silent) {\n var adjustTab,\n ch,\n i,\n initial,\n l,\n lastLineEmpty,\n lines,\n nextLine,\n offset,\n oldBMarks,\n oldBSCount,\n oldIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n spaceAfterMarker,\n terminate,\n terminatorRules,\n token,\n isOutdented,\n oldLineMax = state.lineMax,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // check the block quote marker\n if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }\n\n // we know that it's going to be a valid blockquote,\n // so no point trying to find the end of it in silent mode\n if (silent) { return true; }\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[startLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[startLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks = [ state.bMarks[startLine] ];\n state.bMarks[startLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[startLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n oldBSCount = [ state.bsCount[startLine] ];\n state.bsCount[startLine] = state.sCount[startLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n lastLineEmpty = pos >= max;\n\n oldSCount = [ state.sCount[startLine] ];\n state.sCount[startLine] = offset - initial;\n\n oldTShift = [ state.tShift[startLine] ];\n state.tShift[startLine] = pos - state.bMarks[startLine];\n\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n oldParentType = state.parentType;\n state.parentType = 'blockquote';\n\n // Search the end of the block\n //\n // Block ends with either:\n // 1. an empty line outside:\n // ```\n // > test\n //\n // ```\n // 2. an empty line inside:\n // ```\n // >\n // test\n // ```\n // 3. another tag:\n // ```\n // > test\n // - - -\n // ```\n for (nextLine = startLine + 1; nextLine < endLine; nextLine++) {\n // check if it's outdented, i.e. it's inside list item and indented\n // less than said list item:\n //\n // ```\n // 1. anything\n // > current blockquote\n // 2. checking this line\n // ```\n isOutdented = state.sCount[nextLine] < state.blkIndent;\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos >= max) {\n // Case 1: line is not inside the blockquote, and this line is empty.\n break;\n }\n\n if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n // This line is inside the blockquote.\n\n // set offset past spaces and \">\"\n initial = offset = state.sCount[nextLine] + 1;\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[nextLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n state.bMarks[nextLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n lastLineEmpty = pos >= max;\n\n oldBSCount.push(state.bsCount[nextLine]);\n state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] = offset - initial;\n\n oldTShift.push(state.tShift[nextLine]);\n state.tShift[nextLine] = pos - state.bMarks[nextLine];\n continue;\n }\n\n // Case 2: line is not inside the blockquote, and the last line was empty.\n if (lastLineEmpty) { break; }\n\n // Case 3: another tag found.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) {\n // Quirk to enforce \"hard termination mode\" for paragraphs;\n // normally if you call `tokenize(state, startLine, nextLine)`,\n // paragraphs will look below nextLine for paragraph continuation,\n // but if blockquote is terminated by another tag, they shouldn't\n state.lineMax = nextLine;\n\n if (state.blkIndent !== 0) {\n // state.blkIndent was non-zero, we now set it to zero,\n // so we need to re-calculate all offsets to appear as\n // if indent wasn't changed\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] -= state.blkIndent;\n }\n\n break;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n\n // A negative indentation means that this is a paragraph continuation\n //\n state.sCount[nextLine] = -1;\n }\n\n oldIndent = state.blkIndent;\n state.blkIndent = 0;\n\n token = state.push('blockquote_open', 'blockquote', 1);\n token.markup = '>';\n token.map = lines = [ startLine, 0 ];\n\n state.md.block.tokenize(state, startLine, nextLine);\n\n token = state.push('blockquote_close', 'blockquote', -1);\n token.markup = '>';\n\n state.lineMax = oldLineMax;\n state.parentType = oldParentType;\n lines[1] = state.line;\n\n // Restore original tShift; this might not be necessary since the parser\n // has already been here, but just to make sure we can do that.\n for (i = 0; i < oldTShift.length; i++) {\n state.bMarks[i + startLine] = oldBMarks[i];\n state.tShift[i + startLine] = oldTShift[i];\n state.sCount[i + startLine] = oldSCount[i];\n state.bsCount[i + startLine] = oldBSCount[i];\n }\n state.blkIndent = oldIndent;\n\n return true;\n};\n", "// Horizontal rule\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function hr(state, startLine, endLine, silent) {\n var marker, cnt, ch, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n marker = state.src.charCodeAt(pos++);\n\n // Check hr marker\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x5F/* _ */) {\n return false;\n }\n\n // markers can be mixed with spaces, but there should be at least 3 of them\n\n cnt = 1;\n while (pos < max) {\n ch = state.src.charCodeAt(pos++);\n if (ch !== marker && !isSpace(ch)) { return false; }\n if (ch === marker) { cnt++; }\n }\n\n if (cnt < 3) { return false; }\n\n if (silent) { return true; }\n\n state.line = startLine + 1;\n\n token = state.push('hr', 'hr', 0);\n token.map = [ startLine, state.line ];\n token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\n return true;\n};\n", "// Lists\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker(state, startLine) {\n var marker, pos, max, ch;\n\n pos = state.bMarks[startLine] + state.tShift[startLine];\n max = state.eMarks[startLine];\n\n marker = state.src.charCodeAt(pos++);\n // Check bullet\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x2B/* + */) {\n return -1;\n }\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" -test \" - is not a list item\n return -1;\n }\n }\n\n return pos;\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker(state, startLine) {\n var ch,\n start = state.bMarks[startLine] + state.tShift[startLine],\n pos = start,\n max = state.eMarks[startLine];\n\n // List marker should have at least 2 chars (digit + dot)\n if (pos + 1 >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; }\n\n for (;;) {\n // EOL -> fail\n if (pos >= max) { return -1; }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n\n // List marker should have no more than 9 digits\n // (prevents integer overflow in browsers)\n if (pos - start >= 10) { return -1; }\n\n continue;\n }\n\n // found valid marker\n if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n break;\n }\n\n return -1;\n }\n\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" 1.test \" - is not a list item\n return -1;\n }\n }\n return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n var i, l,\n level = state.level + 2;\n\n for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n state.tokens[i + 2].hidden = true;\n state.tokens[i].hidden = true;\n i += 2;\n }\n }\n}\n\n\nmodule.exports = function list(state, startLine, endLine, silent) {\n var ch,\n contentStart,\n i,\n indent,\n indentAfterMarker,\n initial,\n isOrdered,\n itemLines,\n l,\n listLines,\n listTokIdx,\n markerCharCode,\n markerValue,\n max,\n nextLine,\n offset,\n oldListIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n oldTight,\n pos,\n posAfterMarker,\n prevEmptyEnd,\n start,\n terminate,\n terminatorRules,\n token,\n isTerminatingParagraph = false,\n tight = true;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n // Special case:\n // - item 1\n // - item 2\n // - item 3\n // - item 4\n // - this one is a paragraph continuation\n if (!state.md.options.allowIndentation &&\n state.listIndent >= 0 &&\n state.sCount[startLine] - state.listIndent >= 4 &&\n state.sCount[startLine] < state.blkIndent) {\n return false;\n }\n\n // limit conditions when list can interrupt\n // a paragraph (validation mode only)\n if (silent && state.parentType === 'paragraph') {\n // Next list item should still terminate previous list item;\n //\n // This code can fail if plugins use blkIndent as well as lists,\n // but I hope the spec gets fixed long before that happens.\n //\n if (state.sCount[startLine] >= state.blkIndent) {\n isTerminatingParagraph = true;\n }\n }\n\n // Detect list type and position after marker\n if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n isOrdered = true;\n start = state.bMarks[startLine] + state.tShift[startLine];\n markerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\n // If we're starting a new ordered list right after\n // a paragraph, it should start with 1.\n if (isTerminatingParagraph && markerValue !== 1) return false;\n\n } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n isOrdered = false;\n\n } else {\n return false;\n }\n\n // If we're starting a new unordered list right after\n // a paragraph, first line should not be empty.\n if (isTerminatingParagraph) {\n if (state.skipSpaces(posAfterMarker) >= state.eMarks[startLine]) return false;\n }\n\n // We should terminate list on style change. Remember first one to compare.\n markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n // For validation mode we can terminate immediately\n if (silent) { return true; }\n\n // Start list\n listTokIdx = state.tokens.length;\n\n if (isOrdered) {\n token = state.push('ordered_list_open', 'ol', 1);\n if (markerValue !== 1) {\n token.attrs = [ [ 'start', markerValue ] ];\n }\n\n } else {\n token = state.push('bullet_list_open', 'ul', 1);\n }\n\n token.map = listLines = [ startLine, 0 ];\n token.markup = String.fromCharCode(markerCharCode);\n\n //\n // Iterate list items\n //\n\n nextLine = startLine;\n prevEmptyEnd = false;\n terminatorRules = state.md.block.ruler.getRules('list');\n\n oldParentType = state.parentType;\n state.parentType = 'list';\n\n while (nextLine < endLine) {\n pos = posAfterMarker;\n max = state.eMarks[nextLine];\n\n initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n } else if (ch === 0x20) {\n offset++;\n } else {\n break;\n }\n\n pos++;\n }\n\n contentStart = pos;\n\n if (contentStart >= max) {\n // trimming space in \"- \\n 3\" case, indent is 1 here\n indentAfterMarker = 1;\n } else {\n indentAfterMarker = offset - initial;\n }\n\n // If we have more than 4 spaces, the indent is 1\n // (the rest is just indented code block)\n if (!state.md.options.allowIndentation && indentAfterMarker > 4) { indentAfterMarker = 1; }\n\n // \" - test\"\n // ^^^^^ - calculating total length of this thing\n indent = initial + indentAfterMarker;\n\n // Run subparser & write tokens\n token = state.push('list_item_open', 'li', 1);\n token.markup = String.fromCharCode(markerCharCode);\n token.map = itemLines = [ startLine, 0 ];\n if (isOrdered) {\n token.info = state.src.slice(start, posAfterMarker - 1);\n }\n\n // change current state, then restore it after parser subcall\n oldTight = state.tight;\n oldTShift = state.tShift[startLine];\n oldSCount = state.sCount[startLine];\n\n // - example list\n // ^ listIndent position will be here\n // ^ blkIndent position will be here\n //\n oldListIndent = state.listIndent;\n state.listIndent = state.blkIndent;\n state.blkIndent = indent;\n\n state.tight = true;\n state.tShift[startLine] = contentStart - state.bMarks[startLine];\n state.sCount[startLine] = offset;\n\n if (contentStart >= max && state.isEmpty(startLine + 1)) {\n // workaround for this case\n // (list item is empty, list terminates before \"foo\"):\n // ~~~~~~~~\n // -\n //\n // foo\n // ~~~~~~~~\n state.line = Math.min(state.line + 2, endLine);\n } else {\n state.md.block.tokenize(state, startLine, endLine, true);\n }\n\n // If any of list item is tight, mark list as tight\n if (!state.tight || prevEmptyEnd) {\n tight = false;\n }\n // Item become loose if finish with empty line,\n // but we should filter last element, because it means list finish\n prevEmptyEnd = (state.line - startLine) > 1 && state.isEmpty(state.line - 1);\n\n state.blkIndent = state.listIndent;\n state.listIndent = oldListIndent;\n state.tShift[startLine] = oldTShift;\n state.sCount[startLine] = oldSCount;\n state.tight = oldTight;\n\n token = state.push('list_item_close', 'li', -1);\n token.markup = String.fromCharCode(markerCharCode);\n\n nextLine = startLine = state.line;\n itemLines[1] = nextLine;\n contentStart = state.bMarks[startLine];\n\n if (nextLine >= endLine) { break; }\n\n //\n // Try to check if list is terminated or continued.\n //\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { break; }\n\n // fail if terminating block found\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n\n // fail if list has another type\n if (isOrdered) {\n posAfterMarker = skipOrderedListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n start = state.bMarks[nextLine] + state.tShift[nextLine];\n } else {\n posAfterMarker = skipBulletListMarker(state, nextLine);\n if (posAfterMarker < 0) { break; }\n }\n\n if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; }\n }\n\n // Finalize list\n if (isOrdered) {\n token = state.push('ordered_list_close', 'ol', -1);\n } else {\n token = state.push('bullet_list_close', 'ul', -1);\n }\n token.markup = String.fromCharCode(markerCharCode);\n\n listLines[1] = nextLine;\n state.line = nextLine;\n\n state.parentType = oldParentType;\n\n // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx);\n }\n\n return true;\n};\n", "'use strict';\n\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function reference(state, startLine, _endLine, silent) {\n var ch,\n destEndPos,\n destEndLineNo,\n endLine,\n href,\n i,\n l,\n label,\n labelEnd,\n oldParentType,\n res,\n start,\n str,\n terminate,\n terminatorRules,\n title,\n lines = 0,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine],\n nextLine = startLine + 1;\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; }\n\n // Simple check to quickly interrupt scan on [link](url) at the start of line.\n // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n while (++pos < max) {\n if (state.src.charCodeAt(pos) === 0x5D /* ] */ &&\n state.src.charCodeAt(pos - 1) !== 0x5C/* \\ */) {\n if (pos + 1 === max) { return false; }\n if (state.src.charCodeAt(pos + 1) !== 0x3A/* : */) { return false; }\n break;\n }\n }\n\n endLine = state.lineMax;\n\n // jump line-by-line until empty one or EOF\n terminatorRules = state.md.block.ruler.getRules('reference');\n\n oldParentType = state.parentType;\n state.parentType = 'reference';\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n max = str.length;\n\n for (pos = 1; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x5B /* [ */) {\n return false;\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos;\n break;\n } else if (ch === 0x0A /* \\n */) {\n lines++;\n } else if (ch === 0x5C /* \\ */) {\n pos++;\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; }\n\n // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n for (pos = labelEnd + 2; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n res = state.md.helpers.parseLinkDestination(str, pos, max);\n if (!res.ok) { return false; }\n\n href = state.md.normalizeLink(res.str);\n if (!state.md.validateLink(href)) { return false; }\n\n pos = res.pos;\n lines += res.lines;\n\n // save cursor state, we could require to rollback later\n destEndPos = pos;\n destEndLineNo = lines;\n\n // [label]: destination 'title'\n // ^^^ skipping those spaces\n start = pos;\n for (; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^ parse this\n res = state.md.helpers.parseLinkTitle(str, pos, max);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n lines += res.lines;\n } else {\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n }\n\n // skip trailing spaces until the rest of the line\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n while (pos < max) {\n ch = str.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n // garbage at the end of the line\n return false;\n }\n\n label = normalizeReference(str.slice(1, labelEnd));\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false;\n }\n\n // Reference can not terminate anything. This check is for safety only.\n /*istanbul ignore if*/\n if (silent) { return true; }\n\n if (typeof state.env.references === 'undefined') {\n state.env.references = {};\n }\n if (typeof state.env.references[label] === 'undefined') {\n state.env.references[label] = { title: title, href: href };\n }\n\n state.parentType = oldParentType;\n\n state.line = startLine + lines + 1;\n return true;\n};\n", "// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n\n'use strict';\n\n\nmodule.exports = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'section',\n 'source',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n];\n", "// Regexps to match html elements\n\n'use strict';\n\nvar attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\n\nvar unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\n\nvar attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\n\nvar attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\n\nvar open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\n\nvar close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing = '<[?][\\\\s\\\\S]*?[?]>';\nvar declaration = '<![A-Z]+\\\\s+[^>]*>';\nvar cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\n\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\n\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;\n", "// HTML block\n\n'use strict';\n\n\nvar block_names = require('../common/html_blocks');\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE;\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nvar HTML_SEQUENCES = [\n [ /^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true ],\n [ /^<!--/, /-->/, true ],\n [ /^<\\?/, /\\?>/, true ],\n [ /^<![A-Z]/, />/, true ],\n [ /^<!\\[CDATA\\[/, /\\]\\]>/, true ],\n [ new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true ],\n [ new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false ]\n];\n\n\nmodule.exports = function html_block(state, startLine, endLine, silent) {\n var i, nextLine, token, lineText,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n if (!state.md.options.html) { return false; }\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n lineText = state.src.slice(pos, max);\n\n for (i = 0; i < HTML_SEQUENCES.length; i++) {\n if (HTML_SEQUENCES[i][0].test(lineText)) { break; }\n }\n\n if (i === HTML_SEQUENCES.length) { return false; }\n\n if (silent) {\n // true if this sequence can be a terminator, false otherwise\n return HTML_SEQUENCES[i][2];\n }\n\n nextLine = startLine + 1;\n\n // If we are here - we detected HTML block.\n // Let's roll down till block end.\n if (!HTML_SEQUENCES[i][1].test(lineText)) {\n for (; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n lineText = state.src.slice(pos, max);\n\n if (HTML_SEQUENCES[i][1].test(lineText)) {\n if (lineText.length !== 0) { nextLine++; }\n break;\n }\n }\n }\n\n state.line = nextLine;\n\n token = state.push('html_block', '', 0);\n token.map = [ startLine, nextLine ];\n token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\n return true;\n};\n", "// heading (#, ##, ...)\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n var ch, level, tmp, token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine];\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x23/* # */ || pos >= max) { return false; }\n\n // count heading level\n level = 1;\n ch = state.src.charCodeAt(++pos);\n while (ch === 0x23/* # */ && pos < max && level <= 6) {\n level++;\n ch = state.src.charCodeAt(++pos);\n }\n\n if (level > 6 || (pos < max && !isSpace(ch))) { return false; }\n\n if (silent) { return true; }\n\n // Let's cut tails like ' ### ' from the end of string\n\n max = state.skipSpacesBack(max, pos);\n tmp = state.skipCharsBack(max, 0x23, pos); // #\n if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n max = tmp;\n }\n\n state.line = startLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = '########'.slice(0, level);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = state.src.slice(pos, max).trim();\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = '########'.slice(0, level);\n\n return true;\n};\n", "// lheading (---, ===)\n\n'use strict';\n\n\nmodule.exports = function lheading(state, startLine, endLine/*, silent*/) {\n var content, terminate, i, l, token, pos, max, level, marker,\n nextLine = startLine + 1, oldParentType,\n terminatorRules = state.md.block.ruler.getRules('paragraph');\n\n // if it's indented more than 3 spaces, it should be a code block\n if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n //\n // Check for underline in setext header\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max) {\n marker = state.src.charCodeAt(pos);\n\n if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n pos = state.skipChars(pos, marker);\n pos = state.skipSpaces(pos);\n\n if (pos >= max) {\n level = (marker === 0x3D/* = */ ? 1 : 2);\n break;\n }\n }\n }\n }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n if (!level) {\n // Didn't find valid underline\n return false;\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine + 1;\n\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = String.fromCharCode(marker);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line - 1 ];\n token.children = [];\n\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = String.fromCharCode(marker);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Paragraph\n\n'use strict';\n\n\nmodule.exports = function paragraph(state, startLine/*, endLine*/) {\n var content, terminate, i, l, token, oldParentType,\n nextLine = startLine + 1,\n terminatorRules = state.md.block.ruler.getRules('paragraph'),\n endLine = state.lineMax;\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph';\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue; }\n\n // Some tags can terminate paragraph without empty line.\n terminate = false;\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n if (terminate) { break; }\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n state.line = nextLine;\n\n token = state.push('paragraph_open', 'p', 1);\n token.map = [ startLine, state.line ];\n\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [ startLine, state.line ];\n token.children = [];\n\n token = state.push('paragraph_close', 'p', -1);\n\n state.parentType = oldParentType;\n\n return true;\n};\n", "// Parser state class\n\n'use strict';\n\nvar Token = require('../token');\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction StateBlock(src, md, env, tokens) {\n var ch, s, start, pos, len, indent, offset, indent_found;\n\n this.src = src;\n\n // link to parser instance\n this.md = md;\n\n this.env = env;\n\n //\n // Internal state vartiables\n //\n\n this.tokens = tokens;\n\n this.bMarks = []; // line begin offsets for fast jumps\n this.eMarks = []; // line end offsets for fast jumps\n this.tShift = []; // offsets of the first non-space characters (tabs not expanded)\n this.sCount = []; // indents for each line (tabs expanded)\n\n // An amount of virtual spaces (tabs expanded) between beginning\n // of each line (bMarks) and real beginning of that line.\n //\n // It exists only as a hack because blockquotes override bMarks\n // losing information in the process.\n //\n // It's used only when expanding tabs, you can think about it as\n // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n // means first tab should be expanded to 4-21%4 === 3 spaces.\n //\n this.bsCount = [];\n\n // block parser variables\n this.blkIndent = 0; // required block content indent (for example, if we are\n // inside a list, it would be positioned after list marker)\n this.line = 0; // line index in src\n this.lineMax = 0; // lines count\n this.tight = false; // loose/tight mode for lists\n this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any)\n this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n\n // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n // used in lists to determine if they interrupt a paragraph\n this.parentType = 'root';\n\n this.level = 0;\n\n // renderer\n this.result = '';\n\n // Create caches\n // Generate markers.\n s = this.src;\n indent_found = false;\n\n for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n ch = s.charCodeAt(pos);\n\n if (!indent_found) {\n if (isSpace(ch)) {\n indent++;\n\n if (ch === 0x09) {\n offset += 4 - offset % 4;\n } else {\n offset++;\n }\n continue;\n } else {\n indent_found = true;\n }\n }\n\n if (ch === 0x0A || pos === len - 1) {\n if (ch !== 0x0A) { pos++; }\n this.bMarks.push(start);\n this.eMarks.push(pos);\n this.tShift.push(indent);\n this.sCount.push(offset);\n this.bsCount.push(0);\n\n indent_found = false;\n indent = 0;\n offset = 0;\n start = pos + 1;\n }\n }\n\n // Push fake entry to simplify cache bounds checks\n this.bMarks.push(s.length);\n this.eMarks.push(s.length);\n this.tShift.push(0);\n this.sCount.push(0);\n this.bsCount.push(0);\n\n this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n var token = new Token(type, tag, nesting);\n token.block = true;\n\n if (nesting < 0) this.level--; // closing tag\n token.level = this.level;\n if (nesting > 0) this.level++; // opening tag\n\n this.tokens.push(token);\n return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n for (var max = this.lineMax; from < max; from++) {\n if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n break;\n }\n }\n return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n var ch;\n\n for (var max = this.src.length; pos < max; pos++) {\n ch = this.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n }\n return pos;\n};\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1; }\n }\n return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n for (var max = this.src.length; pos < max; pos++) {\n if (this.src.charCodeAt(pos) !== code) { break; }\n }\n return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n if (pos <= min) { return pos; }\n\n while (pos > min) {\n if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }\n }\n return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n var i, lineIndent, ch, first, last, queue, lineStart,\n line = begin;\n\n if (begin >= end) {\n return '';\n }\n\n queue = new Array(end - begin);\n\n for (i = 0; line < end; line++, i++) {\n lineIndent = 0;\n lineStart = first = this.bMarks[line];\n\n if (line + 1 < end || keepLastLF) {\n // No need for bounds check because we have fake entry on tail.\n last = this.eMarks[line] + 1;\n } else {\n last = this.eMarks[line];\n }\n\n while (first < last && lineIndent < indent) {\n ch = this.src.charCodeAt(first);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n } else {\n lineIndent++;\n }\n } else if (first - lineStart < this.tShift[line]) {\n // patched tShift masked characters to look like spaces (blockquotes, list markers)\n lineIndent++;\n } else {\n break;\n }\n\n first++;\n }\n\n if (lineIndent > indent) {\n // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n // with indent=2 becomes ' \\tfoobar'\n queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n } else {\n queue[i] = this.src.slice(first, last);\n }\n }\n\n return queue.join('');\n};\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token;\n\n\nmodule.exports = StateBlock;\n", "/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\nvar _rules = [\n // First 2 params - rule name & source. Secondary array - list of rules,\n // which can be terminated by this one.\n [ 'table', require('./rules_block/table'), [ 'paragraph', 'reference' ] ],\n [ 'code', require('./rules_block/code') ],\n [ 'fence', require('./rules_block/fence'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'blockquote', require('./rules_block/blockquote'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'hr', require('./rules_block/hr'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n [ 'list', require('./rules_block/list'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'reference', require('./rules_block/reference') ],\n [ 'html_block', require('./rules_block/html_block'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'heading', require('./rules_block/heading'), [ 'paragraph', 'reference', 'blockquote' ] ],\n [ 'lheading', require('./rules_block/lheading') ],\n [ 'paragraph', require('./rules_block/paragraph') ]\n];\n\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock() {\n /**\n * ParserBlock#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of block rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() });\n }\n}\n\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n line = startLine,\n hasEmptyLines = false,\n maxNesting = state.md.options.maxNesting;\n\n while (line < endLine) {\n state.line = line = state.skipEmptyLines(line);\n if (line >= endLine) { break; }\n\n // Termination condition for nested calls.\n // Nested calls currently used for blockquotes & lists\n if (state.sCount[line] < state.blkIndent) { break; }\n\n // If nesting level exceeded - skip tail to the end. That's not ordinary\n // situation and we should not care about content.\n if (state.level >= maxNesting) {\n state.line = endLine;\n break;\n }\n\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.line`\n // - update `state.tokens`\n // - return true\n\n for (i = 0; i < len; i++) {\n ok = rules[i](state, line, endLine, false);\n if (ok) { break; }\n }\n\n // set state.tight if we had an empty line before current tag\n // i.e. latest empty line should not count\n state.tight = !hasEmptyLines;\n\n // paragraph might \"eat\" one newline after it in nested lists\n if (state.isEmpty(state.line - 1)) {\n hasEmptyLines = true;\n }\n\n line = state.line;\n\n if (line < endLine && state.isEmpty(line)) {\n hasEmptyLines = true;\n line++;\n state.line = line;\n }\n }\n};\n\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n var state;\n\n if (!src) { return; }\n\n state = new this.State(src, md, env, outTokens);\n\n this.tokenize(state, state.line, state.lineMax);\n};\n\n\nParserBlock.prototype.State = require('./rules_block/state_block');\n\n\nmodule.exports = ParserBlock;\n", "// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n'use strict';\n\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar(ch) {\n switch (ch) {\n case 0x0A/* \\n */:\n case 0x21/* ! */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2D/* - */:\n case 0x3A/* : */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos;\n\n while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n pos++;\n }\n\n if (pos === state.pos) { return false; }\n\n if (!silent) { state.pending += state.src.slice(state.pos, pos); }\n\n state.pos = pos;\n\n return true;\n};\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos,\n idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n // first char is terminator -> empty text\n if (idx === 0) { return false; }\n\n // no terminator -> text till end of string\n if (idx < 0) {\n if (!silent) { state.pending += state.src.slice(pos); }\n state.pos = state.src.length;\n return true;\n }\n\n if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n state.pos += idx;\n\n return true;\n};*/\n", "// Proceess '\\n'\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function newline(state, silent) {\n var pmax, max, ws, pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false; }\n\n pmax = state.pending.length - 1;\n max = state.posMax;\n\n // ' \\n' -> hardbreak\n // Lookup in pending chars is bad practice! Don't copy to other rules!\n // Pending string is stored in concat mode, indexed lookups will cause\n // convertion to flat mode.\n if (!silent) {\n if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n // Find whitespaces tail of pending chars.\n ws = pmax - 1;\n while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--;\n\n state.pending = state.pending.slice(0, ws);\n state.push('hardbreak', 'br', 0);\n } else {\n state.pending = state.pending.slice(0, -1);\n state.push('softbreak', 'br', 0);\n }\n\n } else {\n state.push('softbreak', 'br', 0);\n }\n }\n\n pos++;\n\n // skip heading spaces for next line\n while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++; }\n\n state.pos = pos;\n return true;\n};\n", "// Process escaped chars and hardbreaks\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) { ESCAPED.push(0); }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; });\n\n\nmodule.exports = function escape(state, silent) {\n var ch, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) { return false; }\n\n pos++;\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch < 256 && ESCAPED[ch] !== 0) {\n if (!silent) { state.pending += state.src[pos]; }\n state.pos += 2;\n return true;\n }\n\n if (ch === 0x0A) {\n if (!silent) {\n state.push('hardbreak', 'br', 0);\n }\n\n pos++;\n // skip leading whitespaces from next line\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n if (!isSpace(ch)) { break; }\n pos++;\n }\n\n state.pos = pos;\n return true;\n }\n }\n\n if (!silent) { state.pending += '\\\\'; }\n state.pos++;\n return true;\n};\n", "// Parse backticks\n\n'use strict';\n\n\nmodule.exports = function backtick(state, silent) {\n var start, max, marker, token, matchStart, matchEnd, openerLength, closerLength,\n pos = state.pos,\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x60/* ` */) { return false; }\n\n start = pos;\n pos++;\n max = state.posMax;\n\n // scan marker length\n while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }\n\n marker = state.src.slice(start, pos);\n openerLength = marker.length;\n\n if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n }\n\n matchStart = matchEnd = pos;\n\n // Nothing found in the cache, scan until the end of the line (or until marker is found)\n while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n matchEnd = matchStart + 1;\n\n // scan marker length\n while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }\n\n closerLength = matchEnd - matchStart;\n\n if (closerLength === openerLength) {\n // Found matching closer length.\n if (!silent) {\n token = state.push('code_inline', 'code', 0);\n token.markup = marker;\n token.content = state.src.slice(pos, matchStart)\n .replace(/\\n/g, ' ')\n .replace(/^ (.+) $/, '$1');\n }\n state.pos = matchEnd;\n return true;\n }\n\n // Some different length found, put it in cache as upper limit of where closer can be found\n state.backticks[closerLength] = matchStart;\n }\n\n // Scanned through the end, didn't find anything\n state.backticksScanned = true;\n\n if (!silent) state.pending += marker;\n state.pos += openerLength;\n return true;\n};\n", "// ~~strike through~~\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function strikethrough(state, silent) {\n var i, scanned, token, len, ch,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x7E/* ~ */) { return false; }\n\n scanned = state.scanDelims(state.pos, true);\n len = scanned.length;\n ch = String.fromCharCode(marker);\n\n if (len < 2) { return false; }\n\n if (len % 2) {\n token = state.push('text', '', 0);\n token.content = ch;\n len--;\n }\n\n for (i = 0; i < len; i += 2) {\n token = state.push('text', '', 0);\n token.content = ch + ch;\n\n state.delimiters.push({\n marker: marker,\n length: 0, // disable \"rule of 3\" length checks meant for emphasis\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i, j,\n startDelim,\n endDelim,\n token,\n loneMarkers = [],\n max = delimiters.length;\n\n for (i = 0; i < max; i++) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x7E/* ~ */) {\n continue;\n }\n\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n token = state.tokens[startDelim.token];\n token.type = 's_open';\n token.tag = 's';\n token.nesting = 1;\n token.markup = '~~';\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = 's_close';\n token.tag = 's';\n token.nesting = -1;\n token.markup = '~~';\n token.content = '';\n\n if (state.tokens[endDelim.token - 1].type === 'text' &&\n state.tokens[endDelim.token - 1].content === '~') {\n\n loneMarkers.push(endDelim.token - 1);\n }\n }\n\n // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n while (loneMarkers.length) {\n i = loneMarkers.pop();\n j = i + 1;\n\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++;\n }\n\n j--;\n\n if (i !== j) {\n token = state.tokens[j];\n state.tokens[j] = state.tokens[i];\n state.tokens[i] = token;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function strikethrough(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process *this* and _that_\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function emphasis(state, silent) {\n var i, scanned, token,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) { return false; }\n\n if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false; }\n\n scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n for (i = 0; i < scanned.length; i++) {\n token = state.push('text', '', 0);\n token.content = String.fromCharCode(marker);\n\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker: marker,\n\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n\n // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n\n return true;\n};\n\n\nfunction postProcess(state, delimiters) {\n var i,\n startDelim,\n endDelim,\n token,\n ch,\n isStrong,\n max = delimiters.length;\n\n for (i = max - 1; i >= 0; i--) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n continue;\n }\n\n // Process only opening markers\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n\n // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n //\n isStrong = i > 0 &&\n delimiters[i - 1].end === startDelim.end + 1 &&\n // check that first two markers match and adjacent\n delimiters[i - 1].marker === startDelim.marker &&\n delimiters[i - 1].token === startDelim.token - 1 &&\n // check that last two markers are adjacent (we can safely assume they match)\n delimiters[startDelim.end + 1].token === endDelim.token + 1;\n\n ch = String.fromCharCode(startDelim.marker);\n\n token = state.tokens[startDelim.token];\n token.type = isStrong ? 'strong_open' : 'em_open';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = 1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n token = state.tokens[endDelim.token];\n token.type = isStrong ? 'strong_close' : 'em_close';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = -1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n if (isStrong) {\n state.tokens[delimiters[i - 1].token].content = '';\n state.tokens[delimiters[startDelim.end + 1].token].content = '';\n i--;\n }\n }\n}\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Process [link](<to> \"stuff\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function link(state, silent) {\n var attrs,\n code,\n label,\n labelEnd,\n labelStart,\n pos,\n res,\n ref,\n token,\n href = '',\n title = '',\n oldPos = state.pos,\n max = state.posMax,\n start = state.pos,\n parseReference = true;\n\n if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 1;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // might have found a valid shortcut link, disable reference parsing\n parseReference = false;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n }\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n // parsing a valid shortcut link failed, fallback to reference\n parseReference = true;\n }\n pos++;\n }\n\n if (parseReference) {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n state.pos = labelStart;\n state.posMax = labelEnd;\n\n token = state.push('link_open', 'a', 1);\n token.attrs = attrs = [ [ 'href', href ] ];\n if (title) {\n attrs.push([ 'title', title ]);\n }\n\n state.md.inline.tokenize(state);\n\n token = state.push('link_close', 'a', -1);\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n", "// Process ![image](<src> \"title\")\n\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function image(state, silent) {\n var attrs,\n code,\n content,\n label,\n labelEnd,\n labelStart,\n pos,\n ref,\n res,\n title,\n token,\n tokens,\n start,\n href = '',\n oldPos = state.pos,\n max = state.posMax;\n\n if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false; }\n if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false; }\n\n labelStart = state.pos + 2;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false; }\n\n pos = labelEnd + 1;\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n if (pos >= max) { return false; }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos;\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n if (!isSpace(code) && code !== 0x0A) { break; }\n }\n } else {\n title = '';\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n state.pos = oldPos;\n return false;\n }\n pos++;\n } else {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false; }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n ref = state.env.references[normalizeReference(label)];\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n href = ref.href;\n title = ref.title;\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n content = state.src.slice(labelStart, labelEnd);\n\n state.md.inline.parse(\n content,\n state.md,\n state.env,\n tokens = []\n );\n\n token = state.push('image', 'img', 0);\n token.attrs = attrs = [ [ 'src', href ], [ 'alt', '' ] ];\n token.children = tokens;\n token.content = content;\n\n if (title) {\n attrs.push([ 'title', title ]);\n }\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};\n", "// Process autolinks '<protocol:...>'\n\n'use strict';\n\n\n/*eslint max-len:0*/\nvar EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;\nvar AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)$/;\n\n\nmodule.exports = function autolink(state, silent) {\n var url, fullUrl, token, ch, start, max,\n pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n start = state.pos;\n max = state.posMax;\n\n for (;;) {\n if (++pos >= max) return false;\n\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x3C /* < */) return false;\n if (ch === 0x3E /* > */) break;\n }\n\n url = state.src.slice(start + 1, pos);\n\n if (AUTOLINK_RE.test(url)) {\n fullUrl = state.md.normalizeLink(url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n if (EMAIL_RE.test(url)) {\n fullUrl = state.md.normalizeLink('mailto:' + url);\n if (!state.md.validateLink(fullUrl)) { return false; }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [ [ 'href', fullUrl ] ];\n token.markup = 'autolink';\n token.info = 'auto';\n\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += url.length + 2;\n return true;\n }\n\n return false;\n};\n", "// Process html tags\n\n'use strict';\n\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\n\n\nfunction isLetter(ch) {\n /*eslint no-bitwise:0*/\n var lc = ch | 0x20; // to lower case\n return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);\n}\n\n\nmodule.exports = function html_inline(state, silent) {\n var ch, match, max, token,\n pos = state.pos;\n\n if (!state.md.options.html) { return false; }\n\n // Check start\n max = state.posMax;\n if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n pos + 2 >= max) {\n return false;\n }\n\n // Quick fail on second char\n ch = state.src.charCodeAt(pos + 1);\n if (ch !== 0x21/* ! */ &&\n ch !== 0x3F/* ? */ &&\n ch !== 0x2F/* / */ &&\n !isLetter(ch)) {\n return false;\n }\n\n match = state.src.slice(pos).match(HTML_TAG_RE);\n if (!match) { return false; }\n\n if (!silent) {\n token = state.push('html_inline', '', 0);\n token.content = state.src.slice(pos, pos + match[0].length);\n }\n state.pos += match[0].length;\n return true;\n};\n", "// Process html entity - &#123;, &#xAF;, &quot;, ...\n\n'use strict';\n\nvar entities = require('../common/entities');\nvar has = require('../common/utils').has;\nvar isValidEntityCode = require('../common/utils').isValidEntityCode;\nvar fromCodePoint = require('../common/utils').fromCodePoint;\n\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\n\n\nmodule.exports = function entity(state, silent) {\n var ch, code, match, pos = state.pos, max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x26/* & */) { return false; }\n\n if (pos + 1 < max) {\n ch = state.src.charCodeAt(pos + 1);\n\n if (ch === 0x23 /* # */) {\n match = state.src.slice(pos).match(DIGITAL_RE);\n if (match) {\n if (!silent) {\n code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n state.pending += isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n }\n state.pos += match[0].length;\n return true;\n }\n } else {\n match = state.src.slice(pos).match(NAMED_RE);\n if (match) {\n if (has(entities, match[1])) {\n if (!silent) { state.pending += entities[match[1]]; }\n state.pos += match[0].length;\n return true;\n }\n }\n }\n }\n\n if (!silent) { state.pending += '&'; }\n state.pos++;\n return true;\n};\n", "// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\n\nfunction processDelimiters(state, delimiters) {\n var closerIdx, openerIdx, closer, opener, minOpenerIdx, newMinOpenerIdx,\n isOddMatch, lastJump,\n openersBottom = {},\n max = delimiters.length;\n\n if (!max) return;\n\n // headerIdx is the first delimiter of the current (where closer is) delimiter run\n var headerIdx = 0;\n var lastTokenIdx = -2; // needs any value lower than -1\n var jumps = [];\n\n for (closerIdx = 0; closerIdx < max; closerIdx++) {\n closer = delimiters[closerIdx];\n\n jumps.push(0);\n\n // markers belong to same delimiter run if:\n // - they have adjacent tokens\n // - AND markers are the same\n //\n if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n headerIdx = closerIdx;\n }\n\n lastTokenIdx = closer.token;\n\n // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n closer.length = closer.length || 0;\n\n if (!closer.close) continue;\n\n // Previously calculated lower bounds (previous fails)\n // for each marker, each delimiter length modulo 3,\n // and for whether this closer can be an opener;\n // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [ -1, -1, -1, -1, -1, -1 ];\n }\n\n minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)];\n\n openerIdx = headerIdx - jumps[headerIdx] - 1;\n\n newMinOpenerIdx = openerIdx;\n\n for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n opener = delimiters[openerIdx];\n\n if (opener.marker !== closer.marker) continue;\n\n if (opener.open && opener.end < 0) {\n\n isOddMatch = false;\n\n // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true;\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ?\n jumps[openerIdx - 1] + 1 :\n 0;\n\n jumps[closerIdx] = closerIdx - openerIdx + lastJump;\n jumps[openerIdx] = lastJump;\n\n closer.open = false;\n opener.end = closerIdx;\n opener.close = false;\n newMinOpenerIdx = -1;\n // treat next token as start of run,\n // it optimizes skips in **<...>**a**<...>** pathological case\n lastTokenIdx = -2;\n break;\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx;\n }\n }\n}\n\n\nmodule.exports = function link_pairs(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n\n processDelimiters(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(state, tokens_meta[curr].delimiters);\n }\n }\n};\n", "// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n'use strict';\n\n\nmodule.exports = function text_collapse(state) {\n var curr, last,\n level = 0,\n tokens = state.tokens,\n max = state.tokens.length;\n\n for (curr = last = 0; curr < max; curr++) {\n // re-calculate levels after emphasis/strikethrough turns some text nodes\n // into opening/closing tags\n if (tokens[curr].nesting < 0) level--; // closing tag\n tokens[curr].level = level;\n if (tokens[curr].nesting > 0) level++; // opening tag\n\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n } else {\n if (curr !== last) { tokens[last] = tokens[curr]; }\n\n last++;\n }\n }\n\n if (curr !== last) {\n tokens.length = last;\n }\n};\n", "// Inline parser state\n\n'use strict';\n\n\nvar Token = require('../token');\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\nvar isPunctChar = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\n\nfunction StateInline(src, md, env, outTokens) {\n this.src = src;\n this.env = env;\n this.md = md;\n this.tokens = outTokens;\n this.tokens_meta = Array(outTokens.length);\n\n this.pos = 0;\n this.posMax = this.src.length;\n this.level = 0;\n this.pending = '';\n this.pendingLevel = 0;\n\n // Stores { start: end } pairs. Useful for backtrack\n // optimization of pairs parse (emphasis, strikes).\n this.cache = {};\n\n // List of emphasis-like delimiters for current tag\n this.delimiters = [];\n\n // Stack of delimiter lists for upper level tags\n this._prev_delimiters = [];\n\n // backtick length => last seen position\n this.backticks = {};\n this.backticksScanned = false;\n}\n\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n var token = new Token('text', '', 0);\n token.content = this.pending;\n token.level = this.pendingLevel;\n this.tokens.push(token);\n this.pending = '';\n return token;\n};\n\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n if (this.pending) {\n this.pushPending();\n }\n\n var token = new Token(type, tag, nesting);\n var token_meta = null;\n\n if (nesting < 0) {\n // closing tag\n this.level--;\n this.delimiters = this._prev_delimiters.pop();\n }\n\n token.level = this.level;\n\n if (nesting > 0) {\n // opening tag\n this.level++;\n this._prev_delimiters.push(this.delimiters);\n this.delimiters = [];\n token_meta = { delimiters: this.delimiters };\n }\n\n this.pendingLevel = this.level;\n this.tokens.push(token);\n this.tokens_meta.push(token_meta);\n return token;\n};\n\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n// - start - position to scan from (it should point at a valid marker);\n// - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n var pos = start, lastChar, nextChar, count, can_open, can_close,\n isLastWhiteSpace, isLastPunctChar,\n isNextWhiteSpace, isNextPunctChar,\n left_flanking = true,\n right_flanking = true,\n max = this.posMax,\n marker = this.src.charCodeAt(start);\n\n // treat beginning of the line as a whitespace\n lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n\n while (pos < max && this.src.charCodeAt(pos) === marker) { pos++; }\n\n count = pos - start;\n\n // treat end of the line as a whitespace\n nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n left_flanking = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n left_flanking = false;\n }\n }\n\n if (isLastWhiteSpace) {\n right_flanking = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n right_flanking = false;\n }\n }\n\n if (!canSplitWord) {\n can_open = left_flanking && (!right_flanking || isLastPunctChar);\n can_close = right_flanking && (!left_flanking || isNextPunctChar);\n } else {\n can_open = left_flanking;\n can_close = right_flanking;\n }\n\n return {\n can_open: can_open,\n can_close: can_close,\n length: count\n };\n};\n\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token;\n\n\nmodule.exports = StateInline;\n", "/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n'use strict';\n\n\nvar Ruler = require('./ruler');\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Parser rules\n\nvar _rules = [\n [ 'text', require('./rules_inline/text') ],\n [ 'newline', require('./rules_inline/newline') ],\n [ 'escape', require('./rules_inline/escape') ],\n [ 'backticks', require('./rules_inline/backticks') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').tokenize ],\n [ 'emphasis', require('./rules_inline/emphasis').tokenize ],\n [ 'link', require('./rules_inline/link') ],\n [ 'image', require('./rules_inline/image') ],\n [ 'autolink', require('./rules_inline/autolink') ],\n [ 'html_inline', require('./rules_inline/html_inline') ],\n [ 'entity', require('./rules_inline/entity') ]\n];\n\nvar _rules2 = [\n [ 'balance_pairs', require('./rules_inline/balance_pairs') ],\n [ 'strikethrough', require('./rules_inline/strikethrough').postProcess ],\n [ 'emphasis', require('./rules_inline/emphasis').postProcess ],\n [ 'text_collapse', require('./rules_inline/text_collapse') ]\n];\n\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline() {\n var i;\n\n /**\n * ParserInline#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of inline rules.\n **/\n this.ruler = new Ruler();\n\n for (i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n\n /**\n * ParserInline#ruler2 -> Ruler\n *\n * [[Ruler]] instance. Second ruler used for post-processing\n * (e.g. in emphasis-like rules).\n **/\n this.ruler2 = new Ruler();\n\n for (i = 0; i < _rules2.length; i++) {\n this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n }\n}\n\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n var ok, i, pos = state.pos,\n rules = this.ruler.getRules(''),\n len = rules.length,\n maxNesting = state.md.options.maxNesting,\n cache = state.cache;\n\n\n if (typeof cache[pos] !== 'undefined') {\n state.pos = cache[pos];\n return;\n }\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n // Increment state.level and decrement it later to limit recursion.\n // It's harmless to do here, because no tokens are created. But ideally,\n // we'd need a separate private state variable for this purpose.\n //\n state.level++;\n ok = rules[i](state, true);\n state.level--;\n\n if (ok) { break; }\n }\n } else {\n // Too much nesting, just skip until the end of the paragraph.\n //\n // NOTE: this will cause links to behave incorrectly in the following case,\n // when an amount of `[` is exactly equal to `maxNesting + 1`:\n //\n // [[[[[[[[[[[[[[[[[[[[[foo]()\n //\n // TODO: remove this workaround when CM standard will allow nested links\n // (we can replace it by preventing links from being parsed in\n // validation mode)\n //\n state.pos = state.posMax;\n }\n\n if (!ok) { state.pos++; }\n cache[pos] = state.pos;\n};\n\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n var ok, i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n end = state.posMax,\n maxNesting = state.md.options.maxNesting;\n\n while (state.pos < end) {\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.pos`\n // - update `state.tokens`\n // - return true\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n ok = rules[i](state, false);\n if (ok) { break; }\n }\n }\n\n if (ok) {\n if (state.pos >= end) { break; }\n continue;\n }\n\n state.pending += state.src[state.pos++];\n }\n\n if (state.pending) {\n state.pushPending();\n }\n};\n\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n var i, rules, len;\n var state = new this.State(str, md, env, outTokens);\n\n this.tokenize(state);\n\n rules = this.ruler2.getRules('');\n len = rules.length;\n\n for (i = 0; i < len; i++) {\n rules[i](state);\n }\n};\n\n\nParserInline.prototype.State = require('./rules_inline/state_inline');\n\n\nmodule.exports = ParserInline;\n", "'use strict';\n\n\nmodule.exports = function (opts) {\n var re = {};\n\n // Use direct extract instead of `regenerate` to reduse browserified size\n re.src_Any = require('uc.micro/properties/Any/regex').source;\n re.src_Cc = require('uc.micro/categories/Cc/regex').source;\n re.src_Z = require('uc.micro/categories/Z/regex').source;\n re.src_P = require('uc.micro/categories/P/regex').source;\n\n // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|');\n\n // \\p{\\Z\\Cc} (white spaces + control)\n re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|');\n\n // Experimental. List of chars, completely prohibited in links\n // because can separate it from other part of text\n var text_separators = '[><\\uff5c]';\n\n // All possible word characters (everything without punctuation, spaces & controls)\n // Defined via punctuation & spaces to save space\n // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';\n // The same as abothe but without [0-9]\n // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n ////////////////////////////////////////////////////////////////////////////////\n\n re.src_ip4 =\n\n '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n\n re.src_port =\n\n '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n re.src_host_terminator =\n\n '(?=$|' + text_separators + '|' + re.src_ZPCc + ')(?!-|_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n\n re.src_path =\n\n '(?:' +\n '[/?#]' +\n '(?:' +\n '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n \"\\\\'(?=\" + re.src_pseudo_letter + '|[-]).|' + // allow `I'm_king` if no pair found\n '\\\\.{2,}[a-zA-Z0-9%/&]|' + // google has many dots in \"google search\" links (#66, #81).\n // github has ... in commit range links,\n // Restrict to\n // - english\n // - percent-encoded\n // - parts of file path\n // - params separator\n // until more examples found.\n '\\\\.(?!' + re.src_ZCc + '|[.]).|' +\n (opts && opts['---'] ?\n '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n :\n '\\\\-+|'\n ) +\n ',(?!' + re.src_ZCc + ').|' + // allow `,,,` in paths\n ';(?!' + re.src_ZCc + ').|' + // allow `;` if not followed by space-like char\n '\\\\!+(?!' + re.src_ZCc + '|[!]).|' + // allow `!!!` in paths, but not at the end\n '\\\\?(?!' + re.src_ZCc + '|[?]).' +\n ')+' +\n '|\\\\/' +\n ')?';\n\n // Allow anything in markdown spec, forbid quote (\") at the first position\n // because emails enclosed in quotes are far more common\n re.src_email_name =\n\n '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n\n re.src_xn =\n\n 'xn--[a-z0-9\\\\-]{1,59}';\n\n // More to read about domain names\n // http://serverfault.com/questions/638260/\n\n re.src_domain_root =\n\n // Allow letters & digits (http://test1)\n '(?:' +\n re.src_xn +\n '|' +\n re.src_pseudo_letter + '{1,63}' +\n ')';\n\n re.src_domain =\n\n '(?:' +\n re.src_xn +\n '|' +\n '(?:' + re.src_pseudo_letter + ')' +\n '|' +\n '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n ')';\n\n re.src_host =\n\n '(?:' +\n // Don't need IP check, because digits are already allowed in normal domain names\n // src_ip4 +\n // '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/*_root*/ + ')' +\n ')';\n\n re.tpl_host_fuzzy =\n\n '(?:' +\n re.src_ip4 +\n '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n ')';\n\n re.tpl_host_no_ip_fuzzy =\n\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n\n re.src_host_strict =\n\n re.src_host + re.src_host_terminator;\n\n re.tpl_host_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_host_terminator;\n\n re.src_host_port_strict =\n\n re.src_host + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n re.tpl_host_port_no_ip_fuzzy_strict =\n\n re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n\n ////////////////////////////////////////////////////////////////////////////////\n // Main rules\n\n // Rude test fuzzy links by host, for quick deny\n re.tpl_host_fuzzy_test =\n\n 'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n\n re.tpl_email_fuzzy =\n\n '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n\n re.tpl_link_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n\n re.tpl_link_no_ip_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n\n return re;\n};\n", "'use strict';\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\nfunction isRegExp(obj) { return _class(obj) === '[object RegExp]'; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\n\n\nfunction escapeRE(str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&'); }\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n fuzzyLink: true,\n fuzzyEmail: true,\n fuzzyIP: false\n};\n\n\nfunction isOptionsObj(obj) {\n return Object.keys(obj || {}).reduce(function (acc, k) {\n return acc || defaultOptions.hasOwnProperty(k);\n }, false);\n}\n\n\nvar defaultSchemas = {\n 'http:': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.http = new RegExp(\n '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n );\n }\n if (self.re.http.test(tail)) {\n return tail.match(self.re.http)[0].length;\n }\n return 0;\n }\n },\n 'https:': 'http:',\n 'ftp:': 'http:',\n '//': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.no_http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.no_http = new RegExp(\n '^' +\n self.re.src_auth +\n // Don't allow single-level domains, because of false positives like '//test'\n // with code comments\n '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n self.re.src_port +\n self.re.src_host_terminator +\n self.re.src_path,\n\n 'i'\n );\n }\n\n if (self.re.no_http.test(tail)) {\n // should not be `://` & `///`, that protects from errors in protocol name\n if (pos >= 3 && text[pos - 3] === ':') { return 0; }\n if (pos >= 3 && text[pos - 3] === '/') { return 0; }\n return tail.match(self.re.no_http)[0].length;\n }\n return 0;\n }\n },\n 'mailto:': {\n validate: function (text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.mailto) {\n self.re.mailto = new RegExp(\n '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n );\n }\n if (self.re.mailto.test(tail)) {\n return tail.match(self.re.mailto)[0].length;\n }\n return 0;\n }\n }\n};\n\n/*eslint-disable max-len*/\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444'.split('|');\n\n/*eslint-enable max-len*/\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n self.__index__ = -1;\n self.__text_cache__ = '';\n}\n\nfunction createValidator(re) {\n return function (text, pos) {\n var tail = text.slice(pos);\n\n if (re.test(tail)) {\n return tail.match(re)[0].length;\n }\n return 0;\n };\n}\n\nfunction createNormalizer() {\n return function (match, self) {\n self.normalize(match);\n };\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile(self) {\n\n // Load & clone RE patterns.\n var re = self.re = require('./lib/re')(self.__opts__);\n\n // Define dynamic patterns\n var tlds = self.__tlds__.slice();\n\n self.onCompile();\n\n if (!self.__tlds_replaced__) {\n tlds.push(tlds_2ch_src_re);\n }\n tlds.push(re.src_xn);\n\n re.src_tlds = tlds.join('|');\n\n function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); }\n\n re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n //\n // Compile each schema\n //\n\n var aliases = [];\n\n self.__compiled__ = {}; // Reset compiled data\n\n function schemaError(name, val) {\n throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n }\n\n Object.keys(self.__schemas__).forEach(function (name) {\n var val = self.__schemas__[name];\n\n // skip disabled methods\n if (val === null) { return; }\n\n var compiled = { validate: null, link: null };\n\n self.__compiled__[name] = compiled;\n\n if (isObject(val)) {\n if (isRegExp(val.validate)) {\n compiled.validate = createValidator(val.validate);\n } else if (isFunction(val.validate)) {\n compiled.validate = val.validate;\n } else {\n schemaError(name, val);\n }\n\n if (isFunction(val.normalize)) {\n compiled.normalize = val.normalize;\n } else if (!val.normalize) {\n compiled.normalize = createNormalizer();\n } else {\n schemaError(name, val);\n }\n\n return;\n }\n\n if (isString(val)) {\n aliases.push(name);\n return;\n }\n\n schemaError(name, val);\n });\n\n //\n // Compile postponed aliases\n //\n\n aliases.forEach(function (alias) {\n if (!self.__compiled__[self.__schemas__[alias]]) {\n // Silently fail on missed schemas to avoid errons on disable.\n // schemaError(alias, self.__schemas__[alias]);\n return;\n }\n\n self.__compiled__[alias].validate =\n self.__compiled__[self.__schemas__[alias]].validate;\n self.__compiled__[alias].normalize =\n self.__compiled__[self.__schemas__[alias]].normalize;\n });\n\n //\n // Fake record for guessed links\n //\n self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n //\n // Build schema condition\n //\n var slist = Object.keys(self.__compiled__)\n .filter(function (name) {\n // Filter disabled & fake schemas\n return name.length > 0 && self.__compiled__[name];\n })\n .map(escapeRE)\n .join('|');\n // (?!_) cause 1.5x slowdown\n self.re.schema_test = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');\n self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');\n\n self.re.pretest = RegExp(\n '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n 'i'\n );\n\n //\n // Cleanup\n //\n\n resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match(self, shift) {\n var start = self.__index__,\n end = self.__last_index__,\n text = self.__text_cache__.slice(start, end);\n\n /**\n * Match#schema -> String\n *\n * Prefix (protocol) for matched string.\n **/\n this.schema = self.__schema__.toLowerCase();\n /**\n * Match#index -> Number\n *\n * First position of matched string.\n **/\n this.index = start + shift;\n /**\n * Match#lastIndex -> Number\n *\n * Next position after matched string.\n **/\n this.lastIndex = end + shift;\n /**\n * Match#raw -> String\n *\n * Matched string.\n **/\n this.raw = text;\n /**\n * Match#text -> String\n *\n * Notmalized text of matched string.\n **/\n this.text = text;\n /**\n * Match#url -> String\n *\n * Normalized url of matched string.\n **/\n this.url = text;\n}\n\nfunction createMatch(self, shift) {\n var match = new Match(self, shift);\n\n self.__compiled__[match.schema].normalize(match, self);\n\n return match;\n}\n\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n * for example). `linkify-it` makes shure that prefix is not preceeded with\n * alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n * - _String_ - just alias to existing rule\n * - _Object_\n * - _validate_ - validator function (should return matched length on success),\n * or `RegExp`.\n * - _normalize_ - optional function to normalize text & url of matched result\n * (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n * like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt(schemas, options) {\n if (!(this instanceof LinkifyIt)) {\n return new LinkifyIt(schemas, options);\n }\n\n if (!options) {\n if (isOptionsObj(schemas)) {\n options = schemas;\n schemas = {};\n }\n }\n\n this.__opts__ = assign({}, defaultOptions, options);\n\n // Cache last tested result. Used to skip repeating steps on next `match` call.\n this.__index__ = -1;\n this.__last_index__ = -1; // Next scan position\n this.__schema__ = '';\n this.__text_cache__ = '';\n\n this.__schemas__ = assign({}, defaultSchemas, schemas);\n this.__compiled__ = {};\n\n this.__tlds__ = tlds_default;\n this.__tlds_replaced__ = false;\n\n this.re = {};\n\n compile(this);\n}\n\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add(schema, definition) {\n this.__schemas__[schema] = definition;\n compile(this);\n return this;\n};\n\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set(options) {\n this.__opts__ = assign(this.__opts__, options);\n return this;\n};\n\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test(text) {\n // Reset scan cache\n this.__text_cache__ = text;\n this.__index__ = -1;\n\n if (!text.length) { return false; }\n\n var m, ml, me, len, shift, next, re, tld_pos, at_pos;\n\n // try to scan for link with schema - that's the most simple rule\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search;\n re.lastIndex = 0;\n while ((m = re.exec(text)) !== null) {\n len = this.testSchemaAt(text, m[2], re.lastIndex);\n if (len) {\n this.__schema__ = m[2];\n this.__index__ = m.index + m[1].length;\n this.__last_index__ = m.index + m[0].length + len;\n break;\n }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n // guess schemaless links\n tld_pos = text.search(this.re.host_fuzzy_test);\n if (tld_pos >= 0) {\n // if tld is located after found link - no need to check fuzzy pattern\n if (this.__index__ < 0 || tld_pos < this.__index__) {\n if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n\n shift = ml.index + ml[1].length;\n\n if (this.__index__ < 0 || shift < this.__index__) {\n this.__schema__ = '';\n this.__index__ = shift;\n this.__last_index__ = ml.index + ml[0].length;\n }\n }\n }\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n // guess schemaless emails\n at_pos = text.indexOf('@');\n if (at_pos >= 0) {\n // We can't skip this check, because this cases are possible:\n // 192.168.1.1@gmail.com, my.in@example.com\n if ((me = text.match(this.re.email_fuzzy)) !== null) {\n\n shift = me.index + me[1].length;\n next = me.index + me[0].length;\n\n if (this.__index__ < 0 || shift < this.__index__ ||\n (shift === this.__index__ && next > this.__last_index__)) {\n this.__schema__ = 'mailto:';\n this.__index__ = shift;\n this.__last_index__ = next;\n }\n }\n }\n }\n\n return this.__index__ >= 0;\n};\n\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest(text) {\n return this.re.pretest.test(text);\n};\n\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n // If not supported schema check requested - terminate\n if (!this.__compiled__[schema.toLowerCase()]) {\n return 0;\n }\n return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n * protocol-neutral links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match(text) {\n var shift = 0, result = [];\n\n // Try to take previous element from cache, if .test() called before\n if (this.__index__ >= 0 && this.__text_cache__ === text) {\n result.push(createMatch(this, shift));\n shift = this.__last_index__;\n }\n\n // Cut head if cache was used\n var tail = shift ? text.slice(shift) : text;\n\n // Scan string until end reached\n while (this.test(tail)) {\n result.push(createMatch(this, shift));\n\n tail = tail.slice(this.__last_index__);\n shift += this.__last_index__;\n }\n\n if (result.length) {\n return result;\n }\n\n return null;\n};\n\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444\n * are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n list = Array.isArray(list) ? list : [ list ];\n\n if (!keepOld) {\n this.__tlds__ = list.slice();\n this.__tlds_replaced__ = true;\n compile(this);\n return this;\n }\n\n this.__tlds__ = this.__tlds__.concat(list)\n .sort()\n .filter(function (el, idx, arr) {\n return el !== arr[idx - 1];\n })\n .reverse();\n\n compile(this);\n return this;\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize(match) {\n\n // Do minimal possible changes by default. Need to collect feedback prior\n // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n if (!match.schema) { match.url = 'http://' + match.url; }\n\n if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n match.url = 'mailto:' + match.url;\n }\n};\n\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\n\n\nmodule.exports = LinkifyIt;\n", "'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nmodule.exports = punycode;\n", "// markdown-it default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 100 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {},\n block: {},\n inline: {}\n }\n};\n", "// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: false, // Enable HTML tags in source\n xhtmlOut: false, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Commonmark default options\n\n'use strict';\n\n\nmodule.exports = {\n options: {\n html: true, // Enable HTML tags in source\n xhtmlOut: true, // Use '/' to close single tags (<br />)\n breaks: false, // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-', // CSS language prefix for fenced blocks\n linkify: false, // autoconvert URL-like texts to links\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '\u00AB\u00BB\u201E\u201C' for Russian, '\u201E\u201C\u201A\u2018' for German,\n // and ['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* \u201C\u201D\u2018\u2019 */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n maxNesting: 20 // Internal protection, recursion limit\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline'\n ]\n },\n\n block: {\n rules: [\n 'blockquote',\n 'code',\n 'fence',\n 'heading',\n 'hr',\n 'html_block',\n 'lheading',\n 'list',\n 'reference',\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'autolink',\n 'backticks',\n 'emphasis',\n 'entity',\n 'escape',\n 'html_inline',\n 'image',\n 'link',\n 'newline',\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'emphasis',\n 'text_collapse'\n ]\n }\n }\n};\n", "// Main parser class\n\n'use strict';\n\n\nvar utils = require('./common/utils');\nvar helpers = require('./helpers');\nvar Renderer = require('./renderer');\nvar ParserCore = require('./parser_core');\nvar ParserBlock = require('./parser_block');\nvar ParserInline = require('./parser_inline');\nvar LinkifyIt = require('linkify-it');\nvar mdurl = require('mdurl');\nvar punycode = require('punycode');\n\n\nvar config = {\n default: require('./presets/default'),\n zero: require('./presets/zero'),\n commonmark: require('./presets/commonmark')\n};\n\n////////////////////////////////////////////////////////////////////////////////\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\n\nfunction validateLink(url) {\n // url should be normalized at this point, and existing entities are decoded\n var str = url.trim().toLowerCase();\n\n return BAD_PROTO_RE.test(str) ? (GOOD_DATA_RE.test(str) ? true : false) : true;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar RECODE_HOSTNAME_FOR = [ 'http:', 'https:', 'mailto:' ];\n\nfunction normalizeLink(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toASCII(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n return mdurl.encode(mdurl.format(parsed));\n}\n\nfunction normalizeLinkText(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toUnicode(parsed.hostname);\n } catch (er) { /**/ }\n }\n }\n\n // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%');\n}\n\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n * md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n * configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n * similar to GFM, used when no preset name given. Enables all available rules,\n * but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n * all rules disabled. Useful to quickly setup your config via `.enable()`.\n * For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n * That's not safe! You may need external sanitizer to protect output from XSS.\n * It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n * (`<br />`). This is needed only for full CommonMark compatibility. In real\n * world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n * Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__ - `false`. Set `true` to enable [some language-neutral\n * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n * quotes beautification (smartquotes).\n * - __quotes__ - `\u201C\u201D\u2018\u2019`, String or Array. Double + single quotes replacement\n * pairs, when typographer enabled and smartquotes on. For example, you can\n * use `'\u00AB\u00BB\u201E\u201C'` for Russian, `'\u201E\u201C\u201A\u2018'` for German, and\n * `['\u00AB\\xA0', '\\xA0\u00BB', '\u2039\\xA0', '\\xA0\u203A']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n * Highlighter `function (str, lang)` should return escaped HTML. It can also\n * return empty string if the source was not changed and should be escaped\n * externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n * html: true,\n * linkify: true,\n * typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n * } catch (__) {}\n * }\n *\n * return ''; // use external default escaping\n * }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return '<pre class=\"hljs\"><code>' +\n * hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n * '</code></pre>';\n * } catch (__) {}\n * }\n *\n * return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n * }\n * });\n * ```\n *\n **/\nfunction MarkdownIt(presetName, options) {\n if (!(this instanceof MarkdownIt)) {\n return new MarkdownIt(presetName, options);\n }\n\n if (!options) {\n if (!utils.isString(presetName)) {\n options = presetName || {};\n presetName = 'default';\n }\n }\n\n /**\n * MarkdownIt#inline -> ParserInline\n *\n * Instance of [[ParserInline]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.inline = new ParserInline();\n\n /**\n * MarkdownIt#block -> ParserBlock\n *\n * Instance of [[ParserBlock]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.block = new ParserBlock();\n\n /**\n * MarkdownIt#core -> Core\n *\n * Instance of [[Core]] chain executor. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.core = new ParserCore();\n\n /**\n * MarkdownIt#renderer -> Renderer\n *\n * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n * rules for new token types, generated by plugins.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * function myToken(tokens, idx, options, env, self) {\n * //...\n * return result;\n * };\n *\n * md.renderer.rules['my_token'] = myToken\n * ```\n *\n * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n **/\n this.renderer = new Renderer();\n\n /**\n * MarkdownIt#linkify -> LinkifyIt\n *\n * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n * rule.\n **/\n this.linkify = new LinkifyIt();\n\n /**\n * MarkdownIt#validateLink(url) -> Boolean\n *\n * Link validation function. CommonMark allows too much in links. By default\n * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n * except some embedded image types.\n *\n * You can change this behaviour:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * // enable everything\n * md.validateLink = function () { return true; }\n * ```\n **/\n this.validateLink = validateLink;\n\n /**\n * MarkdownIt#normalizeLink(url) -> String\n *\n * Function used to encode link url to a machine-readable format,\n * which includes url-encoding, punycode, etc.\n **/\n this.normalizeLink = normalizeLink;\n\n /**\n * MarkdownIt#normalizeLinkText(url) -> String\n *\n * Function used to decode link url to a human-readable format`\n **/\n this.normalizeLinkText = normalizeLinkText;\n\n\n // Expose utils & helpers for easy acces from plugins\n\n /**\n * MarkdownIt#utils -> utils\n *\n * Assorted utility functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js).\n **/\n this.utils = utils;\n\n /**\n * MarkdownIt#helpers -> helpers\n *\n * Link components parser functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n **/\n this.helpers = utils.assign({}, helpers);\n\n\n this.options = {};\n this.configure(presetName);\n\n if (options) { this.set(options); }\n}\n\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .set({ html: true, breaks: true })\n * .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n utils.assign(this.options, options);\n return this;\n};\n\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n var self = this, presetName;\n\n if (utils.isString(presets)) {\n presetName = presets;\n presets = config[presetName];\n if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name'); }\n }\n\n if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty'); }\n\n if (presets.options) { self.set(presets.options); }\n\n if (presets.components) {\n Object.keys(presets.components).forEach(function (name) {\n if (presets.components[name].rules) {\n self[name].ruler.enableOnly(presets.components[name].rules);\n }\n if (presets.components[name].rules2) {\n self[name].ruler2.enableOnly(presets.components[name].rules2);\n }\n });\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .enable(['sub', 'sup'])\n * .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.enable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.enable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n }\n\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) { list = [ list ]; }\n\n [ 'core', 'block', 'inline' ].forEach(function (chain) {\n result = result.concat(this[chain].ruler.disable(list, true));\n }, this);\n\n result = result.concat(this.inline.ruler2.disable(list, true));\n\n var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n }\n return this;\n};\n\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n * .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n * });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n var args = [ this ].concat(Array.prototype.slice.call(arguments, 1));\n plugin.apply(plugin, args);\n return this;\n};\n\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n if (typeof src !== 'string') {\n throw new Error('Input data should be a String');\n }\n\n var state = new this.core.State(src, this, env);\n\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parse(src, env), this.options, env);\n};\n\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n var state = new this.core.State(src, this, env);\n\n state.inlineMode = true;\n this.core.process(state);\n\n return state.tokens;\n};\n\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n env = env || {};\n\n return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\n\nmodule.exports = MarkdownIt;\n", "// Generated by PEG.js v0.11.0-master.b7b87ea, https://pegjs.org/\n\n'use strict';\n\nfunction peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = 'SyntaxError';\n\n // istanbul ignore next\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\npeg$SyntaxError.buildMessage = function (expected, found, location) {\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 + ']';\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 not: function (expectation) {\n return 'not ' + describeExpectation(expectation.expected);\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) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\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) {\n return '\\\\x0' + hex(ch);\n })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return '\\\\x' + hex(ch);\n });\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 (\n descriptions.slice(0, -1).join(', ') +\n ', or ' +\n descriptions[descriptions.length - 1]\n );\n }\n }\n\n function describeFound(found) {\n return found ? '\"' + literalEscape(found) + '\"' : 'end of input';\n }\n\n return (\n 'Expected ' +\n describeExpected(expected) +\n ' but ' +\n describeFound(found) +\n ' found.'\n );\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n\n var peg$startRuleFunctions = { Top: peg$parseTop };\n var peg$startRuleFunction = peg$parseTop;\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 = 'null';\n var peg$c10 = 'true';\n var peg$c11 = 'false';\n var peg$c12 = '{';\n var peg$c13 = '}';\n var peg$c14 = ':';\n var peg$c15 = '-';\n var peg$c16 = '\"';\n var peg$c17 = '\\\\';\n\n var peg$r0 = /^[$@]/;\n var peg$r1 = /^[0-9]/;\n var peg$r2 = /^[^\\0-\\x1F\"\\\\]/;\n var peg$r3 = /^[a-zA-Z0-9_\\-]/;\n var peg$r4 = /^[ \\n\\t]/;\n\n var peg$e0 = peg$literalExpectation('/', false);\n var peg$e1 = peg$otherExpectation('tag name');\n var peg$e2 = peg$otherExpectation('class');\n var peg$e3 = peg$otherExpectation('id');\n var peg$e4 = peg$literalExpectation('=', false);\n var peg$e5 = peg$literalExpectation('(', false);\n var peg$e6 = peg$literalExpectation(')', false);\n var peg$e7 = peg$literalExpectation(',', false);\n var peg$e8 = peg$otherExpectation('variable');\n var peg$e9 = peg$otherExpectation('null');\n var peg$e10 = peg$otherExpectation('boolean');\n var peg$e11 = peg$literalExpectation('[', false);\n var peg$e12 = peg$literalExpectation(']', false);\n var peg$e13 = peg$literalExpectation('{', false);\n var peg$e14 = peg$literalExpectation('}', false);\n var peg$e15 = peg$literalExpectation(':', false);\n var peg$e16 = peg$otherExpectation('number');\n var peg$e17 = peg$otherExpectation('string');\n var peg$e18 = peg$otherExpectation('identifier');\n var peg$e19 = peg$otherExpectation('whitespace');\n\n var peg$f0 = function (variable) {\n return { type: 'variable', meta: { variable } };\n };\n var peg$f1 = function (attributes) {\n return { type: 'annotation', meta: { attributes } };\n };\n var peg$f2 = function (tag, value) {\n return value;\n };\n var peg$f3 = function (tag, primary, attributes, close) {\n if (primary) {\n attributes = attributes || [];\n attributes.unshift({\n type: 'attribute',\n name: 'primary',\n value: primary,\n });\n }\n\n const [type, nesting] = close ? ['tag', 0] : ['tag_open', 1];\n return { type, nesting, meta: { tag, attributes } };\n };\n var peg$f4 = function (tag) {\n return { type: 'tag_close', nesting: -1, meta: { tag } };\n };\n var peg$f5 = function (head, tail) {\n return !head ? [] : [head, ...tail];\n };\n var peg$f6 = function (item) {\n return item;\n };\n var peg$f7 = function (ids) {\n return ids;\n };\n var peg$f8 = function (classes) {\n return classes;\n };\n var peg$f9 = function (attribute) {\n return attribute;\n };\n var peg$f10 = function (name) {\n return { type: 'class', name, value: true };\n };\n var peg$f11 = function (value) {\n return { type: 'attribute', name: 'id', value };\n };\n var peg$f12 = function (name, value) {\n return { type: 'attribute', name, value };\n };\n var peg$f13 = function (name, head, tail) {\n return head ? [head, ...tail] : [];\n };\n var peg$f14 = function (name, params) {\n let parameters = {};\n for (let [index, { name, value }] of params.entries())\n parameters[name || index] = value;\n return new Function(name, parameters);\n };\n var peg$f15 = function (name) {\n return name;\n };\n var peg$f16 = function (name, value) {\n return { name, value };\n };\n var peg$f17 = function (value) {\n return value;\n };\n var peg$f18 = function (prefix, head, tail) {\n if (prefix === '@') return [head, ...tail];\n return new Variable([head, ...tail]);\n };\n var peg$f19 = function () {\n return null;\n };\n var peg$f20 = function () {\n return true;\n };\n var peg$f21 = function () {\n return false;\n };\n var peg$f22 = function (head, tail) {\n return [head, ...tail];\n };\n var peg$f23 = function (value) {\n return value || [];\n };\n var peg$f24 = function (head, tail) {\n return Object.assign(head, ...tail);\n };\n var peg$f25 = function (value) {\n return value || {};\n };\n var peg$f26 = function (key, value) {\n return key === '$$mdtype' ? {} : { [key]: value };\n };\n var peg$f27 = function () {\n return parseFloat(text());\n };\n var peg$f28 = function (value) {\n return value.join('');\n };\n var peg$f29 = function (sequence) {\n return sequence;\n };\n\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$expected = [];\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(\n 'Can\\'t start parsing from rule \"' + options.startRule + '\".'\n );\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 [peg$savedPos, peg$currPos];\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location =\n 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 =\n 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 {\n type: 'class',\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase,\n };\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 var peg$VALIDFILENAME =\n typeof options.filename === 'string' && options.filename.length > 0;\n function peg$computeLocation(startPos, endPos) {\n var loc = {};\n\n if (peg$VALIDFILENAME) loc.filename = options.filename;\n\n var startPosDetails = peg$computePosDetails(startPos);\n loc.start = {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column,\n };\n\n var endPosDetails = peg$computePosDetails(endPos);\n loc.end = {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column,\n };\n\n return loc;\n }\n\n function peg$begin() {\n peg$expected.push({ pos: peg$currPos, variants: [] });\n }\n\n function peg$expect(expected) {\n var top = peg$expected[peg$expected.length - 1];\n\n if (peg$currPos < top.pos) {\n return;\n }\n\n if (peg$currPos > top.pos) {\n top.pos = peg$currPos;\n top.variants = [];\n }\n\n top.variants.push(expected);\n }\n\n function peg$end(invert) {\n var expected = peg$expected.pop();\n var top = peg$expected[peg$expected.length - 1];\n var variants = expected.variants;\n\n if (top.pos !== expected.pos) {\n return;\n }\n\n if (invert) {\n variants = variants.map(function (e) {\n return e.type === 'not' ? e.expected : { type: 'not', expected: e };\n });\n }\n\n Array.prototype.push.apply(top.variants, variants);\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, location),\n expected,\n found,\n location\n );\n }\n\n function peg$buildError() {\n var expected = peg$expected[0];\n var failPos = expected.pos;\n\n return peg$buildStructuredError(\n expected.variants,\n failPos < input.length ? input.charAt(failPos) : null,\n failPos < input.length\n ? peg$computeLocation(failPos, failPos + 1)\n : peg$computeLocation(failPos, failPos)\n );\n }\n\n function peg$parseTop() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseTopLevelValue();\n if (s0 === peg$FAILED) {\n s0 = peg$parseAnnotation();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagOpen();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTagClose();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseTopLevelValue() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseVariable();\n if (s1 === peg$FAILED) {\n s1 = peg$parseFunction();\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseAnnotation() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributes();\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 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$parseTagOpen() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagName();\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$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n peg$savedPos = s3;\n s3 = peg$f2(s1, s4);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseTagAttributes();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n s6 = peg$parse_();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parse_();\n }\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s6 = peg$c0;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s3, s4, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagClose() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e0);\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagName();\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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTagName() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e1);\n peg$silentFails++;\n s0 = peg$parseIdentifier();\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttributes() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagAttributesItem();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseTagAttributesTail();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseTagAttributesTail();\n }\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$parseTagAttributesTail() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagAttributesItem();\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$parseTagAttributesItem() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutId();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f7(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagShortcutClass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagAttribute();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f9(s1);\n }\n s0 = s1;\n }\n }\n\n return s0;\n }\n\n function peg$parseTagShortcutClass() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e2);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagShortcutId() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e3);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\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 peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseTagAttribute() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseValue();\n if (s3 !== 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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunction() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e5);\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c4;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$currPos;\n s5 = peg$parseFunctionParameter();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s6 = [];\n s7 = peg$parseFunctionParameterTail();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parseFunctionParameterTail();\n }\n peg$savedPos = s4;\n s4 = peg$f13(s1, s5, s6);\n rule$expects(peg$e6);\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c5;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s1, 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 return s0;\n }\n\n function peg$parseFunctionParameter() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n rule$expects(peg$e4);\n if (input.charCodeAt(peg$currPos) === 61) {\n s3 = peg$c3;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f15(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 s1 = null;\n }\n s2 = peg$parseValue();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFunctionParameterTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\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 rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$parseFunctionParameter();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\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$parseTrailingComma() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\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 rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\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 if (s0 === peg$FAILED) {\n s0 = null;\n }\n\n return s0;\n }\n\n function peg$parseVariable() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e8);\n peg$silentFails++;\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 }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseVariableTail();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseVariableTail();\n }\n peg$savedPos = s0;\n s0 = peg$f18(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 peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseVariableTail() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\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 if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseValueNumber();\n if (s2 === peg$FAILED) {\n s2 = peg$parseValueString();\n }\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 }\n if (s3 !== 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 } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseValue() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$parseValueNull();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueBoolean();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueString();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueArray();\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueHash();\n if (s0 === peg$FAILED) {\n s0 = peg$parseFunction();\n if (s0 === peg$FAILED) {\n s0 = peg$parseVariable();\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseValueNull() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e9);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c9) {\n s1 = peg$c9;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19();\n }\n s0 = s1;\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueBoolean() {\n var s0, s1;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e10);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c10) {\n s1 = peg$c10;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f20();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c11) {\n s1 = peg$c11;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f21();\n }\n s0 = s1;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueArray() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e11);\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\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$currPos;\n s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueArrayTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueArrayTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f22(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e12);\n if (input.charCodeAt(peg$currPos) === 93) {\n s5 = peg$c8;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(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$parseValueArrayTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\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 rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s4);\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$parseValueHash() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n rule$expects(peg$e13);\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\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$currPos;\n s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseValueHashTail();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseValueHashTail();\n }\n s6 = peg$parseTrailingComma();\n peg$savedPos = s3;\n s3 = peg$f24(s4, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n rule$expects(peg$e14);\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n }\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\n return s0;\n }\n\n function peg$parseValueHashTail() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\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 rule$expects(peg$e7);\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$parseValueHashItem();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s4);\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$parseValueHashItem() {\n var s0, s1, s2, s3, s4;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 === peg$FAILED) {\n s1 = peg$parseValueString();\n }\n if (s1 !== peg$FAILED) {\n rule$expects(peg$e15);\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c14;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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 s4 = peg$parseValue();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f26(s1, 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 return s0;\n }\n\n function peg$parseValueNumber() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e16);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\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 }\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 }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\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 }\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 }\n }\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 s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f27();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueString() {\n var s0, s1, s2, s3;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e17);\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseValueStringChars();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseValueStringChars();\n }\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c16;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\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$silentFails--;\n\n return s0;\n }\n\n function peg$parseValueStringChars() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\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 }\n if (s0 === peg$FAILED) {\n s0 = peg$parseValueStringEscapes();\n }\n\n return s0;\n }\n\n function peg$parseValueStringEscapes() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c17;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s2 = peg$c16;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c17;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n }\n if (s2 !== 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\n return s0;\n }\n\n function peg$parseIdentifier() {\n var s0, s1, s2;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e18);\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\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\n return s0;\n }\n\n function peg$parse_() {\n var s0;\n\n var rule$expects = function (expected) {\n if (peg$silentFails === 0) peg$expect(expected);\n };\n\n rule$expects(peg$e19);\n peg$silentFails++;\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n\n return s0;\n }\n\n const { Variable, Function } = options;\n\n peg$begin();\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$expect(peg$endExpectation());\n }\n\n throw peg$buildError();\n }\n}\n\nmodule.exports = {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse,\n};\n", "// Process ^superscript^\n\n'use strict';\n\n// same as UNESCAPE_MD_RE plus a space\nvar UNESCAPE_RE = /\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;\n\nfunction superscript(state, silent) {\n var found,\n content,\n token,\n max = state.posMax,\n start = state.pos;\n\n if (state.src.charCodeAt(start) !== 0x5E/* ^ */) { return false; }\n if (silent) { return false; } // don't run any pairs in validation mode\n if (start + 2 >= max) { return false; }\n\n state.pos = start + 1;\n\n while (state.pos < max) {\n if (state.src.charCodeAt(state.pos) === 0x5E/* ^ */) {\n found = true;\n break;\n }\n\n state.md.inline.skipToken(state);\n }\n\n if (!found || start + 1 === state.pos) {\n state.pos = start;\n return false;\n }\n\n content = state.src.slice(start + 1, state.pos);\n\n // don't allow unescaped spaces/newlines inside\n if (content.match(/(^|[^\\\\])(\\\\\\\\)*\\s/)) {\n state.pos = start;\n return false;\n }\n\n // found!\n state.posMax = state.pos;\n state.pos = start + 1;\n\n // Earlier we checked !silent, but this implementation does not need it\n token = state.push('sup_open', 'sup', 1);\n token.markup = '^';\n\n token = state.push('text', '', 0);\n token.content = content.replace(UNESCAPE_RE, '$1');\n\n token = state.push('sup_close', 'sup', -1);\n token.markup = '^';\n\n state.pos = state.posMax + 1;\n state.posMax = max;\n return true;\n}\n\n\nmodule.exports = function sup_plugin(md) {\n md.inline.ruler.after('emphasis', 'sup', superscript);\n};\n", "'use strict';\n\n\nmodule.exports = require('./lib/');\n", "import MarkdownIt from 'markdown-it/lib';\nimport annotations from './plugins/annotations';\nimport frontmatter from './plugins/frontmatter';\nimport type Token from 'markdown-it/lib/token';\n\nexport default class Tokenizer {\n private parser: MarkdownIt;\n\n constructor(\n config: MarkdownIt.Options & { allowIndentation?: boolean } = {}\n ) {\n this.parser = new MarkdownIt(config);\n this.parser.use(annotations, 'annotations', {});\n this.parser.use(frontmatter, 'frontmatter', {});\n this.parser.use(require('markdown-it-sup'))\n this.parser.disable('lheading');\n }\n\n tokenize(content: string): Token[] {\n return this.parser.parse(content.toString(), {});\n }\n}\n", "import { parse, SyntaxError } from './grammar/tag';\nimport Variable from './ast/variable';\nimport Function from './ast/function';\n\nimport type Token from 'markdown-it/lib/token';\n\nenum STATES {\n normal,\n string,\n escape,\n}\n\nexport const OPEN = '{%';\nexport const CLOSE = '%}';\n\nexport function findTagEnd(content: string, start = 0) {\n let state = STATES.normal;\n for (let pos = start; pos < content.length; pos++) {\n const char = content[pos];\n\n switch (state) {\n case STATES.string:\n switch (char) {\n case '\"':\n state = STATES.normal;\n break;\n case '\\\\':\n state = STATES.escape;\n break;\n }\n break;\n case STATES.escape:\n state = STATES.string;\n break;\n case STATES.normal:\n if (char === '\"') state = STATES.string;\n else if (content.startsWith(CLOSE, pos)) return pos;\n }\n }\n}\n\nfunction parseTag(content: string, line: number, contentStart: number) {\n try {\n return parse(content, { Variable, Function });\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = {\n start: { line, character: start.offset + contentStart },\n end: { line: line + 1, character: end.offset + contentStart },\n };\n\n return { type: 'error', meta: { error: { message, location } } };\n }\n}\n\nexport function parseTags(content: string, firstLine = 0): Token[] {\n let line = firstLine + 1;\n const output = [];\n let start = 0;\n\n for (let pos = 0; pos < content.length; pos++) {\n if (content[pos] === '\\n') {\n line++;\n continue;\n }\n\n if (!content.startsWith(OPEN, pos)) continue;\n\n const end = findTagEnd(content, pos) || 0;\n const text = content.slice(pos, end + CLOSE.length);\n const inner = content.slice(pos + OPEN.length, end);\n const lineStart = content.lastIndexOf('\\n', pos);\n const lineEnd = content.indexOf('\\n', end);\n const lineContent = content.slice(lineStart, lineEnd);\n const tag = parseTag(inner.trim(), line, pos - lineStart);\n\n // Throw away excess whitespace introduced by block-level tags\n const precedingTextEnd = lineContent.trim() === text ? lineStart : pos;\n const precedingText = content.slice(start, precedingTextEnd);\n\n output.push({\n type: 'text',\n start,\n end: pos - 1,\n content: precedingText,\n });\n\n output.push({\n map: [line, line + 1],\n position: {\n start: pos - lineStart,\n end: pos - lineStart + text.length,\n },\n start: pos,\n end: pos + text.length - 1,\n info: text,\n ...tag,\n });\n\n start = end + CLOSE.length;\n pos = start - 1;\n }\n\n output.push({\n type: 'text',\n start,\n end: content.length - 1,\n content: content.slice(start),\n });\n\n return output;\n}\n", "import type { Config, AstType } from '../types';\n\nexport default class Variable implements AstType {\n readonly $$mdtype = 'Variable';\n\n path;\n\n constructor(path: (string | number)[] = []) {\n this.path = path;\n }\n\n resolve({ variables }: Config = {}) {\n return variables instanceof Function\n ? variables(this.path)\n : this.path.reduce((obj = {}, key) => obj[key], variables);\n }\n}\n", "import type {\n AstType,\n Config,\n Function as AstFunction,\n Scalar,\n} from '../types';\n\nexport function isAst(value?: any): value is AstType {\n return !!value?.$$mdtype;\n}\n\nexport function isFunction(value?: any): value is AstFunction {\n return !!(value?.$$mdtype === 'Function');\n}\n\nexport function* getAstValues(value: any): Generator<AstType, void, unknown> {\n if (value == null || typeof value !== 'object') return;\n\n if (Array.isArray(value)) for (const v of value) yield* getAstValues(v);\n\n if (isAst(value)) yield value;\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return;\n\n for (const v of Object.values(value)) yield* getAstValues(v);\n}\n\nexport function resolve(value: any, config: Config = {}): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => resolve(item, config));\n\n if (isAst(value) && value?.resolve instanceof Function)\n return value.resolve(config);\n\n if (Object.getPrototypeOf(value) !== Object.prototype) return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = resolve(v, config);\n return output;\n}\n", "import { resolve } from './base';\nimport type { Config, AstType } from '../types';\n\nexport default class Function implements AstType {\n readonly $$mdtype = 'Function';\n\n name;\n parameters;\n\n constructor(name: string, parameters: Record<string, any>) {\n this.name = name;\n this.parameters = parameters;\n }\n\n resolve(config: Config = {}) {\n const fn = config?.functions?.[this.name];\n if (!fn) return null;\n\n const parameters = resolve(this.parameters, config);\n return fn.transform?.(parameters, config);\n }\n}\n", "import { findTagEnd, parseTags } from '../../utils';\nimport { parse, SyntaxError } from '../../grammar/tag';\nimport Variable from '../../ast/variable';\nimport Function from '../../ast/function';\n\nimport type { AttributeValue } from '../../types';\nimport type MarkdownIt from 'markdown-it/lib';\nimport type StateCore from 'markdown-it/lib/rules_core/state_core';\nimport type StateInline from 'markdown-it/lib/rules_inline/state_inline';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\nimport type Token from 'markdown-it/lib/token';\n\nimport { OPEN, CLOSE } from '../../utils';\n\nfunction createToken(\n state: StateBlock | StateInline,\n content: string,\n contentStart?: number\n): Token {\n try {\n const { type, meta, nesting = 0 } = parse(content, { Variable, Function });\n const token = state.push(type, '', nesting);\n token.info = content;\n token.meta = meta;\n\n return token;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n\n const {\n message,\n location: { start, end },\n } = error as SyntaxError;\n const location = contentStart\n ? {\n start: { offset: start.offset + contentStart },\n end: { offset: end.offset + contentStart },\n }\n : null;\n\n const token = state.push('error', '', 0);\n token.meta = { error: { message, location } };\n return token;\n }\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n const start = state.bMarks[startLine] + state.tShift[startLine];\n const finish = state.eMarks[startLine];\n\n if (!state.src.startsWith(OPEN, start)) return false;\n\n const tagEnd = findTagEnd(state.src, start);\n const lastPossible = state.src.slice(0, finish).trim().length;\n\n if (!tagEnd || tagEnd < lastPossible - CLOSE.length) return false;\n\n const contentStart = start + OPEN.length;\n const content = state.src.slice(contentStart, tagEnd).trim();\n const lines = content.split('\\n').length;\n\n if (content[0] === '$') return false;\n\n if (silent) return true;\n\n const token = createToken(state, content, contentStart);\n token.map = [startLine, startLine + lines];\n state.line += lines;\n return true;\n}\n\nfunction inline(state: StateInline, silent: boolean): boolean {\n if (!state.src.startsWith(OPEN, state.pos)) return false;\n\n const tagEnd = findTagEnd(state.src, state.pos);\n if (!tagEnd) return false;\n\n const content = state.src.slice(state.pos + OPEN.length, tagEnd);\n if (!silent) createToken(state, content.trim());\n\n state.pos = tagEnd + CLOSE.length;\n return true;\n}\n\nfunction core(state: StateCore) {\n let token: Token;\n for (token of state.tokens) {\n if (token.type !== 'fence') continue;\n\n if (token.info.includes(OPEN)) {\n const start = token.info.indexOf(OPEN);\n const end = findTagEnd(token.info, start);\n const content = token.info.slice(start + OPEN.length, end);\n\n try {\n const { meta } = parse(content.trim(), { Variable, Function });\n token.meta = meta;\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n if (!token.errors) token.errors = [];\n token.errors.push({\n id: 'fence-tag-error',\n level: 'error',\n message: `Syntax error in fence tag: ${\n (error as SyntaxError).message\n }`,\n });\n }\n }\n\n if (\n token?.meta?.attributes?.find(\n (attr: AttributeValue) => attr.name === 'process' && !attr.value\n )\n )\n continue;\n\n token.children = parseTags(token.content, token.map[0]);\n }\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('paragraph', 'annotations', block, {\n alt: ['paragraph', 'blockquote'],\n });\n md.inline.ruler.push('containers', inline);\n md.core.ruler.push('annotations', core);\n}\n", "import type MarkdownIt from 'markdown-it/lib';\nimport type StateBlock from 'markdown-it/lib/rules_block/state_block';\n\nconst fence = '---';\n\nfunction getLine(state: StateBlock, n: number) {\n return state.src.slice(state.bMarks[n], state.eMarks[n]).trim();\n}\n\nfunction findClose(state: StateBlock, endLine: number) {\n for (let line = 1; line < endLine; line++)\n if (getLine(state, line) === fence) return line;\n}\n\nfunction block(\n state: StateBlock,\n startLine: number,\n endLine: number,\n silent: boolean\n): boolean {\n if (startLine != 0 || getLine(state, 0) != fence) return false;\n\n const close = findClose(state, endLine);\n\n if (!close) return false;\n if (silent) return true;\n\n const token = state.push('frontmatter', '', 0);\n token.content = state.src.slice(state.eMarks[0], state.bMarks[close]).trim();\n token.map = [0, close];\n token.hidden = true;\n\n state.line = close + 1;\n return true;\n}\n\nexport default function plugin(md: MarkdownIt /* options */) {\n md.block.ruler.before('hr', 'frontmatter', block);\n}\n", "import type { RenderableTreeNode } from '../types';\n\nexport default class Tag {\n readonly $$mdtype = 'Tag' as const;\n\n name: string;\n attributes: Record<string, any>;\n children: RenderableTreeNode[];\n\n constructor(\n name = 'div',\n attributes = {},\n children: RenderableTreeNode[] = []\n ) {\n this.name = name;\n this.attributes = attributes;\n this.children = children;\n }\n}\n", "import { CustomAttributeTypeInterface, ValidationError } from '../types';\n\nexport class Class implements CustomAttributeTypeInterface {\n validate(value: any): ValidationError[] {\n if (typeof value === 'string' || typeof value === 'object') return [];\n\n return [\n {\n id: 'attribute-type-invalid',\n level: 'error',\n message: `Attribute 'class' must be type 'string | object'`,\n },\n ];\n }\n\n transform(value: any) {\n if (!value || typeof value === 'string') return value;\n\n const classes = [];\n for (const [k, v] of Object.entries(value ?? {})) if (v) classes.push(k);\n return classes.join(' ');\n }\n}\n", "import Tag from './ast/tag';\nimport { Class } from './schema-types/class';\nimport type {\n Config,\n Node,\n NodeType,\n Schema,\n RenderableTreeNode,\n RenderableTreeNodes,\n} from './types';\n\ntype AttributesSchema = Schema['attributes'];\n\nexport const globalAttributes: AttributesSchema = {\n class: { type: Class, render: true },\n id: { type: String, render: true },\n};\n\nexport interface Transformer {\n findSchema(node: Node, config: Config): Schema | undefined;\n node(node: Node, config: Config): RenderableTreeNodes;\n attributes(node: Node, config: Config): Record<string, any>;\n children(node: Node, config: Config): RenderableTreeNode[];\n}\n\nexport default {\n findSchema(node: Node, { nodes = {}, tags = {} }: Config = {}) {\n return node.tag ? tags[node.tag] : nodes[node.type as NodeType];\n },\n\n attributes(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n const output: Record<string, any> = {};\n\n const attrs = { ...globalAttributes, ...schema.attributes };\n for (const [key, attr] of Object.entries(attrs)) {\n if (attr.render == false) continue;\n\n const name = typeof attr.render === 'string' ? attr.render : key;\n\n let value = node.attributes[key];\n if (typeof attr.type === 'function') {\n const instance: any = new attr.type();\n if (instance.transform) {\n value = instance.transform(value, config);\n }\n }\n value = value === undefined ? attr.default : value;\n\n if (value === undefined) continue;\n output[name] = value;\n }\n\n return output;\n },\n\n children(node: Node, config: Config = {}) {\n return node.children.flatMap((child) => this.node(child, config));\n },\n\n node(node: Node, config: Config = {}) {\n const schema = this.findSchema(node, config) ?? {};\n if (schema && schema.transform instanceof Function)\n return schema.transform(node, config);\n\n const children = this.children(node, config);\n if (!schema || !schema.render) return children;\n\n const attributes = this.attributes(node, config);\n return new Tag(schema.render, attributes, children);\n },\n} as Transformer;\n", "import { resolve } from './base';\nimport transformer from '../transformer';\nimport type {\n AstType,\n Location,\n Config,\n RenderableTreeNode,\n RenderableTreeNodes,\n Schema,\n ValidationError,\n} from '../types';\n\nexport default class Node implements AstType {\n readonly $$mdtype = 'Node';\n\n attributes: Record<string, any>;\n children: Node[];\n errors: ValidationError[] = [];\n lines: number[] = [];\n type: string;\n tag?: string;\n\n inline = false;\n location?: Location;\n\n constructor(\n type = 'node',\n attributes: Record<string, any> = {},\n children: Node[] = [],\n tag?: string\n ) {\n this.attributes = attributes;\n this.children = children;\n this.type = type;\n this.tag = tag;\n }\n\n *walk(): Generator<Node, void, unknown> {\n for (const child of this.children) {\n yield child;\n yield* child.walk();\n }\n }\n\n push(node: Node) {\n this.children.push(node);\n }\n\n resolve(config: Config = {}): Node {\n return Object.assign(new Node(), this, {\n children: this.children.map((child) => child.resolve(config)),\n attributes: resolve(this.attributes, config),\n });\n }\n\n findSchema(config: Config = {}): Schema | undefined {\n return transformer.findSchema(this, config);\n }\n\n transformAttributes(config: Config = {}) {\n return transformer.attributes(this, config);\n }\n\n transformChildren(config: Config): RenderableTreeNode[] {\n return transformer.children(this, config);\n }\n\n transform(config: Config): RenderableTreeNodes {\n return transformer.node(this, config);\n }\n}\n", "import Node from './node';\nimport Function from './function';\nimport Variable from './variable';\nimport * as base from './base';\n\nimport type { AstType } from '../types';\n\nconst AstTypes = {\n Function,\n Node,\n Variable,\n};\n\nfunction reviver(_: string, value: AstType): any {\n if (!value) return value;\n const klass = AstTypes[value.$$mdtype] as any;\n return klass ? Object.assign(new klass(), value) : value;\n}\n\nfunction fromJSON(text: string): Node | Node[] {\n return JSON.parse(text, reviver);\n}\n\nexport default {\n ...AstTypes,\n ...base,\n fromJSON,\n};\n", "import Ast from '../ast/index';\n\nimport type { Node } from '../types';\n\nfunction convertToRow(node: Node, cellType = 'td') {\n node.type = 'tr';\n node.attributes = {};\n\n for (const cell of node.children) cell.type = cellType;\n\n return node;\n}\n\nexport default function transform(document: Node) {\n for (const node of document.walk()) {\n if (node.type !== 'tag' || node.tag !== 'table') continue;\n\n const [first, ...rest] = node.children;\n if (!first || first.type === 'table') continue;\n\n const table = new Ast.Node('table', node.attributes, [\n new Ast.Node('thead'),\n new Ast.Node('tbody'),\n ]);\n\n const [thead, tbody] = table.children;\n\n if (first.type === 'list') thead.push(convertToRow(first, 'th'));\n\n for (const row of rest) {\n // Convert lists to rows with special-case support for conditionals\n // When a conditional is encountered, convert all of its top-level lists to rows\n if (row.type === 'list') convertToRow(row);\n else if (row.type === 'tag' && row.tag == 'if') {\n const children = [];\n\n for (const child of row.children) {\n // Replace children and skip HRs in order to support conditionals with multiple rows\n if (child.type === 'hr') continue;\n if (child.type === 'list') convertToRow(child);\n children.push(child);\n }\n\n row.children = children;\n } else continue;\n tbody.push(row);\n }\n\n node.children = [table];\n }\n}\n", "import table from './table';\nexport default [table];\n", "import Node from './ast/node';\nimport transforms from './transforms/index';\n\nimport type { AttributeValue } from './types';\n\nimport type Token from 'markdown-it/lib/token';\n\nconst mappings: Record<string, string> = {\n ordered_list: 'list',\n bullet_list: 'list',\n code_inline: 'code',\n list_item: 'item',\n variable: 'text',\n html_block: 'html',\n html_inline: 'html',\n};\n\nfunction annotate(node: Node, attributes: AttributeValue[]) {\n for (const { name, value, type } of attributes)\n if (type === 'attribute') node.attributes[name] = value;\n else if (type === 'class')\n if (node.attributes.class) node.attributes.class[name] = value;\n else node.attributes.class = { [name]: value };\n}\n\nfunction handleAttrs(token: Token, type: string) {\n switch (type) {\n case 'heading':\n return { level: Number(token.tag.replace('h', '')) };\n case 'list':\n return { ordered: token.type.startsWith('ordered') };\n case 'link': {\n const attrs = Object.fromEntries(token.attrs);\n return { href: attrs.href };\n }\n case 'image': {\n const attrs = Object.fromEntries(token.attrs);\n return { alt: token.content, src: attrs.src };\n }\n case 'text':\n case 'code':\n case 'html':\n return { content: (token.meta || {}).variable || token.content };\n case 'fence': {\n const [language] = token.info.split(' ', 1);\n return language === ''\n ? { content: token.content }\n : { content: token.content, language };\n }\n default:\n return {};\n }\n}\n\nfunction handleToken(\n token: Token,\n nodes: Node[],\n file?: string,\n inlineParent?: Node\n) {\n if (token.type === 'frontmatter') {\n nodes[0].attributes.frontmatter = token.content;\n return;\n }\n\n if (token.hidden || (token.type === 'text' && token.content === '')) return;\n\n const errors = token.errors || [];\n const parent = nodes[nodes.length - 1];\n const { tag, attributes, error } = token.meta || {};\n\n if (token.type === 'annotation') {\n if (inlineParent) return annotate(inlineParent, attributes);\n\n return parent.errors.push({\n id: 'no-inline-annotations',\n level: 'error',\n message: `Can't apply inline annotations to '${parent.type}'`,\n });\n }\n\n let typeName = token.type.replace(/_(open|close)$/, '');\n if (mappings[typeName]) typeName = mappings[typeName];\n\n if (typeName === 'error') {\n const { message, location } = error;\n errors.push({ id: 'parse-error', level: 'critical', message, location });\n }\n\n if (token.nesting < 0) {\n if (parent.type === typeName) {\n if (parent.lines && token.map) parent.lines.push(...token.map);\n return nodes.pop();\n }\n\n errors.push({\n id: 'missing-opening',\n level: 'critical',\n message: `Node '${typeName}' is missing opening`,\n });\n }\n\n const attrs = handleAttrs(token, typeName);\n const node = new Node(typeName, attrs, undefined, tag || undefined);\n const { position = {} } = token;\n\n node.errors = errors;\n node.lines = token.map || parent.lines || [];\n node.location = {\n file,\n start: {\n line: node.lines[0],\n character: position.start,\n },\n end: {\n line: node.lines[1],\n character: position.end,\n },\n };\n\n if (inlineParent) node.inline = true;\n\n if (attributes && ['tag', 'fence', 'image'].includes(typeName))\n annotate(node, attributes);\n\n parent.push(node);\n if (token.nesting > 0) nodes.push(node);\n\n if (!Array.isArray(token.children)) return;\n\n inlineParent = parent;\n\n nodes.push(node);\n\n const isLeafNode = typeName === 'image';\n if (!isLeafNode) {\n for (const child of token.children)\n handleToken(child, nodes, file, inlineParent);\n }\n\n nodes.pop();\n}\n\nexport default function parser(tokens: Token[], file?: string) {\n const doc = new Node('document');\n const nodes = [doc];\n\n for (const token of tokens) handleToken(token, nodes, file);\n\n if (nodes.length > 1)\n for (const node of nodes.slice(1))\n node.errors.push({\n id: 'missing-closing',\n level: 'critical',\n message: `Node '${node.tag || node.type}' is missing closing`,\n });\n\n for (const transform of transforms) transform(doc);\n\n return doc;\n}\n", "import type { Schema } from './types';\nimport Tag from './ast/tag';\nimport Raw from './ast/raw';\n\nexport const document: Schema = {\n render: 'article',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n frontmatter: { render: false },\n },\n};\n\nexport const heading: Schema = {\n children: ['inline'],\n attributes: {\n level: { type: Number, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n `h${node.attributes['level']}`,\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const paragraph: Schema = {\n render: 'p',\n children: ['inline'],\n};\n\nexport const image: Schema = {\n render: 'img',\n attributes: {\n src: { type: String, required: true },\n alt: { type: String },\n // width/height attributes will need to be to be implemented as an extension to markdown-it\n },\n};\n\nexport const fence: Schema = {\n render: 'pre',\n attributes: {\n content: { type: String, render: false, required: true },\n language: { type: String, render: 'data-language' },\n process: { type: Boolean, render: false, default: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n const children = node.children.length\n ? node.transformChildren(config)\n : [node.attributes.content];\n\n return new Tag('pre', attributes, children);\n },\n};\n\nexport const blockquote: Schema = {\n render: 'blockquote',\n children: [\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const item: Schema = {\n render: 'li',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n};\n\nexport const list: Schema = {\n children: ['item'],\n attributes: {\n ordered: { type: Boolean, render: false, required: true },\n },\n transform(node, config) {\n return new Tag(\n node.attributes.ordered ? 'ol' : 'ul',\n node.transformAttributes(config),\n node.transformChildren(config)\n );\n },\n};\n\nexport const hr: Schema = {\n render: 'hr',\n};\n\nexport const table: Schema = {\n render: 'table',\n};\n\nexport const td: Schema = {\n render: 'td',\n children: [\n 'inline',\n 'heading',\n 'paragraph',\n 'image',\n 'table',\n 'tag',\n 'fence',\n 'blockquote',\n 'list',\n 'hr',\n ],\n attributes: {\n colspan: { type: Number },\n rowspan: { type: Number },\n align: { type: String },\n },\n};\n\nexport const th: Schema = {\n render: 'th',\n attributes: {\n width: { type: Number },\n align: { type: String },\n },\n};\n\nexport const tr: Schema = {\n render: 'tr',\n children: ['th', 'td'],\n};\n\nexport const tbody: Schema = {\n render: 'tbody',\n children: ['tr', 'tag'],\n};\n\nexport const thead: Schema = {\n render: 'thead',\n children: ['tr'],\n};\n\nexport const strong: Schema = {\n render: 'strong',\n children: ['em', 's', 'link', 'code', 'text', 'tag'],\n};\n\nexport const em: Schema = {\n render: 'em',\n children: ['strong', 's', 'link', 'code', 'text', 'tag'],\n};\n\nexport const s: Schema = {\n render: 's',\n children: ['strong', 'em', 'link', 'code', 'text', 'tag'],\n};\n\nexport const inline: Schema = {\n children: [\n 'strong',\n 'em',\n 's',\n 'code',\n 'text',\n 'tag',\n 'link',\n 'image',\n 'hardbreak',\n 'softbreak',\n ],\n};\n\nexport const link: Schema = {\n render: 'a',\n children: ['strong', 'em', 's', 'code', 'text', 'tag'],\n attributes: {\n href: { type: String, required: true },\n title: { type: String },\n },\n};\n\nexport const code: Schema = {\n render: 'code',\n attributes: {\n content: { type: String, render: false, required: true },\n },\n transform(node, config) {\n const attributes = node.transformAttributes(config);\n return new Tag('code', attributes, [node.attributes.content]);\n },\n};\n\nexport const text: Schema = {\n attributes: {\n content: { type: String, required: true },\n },\n transform(node) {\n return node.attributes.content;\n },\n};\n\nexport const hardbreak: Schema = {\n render: 'br',\n};\n\nexport const softbreak: Schema = {\n transform(_node, _config) {\n return ' ';\n },\n};\n\nexport const html: Schema = {\n attributes: {\n content: { type: String, required: true },\n },\n\n transform(node) {\n return node.attributes.content\n ? new Raw(node.attributes.content, node.inline)\n : null;\n },\n};\n\nexport const error = {};\n", "export default class Raw {\n readonly $$mdtype = 'Raw' as const;\n \n content: string;\n inline: boolean;\n \n constructor(content: string, inline: boolean) {\n this.content = content;\n this.inline = inline;\n }\n }", "import type { Node, Schema, Value } from '../types';\n\ntype Condition = { condition: Value; children: Node[] };\n\nexport function truthy(value: any) {\n return value !== false && value !== undefined && value !== null;\n}\n\nfunction renderConditions(node: Node) {\n const conditions: Condition[] = [\n { condition: node.attributes.primary, children: [] },\n ];\n for (const child of node.children) {\n if (child.type === 'tag' && child.tag === 'else')\n conditions.push({\n condition:\n 'primary' in child.attributes ? child.attributes.primary : true,\n children: [],\n });\n else conditions[conditions.length - 1].children.push(child);\n }\n\n return conditions;\n}\n\nexport const tagIf: Schema = {\n attributes: {\n primary: { type: Object, render: false },\n },\n\n transform(node, config) {\n const conditions = renderConditions(node);\n for (const { condition, children } of conditions)\n if (truthy(condition))\n return children.flatMap((child) => child.transform(config));\n return [];\n },\n};\n\nexport const tagElse: Schema = {\n selfClosing: true,\n attributes: {\n primary: { type: Object, render: false },\n },\n};\n", "import type { Node, Config, Schema } from '../types';\n\nexport const partial: Schema = {\n selfClosing: true,\n attributes: {\n file: { type: String, render: false, required: true },\n variables: { type: Object, render: false },\n },\n\n transform(node: Node, config: Config) {\n const { partials = {} } = config;\n const { file, variables } = node.attributes;\n const partial: Node | Node[] = partials[file];\n\n if (!partial) return null;\n\n const scopedConfig = {\n ...config,\n variables: {\n ...config.variables,\n ...variables,\n ['$$partial:filename']: file,\n },\n };\n\n const transformChildren = (part: Node) =>\n part.resolve(scopedConfig).transformChildren(scopedConfig);\n\n return Array.isArray(partial)\n ? partial.flatMap(transformChildren)\n : transformChildren(partial);\n },\n};\n", "import type { Schema } from '../types';\n\nexport const table: Schema = {\n children: ['table'],\n};\n", "import { tagIf, tagElse } from './conditional';\nimport { partial } from './partial';\nimport { table } from './table';\n\nexport default {\n if: tagIf,\n else: tagElse,\n partial,\n table,\n};\n", "import type { ConfigFunction } from '../types';\nimport { truthy } from '../tags/conditional';\n\nconst and: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).every((x) => truthy(x));\n },\n};\n\nconst or: ConfigFunction = {\n transform(parameters) {\n return Object.values(parameters).find((x) => truthy(x)) !== undefined;\n },\n};\n\nconst not: ConfigFunction = {\n parameters: {\n 0: { required: true },\n },\n\n transform(parameters) {\n return !truthy(parameters[0]);\n },\n};\n\nconst equals: ConfigFunction = {\n transform(parameters) {\n const values = Object.values(parameters);\n return values.every((v) => v === values[0]);\n },\n};\n\nconst debug: ConfigFunction = {\n transform(parameters) {\n return JSON.stringify(parameters[0], null, 2);\n },\n};\n\nconst defaultFn: ConfigFunction = {\n transform(parameters) {\n return parameters[0] === undefined ? parameters[1] : parameters[0];\n },\n};\n\nexport default { and, or, not, equals, default: defaultFn, debug };\n", "import MarkdownIt from 'markdown-it';\nimport type { RenderableTreeNodes } from '../types';\nconst { escapeHtml } = MarkdownIt().utils;\n\n// HTML elements that do not have a matching close tag\n// Defined in the HTML standard: https://html.spec.whatwg.org/#void-elements\nconst voidElements = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nexport default function render(node: RenderableTreeNodes): string {\n if (typeof node === 'string') return escapeHtml(node);\n\n if (Array.isArray(node)) return node.map(render).join('');\n\n if (node === null || typeof node !== 'object') return '';\n\n if (node.$$mdtype === 'Raw') return node.content;\n\n const { name, attributes, children = [] } = node;\n\n if (!name) return render(children);\n\n let output = `<${name}`;\n for (const [k, v] of Object.entries(attributes ?? {}))\n output += ` ${k}=\"${escapeHtml(String(v))}\"`;\n output += '>';\n\n if (voidElements.has(name)) return output;\n\n if (children.length) output += render(children);\n output += `</${name}>`;\n\n return output;\n}\n", "import type { ComponentType } from 'react';\n\ntype Component = ComponentType<unknown>;\n\nexport function tagName(\n name: string,\n components: Record<string, Component> | ((string: string) => Component)\n): string | Component {\n return typeof name !== 'string'\n ? 'Fragment'\n : name[0] !== name[0].toUpperCase()\n ? name\n : components instanceof Function\n ? components(name)\n : components[name];\n}\n", "import { tagName } from './shared';\nimport type { createElement, Fragment, ReactNode } from 'react';\nimport type { RenderableTreeNodes, Scalar } from '../../types';\n\ntype ReactShape = Readonly<{\n createElement: typeof createElement;\n Fragment: typeof Fragment;\n}>;\n\nexport default function dynamic(\n node: RenderableTreeNodes,\n React: ReactShape,\n { components = {} } = {},\n raw?: (content: string, inline: boolean) => ReactNode\n) {\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => deepRender(item));\n\n if (['Tag', 'Raw'].includes(value.$$mdtype)) return render(value);\n\n if (typeof value !== 'object') return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = deepRender(v);\n return output;\n }\n\n function render(node: RenderableTreeNodes): ReactNode {\n if (Array.isArray(node))\n return React.createElement(React.Fragment, null, ...node.map(render));\n\n if (node === null || typeof node !== 'object') return node;\n\n if (node.$$mdtype === 'Raw') return raw?.(node.content, node.inline);\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return React.createElement(\n tagName(name, components),\n Object.keys(attrs).length == 0 ? null : deepRender(attrs),\n ...children.map(render)\n );\n }\n\n return render(node);\n}\n", "import { tagName } from './shared';\nimport type { RenderableTreeNode, RenderableTreeNodes } from '../../types';\n\nexport default function reactStatic(\n node: RenderableTreeNodes,\n raw?: (content: string, inline: boolean) => string\n): string {\n function renderArray(children: RenderableTreeNode[]): string {\n return children.map(render).join(', ');\n }\n\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object')\n return JSON.stringify(value);\n\n if (Array.isArray(value))\n return `[${value.map((item) => deepRender(item)).join(', ')}]`;\n\n if (['Tag', 'Raw'].includes(value.$$mdtype)) return render(value);\n\n if (typeof value !== 'object') return JSON.stringify(value);\n\n const object = Object.entries(value)\n .map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(': '))\n .join(', ');\n\n return `{${object}}`;\n }\n\n function render(node: RenderableTreeNodes): string {\n if (Array.isArray(node))\n return `React.createElement(React.Fragment, null, ${renderArray(node)})`;\n\n if (node === null || typeof node !== 'object') return JSON.stringify(node);\n\n if (node.$$mdtype === 'Raw') return raw?.(node.content, node.inline) ?? '';\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return `React.createElement(\n tagName(${JSON.stringify(name)}, components),\n ${Object.keys(attrs).length == 0 ? 'null' : deepRender(attrs)},\n ${renderArray(children)})`;\n }\n\n return `\n (({components = {}} = {}) => {\n ${tagName}\n return ${render(node)};\n })\n`;\n}\n", "import html from './html';\nimport react from './react/react';\nimport reactStatic from './react/static';\n\nexport default { html, react, reactStatic };\n", "import { globalAttributes } from './transformer';\nimport Ast from './ast/index';\n\nimport type {\n Node,\n Function,\n Config,\n SchemaAttribute,\n ValidationError,\n Value,\n} from './types';\n\nconst TypeMappings = {\n String: String,\n Number: Number,\n Array: Array,\n Object: Object,\n Boolean: Boolean,\n} as const;\n\ntype TypeParam = NonNullable<SchemaAttribute['type']>;\n\nexport function validateType(\n type: TypeParam,\n value: Value,\n config: Config\n): boolean | ValidationError[] {\n if (!type) return true;\n\n if (Ast.isFunction(value) && config.validation?.validateFunctions) {\n const schema = config.functions?.[value.name];\n return !schema?.returns\n ? true\n : Array.isArray(schema.returns)\n ? schema.returns.find((t) => t === type) !== undefined\n : schema.returns === type;\n }\n\n if (Ast.isAst(value)) return true;\n\n if (Array.isArray(type))\n return type.some((t) => validateType(t, value, config));\n\n if (typeof type === 'string') type = TypeMappings[type];\n\n if (typeof type === 'function') {\n const instance: any = new type();\n if (instance.validate) {\n return instance.validate(value, config);\n }\n }\n\n return value != null && value.constructor === type;\n}\n\nfunction typeToString(type: TypeParam): string {\n if (typeof type === 'string') return type;\n\n if (Array.isArray(type)) return type.map(typeToString).join(' | ');\n\n return type.name;\n}\n\nfunction validateFunction(fn: Function, config: Config): ValidationError[] {\n const schema = config.functions?.[fn.name];\n const errors: ValidationError[] = [];\n\n if (!schema)\n return [\n {\n id: 'function-undefined',\n level: 'critical',\n message: `Undefined function '${fn.name}'`,\n },\n ];\n\n if (schema.validate) errors.push(...schema.validate(fn, config));\n\n if (schema.parameters) {\n for (const [key, value] of Object.entries(fn.parameters)) {\n const param = schema.parameters?.[key];\n\n if (!param) {\n errors.push({\n id: 'parameter-undefined',\n level: 'error',\n message: `Invalid parameter '${key}'`,\n });\n\n continue;\n }\n\n if (Ast.isAst(value) && !Ast.isFunction(value)) continue;\n\n if (param.type) {\n const valid = validateType(param.type, value, config);\n if (valid === false) {\n errors.push({\n id: 'parameter-type-invalid',\n level: 'error',\n message: `Parameter '${key}' of '${\n fn.name\n }' must be type '${typeToString(param.type)}'`,\n });\n } else if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n }\n }\n\n for (const [key, { required }] of Object.entries(schema.parameters ?? {}))\n if (required && fn.parameters[key] === undefined)\n errors.push({\n id: 'parameter-missing-required',\n level: 'error',\n message: `Missing required parameter '${key}'`,\n });\n\n return errors;\n}\n\nexport default function validate(node: Node, config: Config) {\n const schema = node.findSchema(config);\n const errors: ValidationError[] = [...(node.errors || [])];\n\n if (!schema) {\n errors.push({\n id: node.tag ? 'tag-undefined' : 'node-undefined',\n level: 'critical',\n message: node.tag\n ? `Undefined tag '${node.tag}'`\n : `Undefined node '${node.type}'`,\n });\n\n return errors;\n }\n\n if (schema.selfClosing && node.children.length > 0)\n errors.push({\n id: 'tag-selfclosing-has-children',\n level: 'critical',\n message: `Tag '${node.tag}' should be self-closing`,\n });\n\n const attributes = {\n ...globalAttributes,\n ...schema.attributes,\n };\n\n if (schema.validate) errors.push(...schema.validate(node, config));\n\n for (let [key, value] of Object.entries(node.attributes)) {\n const attrib = attributes[key];\n\n if (!attrib) {\n errors.push({\n id: 'attribute-undefined',\n level: 'error',\n message: `Invalid attribute '${key}'`,\n });\n\n continue;\n }\n\n let { type, matches, errorLevel } = attrib;\n\n if (Ast.isAst(value)) {\n if (Ast.isFunction(value) && config.validation?.validateFunctions)\n errors.push(...validateFunction(value, config));\n else continue;\n }\n\n value = value as string;\n if (key === 'id' && value.match(/^[0-9]/))\n errors.push({\n id: 'attribute-value-invalid',\n level: 'error',\n message: 'The ID attribute must not start with a number',\n });\n\n if (type) {\n const valid = validateType(type, value, config);\n if (valid === false) {\n errors.push({\n id: 'attribute-type-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must be type '${typeToString(type)}'`,\n });\n }\n if (Array.isArray(valid)) {\n errors.push(...valid);\n }\n }\n\n if (typeof matches === 'function') matches = matches(config);\n\n if (Array.isArray(matches) && !matches.includes(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match one of ${JSON.stringify(\n matches\n )}`,\n });\n\n if (matches instanceof RegExp && !matches.test(value))\n errors.push({\n id: 'attribute-value-invalid',\n level: errorLevel || 'error',\n message: `Attribute '${key}' must match ${matches}`,\n });\n }\n\n for (const [key, { required }] of Object.entries(attributes))\n if (required && node.attributes[key] === undefined)\n errors.push({\n id: 'attribute-missing-required',\n level: 'error',\n message: `Missing required attribute '${key}'`,\n });\n\n for (const { type } of node.children) {\n if (schema.children && type !== 'error' && !schema.children.includes(type))\n errors.push({\n id: 'child-invalid',\n level: 'warning',\n message: `Can't nest '${type}' in '${node.tag || node.type}'`,\n });\n }\n\n return errors;\n}\n", "import Tokenizer from './src/tokenizer';\nimport parser from './src/parser';\nimport Node from './src/ast/node';\nimport Tag from './src/ast/tag';\nimport Ast from './src/ast/index';\nimport * as nodes from './src/schema';\nimport tags from './src/tags/index';\nimport { truthy } from './src/tags/conditional';\nimport functions from './src/functions/index';\nimport renderers from './src/renderers/index';\nimport transformer from './src/transformer';\nimport validator from './src/validator';\nimport { parseTags } from './src/utils';\nimport transforms from './src/transforms/index';\nimport Raw from '@markdoc/markdoc/src/ast/raw';\n\nimport type Token from 'markdown-it/lib/token';\nimport type { Config, RenderableTreeNode, ValidateError } from './src/types';\n\nexport * from './src/types';\n\nconst tokenizer = new Tokenizer();\n\nfunction mergeConfig(config: Config = {}): Config {\n return {\n ...config,\n tags: {\n ...tags,\n ...config.tags,\n },\n nodes: {\n ...nodes,\n ...config.nodes,\n },\n functions: {\n ...functions,\n ...config.functions,\n },\n };\n}\n\nexport function parse(content: string | Token[], file?: string): Node {\n if (typeof content === 'string') content = tokenizer.tokenize(content);\n return parser(content, file);\n}\n\nexport function resolve<C extends Config = Config>(\n content: Node,\n config: C\n): Node;\nexport function resolve<C extends Config = Config>(\n content: Node[],\n config: C\n): Node[];\nexport function resolve<C extends Config = Config>(\n content: any,\n config: C\n): any {\n if (Array.isArray(content))\n return content.flatMap((child) => child.resolve(config));\n\n return content.resolve(config);\n}\n\nexport function transform<C extends Config = Config>(\n node: Node,\n config?: C\n): RenderableTreeNode;\nexport function transform<C extends Config = Config>(\n nodes: Node[],\n config?: C\n): RenderableTreeNode[];\nexport function transform<C extends Config = Config>(\n nodes: any,\n options?: C\n): any {\n const config = mergeConfig(options);\n const content = resolve(nodes, config);\n\n if (Array.isArray(content))\n return content.flatMap((child) => child.transform(config));\n return content.transform(config);\n}\n\nexport function validate<C extends Config = Config>(\n content: Node,\n options?: C\n): ValidateError[] {\n const config = mergeConfig(options);\n\n const output = [];\n for (const node of [content, ...content.walk()]) {\n const { type, lines, location } = node;\n const errors = validator(node, config);\n\n for (const error of errors) output.push({ type, lines, location, error });\n }\n\n return output;\n}\n\nexport function createElement(\n name: string | { key?: string | number },\n attributes = {},\n ...children: any[]\n) {\n return { name, attributes, children };\n}\n\nexport default {\n nodes,\n tags,\n functions,\n renderers,\n transforms,\n Ast,\n Tag,\n Raw,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n parse,\n transform,\n validate,\n createElement,\n truthy,\n};\n\nexport {\n nodes,\n tags,\n functions,\n transforms,\n renderers,\n Ast,\n Tag,\n Raw,\n Tokenizer,\n parseTags,\n transformer,\n validator,\n truthy,\n};\n"],
660++ "mappings": "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",
661+ "names": []
662+ }
663+diff --git a/node_modules/@markdoc/markdoc/dist/react.js b/node_modules/@markdoc/markdoc/dist/react.js
664+index 18aebbc..80d39d9 100644
665+--- a/node_modules/@markdoc/markdoc/dist/react.js
666++++ b/node_modules/@markdoc/markdoc/dist/react.js
667+@@ -4,13 +4,13 @@ function tagName(name, components) {
668+ }
669+
670+ // src/renderers/react/react.ts
671+-function dynamic(node, React, { components = {} } = {}) {
672++function dynamic(node, React, { components = {} } = {}, raw) {
673+ function deepRender(value) {
674+ if (value == null || typeof value !== "object")
675+ return value;
676+ if (Array.isArray(value))
677+ return value.map((item) => deepRender(item));
678+- if (value.$$mdtype === "Tag")
679++ if (["Tag", "Raw"].includes(value.$$mdtype))
680+ return render(value);
681+ if (typeof value !== "object")
682+ return value;
683+@@ -24,6 +24,8 @@ function dynamic(node, React, { components = {} } = {}) {
684+ return React.createElement(React.Fragment, null, ...node2.map(render));
685+ if (node2 === null || typeof node2 !== "object")
686+ return node2;
687++ if (node2.$$mdtype === "Raw")
688++ return raw?.(node2.content, node2.inline);
689+ const {
690+ name,
691+ attributes: { class: className, ...attrs } = {},
692+diff --git a/node_modules/@markdoc/markdoc/dist/react.js.map b/node_modules/@markdoc/markdoc/dist/react.js.map
693+index d8e7ba9..9b904eb 100644
694+--- a/node_modules/@markdoc/markdoc/dist/react.js.map
695++++ b/node_modules/@markdoc/markdoc/dist/react.js.map
696+@@ -1,7 +1,7 @@
697+ {
698+ "version": 3,
699+ "sources": ["../src/renderers/react/shared.ts", "../src/renderers/react/react.ts"],
700+- "sourcesContent": ["import type { ComponentType } from 'react';\n\ntype Component = ComponentType<unknown>;\n\nexport function tagName(\n name: string,\n components: Record<string, Component> | ((string: string) => Component)\n): string | Component {\n return typeof name !== 'string'\n ? 'Fragment'\n : name[0] !== name[0].toUpperCase()\n ? name\n : components instanceof Function\n ? components(name)\n : components[name];\n}\n", "import { tagName } from './shared';\nimport type { createElement, Fragment, ReactNode } from 'react';\nimport type { RenderableTreeNodes, Scalar } from '../../types';\n\ntype ReactShape = Readonly<{\n createElement: typeof createElement;\n Fragment: typeof Fragment;\n}>;\n\nexport default function dynamic(\n node: RenderableTreeNodes,\n React: ReactShape,\n { components = {} } = {}\n) {\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => deepRender(item));\n\n if (value.$$mdtype === 'Tag') return render(value);\n\n if (typeof value !== 'object') return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = deepRender(v);\n return output;\n }\n\n function render(node: RenderableTreeNodes): ReactNode {\n if (Array.isArray(node))\n return React.createElement(React.Fragment, null, ...node.map(render));\n\n if (node === null || typeof node !== 'object') return node;\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return React.createElement(\n tagName(name, components),\n Object.keys(attrs).length == 0 ? null : deepRender(attrs),\n ...children.map(render)\n );\n }\n\n return render(node);\n}\n"],
701+- "mappings": ";AAIO,iBACL,MACA,YACoB;AACpB,SAAO,OAAO,SAAS,WACnB,aACA,KAAK,OAAO,KAAK,GAAG,gBACpB,OACA,sBAAsB,WACtB,WAAW,QACX,WAAW;AAAA;;;ACLF,iBACb,MACA,OACA,EAAE,aAAa,OAAO,IACtB;AACA,sBAAoB,OAAiB;AACnC,QAAI,SAAS,QAAQ,OAAO,UAAU;AAAU,aAAO;AAEvD,QAAI,MAAM,QAAQ;AAAQ,aAAO,MAAM,IAAI,CAAC,SAAS,WAAW;AAEhE,QAAI,MAAM,aAAa;AAAO,aAAO,OAAO;AAE5C,QAAI,OAAO,UAAU;AAAU,aAAO;AAEtC,UAAM,SAAiC;AACvC,eAAW,CAAC,GAAG,MAAM,OAAO,QAAQ;AAAQ,aAAO,KAAK,WAAW;AACnE,WAAO;AAAA;AAGT,kBAAgB,OAAsC;AACpD,QAAI,MAAM,QAAQ;AAChB,aAAO,MAAM,cAAc,MAAM,UAAU,MAAM,GAAG,MAAK,IAAI;AAE/D,QAAI,UAAS,QAAQ,OAAO,UAAS;AAAU,aAAO;AAEtD,UAAM;AAAA,MACJ;AAAA,MACA,YAAY,EAAE,OAAO,cAAc,UAAU;AAAA,MAC7C,WAAW;AAAA,QACT;AAEJ,QAAI;AAAW,YAAM,YAAY;AAEjC,WAAO,MAAM,cACX,QAAQ,MAAM,aACd,OAAO,KAAK,OAAO,UAAU,IAAI,OAAO,WAAW,QACnD,GAAG,SAAS,IAAI;AAAA;AAIpB,SAAO,OAAO;AAAA;",
702++ "sourcesContent": ["import type { ComponentType } from 'react';\n\ntype Component = ComponentType<unknown>;\n\nexport function tagName(\n name: string,\n components: Record<string, Component> | ((string: string) => Component)\n): string | Component {\n return typeof name !== 'string'\n ? 'Fragment'\n : name[0] !== name[0].toUpperCase()\n ? name\n : components instanceof Function\n ? components(name)\n : components[name];\n}\n", "import { tagName } from './shared';\nimport type { createElement, Fragment, ReactNode } from 'react';\nimport type { RenderableTreeNodes, Scalar } from '../../types';\n\ntype ReactShape = Readonly<{\n createElement: typeof createElement;\n Fragment: typeof Fragment;\n}>;\n\nexport default function dynamic(\n node: RenderableTreeNodes,\n React: ReactShape,\n { components = {} } = {},\n raw?: (content: string, inline: boolean) => ReactNode\n) {\n function deepRender(value: any): any {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => deepRender(item));\n\n if (['Tag', 'Raw'].includes(value.$$mdtype)) return render(value);\n\n if (typeof value !== 'object') return value;\n\n const output: Record<string, Scalar> = {};\n for (const [k, v] of Object.entries(value)) output[k] = deepRender(v);\n return output;\n }\n\n function render(node: RenderableTreeNodes): ReactNode {\n if (Array.isArray(node))\n return React.createElement(React.Fragment, null, ...node.map(render));\n\n if (node === null || typeof node !== 'object') return node;\n\n if (node.$$mdtype === 'Raw') return raw?.(node.content, node.inline);\n\n const {\n name,\n attributes: { class: className, ...attrs } = {},\n children = [],\n } = node;\n\n if (className) attrs.className = className;\n\n return React.createElement(\n tagName(name, components),\n Object.keys(attrs).length == 0 ? null : deepRender(attrs),\n ...children.map(render)\n );\n }\n\n return render(node);\n}\n"],
703++ "mappings": ";AAIO,iBACL,MACA,YACoB;AACpB,SAAO,OAAO,SAAS,WACnB,aACA,KAAK,OAAO,KAAK,GAAG,gBACpB,OACA,sBAAsB,WACtB,WAAW,QACX,WAAW;AAAA;;;ACLF,iBACb,MACA,OACA,EAAE,aAAa,OAAO,IACtB,KACA;AACA,sBAAoB,OAAiB;AACnC,QAAI,SAAS,QAAQ,OAAO,UAAU;AAAU,aAAO;AAEvD,QAAI,MAAM,QAAQ;AAAQ,aAAO,MAAM,IAAI,CAAC,SAAS,WAAW;AAEhE,QAAI,CAAC,OAAO,OAAO,SAAS,MAAM;AAAW,aAAO,OAAO;AAE3D,QAAI,OAAO,UAAU;AAAU,aAAO;AAEtC,UAAM,SAAiC;AACvC,eAAW,CAAC,GAAG,MAAM,OAAO,QAAQ;AAAQ,aAAO,KAAK,WAAW;AACnE,WAAO;AAAA;AAGT,kBAAgB,OAAsC;AACpD,QAAI,MAAM,QAAQ;AAChB,aAAO,MAAM,cAAc,MAAM,UAAU,MAAM,GAAG,MAAK,IAAI;AAE/D,QAAI,UAAS,QAAQ,OAAO,UAAS;AAAU,aAAO;AAEtD,QAAI,MAAK,aAAa;AAAO,aAAO,MAAM,MAAK,SAAS,MAAK;AAE7D,UAAM;AAAA,MACJ;AAAA,MACA,YAAY,EAAE,OAAO,cAAc,UAAU;AAAA,MAC7C,WAAW;AAAA,QACT;AAEJ,QAAI;AAAW,YAAM,YAAY;AAEjC,WAAO,MAAM,cACX,QAAQ,MAAM,aACd,OAAO,KAAK,OAAO,UAAU,IAAI,OAAO,WAAW,QACnD,GAAG,SAAS,IAAI;AAAA;AAIpB,SAAO,OAAO;AAAA;",
704+ "names": []
705+ }
706+diff --git a/node_modules/@markdoc/markdoc/dist/src/ast/raw.d.ts b/node_modules/@markdoc/markdoc/dist/src/ast/raw.d.ts
707+new file mode 100644
708+index 0000000..d89ea0c
709+--- /dev/null
710++++ b/node_modules/@markdoc/markdoc/dist/src/ast/raw.d.ts
711+@@ -0,0 +1,7 @@
712++export default class Raw {
713++ readonly $$mdtype: "Raw";
714++ content: string;
715++ inline: boolean;
716++ constructor(content: string, inline: boolean);
717++}
718++//# sourceMappingURL=raw.d.ts.map
719+\ No newline at end of file
720+diff --git a/node_modules/@markdoc/markdoc/dist/src/ast/raw.d.ts.map b/node_modules/@markdoc/markdoc/dist/src/ast/raw.d.ts.map
721+new file mode 100644
722+index 0000000..29dd5ef
723+--- /dev/null
724++++ b/node_modules/@markdoc/markdoc/dist/src/ast/raw.d.ts.map
725+@@ -0,0 +1 @@
726++{"version":3,"file":"raw.d.ts","sourceRoot":"","sources":["../../../src/ast/raw.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,GAAG;IACpB,QAAQ,CAAC,QAAQ,QAAkB;IAEnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;gBAEJ,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;CAI7C"}
727+\ No newline at end of file
728+diff --git a/node_modules/@markdoc/markdoc/dist/src/parser.d.ts.map b/node_modules/@markdoc/markdoc/dist/src/parser.d.ts.map
729+index 142cac5..14bd44c 100644
730+--- a/node_modules/@markdoc/markdoc/dist/src/parser.d.ts.map
731++++ b/node_modules/@markdoc/markdoc/dist/src/parser.d.ts.map
732+@@ -1 +1 @@
733+-{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,YAAY,CAAC;AAK9B,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAuI/C,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,QAiB5D"}
734+\ No newline at end of file
735++{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,YAAY,CAAC;AAK9B,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AA0I/C,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,QAiB5D"}
736+\ No newline at end of file
737+diff --git a/node_modules/@markdoc/markdoc/dist/src/renderers/html.d.ts.map b/node_modules/@markdoc/markdoc/dist/src/renderers/html.d.ts.map
738+index 7be1b51..44d71b3 100644
739+--- a/node_modules/@markdoc/markdoc/dist/src/renderers/html.d.ts.map
740++++ b/node_modules/@markdoc/markdoc/dist/src/renderers/html.d.ts.map
741+@@ -1 +1 @@
742+-{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../../src/renderers/html.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAsBpD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAsBhE"}
743+\ No newline at end of file
744++{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../../src/renderers/html.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAsBpD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAwBhE"}
745+\ No newline at end of file
746+diff --git a/node_modules/@markdoc/markdoc/dist/src/renderers/react/react.d.ts b/node_modules/@markdoc/markdoc/dist/src/renderers/react/react.d.ts
747+index 7875013..31545f8 100644
748+--- a/node_modules/@markdoc/markdoc/dist/src/renderers/react/react.d.ts
749++++ b/node_modules/@markdoc/markdoc/dist/src/renderers/react/react.d.ts
750+@@ -6,6 +6,6 @@ declare type ReactShape = Readonly<{
751+ }>;
752+ export default function dynamic(node: RenderableTreeNodes, React: ReactShape, { components }?: {
753+ components?: {} | undefined;
754+-}): ReactNode;
755++}, raw?: (content: string, inline: boolean) => ReactNode): ReactNode;
756+ export {};
757+ //# sourceMappingURL=react.d.ts.map
758+\ No newline at end of file
759+diff --git a/node_modules/@markdoc/markdoc/dist/src/renderers/react/react.d.ts.map b/node_modules/@markdoc/markdoc/dist/src/renderers/react/react.d.ts.map
760+index 45e1f88..a38ac3e 100644
761+--- a/node_modules/@markdoc/markdoc/dist/src/renderers/react/react.d.ts.map
762++++ b/node_modules/@markdoc/markdoc/dist/src/renderers/react/react.d.ts.map
763+@@ -1 +1 @@
764+-{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../../../src/renderers/react/react.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAU,MAAM,aAAa,CAAC;AAE/D,aAAK,UAAU,GAAG,QAAQ,CAAC;IACzB,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,QAAQ,EAAE,OAAO,QAAQ,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,UAAU,OAAO,CAC7B,IAAI,EAAE,mBAAmB,EACzB,KAAK,EAAE,UAAU,EACjB,EAAE,UAAe,EAAE;;CAAK,aAsCzB"}
765+\ No newline at end of file
766++{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../../../src/renderers/react/react.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAU,MAAM,aAAa,CAAC;AAE/D,aAAK,UAAU,GAAG,QAAQ,CAAC;IACzB,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,QAAQ,EAAE,OAAO,QAAQ,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,UAAU,OAAO,CAC7B,IAAI,EAAE,mBAAmB,EACzB,KAAK,EAAE,UAAU,EACjB,EAAE,UAAe,EAAE;;CAAK,EACxB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,SAAS,aAwCtD"}
767+\ No newline at end of file
768+diff --git a/node_modules/@markdoc/markdoc/dist/src/renderers/react/static.d.ts b/node_modules/@markdoc/markdoc/dist/src/renderers/react/static.d.ts
769+index 63f862f..23045ff 100644
770+--- a/node_modules/@markdoc/markdoc/dist/src/renderers/react/static.d.ts
771++++ b/node_modules/@markdoc/markdoc/dist/src/renderers/react/static.d.ts
772+@@ -1,3 +1,3 @@
773+ import type { RenderableTreeNodes } from '../../types';
774+-export default function reactStatic(node: RenderableTreeNodes): string;
775++export default function reactStatic(node: RenderableTreeNodes, raw?: (content: string, inline: boolean) => string): string;
776+ //# sourceMappingURL=static.d.ts.map
777+\ No newline at end of file
778+diff --git a/node_modules/@markdoc/markdoc/dist/src/renderers/react/static.d.ts.map b/node_modules/@markdoc/markdoc/dist/src/renderers/react/static.d.ts.map
779+index f2f9e9f..721699f 100644
780+--- a/node_modules/@markdoc/markdoc/dist/src/renderers/react/static.d.ts.map
781++++ b/node_modules/@markdoc/markdoc/dist/src/renderers/react/static.d.ts.map
782+@@ -1 +1 @@
783+-{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../../../../src/renderers/react/static.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA2C3E,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAOrE"}
784+\ No newline at end of file
785++{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../../../../src/renderers/react/static.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE3E,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,IAAI,EAAE,mBAAmB,EACzB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,MAAM,GACjD,MAAM,CAmDR"}
786+\ No newline at end of file
787+diff --git a/node_modules/@markdoc/markdoc/dist/src/schema.d.ts b/node_modules/@markdoc/markdoc/dist/src/schema.d.ts
788+index 68cebb9..181dfe9 100644
789+--- a/node_modules/@markdoc/markdoc/dist/src/schema.d.ts
790++++ b/node_modules/@markdoc/markdoc/dist/src/schema.d.ts
791+@@ -23,5 +23,6 @@ export declare const code: Schema;
792+ export declare const text: Schema;
793+ export declare const hardbreak: Schema;
794+ export declare const softbreak: Schema;
795++export declare const html: Schema;
796+ export declare const error: {};
797+ //# sourceMappingURL=schema.d.ts.map
798+\ No newline at end of file
799+diff --git a/node_modules/@markdoc/markdoc/dist/src/schema.d.ts.map b/node_modules/@markdoc/markdoc/dist/src/schema.d.ts.map
800+index 5dfd3df..08a856a 100644
801+--- a/node_modules/@markdoc/markdoc/dist/src/schema.d.ts.map
802++++ b/node_modules/@markdoc/markdoc/dist/src/schema.d.ts.map
803+@@ -1 +1 @@
804+-{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGtC,eAAO,MAAM,QAAQ,EAAE,MAgBtB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,MAYrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAGvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAOnB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAenB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAaxB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAclB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAYlB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAEhB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAEnB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAmBhB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAMhB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAGhB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAGnB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAGnB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,MAGpB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAGhB,CAAC;AAEF,eAAO,MAAM,CAAC,EAAE,MAGf,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,MAapB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAOlB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MASlB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAOlB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAEvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAIvB,CAAC;AAEF,eAAO,MAAM,KAAK,IAAK,CAAC"}
805+\ No newline at end of file
806++{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAItC,eAAO,MAAM,QAAQ,EAAE,MAgBtB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,MAYrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAGvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAOnB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAenB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAaxB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAclB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAYlB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAEhB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAEnB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAmBhB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAMhB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAGhB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAGnB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,MAGnB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,MAGpB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,MAGhB,CAAC;AAEF,eAAO,MAAM,CAAC,EAAE,MAGf,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,MAapB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAOlB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MASlB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAOlB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAEvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAIvB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,MAUlB,CAAC;AAEF,eAAO,MAAM,KAAK,IAAK,CAAC"}
807+\ No newline at end of file
808+diff --git a/node_modules/@markdoc/markdoc/dist/src/tags/index.d.ts b/node_modules/@markdoc/markdoc/dist/src/tags/index.d.ts
809+index d93a2df..3af6bfb 100644
810+--- a/node_modules/@markdoc/markdoc/dist/src/tags/index.d.ts
811++++ b/node_modules/@markdoc/markdoc/dist/src/tags/index.d.ts
812+@@ -1,39 +1,39 @@
813+ declare const _default: {
814+- if: import("../types").Schema<Readonly<Partial<{
815+- nodes: Partial<Record<import("../types").NodeType, import("../types").Schema<Readonly<Partial<any>>, string>>>;
816+- tags: Record<string, import("../types").Schema<Readonly<Partial<any>>, string>>;
817++ if: import("@markdoc/markdoc").Schema<Readonly<Partial<{
818++ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>>;
819++ tags: Record<string, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>;
820+ variables: Record<string, any>;
821+- functions: Record<string, import("../types").ConfigFunction>;
822++ functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
823+ partials: Record<string, any>;
824+ validation?: {
825+ validateFunctions?: boolean | undefined;
826+ } | undefined;
827+ }>>, string>;
828+- else: import("../types").Schema<Readonly<Partial<{
829+- nodes: Partial<Record<import("../types").NodeType, import("../types").Schema<Readonly<Partial<any>>, string>>>;
830+- tags: Record<string, import("../types").Schema<Readonly<Partial<any>>, string>>;
831++ else: import("@markdoc/markdoc").Schema<Readonly<Partial<{
832++ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>>;
833++ tags: Record<string, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>;
834+ variables: Record<string, any>;
835+- functions: Record<string, import("../types").ConfigFunction>;
836++ functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
837+ partials: Record<string, any>;
838+ validation?: {
839+ validateFunctions?: boolean | undefined;
840+ } | undefined;
841+ }>>, string>;
842+- partial: import("../types").Schema<Readonly<Partial<{
843+- nodes: Partial<Record<import("../types").NodeType, import("../types").Schema<Readonly<Partial<any>>, string>>>;
844+- tags: Record<string, import("../types").Schema<Readonly<Partial<any>>, string>>;
845++ partial: import("@markdoc/markdoc").Schema<Readonly<Partial<{
846++ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>>;
847++ tags: Record<string, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>;
848+ variables: Record<string, any>;
849+- functions: Record<string, import("../types").ConfigFunction>;
850++ functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
851+ partials: Record<string, any>;
852+ validation?: {
853+ validateFunctions?: boolean | undefined;
854+ } | undefined;
855+ }>>, string>;
856+- table: import("../types").Schema<Readonly<Partial<{
857+- nodes: Partial<Record<import("../types").NodeType, import("../types").Schema<Readonly<Partial<any>>, string>>>;
858+- tags: Record<string, import("../types").Schema<Readonly<Partial<any>>, string>>;
859++ table: import("@markdoc/markdoc").Schema<Readonly<Partial<{
860++ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>>;
861++ tags: Record<string, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>;
862+ variables: Record<string, any>;
863+- functions: Record<string, import("../types").ConfigFunction>;
864++ functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
865+ partials: Record<string, any>;
866+ validation?: {
867+ validateFunctions?: boolean | undefined;
868+diff --git a/node_modules/@markdoc/markdoc/dist/src/tokenizer/index.d.ts.map b/node_modules/@markdoc/markdoc/dist/src/tokenizer/index.d.ts.map
869+index b64c092..9a2cf05 100644
870+--- a/node_modules/@markdoc/markdoc/dist/src/tokenizer/index.d.ts.map
871++++ b/node_modules/@markdoc/markdoc/dist/src/tokenizer/index.d.ts.map
872+@@ -1 +1 @@
873+-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tokenizer/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAGzC,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAE/C,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,OAAO,CAAC,MAAM,CAAa;gBAGzB,MAAM,GAAE,UAAU,CAAC,OAAO,GAAG;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAO;IAQlE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE;CAGnC"}
874+\ No newline at end of file
875++{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tokenizer/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAGzC,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAE/C,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,OAAO,CAAC,MAAM,CAAa;gBAGzB,MAAM,GAAE,UAAU,CAAC,OAAO,GAAG;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAO;IASlE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE;CAGnC"}
876+\ No newline at end of file
877+diff --git a/node_modules/@markdoc/markdoc/dist/src/types.d.ts b/node_modules/@markdoc/markdoc/dist/src/types.d.ts
878+index 802c687..0357804 100644
879+--- a/node_modules/@markdoc/markdoc/dist/src/types.d.ts
880++++ b/node_modules/@markdoc/markdoc/dist/src/types.d.ts
881+@@ -1,6 +1,7 @@
882+ import type Func from './ast/function';
883+ import type Node from './ast/node';
884+ import type Tag from './ast/tag';
885++import type Raw from './ast/raw';
886+ export type { Node, Tag };
887+ export declare type Function = Func;
888+ export interface AstType {
889+@@ -48,7 +49,7 @@ export declare type LocationEdge = {
890+ };
891+ export declare type NodeType = 'document' | 'heading' | 'paragraph' | 'blockquote' | 'hr' | 'image' | 'fence' | 'tag' | 'list' | 'item' | 'table' | 'thead' | 'tbody' | 'tr' | 'td' | 'th' | 'inline' | 'strong' | 'em' | 's' | 'link' | 'code' | 'text' | 'hardbreak' | 'softbreak';
892+ export declare type Primitive = null | boolean | number | string;
893+-export declare type RenderableTreeNode = Tag | string | null;
894++export declare type RenderableTreeNode = Tag | Raw | string | null;
895+ export declare type RenderableTreeNodes = RenderableTreeNode | RenderableTreeNode[];
896+ export declare type Scalar = Primitive | Scalar[] | {
897+ [key: string]: Scalar;
898+diff --git a/node_modules/@markdoc/markdoc/dist/src/types.d.ts.map b/node_modules/@markdoc/markdoc/dist/src/types.d.ts.map
899+index 197fd8e..6014cce 100644
900+--- a/node_modules/@markdoc/markdoc/dist/src/types.d.ts.map
901++++ b/node_modules/@markdoc/markdoc/dist/src/types.d.ts.map
902+@@ -1 +1 @@
903+-{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
904+\ No newline at end of file
905++{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AAGjC,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC1B,MAAM,CAAC,OAAO,MAAM,QAAQ,GAAG,IAAI,CAAC;AAEpC,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;IACpD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC;CAC9B;AAED,oBAAY,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;CACZ,CAAC;AAEF,oBAAY,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;AAE1C,oBAAY,UAAU,GAAG,OAAO,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE;QACX,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,CAAC;CACH,CAAC,CAAC;AAEH,oBAAY,cAAc,GAAG;IAC3B,OAAO,CAAC,EAAE,cAAc,GAAG,cAAc,EAAE,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC;IACjE,QAAQ,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE,CAAC;CACxD,CAAC;AAEF,MAAM,WAAW,4BAA4B;IAC3C,SAAS,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/C,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE,CAAC;CAC1D;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,4BAA4B,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,4BAA4B,CAAC;CAClD;AAED,oBAAY,QAAQ,GAAG;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,YAAY,CAAC;CACnB,CAAC;AAEF,oBAAY,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,oBAAY,QAAQ,GAChB,UAAU,GACV,SAAS,GACT,WAAW,GACX,YAAY,GACZ,IAAI,GACJ,OAAO,GACP,OAAO,GACP,KAAK,GACL,MAAM,GACN,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,QAAQ,GACR,QAAQ,GACR,IAAI,GACJ,GAAG,GACH,MAAM,GACN,MAAM,GACN,MAAM,GACN,WAAW,GACX,WAAW,CAAC;AAEhB,oBAAY,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzD,oBAAY,kBAAkB,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC;AAC3D,oBAAY,mBAAmB,GAAG,kBAAkB,GAAG,kBAAkB,EAAE,CAAC;AAE5E,oBAAY,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAEtE,oBAAY,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,IAAI;IAC1D,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,mBAAmB,CAAC;IACvD,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC;CACrD,CAAC;AAEF,oBAAY,eAAe,GAAG;IAC5B,IAAI,CAAC,EAAE,cAAc,GAAG,cAAc,EAAE,CAAC;IACzC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,CAAC,CAAC;IAC9D,UAAU,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;CACvC,CAAC;AAEF,oBAAY,aAAa,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;AAErD,oBAAY,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF,oBAAY,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,EAAE,eAAe,CAAC;CACxB,CAAC;AAEF,oBAAY,cAAc,GACtB,mBAAmB,GACnB,OAAO,MAAM,GACb,OAAO,MAAM,GACb,OAAO,OAAO,GACd,OAAO,MAAM,GACb,OAAO,KAAK,GACZ,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,CAAC;AAEZ,oBAAY,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC"}
906+\ No newline at end of file
907+diff --git a/node_modules/@markdoc/markdoc/index.ts b/node_modules/@markdoc/markdoc/index.ts
908+index 3fc8b83..7961632 100644
909+--- a/node_modules/@markdoc/markdoc/index.ts
910++++ b/node_modules/@markdoc/markdoc/index.ts
911+@@ -12,6 +12,7 @@ import transformer from './src/transformer';
912+ import validator from './src/validator';
913+ import { parseTags } from './src/utils';
914+ import transforms from './src/transforms/index';
915++import Raw from '@markdoc/markdoc/src/ast/raw';
916+
917+ import type Token from 'markdown-it/lib/token';
918+ import type { Config, RenderableTreeNode, ValidateError } from './src/types';
919+@@ -114,6 +115,7 @@ export default {
920+ transforms,
921+ Ast,
922+ Tag,
923++ Raw,
924+ Tokenizer,
925+ parseTags,
926+ transformer,
927+@@ -133,6 +135,7 @@ export {
928+ renderers,
929+ Ast,
930+ Tag,
931++ Raw,
932+ Tokenizer,
933+ parseTags,
934+ transformer,
935+diff --git a/node_modules/@markdoc/markdoc/patches/markdown-it+12.3.2.patch b/node_modules/@markdoc/markdoc/patches/markdown-it+12.3.2.patch
936+new file mode 100644
937+index 0000000..c6c9c4f
938+--- /dev/null
939++++ b/node_modules/@markdoc/markdoc/patches/markdown-it+12.3.2.patch
940+@@ -0,0 +1,216 @@
941++diff --git a/node_modules/markdown-it/lib/rules_block/blockquote.js b/node_modules/markdown-it/lib/rules_block/blockquote.js
942++index a02699a..400f67b 100644
943++--- a/node_modules/markdown-it/lib/rules_block/blockquote.js
944+++++ b/node_modules/markdown-it/lib/rules_block/blockquote.js
945++@@ -31,7 +31,7 @@ module.exports = function blockquote(state, startLine, endLine, silent) {
946++ max = state.eMarks[startLine];
947++
948++ // if it's indented more than 3 spaces, it should be a code block
949++- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
950+++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
951++
952++ // check the block quote marker
953++ if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }
954++diff --git a/node_modules/markdown-it/lib/rules_block/code.js b/node_modules/markdown-it/lib/rules_block/code.js
955++index 018e019..e6bf920 100644
956++--- a/node_modules/markdown-it/lib/rules_block/code.js
957+++++ b/node_modules/markdown-it/lib/rules_block/code.js
958++@@ -4,6 +4,8 @@
959++
960++
961++ module.exports = function code(state, startLine, endLine/*, silent*/) {
962+++ if (state.md.options.allowIndentation) { return false; }
963+++
964++ var nextLine, last, token;
965++
966++ if (state.sCount[startLine] - state.blkIndent < 4) { return false; }
967++diff --git a/node_modules/markdown-it/lib/rules_block/fence.js b/node_modules/markdown-it/lib/rules_block/fence.js
968++index 44f1538..f726fb5 100644
969++--- a/node_modules/markdown-it/lib/rules_block/fence.js
970+++++ b/node_modules/markdown-it/lib/rules_block/fence.js
971++@@ -10,7 +10,7 @@ module.exports = function fence(state, startLine, endLine, silent) {
972++ max = state.eMarks[startLine];
973++
974++ // if it's indented more than 3 spaces, it should be a code block
975++- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
976+++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
977++
978++ if (pos + 3 > max) { return false; }
979++
980++@@ -63,7 +63,7 @@ module.exports = function fence(state, startLine, endLine, silent) {
981++
982++ if (state.src.charCodeAt(pos) !== marker) { continue; }
983++
984++- if (state.sCount[nextLine] - state.blkIndent >= 4) {
985+++ if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) {
986++ // closing fence should be indented less than 4 spaces
987++ continue;
988++ }
989++diff --git a/node_modules/markdown-it/lib/rules_block/heading.js b/node_modules/markdown-it/lib/rules_block/heading.js
990++index 9863f48..bd2123a 100644
991++--- a/node_modules/markdown-it/lib/rules_block/heading.js
992+++++ b/node_modules/markdown-it/lib/rules_block/heading.js
993++@@ -11,7 +11,7 @@ module.exports = function heading(state, startLine, endLine, silent) {
994++ max = state.eMarks[startLine];
995++
996++ // if it's indented more than 3 spaces, it should be a code block
997++- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
998+++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
999++
1000++ ch = state.src.charCodeAt(pos);
1001++
1002++diff --git a/node_modules/markdown-it/lib/rules_block/hr.js b/node_modules/markdown-it/lib/rules_block/hr.js
1003++index a3bb14e..5d90d60 100644
1004++--- a/node_modules/markdown-it/lib/rules_block/hr.js
1005+++++ b/node_modules/markdown-it/lib/rules_block/hr.js
1006++@@ -11,7 +11,7 @@ module.exports = function hr(state, startLine, endLine, silent) {
1007++ max = state.eMarks[startLine];
1008++
1009++ // if it's indented more than 3 spaces, it should be a code block
1010++- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1011+++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1012++
1013++ marker = state.src.charCodeAt(pos++);
1014++
1015++diff --git a/node_modules/markdown-it/lib/rules_block/html_block.js b/node_modules/markdown-it/lib/rules_block/html_block.js
1016++index 2f17675..41ac35f 100644
1017++--- a/node_modules/markdown-it/lib/rules_block/html_block.js
1018+++++ b/node_modules/markdown-it/lib/rules_block/html_block.js
1019++@@ -26,7 +26,7 @@ module.exports = function html_block(state, startLine, endLine, silent) {
1020++ max = state.eMarks[startLine];
1021++
1022++ // if it's indented more than 3 spaces, it should be a code block
1023++- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1024+++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1025++
1026++ if (!state.md.options.html) { return false; }
1027++
1028++diff --git a/node_modules/markdown-it/lib/rules_block/lheading.js b/node_modules/markdown-it/lib/rules_block/lheading.js
1029++index 19bdc39..3c9d9ab 100644
1030++--- a/node_modules/markdown-it/lib/rules_block/lheading.js
1031+++++ b/node_modules/markdown-it/lib/rules_block/lheading.js
1032++@@ -9,7 +9,7 @@ module.exports = function lheading(state, startLine, endLine/*, silent*/) {
1033++ terminatorRules = state.md.block.ruler.getRules('paragraph');
1034++
1035++ // if it's indented more than 3 spaces, it should be a code block
1036++- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1037+++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1038++
1039++ oldParentType = state.parentType;
1040++ state.parentType = 'paragraph'; // use paragraph to match terminatorRules
1041++@@ -18,7 +18,7 @@ module.exports = function lheading(state, startLine, endLine/*, silent*/) {
1042++ for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {
1043++ // this would be a code block normally, but after paragraph
1044++ // it's considered a lazy continuation regardless of what's there
1045++- if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }
1046+++ if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }
1047++
1048++ //
1049++ // Check for underline in setext header
1050++diff --git a/node_modules/markdown-it/lib/rules_block/list.js b/node_modules/markdown-it/lib/rules_block/list.js
1051++index 1e5e87b..95f71c2 100644
1052++--- a/node_modules/markdown-it/lib/rules_block/list.js
1053+++++ b/node_modules/markdown-it/lib/rules_block/list.js
1054++@@ -130,7 +130,7 @@ module.exports = function list(state, startLine, endLine, silent) {
1055++ tight = true;
1056++
1057++ // if it's indented more than 3 spaces, it should be a code block
1058++- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1059+++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1060++
1061++ // Special case:
1062++ // - item 1
1063++@@ -138,7 +138,8 @@ module.exports = function list(state, startLine, endLine, silent) {
1064++ // - item 3
1065++ // - item 4
1066++ // - this one is a paragraph continuation
1067++- if (state.listIndent >= 0 &&
1068+++ if (!state.md.options.allowIndentation &&
1069+++ state.listIndent >= 0 &&
1070++ state.sCount[startLine] - state.listIndent >= 4 &&
1071++ state.sCount[startLine] < state.blkIndent) {
1072++ return false;
1073++@@ -244,7 +245,7 @@ module.exports = function list(state, startLine, endLine, silent) {
1074++
1075++ // If we have more than 4 spaces, the indent is 1
1076++ // (the rest is just indented code block)
1077++- if (indentAfterMarker > 4) { indentAfterMarker = 1; }
1078+++ if (!state.md.options.allowIndentation && indentAfterMarker > 4) { indentAfterMarker = 1; }
1079++
1080++ // " - test"
1081++ // ^^^^^ - calculating total length of this thing
1082++@@ -317,7 +318,7 @@ module.exports = function list(state, startLine, endLine, silent) {
1083++ if (state.sCount[nextLine] < state.blkIndent) { break; }
1084++
1085++ // if it's indented more than 3 spaces, it should be a code block
1086++- if (state.sCount[startLine] - state.blkIndent >= 4) { break; }
1087+++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { break; }
1088++
1089++ // fail if terminating block found
1090++ terminate = false;
1091++diff --git a/node_modules/markdown-it/lib/rules_block/paragraph.js b/node_modules/markdown-it/lib/rules_block/paragraph.js
1092++index f0c6872..d779a75 100644
1093++--- a/node_modules/markdown-it/lib/rules_block/paragraph.js
1094+++++ b/node_modules/markdown-it/lib/rules_block/paragraph.js
1095++@@ -16,7 +16,7 @@ module.exports = function paragraph(state, startLine/*, endLine*/) {
1096++ for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {
1097++ // this would be a code block normally, but after paragraph
1098++ // it's considered a lazy continuation regardless of what's there
1099++- if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }
1100+++ if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }
1101++
1102++ // quirk for blockquotes, this line should already be checked by that rule
1103++ if (state.sCount[nextLine] < 0) { continue; }
1104++diff --git a/node_modules/markdown-it/lib/rules_block/reference.js b/node_modules/markdown-it/lib/rules_block/reference.js
1105++index 78daa26..126ca93 100644
1106++--- a/node_modules/markdown-it/lib/rules_block/reference.js
1107+++++ b/node_modules/markdown-it/lib/rules_block/reference.js
1108++@@ -28,7 +28,7 @@ module.exports = function reference(state, startLine, _endLine, silent) {
1109++ nextLine = startLine + 1;
1110++
1111++ // if it's indented more than 3 spaces, it should be a code block
1112++- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1113+++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1114++
1115++ if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; }
1116++
1117++@@ -54,7 +54,7 @@ module.exports = function reference(state, startLine, _endLine, silent) {
1118++ for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {
1119++ // this would be a code block normally, but after paragraph
1120++ // it's considered a lazy continuation regardless of what's there
1121++- if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }
1122+++ if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent > 3) { continue; }
1123++
1124++ // quirk for blockquotes, this line should already be checked by that rule
1125++ if (state.sCount[nextLine] < 0) { continue; }
1126++diff --git a/node_modules/markdown-it/lib/rules_block/table.js b/node_modules/markdown-it/lib/rules_block/table.js
1127++index 7d9208f..fab9aba 100644
1128++--- a/node_modules/markdown-it/lib/rules_block/table.js
1129+++++ b/node_modules/markdown-it/lib/rules_block/table.js
1130++@@ -62,7 +62,7 @@ module.exports = function table(state, startLine, endLine, silent) {
1131++ if (state.sCount[nextLine] < state.blkIndent) { return false; }
1132++
1133++ // if it's indented more than 3 spaces, it should be a code block
1134++- if (state.sCount[nextLine] - state.blkIndent >= 4) { return false; }
1135+++ if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { return false; }
1136++
1137++ // first character of the second line should be '|', '-', ':',
1138++ // and no other characters are allowed but spaces;
1139++@@ -121,7 +121,7 @@ module.exports = function table(state, startLine, endLine, silent) {
1140++
1141++ lineText = getLine(state, startLine).trim();
1142++ if (lineText.indexOf('|') === -1) { return false; }
1143++- if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1144+++ if (!state.md.options.allowIndentation && state.sCount[startLine] - state.blkIndent >= 4) { return false; }
1145++ columns = escapedSplit(lineText);
1146++ if (columns.length && columns[0] === '') columns.shift();
1147++ if (columns.length && columns[columns.length - 1] === '') columns.pop();
1148++@@ -179,7 +179,7 @@ module.exports = function table(state, startLine, endLine, silent) {
1149++ if (terminate) { break; }
1150++ lineText = getLine(state, nextLine).trim();
1151++ if (!lineText) { break; }
1152++- if (state.sCount[nextLine] - state.blkIndent >= 4) { break; }
1153+++ if (!state.md.options.allowIndentation && state.sCount[nextLine] - state.blkIndent >= 4) { break; }
1154++ columns = escapedSplit(lineText);
1155++ if (columns.length && columns[0] === '') columns.shift();
1156++ if (columns.length && columns[columns.length - 1] === '') columns.pop();
1157+\ No newline at end of file
1158+diff --git a/node_modules/@markdoc/markdoc/src/ast/raw.ts b/node_modules/@markdoc/markdoc/src/ast/raw.ts
1159+new file mode 100644
1160+index 0000000..dab66db
1161+--- /dev/null
1162++++ b/node_modules/@markdoc/markdoc/src/ast/raw.ts
1163+@@ -0,0 +1,11 @@
1164++export default class Raw {
1165++ readonly $$mdtype = 'Raw' as const;
1166++
1167++ content: string;
1168++ inline: boolean;
1169++
1170++ constructor(content: string, inline: boolean) {
1171++ this.content = content;
1172++ this.inline = inline;
1173++ }
1174++ }
1175+\ No newline at end of file
1176+diff --git a/node_modules/@markdoc/markdoc/src/parser.ts b/node_modules/@markdoc/markdoc/src/parser.ts
1177+index b8fba4a..e9a197c 100644
1178+--- a/node_modules/@markdoc/markdoc/src/parser.ts
1179++++ b/node_modules/@markdoc/markdoc/src/parser.ts
1180+@@ -11,6 +11,8 @@ const mappings: Record<string, string> = {
1181+ code_inline: 'code',
1182+ list_item: 'item',
1183+ variable: 'text',
1184++ html_block: 'html',
1185++ html_inline: 'html',
1186+ };
1187+
1188+ function annotate(node: Node, attributes: AttributeValue[]) {
1189+@@ -37,6 +39,7 @@ function handleAttrs(token: Token, type: string) {
1190+ }
1191+ case 'text':
1192+ case 'code':
1193++ case 'html':
1194+ return { content: (token.meta || {}).variable || token.content };
1195+ case 'fence': {
1196+ const [language] = token.info.split(' ', 1);
1197+diff --git a/node_modules/@markdoc/markdoc/src/renderers/html.ts b/node_modules/@markdoc/markdoc/src/renderers/html.ts
1198+index f27fa5a..d9b61da 100644
1199+--- a/node_modules/@markdoc/markdoc/src/renderers/html.ts
1200++++ b/node_modules/@markdoc/markdoc/src/renderers/html.ts
1201+@@ -28,6 +28,8 @@ export default function render(node: RenderableTreeNodes): string {
1202+
1203+ if (node === null || typeof node !== 'object') return '';
1204+
1205++ if (node.$$mdtype === 'Raw') return node.content;
1206++
1207+ const { name, attributes, children = [] } = node;
1208+
1209+ if (!name) return render(children);
1210+diff --git a/node_modules/@markdoc/markdoc/src/renderers/react/react.ts b/node_modules/@markdoc/markdoc/src/renderers/react/react.ts
1211+index 337c4f2..b319c85 100644
1212+--- a/node_modules/@markdoc/markdoc/src/renderers/react/react.ts
1213++++ b/node_modules/@markdoc/markdoc/src/renderers/react/react.ts
1214+@@ -10,14 +10,15 @@ type ReactShape = Readonly<{
1215+ export default function dynamic(
1216+ node: RenderableTreeNodes,
1217+ React: ReactShape,
1218+- { components = {} } = {}
1219++ { components = {} } = {},
1220++ raw?: (content: string, inline: boolean) => ReactNode
1221+ ) {
1222+ function deepRender(value: any): any {
1223+ if (value == null || typeof value !== 'object') return value;
1224+
1225+ if (Array.isArray(value)) return value.map((item) => deepRender(item));
1226+
1227+- if (value.$$mdtype === 'Tag') return render(value);
1228++ if (['Tag', 'Raw'].includes(value.$$mdtype)) return render(value);
1229+
1230+ if (typeof value !== 'object') return value;
1231+
1232+@@ -32,6 +33,8 @@ export default function dynamic(
1233+
1234+ if (node === null || typeof node !== 'object') return node;
1235+
1236++ if (node.$$mdtype === 'Raw') return raw?.(node.content, node.inline);
1237++
1238+ const {
1239+ name,
1240+ attributes: { class: className, ...attrs } = {},
1241+diff --git a/node_modules/@markdoc/markdoc/src/renderers/react/static.ts b/node_modules/@markdoc/markdoc/src/renderers/react/static.ts
1242+index 2a4a589..c80b378 100644
1243+--- a/node_modules/@markdoc/markdoc/src/renderers/react/static.ts
1244++++ b/node_modules/@markdoc/markdoc/src/renderers/react/static.ts
1245+@@ -1,48 +1,54 @@
1246+ import { tagName } from './shared';
1247+ import type { RenderableTreeNode, RenderableTreeNodes } from '../../types';
1248+
1249+-function renderArray(children: RenderableTreeNode[]): string {
1250+- return children.map(render).join(', ');
1251+-}
1252++export default function reactStatic(
1253++ node: RenderableTreeNodes,
1254++ raw?: (content: string, inline: boolean) => string
1255++): string {
1256++ function renderArray(children: RenderableTreeNode[]): string {
1257++ return children.map(render).join(', ');
1258++ }
1259+
1260+-function deepRender(value: any): any {
1261+- if (value == null || typeof value !== 'object') return JSON.stringify(value);
1262++ function deepRender(value: any): any {
1263++ if (value == null || typeof value !== 'object')
1264++ return JSON.stringify(value);
1265+
1266+- if (Array.isArray(value))
1267+- return `[${value.map((item) => deepRender(item)).join(', ')}]`;
1268++ if (Array.isArray(value))
1269++ return `[${value.map((item) => deepRender(item)).join(', ')}]`;
1270+
1271+- if (value.$$mdtype === 'Tag') return render(value);
1272++ if (['Tag', 'Raw'].includes(value.$$mdtype)) return render(value);
1273+
1274+- if (typeof value !== 'object') return JSON.stringify(value);
1275++ if (typeof value !== 'object') return JSON.stringify(value);
1276+
1277+- const object = Object.entries(value)
1278+- .map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(': '))
1279+- .join(', ');
1280++ const object = Object.entries(value)
1281++ .map(([k, v]) => [JSON.stringify(k), deepRender(v)].join(': '))
1282++ .join(', ');
1283+
1284+- return `{${object}}`;
1285+-}
1286++ return `{${object}}`;
1287++ }
1288+
1289+-function render(node: RenderableTreeNodes): string {
1290+- if (Array.isArray(node))
1291+- return `React.createElement(React.Fragment, null, ${renderArray(node)})`;
1292++ function render(node: RenderableTreeNodes): string {
1293++ if (Array.isArray(node))
1294++ return `React.createElement(React.Fragment, null, ${renderArray(node)})`;
1295+
1296+- if (node === null || typeof node !== 'object') return JSON.stringify(node);
1297++ if (node === null || typeof node !== 'object') return JSON.stringify(node);
1298+
1299+- const {
1300+- name,
1301+- attributes: { class: className, ...attrs } = {},
1302+- children = [],
1303+- } = node;
1304++ if (node.$$mdtype === 'Raw') return raw?.(node.content, node.inline) ?? '';
1305+
1306+- if (className) attrs.className = className;
1307++ const {
1308++ name,
1309++ attributes: { class: className, ...attrs } = {},
1310++ children = [],
1311++ } = node;
1312+
1313+- return `React.createElement(
1314++ if (className) attrs.className = className;
1315++
1316++ return `React.createElement(
1317+ tagName(${JSON.stringify(name)}, components),
1318+ ${Object.keys(attrs).length == 0 ? 'null' : deepRender(attrs)},
1319+ ${renderArray(children)})`;
1320+-}
1321++ }
1322+
1323+-export default function reactStatic(node: RenderableTreeNodes): string {
1324+ return `
1325+ (({components = {}} = {}) => {
1326+ ${tagName}
1327+diff --git a/node_modules/@markdoc/markdoc/src/schema.ts b/node_modules/@markdoc/markdoc/src/schema.ts
1328+index d29dfff..8113cfa 100644
1329+--- a/node_modules/@markdoc/markdoc/src/schema.ts
1330++++ b/node_modules/@markdoc/markdoc/src/schema.ts
1331+@@ -1,5 +1,6 @@
1332+ import type { Schema } from './types';
1333+ import Tag from './ast/tag';
1334++import Raw from './ast/raw';
1335+
1336+ export const document: Schema = {
1337+ render: 'article',
1338+@@ -230,4 +231,16 @@ export const softbreak: Schema = {
1339+ },
1340+ };
1341+
1342++export const html: Schema = {
1343++ attributes: {
1344++ content: { type: String, required: true },
1345++ },
1346++
1347++ transform(node) {
1348++ return node.attributes.content
1349++ ? new Raw(node.attributes.content, node.inline)
1350++ : null;
1351++ },
1352++};
1353++
1354+ export const error = {};
1355+diff --git a/node_modules/@markdoc/markdoc/src/tokenizer/index.ts b/node_modules/@markdoc/markdoc/src/tokenizer/index.ts
1356+index d38d05c..24e4ee7 100644
1357+--- a/node_modules/@markdoc/markdoc/src/tokenizer/index.ts
1358++++ b/node_modules/@markdoc/markdoc/src/tokenizer/index.ts
1359+@@ -12,6 +12,7 @@ export default class Tokenizer {
1360+ this.parser = new MarkdownIt(config);
1361+ this.parser.use(annotations, 'annotations', {});
1362+ this.parser.use(frontmatter, 'frontmatter', {});
1363++ this.parser.use(require('markdown-it-sup'))
1364+ this.parser.disable('lheading');
1365+ }
1366+
1367+diff --git a/node_modules/@markdoc/markdoc/src/types.ts b/node_modules/@markdoc/markdoc/src/types.ts
1368+index d9c708c..f5a337d 100644
1369+--- a/node_modules/@markdoc/markdoc/src/types.ts
1370++++ b/node_modules/@markdoc/markdoc/src/types.ts
1371+@@ -1,6 +1,8 @@
1372+ import type Func from './ast/function';
1373+ import type Node from './ast/node';
1374+ import type Tag from './ast/tag';
1375++import type Raw from './ast/raw';
1376++
1377+
1378+ export type { Node, Tag };
1379+ export declare type Function = Func;
1380+@@ -86,7 +88,7 @@ export type NodeType =
1381+
1382+ export type Primitive = null | boolean | number | string;
1383+
1384+-export type RenderableTreeNode = Tag | string | null;
1385++export type RenderableTreeNode = Tag | Raw | string | null;
1386+ export type RenderableTreeNodes = RenderableTreeNode | RenderableTreeNode[];
1387+
1388+ export type Scalar = Primitive | Scalar[] | { [key: string]: Scalar };
1389+diff --git a/node_modules/@markdoc/markdoc/tsconfig.json b/node_modules/@markdoc/markdoc/tsconfig.json
1390+new file mode 100644
1391+index 0000000..31f3c3e
1392+--- /dev/null
1393++++ b/node_modules/@markdoc/markdoc/tsconfig.json
1394+@@ -0,0 +1,14 @@
1395++{
1396++ "compilerOptions": {
1397++ "strict": true,
1398++ "target": "ES2021",
1399++ "lib": ["ES2021"],
1400++ "allowJs": true,
1401++ "allowSyntheticDefaultImports": true,
1402++ "declaration": true,
1403++ "declarationMap": true,
1404++ "moduleResolution": "node"
1405++ },
1406++ "include": ["**/*.ts", "**/*.d.ts"],
1407++ "exclude": ["dist", "spec", "**/*.test.ts"]
1408++ }
1409+\ No newline at end of file