{"_id":"remark-parse-no-trim","_rev":"1-8b409e4ac8cecce86ed9954664e84953","name":"remark-parse-no-trim","dist-tags":{"latest":"8.0.4"},"versions":{"8.0.4":{"name":"remark-parse-no-trim","version":"8.0.4","description":"remark plugin to parse Markdown","license":"MIT","keywords":["unified","remark","remark-plugin","plugin","markdown","mdast","abstract","syntax","tree","ast","parse"],"types":"types/index.d.ts","repository":{"type":"git","url":"git+https://github.com/docs/remark-parse-no-trim.git"},"funding":{"type":"opencollective","url":"https://opencollective.com/unified"},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},{"name":"Eugene Sharygin","email":"eush77@gmail.com"},{"name":"Junyoung Choi","email":"fluke8259@gmail.com"},{"name":"Elijah Hamovitz","email":"elijahhamovitz@gmail.com"},{"name":"Ika","email":"ikatyang@gmail.com"}],"dependencies":{"ccount":"^1.0.0","collapse-white-space":"^1.0.2","is-alphabetical":"^1.0.0","is-decimal":"^1.0.0","is-whitespace-character":"^1.0.0","is-word-character":"^1.0.0","markdown-escapes":"^1.0.0","parse-entities":"^2.0.0","repeat-string":"^1.5.4","state-toggle":"^1.0.0","trim-trailing-lines":"^1.0.0","unherit":"^1.0.4","unist-util-remove-position":"^2.0.0","vfile-location":"^3.0.0","xtend":"^4.0.1"},"scripts":{"test":"tape test.js"},"xo":false,"gitHead":"8250e8847e9d9bb695e23de57c3fbf35bdc7f5e6","bugs":{"url":"https://github.com/docs/remark-parse-no-trim/issues"},"homepage":"https://github.com/docs/remark-parse-no-trim#readme","_id":"remark-parse-no-trim@8.0.4","_nodeVersion":"16.5.0","_npmVersion":"7.19.1","dist":{"integrity":"sha512-WtqeHNTZ0LSdyemmY1/G6y9WoEFblTtgckfKF5/NUnri919/0/dEu8RCDfvXtJvu96soMvT+mLWWgYVUaiHoag==","shasum":"f5c9531644284071d4a57a49e19a42ad4e8040bd","tarball":"https://registry.npmjs.org/remark-parse-no-trim/-/remark-parse-no-trim-8.0.4.tgz","fileCount":54,"unpackedSize":115772,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg9xNFCRA9TVsSAnZWagAAAYcP/jlC9nbmQcfEhfMohGAt\nnFKc5r3qwy/Jr2Gnx3OsEU3HwCnPeA/hJJCKIArSr3RnaBRz5jplMT3Dtxwp\nY15Wqs/QF3Pu6V6baH6VblJzxCRH+F5CmwoxZKOdHGR5e3brxLpY2f4YXCAr\nLRp8CwIwp8SRmgQLw4I3n9u+gYK7RljmDsMCFiQgQ9bBfprCAULZEa+G7EoJ\nx27w96azHTwTBYJYCak6EbauGaV6e1q41pYK2incg6vHh96o7Ptuu9LtTFxD\nTdsHkBs0kpXDkybddZNk27nPjKrcJ6w6mRkAfPwxl4RyAnxEhr4Mz6t/QN8B\nDmoMpseP0jgQmLWhDQbjDNZAaKZMOb2ptzDBQK1UKmtheROpYON89mPut1ll\nfd2+djUx/+kwjqDYAA3EqYKw8mtIurVxP5HrcQdc+9h2ButntEWqOkN+4Ona\nKS3T2o6jBTuhyAvvsjJXZEpNtAXO3nU+Psh5+KHaF7Fl3UM+is0fQTVYvP4t\nCw1mO0kdoWKs+EFOB7jaSYGPU1T72EdlqiVpwTqYo6juMpdDFHJbVTuCwnII\npYps73VBgesY4oFIZSLoIChkisSXdt7FwilLUNTnNXETUGrkX5Ey8MLlqP7T\nKsOM8jWxGDC1QbOEX6IQwDkT02ofW2EhIle0VdjIjTOmuBv3WxW754pQ14ro\nIr9Y\r\n=lxoU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCm9RuqQrHkbsW1TsuYHsjrNqez/Nl/v0lDLhglakrY+QIhAP8Hp5z4fTeUH1Mus+f9gOI06unpK7Lp75o1bzA+nQ5P"}]},"_npmUser":{"name":"heiskr0","email":"npmheis@gmail.com"},"directories":{},"maintainers":[{"name":"heiskr0","email":"npmheis@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/remark-parse-no-trim_8.0.4_1626805061093_0.8557767964636647"},"_hasShrinkwrap":false}},"time":{"created":"2021-07-20T18:17:41.092Z","8.0.4":"2021-07-20T18:17:41.295Z","modified":"2022-05-15T18:10:06.146Z"},"maintainers":[{"name":"heiskr0","email":"npmheis@gmail.com"}],"description":"remark plugin to parse Markdown","homepage":"https://github.com/docs/remark-parse-no-trim#readme","keywords":["unified","remark","remark-plugin","plugin","markdown","mdast","abstract","syntax","tree","ast","parse"],"repository":{"type":"git","url":"git+https://github.com/docs/remark-parse-no-trim.git"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},{"name":"Eugene Sharygin","email":"eush77@gmail.com"},{"name":"Junyoung Choi","email":"fluke8259@gmail.com"},{"name":"Elijah Hamovitz","email":"elijahhamovitz@gmail.com"},{"name":"Ika","email":"ikatyang@gmail.com"}],"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"bugs":{"url":"https://github.com/docs/remark-parse-no-trim/issues"},"license":"MIT","readme":"# remark-parse\n\n[![Build][build-badge]][build]\n[![Coverage][coverage-badge]][coverage]\n[![Downloads][downloads-badge]][downloads]\n[![Size][size-badge]][size]\n[![Sponsors][sponsors-badge]][collective]\n[![Backers][backers-badge]][collective]\n[![Chat][chat-badge]][chat]\n\n[Parser][] for [**unified**][unified].\nParses Markdown to [**mdast**][mdast] syntax trees.\nUsed in the [**remark** processor][remark] but can be used on its own as well.\nCan be [extended][extend] to change how Markdown is parsed.\n\n## Sponsors\n\n<!--lint ignore no-html-->\n\n<table>\n  <tr valign=\"top\">\n    <td width=\"33.33%\" align=\"center\" colspan=\"2\">\n      <a href=\"https://www.gatsbyjs.org\">Gatsby</a><br>🥇<br><br>\n      <a href=\"https://www.gatsbyjs.org\"><img src=\"https://avatars1.githubusercontent.com/u/12551863?s=900&v=4\"></a>\n    </td>\n    <td width=\"33.33%\" align=\"center\" colspan=\"2\">\n      <a href=\"https://vercel.com\">Vercel</a><br>🥇<br><br>\n      <!--OC has a sharper image-->\n      <a href=\"https://vercel.com\"><img src=\"https://images.opencollective.com/vercel/d8a5bee/logo/512.png\"></a>\n    </td>\n    <td width=\"33.33%\" align=\"center\" colspan=\"2\">\n      <a href=\"https://www.netlify.com\">Netlify</a><br><br><br>\n      <!--OC has a sharper image-->\n      <a href=\"https://www.netlify.com\"><img src=\"https://images.opencollective.com/netlify/4087de2/logo/512.png\"></a>\n    </td>\n  </tr>\n  <tr valign=\"top\">\n    <td width=\"16.67%\" align=\"center\">\n      <a href=\"https://www.holloway.com\">Holloway</a><br><br><br>\n      <a href=\"https://www.holloway.com\"><img src=\"https://avatars1.githubusercontent.com/u/35904294?s=300&v=4\"></a>\n    </td>\n    <td width=\"16.67%\" align=\"center\">\n      <a href=\"https://themeisle.com\">ThemeIsle</a><br>🥉<br><br>\n      <a href=\"https://themeisle.com\"><img src=\"https://twitter-avatar.now.sh/themeisle\"></a>\n    </td>\n    <td width=\"16.67%\" align=\"center\">\n      <a href=\"https://boostio.co\">BoostIO</a><br>🥉<br><br>\n      <a href=\"https://boostio.co\"><img src=\"https://avatars1.githubusercontent.com/u/13612118?s=300&v=4\"></a>\n    </td>\n    <td width=\"16.67%\" align=\"center\">\n      <a href=\"https://expo.io\">Expo</a><br>🥉<br><br>\n      <a href=\"https://expo.io\"><img src=\"https://avatars1.githubusercontent.com/u/12504344?s=300&v=4\"></a>\n    </td>\n    <td width=\"50%\" align=\"center\" colspan=\"2\">\n      <br><br><br><br>\n      <a href=\"https://opencollective.com/unified\"><strong>You?</strong></a>\n    </td>\n  </tr>\n</table>\n\n## Install\n\n[npm][]:\n\n```sh\nnpm install remark-parse\n```\n\n## Use\n\n```js\nvar unified = require('unified')\nvar createStream = require('unified-stream')\nvar markdown = require('remark-parse')\nvar remark2rehype = require('remark-rehype')\nvar html = require('rehype-stringify')\n\nvar processor = unified()\n  .use(markdown, {commonmark: true})\n  .use(remark2rehype)\n  .use(html)\n\nprocess.stdin.pipe(createStream(processor)).pipe(process.stdout)\n```\n\n[See **unified** for more examples »][unified]\n\n## Contents\n\n*   [API](#api)\n    *   [`processor().use(parse[, options])`](#processoruseparse-options)\n    *   [`parse.Parser`](#parseparser)\n*   [Extending the `Parser`](#extending-the-parser)\n    *   [`Parser#blockTokenizers`](#parserblocktokenizers)\n    *   [`Parser#blockMethods`](#parserblockmethods)\n    *   [`Parser#inlineTokenizers`](#parserinlinetokenizers)\n    *   [`Parser#inlineMethods`](#parserinlinemethods)\n    *   [`function tokenizer(eat, value, silent)`](#function-tokenizereat-value-silent)\n    *   [`tokenizer.locator(value, fromIndex)`](#tokenizerlocatorvalue-fromindex)\n    *   [`eat(subvalue)`](#eatsubvalue)\n    *   [`add(node[, parent])`](#addnode-parent)\n    *   [`add.test()`](#addtest)\n    *   [`add.reset(node[, parent])`](#addresetnode-parent)\n    *   [Turning off a tokenizer](#turning-off-a-tokenizer)\n*   [Security](#security)\n*   [Contribute](#contribute)\n*   [License](#license)\n\n## API\n\n[See **unified** for API docs »][unified]\n\n### `processor().use(parse[, options])`\n\nConfigure the `processor` to read Markdown as input and process\n[**mdast**][mdast] syntax trees.\n\n##### `options`\n\nOptions can be passed directly, or passed later through\n[`processor.data()`][data].\n\n###### `options.gfm`\n\nGFM mode (`boolean`, default: `true`).\n\n```markdown\nhello ~~hi~~ world\n```\n\nTurns on:\n\n*   [Fenced code blocks](https://help.github.com/articles/creating-and-highlighting-code-blocks#fenced-code-blocks)\n*   [Autolinking of URLs](https://help.github.com/articles/autolinked-references-and-urls)\n*   [Deletions (strikethrough)](https://help.github.com/articles/basic-writing-and-formatting-syntax#styling-text)\n*   [Task lists](https://help.github.com/articles/basic-writing-and-formatting-syntax#task-lists)\n*   [Tables](https://help.github.com/articles/organizing-information-with-tables)\n\n###### `options.commonmark`\n\nCommonMark mode (`boolean`, default: `false`).\n\n```markdown\nThis is a paragraph\n    and this is also part of the preceding paragraph.\n```\n\nAllows:\n\n*   Empty lines to split block quotes\n*   Parentheses (`(` and `)`) around link and image titles\n*   Any escaped [ASCII punctuation][escapes] character\n*   Closing parenthesis (`)`) as an ordered list marker\n*   URL definitions in block quotes\n\nDisallows:\n\n*   Indented code blocks directly following a paragraph\n*   ATX headings (`# Hash headings`) without spacing after opening hashes or and\n    before closing hashes\n*   Setext headings (`Underline headings\\n---`) when following a paragraph\n*   Newlines in link and image titles\n*   White space in link and image URLs in auto-links (links in brackets, `<` and\n    `>`)\n*   Lazy block quote continuation, lines not preceded by a greater than\n    character (`>`), for lists, code, and thematic breaks\n\n###### `options.pedantic`\n\n⚠️ Pedantic was previously used to mimic old-style Markdown mode: no tables, no\nfenced code, and with many bugs.\nIt’s currently still “working”, but please do not use it, it’ll be removed in\nthe future.\n\n###### `options.blocks`\n\nBlocks (`Array.<string>`, default: list of [block HTML elements][blocks]).\n\n```markdown\n<block>foo\n</block>\n```\n\nDefines which HTML elements are seen as block level.\n\n### `parse.Parser`\n\nAccess to the [parser][], if you need it.\n\n## Extending the `Parser`\n\nTypically, using [*transformers*][transformer] to manipulate a syntax tree\nproduces the desired output.\nSometimes, such as when introducing new syntactic entities with a certain\nprecedence, interfacing with the parser is necessary.\n\nIf the `remark-parse` plugin is used, it adds a [`Parser`][parser] constructor\nfunction to the `processor`.\nOther plugins can add tokenizers to its prototype to change how Markdown is\nparsed.\n\nThe below plugin adds a [tokenizer][] for at-mentions.\n\n```js\nmodule.exports = mentions\n\nfunction mentions() {\n  var Parser = this.Parser\n  var tokenizers = Parser.prototype.inlineTokenizers\n  var methods = Parser.prototype.inlineMethods\n\n  // Add an inline tokenizer (defined in the following example).\n  tokenizers.mention = tokenizeMention\n\n  // Run it just before `text`.\n  methods.splice(methods.indexOf('text'), 0, 'mention')\n}\n```\n\n### `Parser#blockTokenizers`\n\nMap of names to [tokenizer][]s (`Object.<Function>`).\nThese tokenizers (such as `fencedCode`, `table`, and `paragraph`) eat from the\nstart of a value to a line ending.\n\nSee `#blockMethods` below for a list of methods that are included by default.\n\n### `Parser#blockMethods`\n\nList of `blockTokenizers` names (`Array.<string>`).\nSpecifies the order in which tokenizers run.\n\nPrecedence of default block methods is as follows:\n\n<!--methods-block start-->\n\n*   `blankLine`\n*   `indentedCode`\n*   `fencedCode`\n*   `blockquote`\n*   `atxHeading`\n*   `thematicBreak`\n*   `list`\n*   `setextHeading`\n*   `html`\n*   `definition`\n*   `table`\n*   `paragraph`\n\n<!--methods-block end-->\n\n### `Parser#inlineTokenizers`\n\nMap of names to [tokenizer][]s (`Object.<Function>`).\nThese tokenizers (such as `url`, `reference`, and `emphasis`) eat from the start\nof a value.\nTo increase performance, they depend on [locator][]s.\n\nSee `#inlineMethods` below for a list of methods that are included by default.\n\n### `Parser#inlineMethods`\n\nList of `inlineTokenizers` names (`Array.<string>`).\nSpecifies the order in which tokenizers run.\n\nPrecedence of default inline methods is as follows:\n\n<!--methods-inline start-->\n\n*   `escape`\n*   `autoLink`\n*   `url`\n*   `email`\n*   `html`\n*   `link`\n*   `reference`\n*   `strong`\n*   `emphasis`\n*   `deletion`\n*   `code`\n*   `break`\n*   `text`\n\n<!--methods-inline end-->\n\n### `function tokenizer(eat, value, silent)`\n\nThere are two types of tokenizers: block level and inline level.\nBoth are functions, and work the same, but inline tokenizers must have a\n[locator][].\n\nThe following example shows an inline tokenizer that is added by the mentions\nplugin above.\n\n```js\ntokenizeMention.notInLink = true\ntokenizeMention.locator = locateMention\n\nfunction tokenizeMention(eat, value, silent) {\n  var match = /^@(\\w+)/.exec(value)\n\n  if (match) {\n    if (silent) {\n      return true\n    }\n\n    return eat(match[0])({\n      type: 'link',\n      url: 'https://social-network/' + match[1],\n      children: [{type: 'text', value: match[0]}]\n    })\n  }\n}\n```\n\nTokenizers *test* whether a document starts with a certain syntactic entity.\nIn *silent* mode, they return whether that test passes.\nIn *normal* mode, they consume that token, a process which is called “eating”.\n\nLocators enable inline tokenizers to function faster by providing where the next\nentity may occur.\n\n###### Signatures\n\n*   `Node? = tokenizer(eat, value)`\n*   `boolean? = tokenizer(eat, value, silent)`\n\n###### Parameters\n\n*   `eat` ([`Function`][eat]) — Eat, when applicable, an entity\n*   `value` (`string`) — Value which may start an entity\n*   `silent` (`boolean`, optional) — Whether to detect or consume\n\n###### Properties\n\n*   `locator` ([`Function`][locator]) — Required for inline tokenizers\n*   `onlyAtStart` (`boolean`) — Whether nodes can only be found at the beginning\n    of the document\n*   `notInBlock` (`boolean`) — Whether nodes cannot be in block quotes or lists\n*   `notInList` (`boolean`) — Whether nodes cannot be in lists\n*   `notInLink` (`boolean`) — Whether nodes cannot be in links\n\n###### Returns\n\n*   `boolean?`, in *silent* mode — whether a node can be found at the start of\n    `value`\n*   [`Node?`][node], In *normal* mode — If it can be found at the start of\n    `value`\n\n### `tokenizer.locator(value, fromIndex)`\n\nLocators are required for inline tokenizers.\nTheir role is to keep parsing performant.\n\nThe following example shows a locator that is added by the mentions tokenizer\nabove.\n\n```js\nfunction locateMention(value, fromIndex) {\n  return value.indexOf('@', fromIndex)\n}\n```\n\nLocators enable inline tokenizers to function faster by providing information on\nwhere the next entity *may* occur.\nLocators may be wrong, it’s OK if there actually isn’t a node to be found at the\nindex they return.\n\n###### Parameters\n\n*   `value` (`string`) — Value which may contain an entity\n*   `fromIndex` (`number`) — Position to start searching at\n\n###### Returns\n\n`number` — Index at which an entity may start, and `-1` otherwise.\n\n### `eat(subvalue)`\n\n```js\nvar add = eat('foo')\n```\n\nEat `subvalue`, which is a string at the start of the [tokenized][tokenizer]\n`value`.\n\n###### Parameters\n\n*   `subvalue` (`string`) - Value to eat\n\n###### Returns\n\n[`add`][add].\n\n### `add(node[, parent])`\n\n```js\nvar add = eat('foo')\n\nadd({type: 'text', value: 'foo'})\n```\n\nAdd [positional information][position] to `node` and add `node` to `parent`.\n\n###### Parameters\n\n*   `node` ([`Node`][node]) - Node to patch position on and to add\n*   `parent` ([`Parent`][parent], optional) - Place to add `node` to in the\n    syntax tree.\n    Defaults to the currently processed node\n\n###### Returns\n\n[`Node`][node] — The given `node`.\n\n### `add.test()`\n\nGet the [positional information][position] that would be patched on `node` by\n`add`.\n\n###### Returns\n\n[`Position`][position].\n\n### `add.reset(node[, parent])`\n\n`add`, but resets the internal position.\nUseful for example in lists, where the same content is first eaten for a list,\nand later for list items.\n\n###### Parameters\n\n*   `node` ([`Node`][node]) - Node to patch position on and insert\n*   `parent` ([`Node`][node], optional) - Place to add `node` to in\n    the syntax tree.\n    Defaults to the currently processed node\n\n###### Returns\n\n[`Node`][node] — The given node.\n\n### Turning off a tokenizer\n\nIn some situations, you may want to turn off a tokenizer to avoid parsing that\nsyntactic feature.\n\nPreferably, use the [`remark-disable-tokenizers`][remark-disable-tokenizers]\nplugin to turn off tokenizers.\n\nAlternatively, this can be done by replacing the tokenizer from\n`blockTokenizers` (or `blockMethods`) or `inlineTokenizers` (or\n`inlineMethods`).\n\nThe following example turns off indented code blocks:\n\n```js\nremarkParse.Parser.prototype.blockTokenizers.indentedCode = indentedCode\n\nfunction indentedCode() {\n  return true\n}\n```\n\n## Security\n\nAs Markdown is sometimes used for HTML, and improper use of HTML can open you up\nto a [cross-site scripting (XSS)][xss] attack, use of remark can also be unsafe.\nWhen going to HTML, use remark in combination with the [**rehype**][rehype]\necosystem, and use [`rehype-sanitize`][sanitize] to make the tree safe.\n\nUse of remark plugins could also open you up to other attacks.\nCarefully assess each plugin and the risks involved in using them.\n\n## Contribute\n\nSee [`contributing.md`][contributing] in [`remarkjs/.github`][health] for ways\nto get started.\nSee [`support.md`][support] for ways to get help.\nIdeas for new plugins and tools can be posted in [`remarkjs/ideas`][ideas].\n\nA curated list of awesome remark resources can be found in [**awesome\nremark**][awesome].\n\nThis project has a [code of conduct][coc].\nBy interacting with this repository, organization, or community you agree to\nabide by its terms.\n\n## License\n\n[MIT][license] © [Titus Wormer][author]\n\n<!-- Definitions -->\n\n[build-badge]: https://img.shields.io/travis/remarkjs/remark.svg\n\n[build]: https://travis-ci.org/remarkjs/remark\n\n[coverage-badge]: https://img.shields.io/codecov/c/github/remarkjs/remark.svg\n\n[coverage]: https://codecov.io/github/remarkjs/remark\n\n[downloads-badge]: https://img.shields.io/npm/dm/remark-parse.svg\n\n[downloads]: https://www.npmjs.com/package/remark-parse\n\n[size-badge]: https://img.shields.io/bundlephobia/minzip/remark-parse.svg\n\n[size]: https://bundlephobia.com/result?p=remark-parse\n\n[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg\n\n[backers-badge]: https://opencollective.com/unified/backers/badge.svg\n\n[collective]: https://opencollective.com/unified\n\n[chat-badge]: https://img.shields.io/badge/chat-spectrum-7b16ff.svg\n\n[chat]: https://spectrum.chat/unified/remark\n\n[health]: https://github.com/remarkjs/.github\n\n[contributing]: https://github.com/remarkjs/.github/blob/HEAD/contributing.md\n\n[support]: https://github.com/remarkjs/.github/blob/HEAD/support.md\n\n[coc]: https://github.com/remarkjs/.github/blob/HEAD/code-of-conduct.md\n\n[ideas]: https://github.com/remarkjs/ideas\n\n[awesome]: https://github.com/remarkjs/awesome-remark\n\n[license]: https://github.com/remarkjs/remark/blob/main/license\n\n[author]: https://wooorm.com\n\n[npm]: https://docs.npmjs.com/cli/install\n\n[unified]: https://github.com/unifiedjs/unified\n\n[data]: https://github.com/unifiedjs/unified#processordatakey-value\n\n[remark]: https://github.com/remarkjs/remark/tree/main/packages/remark\n\n[blocks]: https://github.com/remarkjs/remark/blob/main/packages/remark-parse/lib/block-elements.js\n\n[mdast]: https://github.com/syntax-tree/mdast\n\n[escapes]: https://spec.commonmark.org/0.29/#backslash-escapes\n\n[node]: https://github.com/syntax-tree/unist#node\n\n[parent]: https://github.com/syntax-tree/unist#parent\n\n[position]: https://github.com/syntax-tree/unist#position\n\n[parser]: https://github.com/unifiedjs/unified#processorparser\n\n[transformer]: https://github.com/unifiedjs/unified#function-transformernode-file-next\n\n[extend]: #extending-the-parser\n\n[tokenizer]: #function-tokenizereat-value-silent\n\n[locator]: #tokenizerlocatorvalue-fromindex\n\n[eat]: #eatsubvalue\n\n[add]: #addnode-parent\n\n[remark-disable-tokenizers]: https://github.com/zestedesavoir/zmarkdown/tree/HEAD/packages/remark-disable-tokenizers\n\n[xss]: https://en.wikipedia.org/wiki/Cross-site_scripting\n\n[rehype]: https://github.com/rehypejs/rehype\n\n[sanitize]: https://github.com/rehypejs/rehype-sanitize\n","readmeFilename":"readme.md"}