@yozora/tokenizer-footnote 1.2.0 → 2.0.0-alpha.0
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/lib/cjs/index.js +59 -52
- package/lib/esm/index.js +59 -52
- package/lib/types/index.d.ts +2 -4
- package/lib/types/tokenizer.d.ts +6 -26
- package/lib/types/types.d.ts +7 -7
- package/package.json +6 -6
package/lib/cjs/index.js
CHANGED
|
@@ -16,64 +16,71 @@ class FootnoteTokenizer extends coreTokenizer.BaseInlineTokenizer {
|
|
|
16
16
|
name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
|
|
17
17
|
priority: (_b = props.priority) !== null && _b !== void 0 ? _b : coreTokenizer.TokenizerPriority.LINKS,
|
|
18
18
|
});
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
19
|
+
this.match = api => {
|
|
20
|
+
return {
|
|
21
|
+
findDelimiter: () => coreTokenizer.genFindDelimiter(_findDelimiter),
|
|
22
|
+
isDelimiterPair,
|
|
23
|
+
processDelimiterPair,
|
|
24
|
+
};
|
|
25
|
+
function _findDelimiter(startIndex, endIndex) {
|
|
26
|
+
const nodePoints = api.getNodePoints();
|
|
27
|
+
for (let i = startIndex; i < endIndex; ++i) {
|
|
28
|
+
const c = nodePoints[i].codePoint;
|
|
29
|
+
switch (c) {
|
|
30
|
+
case character.AsciiCodePoint.BACKSLASH:
|
|
31
|
+
i += 1;
|
|
32
|
+
break;
|
|
33
|
+
case character.AsciiCodePoint.CARET: {
|
|
34
|
+
if (i + 1 < endIndex && nodePoints[i + 1].codePoint === character.AsciiCodePoint.OPEN_BRACKET) {
|
|
35
|
+
return {
|
|
36
|
+
type: 'opener',
|
|
37
|
+
startIndex: i,
|
|
38
|
+
endIndex: i + 2,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
case character.AsciiCodePoint.CLOSE_BRACKET:
|
|
44
|
+
return {
|
|
45
|
+
type: 'closer',
|
|
46
|
+
startIndex: i,
|
|
47
|
+
endIndex: i + 1,
|
|
48
|
+
};
|
|
35
49
|
}
|
|
36
|
-
break;
|
|
37
50
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
function isDelimiterPair(openerDelimiter, closerDelimiter, internalTokens) {
|
|
54
|
+
const nodePoints = api.getNodePoints();
|
|
55
|
+
const balancedBracketsStatus = tokenizerLink.checkBalancedBracketsStatus(openerDelimiter.endIndex, closerDelimiter.startIndex, internalTokens, nodePoints);
|
|
56
|
+
switch (balancedBracketsStatus) {
|
|
57
|
+
case -1:
|
|
58
|
+
return { paired: false, opener: false, closer: true };
|
|
59
|
+
case 0:
|
|
60
|
+
return { paired: true };
|
|
61
|
+
case 1:
|
|
62
|
+
return { paired: false, opener: true, closer: false };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function processDelimiterPair(openerDelimiter, closerDelimiter, internalTokens) {
|
|
66
|
+
const token = {
|
|
67
|
+
nodeType: ast.FootnoteType,
|
|
68
|
+
startIndex: openerDelimiter.startIndex,
|
|
69
|
+
endIndex: closerDelimiter.endIndex,
|
|
70
|
+
children: api.resolveInternalTokens(internalTokens, openerDelimiter.endIndex, closerDelimiter.startIndex),
|
|
71
|
+
};
|
|
72
|
+
return { tokens: [token] };
|
|
44
73
|
}
|
|
45
|
-
}
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
isDelimiterPair(openerDelimiter, closerDelimiter, internalTokens, nodePoints) {
|
|
49
|
-
const balancedBracketsStatus = tokenizerLink.checkBalancedBracketsStatus(openerDelimiter.endIndex, closerDelimiter.startIndex, internalTokens, nodePoints);
|
|
50
|
-
switch (balancedBracketsStatus) {
|
|
51
|
-
case -1:
|
|
52
|
-
return { paired: false, opener: false, closer: true };
|
|
53
|
-
case 0:
|
|
54
|
-
return { paired: true };
|
|
55
|
-
case 1:
|
|
56
|
-
return { paired: false, opener: true, closer: false };
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
processDelimiterPair(openerDelimiter, closerDelimiter, internalTokens, nodePoints, api) {
|
|
60
|
-
const token = {
|
|
61
|
-
nodeType: ast.FootnoteType,
|
|
62
|
-
startIndex: openerDelimiter.startIndex,
|
|
63
|
-
endIndex: closerDelimiter.endIndex,
|
|
64
|
-
children: api.resolveInternalTokens(internalTokens, openerDelimiter.endIndex, closerDelimiter.startIndex, nodePoints),
|
|
65
|
-
};
|
|
66
|
-
return { tokens: [token] };
|
|
67
|
-
}
|
|
68
|
-
processToken(token, children) {
|
|
69
|
-
const result = {
|
|
70
|
-
type: ast.FootnoteType,
|
|
71
|
-
children: children || [],
|
|
72
74
|
};
|
|
73
|
-
|
|
75
|
+
this.parse = () => ({
|
|
76
|
+
parse: (_token, children) => ({
|
|
77
|
+
type: ast.FootnoteType,
|
|
78
|
+
children,
|
|
79
|
+
}),
|
|
80
|
+
});
|
|
74
81
|
}
|
|
75
82
|
}
|
|
76
83
|
|
|
77
84
|
exports.FootnoteTokenizer = FootnoteTokenizer;
|
|
78
85
|
exports.FootnoteTokenizerName = uniqueName;
|
|
79
|
-
exports[
|
|
86
|
+
exports["default"] = FootnoteTokenizer;
|
package/lib/esm/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FootnoteType } from '@yozora/ast';
|
|
2
2
|
import { AsciiCodePoint } from '@yozora/character';
|
|
3
|
-
import { BaseInlineTokenizer, TokenizerPriority } from '@yozora/core-tokenizer';
|
|
3
|
+
import { BaseInlineTokenizer, TokenizerPriority, genFindDelimiter } from '@yozora/core-tokenizer';
|
|
4
4
|
import { checkBalancedBracketsStatus } from '@yozora/tokenizer-link';
|
|
5
5
|
|
|
6
6
|
const uniqueName = '@yozora/tokenizer-footnote';
|
|
@@ -12,61 +12,68 @@ class FootnoteTokenizer extends BaseInlineTokenizer {
|
|
|
12
12
|
name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
|
|
13
13
|
priority: (_b = props.priority) !== null && _b !== void 0 ? _b : TokenizerPriority.LINKS,
|
|
14
14
|
});
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
15
|
+
this.match = api => {
|
|
16
|
+
return {
|
|
17
|
+
findDelimiter: () => genFindDelimiter(_findDelimiter),
|
|
18
|
+
isDelimiterPair,
|
|
19
|
+
processDelimiterPair,
|
|
20
|
+
};
|
|
21
|
+
function _findDelimiter(startIndex, endIndex) {
|
|
22
|
+
const nodePoints = api.getNodePoints();
|
|
23
|
+
for (let i = startIndex; i < endIndex; ++i) {
|
|
24
|
+
const c = nodePoints[i].codePoint;
|
|
25
|
+
switch (c) {
|
|
26
|
+
case AsciiCodePoint.BACKSLASH:
|
|
27
|
+
i += 1;
|
|
28
|
+
break;
|
|
29
|
+
case AsciiCodePoint.CARET: {
|
|
30
|
+
if (i + 1 < endIndex && nodePoints[i + 1].codePoint === AsciiCodePoint.OPEN_BRACKET) {
|
|
31
|
+
return {
|
|
32
|
+
type: 'opener',
|
|
33
|
+
startIndex: i,
|
|
34
|
+
endIndex: i + 2,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
case AsciiCodePoint.CLOSE_BRACKET:
|
|
40
|
+
return {
|
|
41
|
+
type: 'closer',
|
|
42
|
+
startIndex: i,
|
|
43
|
+
endIndex: i + 1,
|
|
44
|
+
};
|
|
31
45
|
}
|
|
32
|
-
break;
|
|
33
46
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
function isDelimiterPair(openerDelimiter, closerDelimiter, internalTokens) {
|
|
50
|
+
const nodePoints = api.getNodePoints();
|
|
51
|
+
const balancedBracketsStatus = checkBalancedBracketsStatus(openerDelimiter.endIndex, closerDelimiter.startIndex, internalTokens, nodePoints);
|
|
52
|
+
switch (balancedBracketsStatus) {
|
|
53
|
+
case -1:
|
|
54
|
+
return { paired: false, opener: false, closer: true };
|
|
55
|
+
case 0:
|
|
56
|
+
return { paired: true };
|
|
57
|
+
case 1:
|
|
58
|
+
return { paired: false, opener: true, closer: false };
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function processDelimiterPair(openerDelimiter, closerDelimiter, internalTokens) {
|
|
62
|
+
const token = {
|
|
63
|
+
nodeType: FootnoteType,
|
|
64
|
+
startIndex: openerDelimiter.startIndex,
|
|
65
|
+
endIndex: closerDelimiter.endIndex,
|
|
66
|
+
children: api.resolveInternalTokens(internalTokens, openerDelimiter.endIndex, closerDelimiter.startIndex),
|
|
67
|
+
};
|
|
68
|
+
return { tokens: [token] };
|
|
40
69
|
}
|
|
41
|
-
}
|
|
42
|
-
return null;
|
|
43
|
-
}
|
|
44
|
-
isDelimiterPair(openerDelimiter, closerDelimiter, internalTokens, nodePoints) {
|
|
45
|
-
const balancedBracketsStatus = checkBalancedBracketsStatus(openerDelimiter.endIndex, closerDelimiter.startIndex, internalTokens, nodePoints);
|
|
46
|
-
switch (balancedBracketsStatus) {
|
|
47
|
-
case -1:
|
|
48
|
-
return { paired: false, opener: false, closer: true };
|
|
49
|
-
case 0:
|
|
50
|
-
return { paired: true };
|
|
51
|
-
case 1:
|
|
52
|
-
return { paired: false, opener: true, closer: false };
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
processDelimiterPair(openerDelimiter, closerDelimiter, internalTokens, nodePoints, api) {
|
|
56
|
-
const token = {
|
|
57
|
-
nodeType: FootnoteType,
|
|
58
|
-
startIndex: openerDelimiter.startIndex,
|
|
59
|
-
endIndex: closerDelimiter.endIndex,
|
|
60
|
-
children: api.resolveInternalTokens(internalTokens, openerDelimiter.endIndex, closerDelimiter.startIndex, nodePoints),
|
|
61
|
-
};
|
|
62
|
-
return { tokens: [token] };
|
|
63
|
-
}
|
|
64
|
-
processToken(token, children) {
|
|
65
|
-
const result = {
|
|
66
|
-
type: FootnoteType,
|
|
67
|
-
children: children || [],
|
|
68
70
|
};
|
|
69
|
-
|
|
71
|
+
this.parse = () => ({
|
|
72
|
+
parse: (_token, children) => ({
|
|
73
|
+
type: FootnoteType,
|
|
74
|
+
children,
|
|
75
|
+
}),
|
|
76
|
+
});
|
|
70
77
|
}
|
|
71
78
|
}
|
|
72
79
|
|
package/lib/types/index.d.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export { FootnoteTokenizer } from './tokenizer';
|
|
1
|
+
export { FootnoteTokenizer, FootnoteTokenizer as default } from './tokenizer';
|
|
3
2
|
export { uniqueName as FootnoteTokenizerName } from './types';
|
|
4
|
-
export type {
|
|
5
|
-
export default FootnoteTokenizer;
|
|
3
|
+
export type { IToken as IFootnoteToken, ITokenizerProps as IFootnoteTokenizerProps } from './types';
|
package/lib/types/tokenizer.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { NodePoint } from '@yozora/character';
|
|
3
|
-
import type { MatchInlinePhaseApi, ResultOfIsDelimiterPair, ResultOfProcessDelimiterPair, Tokenizer, TokenizerMatchInlineHook, TokenizerParseInlineHook, YastInlineToken } from '@yozora/core-tokenizer';
|
|
1
|
+
import type { IInlineTokenizer, IMatchInlineHookCreator, IParseInlineHookCreator } from '@yozora/core-tokenizer';
|
|
4
2
|
import { BaseInlineTokenizer } from '@yozora/core-tokenizer';
|
|
5
|
-
import type {
|
|
3
|
+
import type { IDelimiter, INode, IToken, ITokenizerProps, T } from './types';
|
|
6
4
|
/**
|
|
7
5
|
* Lexical Analyzer for inline footnote.
|
|
8
6
|
*
|
|
@@ -17,26 +15,8 @@ import type { Delimiter, Node, T, Token, TokenizerProps } from './types';
|
|
|
17
15
|
* @see https://github.github.com/gfm/#links
|
|
18
16
|
* @see https://www.markdownguide.org/extended-syntax/#footnotes
|
|
19
17
|
*/
|
|
20
|
-
export declare class FootnoteTokenizer extends BaseInlineTokenizer<
|
|
21
|
-
constructor(props?:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
* @see BaseInlineTokenizer
|
|
25
|
-
*/
|
|
26
|
-
protected _findDelimiter(startIndex: number, endIndex: number, nodePoints: ReadonlyArray<NodePoint>): Delimiter | null;
|
|
27
|
-
/**
|
|
28
|
-
* @override
|
|
29
|
-
* @see TokenizerMatchInlineHook
|
|
30
|
-
*/
|
|
31
|
-
isDelimiterPair(openerDelimiter: Delimiter, closerDelimiter: Delimiter, internalTokens: ReadonlyArray<YastInlineToken>, nodePoints: ReadonlyArray<NodePoint>): ResultOfIsDelimiterPair;
|
|
32
|
-
/**
|
|
33
|
-
* @override
|
|
34
|
-
* @see TokenizerMatchInlineHook
|
|
35
|
-
*/
|
|
36
|
-
processDelimiterPair(openerDelimiter: Delimiter, closerDelimiter: Delimiter, internalTokens: ReadonlyArray<YastInlineToken>, nodePoints: ReadonlyArray<NodePoint>, api: Readonly<MatchInlinePhaseApi>): ResultOfProcessDelimiterPair<T, Token, Delimiter>;
|
|
37
|
-
/**
|
|
38
|
-
* @override
|
|
39
|
-
* @see TokenizerParseInlineHook
|
|
40
|
-
*/
|
|
41
|
-
processToken(token: Token, children: YastNode[] | undefined): Node;
|
|
18
|
+
export declare class FootnoteTokenizer extends BaseInlineTokenizer<T, IDelimiter, IToken, INode> implements IInlineTokenizer<T, IDelimiter, IToken, INode> {
|
|
19
|
+
constructor(props?: ITokenizerProps);
|
|
20
|
+
readonly match: IMatchInlineHookCreator<T, IDelimiter, IToken>;
|
|
21
|
+
readonly parse: IParseInlineHookCreator<T, IToken, INode>;
|
|
42
22
|
}
|
package/lib/types/types.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { FootnoteType, IFootnote } from '@yozora/ast';
|
|
2
|
+
import type { IBaseInlineTokenizerProps, IPartialYastInlineToken, IYastTokenDelimiter } from '@yozora/core-tokenizer';
|
|
3
3
|
export declare type T = FootnoteType;
|
|
4
|
-
export declare type
|
|
4
|
+
export declare type INode = IFootnote;
|
|
5
5
|
export declare const uniqueName = "@yozora/tokenizer-footnote";
|
|
6
|
-
export declare type
|
|
7
|
-
export interface
|
|
6
|
+
export declare type IToken = IPartialYastInlineToken<T>;
|
|
7
|
+
export interface IDelimiter extends IYastTokenDelimiter {
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* IDelimiter type.
|
|
10
10
|
*/
|
|
11
11
|
type: 'opener' | 'closer';
|
|
12
12
|
}
|
|
13
|
-
export declare type
|
|
13
|
+
export declare type ITokenizerProps = Partial<IBaseInlineTokenizerProps>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yozora/tokenizer-footnote",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0-alpha.0",
|
|
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-link": "^
|
|
38
|
+
"@yozora/ast": "^2.0.0-alpha.0",
|
|
39
|
+
"@yozora/character": "^2.0.0-alpha.0",
|
|
40
|
+
"@yozora/core-tokenizer": "^2.0.0-alpha.0",
|
|
41
|
+
"@yozora/tokenizer-link": "^2.0.0-alpha.0"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "0171501339c49ffd02ed16a63447fa20a47a29a7"
|
|
44
44
|
}
|