@yozora/tokenizer-footnote-reference 1.2.2 → 2.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -6
- package/lib/cjs/index.js +37 -21
- package/lib/esm/index.js +36 -22
- package/lib/types/index.d.ts +4 -4
- package/lib/types/match.d.ts +17 -0
- package/lib/types/parse.d.ts +3 -0
- package/lib/types/tokenizer.d.ts +6 -31
- package/lib/types/types.d.ts +7 -6
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -84,14 +84,14 @@ so you can use `YozoraParser` directly.
|
|
|
84
84
|
registered in *YastParser* as a plugin-in before it can be used.
|
|
85
85
|
|
|
86
86
|
```typescript {4,9}
|
|
87
|
-
import {
|
|
87
|
+
import { DefaultParser } from '@yozora/core-parser'
|
|
88
88
|
import ParagraphTokenizer from '@yozora/tokenizer-paragraph'
|
|
89
89
|
import TextTokenizer from '@yozora/tokenizer-text'
|
|
90
90
|
import FootnoteReferenceTokenizer from '@yozora/tokenizer-footnote-reference'
|
|
91
91
|
|
|
92
|
-
const parser = new
|
|
93
|
-
.
|
|
94
|
-
.
|
|
92
|
+
const parser = new DefaultParser()
|
|
93
|
+
.useFallbackTokenizer(new ParagraphTokenizer())
|
|
94
|
+
.useFallbackTokenizer(new TextTokenizer())
|
|
95
95
|
.useTokenizer(new FootnoteReferenceTokenizer())
|
|
96
96
|
|
|
97
97
|
// parse source markdown content
|
|
@@ -278,7 +278,6 @@ Name | Type | Required | Default
|
|
|
278
278
|
[@yozora/tokenizer-link]: https://github.com/yozorajs/yozora/tree/main/tokenizers/link#readme
|
|
279
279
|
[@yozora/tokenizer-link-reference]: https://github.com/yozorajs/yozora/tree/main/tokenizers/link-reference#readme
|
|
280
280
|
[@yozora/tokenizer-list]: https://github.com/yozorajs/yozora/tree/main/tokenizers/list#readme
|
|
281
|
-
[@yozora/tokenizer-list-item]: https://github.com/yozorajs/yozora/tree/main/tokenizers/list-item#readme
|
|
282
281
|
[@yozora/tokenizer-math]: https://github.com/yozorajs/yozora/tree/main/tokenizers/math#readme
|
|
283
282
|
[@yozora/tokenizer-paragraph]: https://github.com/yozorajs/yozora/tree/main/tokenizers/paragraph#readme
|
|
284
283
|
[@yozora/tokenizer-setext-heading]: https://github.com/yozorajs/yozora/tree/main/tokenizers/setext-heading#readme
|
|
@@ -338,7 +337,6 @@ Name | Type | Required | Default
|
|
|
338
337
|
[doc-@yozora/tokenizer-definition]: https://yozora.guanghechen.com/docs/package/tokenizer-definition
|
|
339
338
|
[doc-@yozora/tokenizer-link-reference]: https://yozora.guanghechen.com/docs/package/tokenizer-link-reference
|
|
340
339
|
[doc-@yozora/tokenizer-list]: https://yozora.guanghechen.com/docs/package/tokenizer-list
|
|
341
|
-
[doc-@yozora/tokenizer-list-item]: https://yozora.guanghechen.com/docs/package/tokenizer-list-item
|
|
342
340
|
[doc-@yozora/tokenizer-math]: https://yozora.guanghechen.com/docs/package/tokenizer-math
|
|
343
341
|
[doc-@yozora/tokenizer-paragraph]: https://yozora.guanghechen.com/docs/package/tokenizer-paragraph
|
|
344
342
|
[doc-@yozora/tokenizer-setext-heading]: https://yozora.guanghechen.com/docs/package/tokenizer-setext-heading
|
package/lib/cjs/index.js
CHANGED
|
@@ -7,17 +7,13 @@ var character = require('@yozora/character');
|
|
|
7
7
|
var coreTokenizer = require('@yozora/core-tokenizer');
|
|
8
8
|
var tokenizerFootnoteDefinition = require('@yozora/tokenizer-footnote-definition');
|
|
9
9
|
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
priority: (_b = props.priority) !== null && _b !== void 0 ? _b : coreTokenizer.TokenizerPriority.ATOMIC,
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
_findDelimiter(startIndex, endIndex, nodePoints) {
|
|
10
|
+
const match = function (api) {
|
|
11
|
+
return {
|
|
12
|
+
findDelimiter: () => coreTokenizer.genFindDelimiter(_findDelimiter),
|
|
13
|
+
processSingleDelimiter,
|
|
14
|
+
};
|
|
15
|
+
function _findDelimiter(startIndex, endIndex) {
|
|
16
|
+
const nodePoints = api.getNodePoints();
|
|
21
17
|
for (let i = startIndex; i < endIndex; ++i) {
|
|
22
18
|
const p = nodePoints[i];
|
|
23
19
|
switch (p.codePoint) {
|
|
@@ -39,7 +35,8 @@ class FootnoteReferenceTokenizer extends coreTokenizer.BaseInlineTokenizer {
|
|
|
39
35
|
}
|
|
40
36
|
return null;
|
|
41
37
|
}
|
|
42
|
-
processSingleDelimiter(delimiter
|
|
38
|
+
function processSingleDelimiter(delimiter) {
|
|
39
|
+
const nodePoints = api.getNodePoints();
|
|
43
40
|
const labelAndIdentifier = coreTokenizer.resolveLinkLabelAndIdentifier(nodePoints, delimiter.startIndex + 2, delimiter.endIndex - 1);
|
|
44
41
|
if (labelAndIdentifier == null)
|
|
45
42
|
return [];
|
|
@@ -55,17 +52,36 @@ class FootnoteReferenceTokenizer extends coreTokenizer.BaseInlineTokenizer {
|
|
|
55
52
|
};
|
|
56
53
|
return [token];
|
|
57
54
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
label
|
|
64
|
-
|
|
65
|
-
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const parse = function (api) {
|
|
58
|
+
return {
|
|
59
|
+
parse: tokens => tokens.map(token => {
|
|
60
|
+
const { identifier, label } = token;
|
|
61
|
+
const node = api.shouldReservePosition
|
|
62
|
+
? { type: ast.FootnoteReferenceType, position: api.calcPosition(token), identifier, label }
|
|
63
|
+
: { type: ast.FootnoteReferenceType, identifier, label };
|
|
64
|
+
return node;
|
|
65
|
+
}),
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const uniqueName = '@yozora/tokenizer-footnote-reference';
|
|
70
|
+
|
|
71
|
+
class FootnoteReferenceTokenizer extends coreTokenizer.BaseInlineTokenizer {
|
|
72
|
+
constructor(props = {}) {
|
|
73
|
+
var _a, _b;
|
|
74
|
+
super({
|
|
75
|
+
name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
|
|
76
|
+
priority: (_b = props.priority) !== null && _b !== void 0 ? _b : coreTokenizer.TokenizerPriority.ATOMIC,
|
|
77
|
+
});
|
|
78
|
+
this.match = match;
|
|
79
|
+
this.parse = parse;
|
|
66
80
|
}
|
|
67
81
|
}
|
|
68
82
|
|
|
69
83
|
exports.FootnoteReferenceTokenizer = FootnoteReferenceTokenizer;
|
|
70
84
|
exports.FootnoteReferenceTokenizerName = uniqueName;
|
|
71
|
-
exports[
|
|
85
|
+
exports["default"] = FootnoteReferenceTokenizer;
|
|
86
|
+
exports.footnoteReferenceMatch = match;
|
|
87
|
+
exports.footnoteReferenceParse = parse;
|
package/lib/esm/index.js
CHANGED
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
import { FootnoteReferenceType } from '@yozora/ast';
|
|
2
2
|
import { AsciiCodePoint } from '@yozora/character';
|
|
3
|
-
import { BaseInlineTokenizer, TokenizerPriority
|
|
3
|
+
import { genFindDelimiter, resolveLinkLabelAndIdentifier, BaseInlineTokenizer, TokenizerPriority } from '@yozora/core-tokenizer';
|
|
4
4
|
import { eatFootnoteLabel } from '@yozora/tokenizer-footnote-definition';
|
|
5
5
|
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
priority: (_b = props.priority) !== null && _b !== void 0 ? _b : TokenizerPriority.ATOMIC,
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
_findDelimiter(startIndex, endIndex, nodePoints) {
|
|
6
|
+
const match = function (api) {
|
|
7
|
+
return {
|
|
8
|
+
findDelimiter: () => genFindDelimiter(_findDelimiter),
|
|
9
|
+
processSingleDelimiter,
|
|
10
|
+
};
|
|
11
|
+
function _findDelimiter(startIndex, endIndex) {
|
|
12
|
+
const nodePoints = api.getNodePoints();
|
|
17
13
|
for (let i = startIndex; i < endIndex; ++i) {
|
|
18
14
|
const p = nodePoints[i];
|
|
19
15
|
switch (p.codePoint) {
|
|
@@ -35,7 +31,8 @@ class FootnoteReferenceTokenizer extends BaseInlineTokenizer {
|
|
|
35
31
|
}
|
|
36
32
|
return null;
|
|
37
33
|
}
|
|
38
|
-
processSingleDelimiter(delimiter
|
|
34
|
+
function processSingleDelimiter(delimiter) {
|
|
35
|
+
const nodePoints = api.getNodePoints();
|
|
39
36
|
const labelAndIdentifier = resolveLinkLabelAndIdentifier(nodePoints, delimiter.startIndex + 2, delimiter.endIndex - 1);
|
|
40
37
|
if (labelAndIdentifier == null)
|
|
41
38
|
return [];
|
|
@@ -51,15 +48,32 @@ class FootnoteReferenceTokenizer extends BaseInlineTokenizer {
|
|
|
51
48
|
};
|
|
52
49
|
return [token];
|
|
53
50
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
label
|
|
60
|
-
|
|
61
|
-
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const parse = function (api) {
|
|
54
|
+
return {
|
|
55
|
+
parse: tokens => tokens.map(token => {
|
|
56
|
+
const { identifier, label } = token;
|
|
57
|
+
const node = api.shouldReservePosition
|
|
58
|
+
? { type: FootnoteReferenceType, position: api.calcPosition(token), identifier, label }
|
|
59
|
+
: { type: FootnoteReferenceType, identifier, label };
|
|
60
|
+
return node;
|
|
61
|
+
}),
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const uniqueName = '@yozora/tokenizer-footnote-reference';
|
|
66
|
+
|
|
67
|
+
class FootnoteReferenceTokenizer extends BaseInlineTokenizer {
|
|
68
|
+
constructor(props = {}) {
|
|
69
|
+
var _a, _b;
|
|
70
|
+
super({
|
|
71
|
+
name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
|
|
72
|
+
priority: (_b = props.priority) !== null && _b !== void 0 ? _b : TokenizerPriority.ATOMIC,
|
|
73
|
+
});
|
|
74
|
+
this.match = match;
|
|
75
|
+
this.parse = parse;
|
|
62
76
|
}
|
|
63
77
|
}
|
|
64
78
|
|
|
65
|
-
export { FootnoteReferenceTokenizer, uniqueName as FootnoteReferenceTokenizerName, FootnoteReferenceTokenizer as default };
|
|
79
|
+
export { FootnoteReferenceTokenizer, uniqueName as FootnoteReferenceTokenizerName, FootnoteReferenceTokenizer as default, match as footnoteReferenceMatch, parse as footnoteReferenceParse };
|
package/lib/types/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
1
|
+
export { match as footnoteReferenceMatch } from './match';
|
|
2
|
+
export { parse as footnoteReferenceParse } from './parse';
|
|
3
|
+
export { FootnoteReferenceTokenizer, FootnoteReferenceTokenizer as default } from './tokenizer';
|
|
3
4
|
export { uniqueName as FootnoteReferenceTokenizerName } from './types';
|
|
4
|
-
export type {
|
|
5
|
-
export default FootnoteReferenceTokenizer;
|
|
5
|
+
export type { IThis as IFootnoteReferenceHookContext, IToken as IFootnoteReferenceToken, ITokenizerProps as IFootnoteReferenceTokenizerProps, } from './types';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { IMatchInlineHookCreator } from '@yozora/core-tokenizer';
|
|
2
|
+
import type { IDelimiter, IThis, IToken, T } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* A full footnote consists of a footnote label.
|
|
5
|
+
*
|
|
6
|
+
* Unlike the link label, the footnote label should be on the same line and it
|
|
7
|
+
* begins with a left bracket ([) followed by a caret (^), and ends with the
|
|
8
|
+
* first right bracket (]) that is not backslash-escaped. Between the caret of
|
|
9
|
+
* right bracket, there must be at least one non-whitespace character.
|
|
10
|
+
* Unescaped square bracket characters are not allowed inside the opening creat
|
|
11
|
+
* and closing square bracket of footnote labels. A footnote label can have at
|
|
12
|
+
* most 999 characters inside the caret and right bracket.
|
|
13
|
+
*
|
|
14
|
+
* @see https://github.com/syntax-tree/mdast#footnotereference
|
|
15
|
+
* @see https://github.github.com/gfm/#link-label
|
|
16
|
+
*/
|
|
17
|
+
export declare const match: IMatchInlineHookCreator<T, IDelimiter, IToken, IThis>;
|
package/lib/types/tokenizer.d.ts
CHANGED
|
@@ -1,38 +1,13 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { MatchInlinePhaseApi, ResultOfProcessSingleDelimiter, Tokenizer, TokenizerMatchInlineHook, TokenizerParseInlineHook } from '@yozora/core-tokenizer';
|
|
1
|
+
import type { IInlineTokenizer, IMatchInlineHookCreator, IParseInlineHookCreator } from '@yozora/core-tokenizer';
|
|
3
2
|
import { BaseInlineTokenizer } from '@yozora/core-tokenizer';
|
|
4
|
-
import type {
|
|
3
|
+
import type { IDelimiter, INode, IThis, IToken, ITokenizerProps, T } from './types';
|
|
5
4
|
/**
|
|
6
5
|
* Lexical Analyzer for footnote reference.
|
|
7
|
-
*
|
|
8
|
-
* A full footnote consists of a footnote label.
|
|
9
|
-
*
|
|
10
|
-
* Unlike the link label, the footnote label should be on the same line and it
|
|
11
|
-
* begins with a left bracket ([) followed by a caret (^), and ends with the
|
|
12
|
-
* first right bracket (]) that is not backslash-escaped. Between the caret of
|
|
13
|
-
* right bracket, there must be at least one non-whitespace character.
|
|
14
|
-
* Unescaped square bracket characters are not allowed inside the opening creat
|
|
15
|
-
* and closing square bracket of footnote labels. A footnote label can have at
|
|
16
|
-
* most 999 characters inside the caret and right bracket.
|
|
17
|
-
*
|
|
18
6
|
* @see https://github.com/syntax-tree/mdast#footnotereference
|
|
19
7
|
* @see https://github.github.com/gfm/#link-label
|
|
20
8
|
*/
|
|
21
|
-
export declare class FootnoteReferenceTokenizer extends BaseInlineTokenizer<
|
|
22
|
-
constructor(props?:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
* @see BaseInlineTokenizer
|
|
26
|
-
*/
|
|
27
|
-
protected _findDelimiter(startIndex: number, endIndex: number, nodePoints: ReadonlyArray<NodePoint>): Delimiter | null;
|
|
28
|
-
/**
|
|
29
|
-
* @override
|
|
30
|
-
* @see TokenizerMatchInlineHook
|
|
31
|
-
*/
|
|
32
|
-
processSingleDelimiter(delimiter: Delimiter, nodePoints: ReadonlyArray<NodePoint>, api: Readonly<MatchInlinePhaseApi>): ResultOfProcessSingleDelimiter<T, Token>;
|
|
33
|
-
/**
|
|
34
|
-
* @override
|
|
35
|
-
* @see TokenizerParseInlineHook
|
|
36
|
-
*/
|
|
37
|
-
processToken(token: Token): Node;
|
|
9
|
+
export declare class FootnoteReferenceTokenizer extends BaseInlineTokenizer<T, IDelimiter, IToken, INode, IThis> implements IInlineTokenizer<T, IDelimiter, IToken, INode, IThis> {
|
|
10
|
+
constructor(props?: ITokenizerProps);
|
|
11
|
+
readonly match: IMatchInlineHookCreator<T, IDelimiter, IToken, IThis>;
|
|
12
|
+
readonly parse: IParseInlineHookCreator<T, IToken, INode, IThis>;
|
|
38
13
|
}
|
package/lib/types/types.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { FootnoteReferenceType, IFootnoteReference, IYastAssociation } from '@yozora/ast';
|
|
2
|
+
import type { IBaseInlineTokenizerProps, IPartialYastInlineToken, ITokenizer, IYastTokenDelimiter } from '@yozora/core-tokenizer';
|
|
3
3
|
export declare const uniqueName = "@yozora/tokenizer-footnote-reference";
|
|
4
4
|
export declare type T = FootnoteReferenceType;
|
|
5
|
-
export declare type
|
|
6
|
-
export interface
|
|
5
|
+
export declare type INode = IFootnoteReference;
|
|
6
|
+
export interface IToken extends IPartialYastInlineToken<T>, IYastAssociation {
|
|
7
7
|
}
|
|
8
|
-
export interface
|
|
8
|
+
export interface IDelimiter extends IYastTokenDelimiter {
|
|
9
9
|
type: 'full';
|
|
10
10
|
}
|
|
11
|
-
export declare type
|
|
11
|
+
export declare type IThis = ITokenizer;
|
|
12
|
+
export declare type ITokenizerProps = Partial<IBaseInlineTokenizerProps>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yozora/tokenizer-footnote-reference",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0-alpha.2",
|
|
4
4
|
"author": {
|
|
5
5
|
"name": "guanghechen",
|
|
6
6
|
"url": "https://github.com/guanghechen/"
|
|
@@ -35,10 +35,10 @@
|
|
|
35
35
|
"test": "cross-env TS_NODE_FILES=true jest --config ../../jest.config.js --rootDir ."
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@yozora/ast": "^
|
|
39
|
-
"@yozora/character": "^
|
|
40
|
-
"@yozora/core-tokenizer": "^
|
|
41
|
-
"@yozora/tokenizer-footnote-definition": "^
|
|
38
|
+
"@yozora/ast": "^2.0.0-alpha.2",
|
|
39
|
+
"@yozora/character": "^2.0.0-alpha.2",
|
|
40
|
+
"@yozora/core-tokenizer": "^2.0.0-alpha.2",
|
|
41
|
+
"@yozora/tokenizer-footnote-definition": "^2.0.0-alpha.2"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "da59d85520455c59a117a35032ef1a035c10ea21"
|
|
44
44
|
}
|