@yozora/tokenizer-definition
A link reference definition consists of a
link label, indented up to three spaces, followed by a
colon (:
), optional whitespace (including up to one
line ending), a link destination,
optional whitespace (including up to one line ending),
and an optional link title, which if it is present must be
separated from the link destination by whitespace.
No further non-whitespace characters may occur
on the line.
A link reference definition does not correspond to a structural element of a document. Instead, it defines a label which can be used in reference links and reference-style images elsewhere in the document. Link reference definitions can come either before or after the links that use them.
- See github flavor markdown spec for details.
- See Live Examples for an intuitive impression.
Install
- npm
- Yarn
- pnpm
npm install --save @yozora/tokenizer-definition
yarn add @yozora/tokenizer-definition
pnpm add @yozora/tokenizer-definition
Usage
@yozora/tokenizer-definition has been integrated into @yozora/parser / @yozora/parser-gfm-ex / @yozora/parser-gfm,
so you can use YozoraParser
/ GfmExParser
/ GfmParser
directly.
- Basic Usage
- YozoraParser
- GfmParser
- GfmExParser
@yozora/tokenizer-definition cannot be used alone, it needs to be registered in YastParser as a plugin-in before it can be used.
import { DefaultYastParser } from '@yozora/core-parser'
import ParagraphTokenizer from '@yozora/tokenizer-paragraph'
import TextTokenizer from '@yozora/tokenizer-text'
import DefinitionTokenizer from '@yozora/tokenizer-definition'
const parser = new DefaultYastParser()
.useBlockFallbackTokenizer(new ParagraphTokenizer())
.useInlineFallbackTokenizer(new TextTokenizer())
.useTokenizer(new DefinitionTokenizer())
// parse source markdown content
parser.parse(`
[foo]: /url '
title
line1
line2
'
[foo]
`)
import YozoraParser from '@yozora/parser'
const parser = new YozoraParser()
// parse source markdown content
parser.parse(`
[foo]: /url '
title
line1
line2
'
[foo]
`)
import GfmParser from '@yozora/parser-gfm'
const parser = new GfmParser()
// parse source markdown content
parser.parse(`
[foo]: /url '
title
line1
line2
'
[foo]
`)
import GfmExParser from '@yozora/parser-gfm-ex'
const parser = new GfmExParser()
// parse source markdown content
parser.parse(`
[foo]: /url '
title
line1
line2
'
[foo]
`)
Options
Name | Type | Required | Default |
---|---|---|---|
name | string | false | "@yozora/tokenizer-definition" |
priority | number | false | TokenizerPriority.ATOMIC |
-
name
: The unique name of the tokenizer, used to bind the token it generates, to determine the tokenizer that should be called in each life cycle of the token in the entire matching / parsing phase. -
priority
: Priority of the tokenizer, determine the order of processing, high priority priority execution. interruptable. In addition, in thematch-block
stage, a high-priority tokenizer can interrupt the matching process of a low-priority tokenizer.
Types
@yozora/tokenizer-definition produce Definition type nodes. See @yozora/ast for full base types.
import type { YastAssociation, YastNode, YastResource } from '@yozora/ast'
export const DefinitionType = 'definition'
export type DefinitionType = typeof DefinitionType
/**
* Definition represents a resource.
* @see https://github.com/syntax-tree/mdast#definition
* @see https://github.github.com/gfm/#link-reference-definitions
*/
export interface Definition extends
YastNode<DefinitionType>,
YastAssociation,
YastResource {}
Live Examples
-
Basic.
-
The title may extend over multiple lines.
-
However, it may not contain a blank line.
-
The title may be omitted.
-
The link destination may not be omitted.
-
However, an empty link destination may be specified using angle brackets.
-
The title must be separated from the link destination by whitespace.
-
Both title and destination can contain backslash escapes and literal backslashes.
-
A link can come before its corresponding definition.
-
If there are several matching definitions, the first one takes precedence.
-
As noted in the section on Links, matching of labels is case-insensitive (see matches).
-
Here is a link reference definition with no corresponding link. It contributes nothing to the document.
-
This is not a link reference definition, because there are non-whitespace characters after the title.
-
This is a link reference definition, but it has no title.
-
This is not a link reference definition, because it is indented four spaces.
-
This is not a link reference definition, because it occurs inside a code block.
-
A link reference definition cannot interrupt a paragraph.
-
However, it can directly follow other block elements, such as headings and thematic breaks, and it need not be followed by a blank line.
-
Several link reference definitions can occur one after another, without intervening blank lines.
-
Link reference definitions can occur inside block containers, like lists and block quotations. They affect the entire document, not just the container in which they are defined.
-
Whether something is a link reference definition is independent of whether the link reference it defines is used in the document. Thus, for example, the following document contains just a link reference definition, and no visible content.