@yozora/tokenizer-footnote 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 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 { DefaultYastParser } from '@yozora/core-parser'
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 FootnoteTokenizer from '@yozora/tokenizer-footnote'
91
91
 
92
- const parser = new DefaultYastParser()
93
- .useBlockFallbackTokenizer(new ParagraphTokenizer())
94
- .useInlineFallbackTokenizer(new TextTokenizer())
92
+ const parser = new DefaultParser()
93
+ .useFallbackTokenizer(new ParagraphTokenizer())
94
+ .useFallbackTokenizer(new TextTokenizer())
95
95
  .useTokenizer(new FootnoteTokenizer())
96
96
 
97
97
  // parse source markdown content
@@ -234,7 +234,6 @@ Name | Type | Required | Default
234
234
  [@yozora/tokenizer-link]: https://github.com/yozorajs/yozora/tree/main/tokenizers/link#readme
235
235
  [@yozora/tokenizer-link-reference]: https://github.com/yozorajs/yozora/tree/main/tokenizers/link-reference#readme
236
236
  [@yozora/tokenizer-list]: https://github.com/yozorajs/yozora/tree/main/tokenizers/list#readme
237
- [@yozora/tokenizer-list-item]: https://github.com/yozorajs/yozora/tree/main/tokenizers/list-item#readme
238
237
  [@yozora/tokenizer-math]: https://github.com/yozorajs/yozora/tree/main/tokenizers/math#readme
239
238
  [@yozora/tokenizer-paragraph]: https://github.com/yozorajs/yozora/tree/main/tokenizers/paragraph#readme
240
239
  [@yozora/tokenizer-setext-heading]: https://github.com/yozorajs/yozora/tree/main/tokenizers/setext-heading#readme
@@ -294,7 +293,6 @@ Name | Type | Required | Default
294
293
  [doc-@yozora/tokenizer-definition]: https://yozora.guanghechen.com/docs/package/tokenizer-definition
295
294
  [doc-@yozora/tokenizer-link-reference]: https://yozora.guanghechen.com/docs/package/tokenizer-link-reference
296
295
  [doc-@yozora/tokenizer-list]: https://yozora.guanghechen.com/docs/package/tokenizer-list
297
- [doc-@yozora/tokenizer-list-item]: https://yozora.guanghechen.com/docs/package/tokenizer-list-item
298
296
  [doc-@yozora/tokenizer-math]: https://yozora.guanghechen.com/docs/package/tokenizer-math
299
297
  [doc-@yozora/tokenizer-paragraph]: https://yozora.guanghechen.com/docs/package/tokenizer-paragraph
300
298
  [doc-@yozora/tokenizer-setext-heading]: https://yozora.guanghechen.com/docs/package/tokenizer-setext-heading
package/lib/cjs/index.js CHANGED
@@ -7,17 +7,14 @@ var character = require('@yozora/character');
7
7
  var coreTokenizer = require('@yozora/core-tokenizer');
8
8
  var tokenizerLink = require('@yozora/tokenizer-link');
9
9
 
10
- const uniqueName = '@yozora/tokenizer-footnote';
11
-
12
- class FootnoteTokenizer extends coreTokenizer.BaseInlineTokenizer {
13
- constructor(props = {}) {
14
- var _a, _b;
15
- super({
16
- name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
17
- priority: (_b = props.priority) !== null && _b !== void 0 ? _b : coreTokenizer.TokenizerPriority.LINKS,
18
- });
19
- }
20
- _findDelimiter(startIndex, endIndex, nodePoints) {
10
+ const match = function (api) {
11
+ return {
12
+ findDelimiter: () => coreTokenizer.genFindDelimiter(_findDelimiter),
13
+ isDelimiterPair,
14
+ processDelimiterPair,
15
+ };
16
+ function _findDelimiter(startIndex, endIndex) {
17
+ const nodePoints = api.getNodePoints();
21
18
  for (let i = startIndex; i < endIndex; ++i) {
22
19
  const c = nodePoints[i].codePoint;
23
20
  switch (c) {
@@ -25,8 +22,7 @@ class FootnoteTokenizer extends coreTokenizer.BaseInlineTokenizer {
25
22
  i += 1;
26
23
  break;
27
24
  case character.AsciiCodePoint.CARET: {
28
- if (i + 1 < endIndex &&
29
- nodePoints[i + 1].codePoint === character.AsciiCodePoint.OPEN_BRACKET) {
25
+ if (i + 1 < endIndex && nodePoints[i + 1].codePoint === character.AsciiCodePoint.OPEN_BRACKET) {
30
26
  return {
31
27
  type: 'opener',
32
28
  startIndex: i,
@@ -45,7 +41,8 @@ class FootnoteTokenizer extends coreTokenizer.BaseInlineTokenizer {
45
41
  }
46
42
  return null;
47
43
  }
48
- isDelimiterPair(openerDelimiter, closerDelimiter, internalTokens, nodePoints) {
44
+ function isDelimiterPair(openerDelimiter, closerDelimiter, internalTokens) {
45
+ const nodePoints = api.getNodePoints();
49
46
  const balancedBracketsStatus = tokenizerLink.checkBalancedBracketsStatus(openerDelimiter.endIndex, closerDelimiter.startIndex, internalTokens, nodePoints);
50
47
  switch (balancedBracketsStatus) {
51
48
  case -1:
@@ -56,24 +53,45 @@ class FootnoteTokenizer extends coreTokenizer.BaseInlineTokenizer {
56
53
  return { paired: false, opener: true, closer: false };
57
54
  }
58
55
  }
59
- processDelimiterPair(openerDelimiter, closerDelimiter, internalTokens, nodePoints, api) {
56
+ function processDelimiterPair(openerDelimiter, closerDelimiter, internalTokens) {
60
57
  const token = {
61
58
  nodeType: ast.FootnoteType,
62
59
  startIndex: openerDelimiter.startIndex,
63
60
  endIndex: closerDelimiter.endIndex,
64
- children: api.resolveInternalTokens(internalTokens, openerDelimiter.endIndex, closerDelimiter.startIndex, nodePoints),
61
+ children: api.resolveInternalTokens(internalTokens, openerDelimiter.endIndex, closerDelimiter.startIndex),
65
62
  };
66
63
  return { tokens: [token] };
67
64
  }
68
- processToken(token, children) {
69
- const result = {
70
- type: ast.FootnoteType,
71
- children: children || [],
72
- };
73
- return result;
65
+ };
66
+
67
+ const parse = function (api) {
68
+ return {
69
+ parse: tokens => tokens.map(token => {
70
+ const children = api.parseInlineTokens(token.children);
71
+ const node = api.shouldReservePosition
72
+ ? { type: ast.FootnoteType, position: api.calcPosition(token), children }
73
+ : { type: ast.FootnoteType, children };
74
+ return node;
75
+ }),
76
+ };
77
+ };
78
+
79
+ const uniqueName = '@yozora/tokenizer-footnote';
80
+
81
+ class FootnoteTokenizer extends coreTokenizer.BaseInlineTokenizer {
82
+ constructor(props = {}) {
83
+ var _a, _b;
84
+ super({
85
+ name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
86
+ priority: (_b = props.priority) !== null && _b !== void 0 ? _b : coreTokenizer.TokenizerPriority.LINKS,
87
+ });
88
+ this.match = match;
89
+ this.parse = parse;
74
90
  }
75
91
  }
76
92
 
77
93
  exports.FootnoteTokenizer = FootnoteTokenizer;
78
94
  exports.FootnoteTokenizerName = uniqueName;
79
- exports['default'] = FootnoteTokenizer;
95
+ exports["default"] = FootnoteTokenizer;
96
+ exports.footnoteMatch = match;
97
+ exports.footnoteParse = parse;
package/lib/esm/index.js CHANGED
@@ -1,19 +1,16 @@
1
1
  import { FootnoteType } from '@yozora/ast';
2
2
  import { AsciiCodePoint } from '@yozora/character';
3
- import { BaseInlineTokenizer, TokenizerPriority } from '@yozora/core-tokenizer';
3
+ import { genFindDelimiter, BaseInlineTokenizer, TokenizerPriority } from '@yozora/core-tokenizer';
4
4
  import { checkBalancedBracketsStatus } from '@yozora/tokenizer-link';
5
5
 
6
- const uniqueName = '@yozora/tokenizer-footnote';
7
-
8
- class FootnoteTokenizer extends BaseInlineTokenizer {
9
- constructor(props = {}) {
10
- var _a, _b;
11
- super({
12
- name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
13
- priority: (_b = props.priority) !== null && _b !== void 0 ? _b : TokenizerPriority.LINKS,
14
- });
15
- }
16
- _findDelimiter(startIndex, endIndex, nodePoints) {
6
+ const match = function (api) {
7
+ return {
8
+ findDelimiter: () => genFindDelimiter(_findDelimiter),
9
+ isDelimiterPair,
10
+ processDelimiterPair,
11
+ };
12
+ function _findDelimiter(startIndex, endIndex) {
13
+ const nodePoints = api.getNodePoints();
17
14
  for (let i = startIndex; i < endIndex; ++i) {
18
15
  const c = nodePoints[i].codePoint;
19
16
  switch (c) {
@@ -21,8 +18,7 @@ class FootnoteTokenizer extends BaseInlineTokenizer {
21
18
  i += 1;
22
19
  break;
23
20
  case AsciiCodePoint.CARET: {
24
- if (i + 1 < endIndex &&
25
- nodePoints[i + 1].codePoint === AsciiCodePoint.OPEN_BRACKET) {
21
+ if (i + 1 < endIndex && nodePoints[i + 1].codePoint === AsciiCodePoint.OPEN_BRACKET) {
26
22
  return {
27
23
  type: 'opener',
28
24
  startIndex: i,
@@ -41,7 +37,8 @@ class FootnoteTokenizer extends BaseInlineTokenizer {
41
37
  }
42
38
  return null;
43
39
  }
44
- isDelimiterPair(openerDelimiter, closerDelimiter, internalTokens, nodePoints) {
40
+ function isDelimiterPair(openerDelimiter, closerDelimiter, internalTokens) {
41
+ const nodePoints = api.getNodePoints();
45
42
  const balancedBracketsStatus = checkBalancedBracketsStatus(openerDelimiter.endIndex, closerDelimiter.startIndex, internalTokens, nodePoints);
46
43
  switch (balancedBracketsStatus) {
47
44
  case -1:
@@ -52,22 +49,41 @@ class FootnoteTokenizer extends BaseInlineTokenizer {
52
49
  return { paired: false, opener: true, closer: false };
53
50
  }
54
51
  }
55
- processDelimiterPair(openerDelimiter, closerDelimiter, internalTokens, nodePoints, api) {
52
+ function processDelimiterPair(openerDelimiter, closerDelimiter, internalTokens) {
56
53
  const token = {
57
54
  nodeType: FootnoteType,
58
55
  startIndex: openerDelimiter.startIndex,
59
56
  endIndex: closerDelimiter.endIndex,
60
- children: api.resolveInternalTokens(internalTokens, openerDelimiter.endIndex, closerDelimiter.startIndex, nodePoints),
57
+ children: api.resolveInternalTokens(internalTokens, openerDelimiter.endIndex, closerDelimiter.startIndex),
61
58
  };
62
59
  return { tokens: [token] };
63
60
  }
64
- processToken(token, children) {
65
- const result = {
66
- type: FootnoteType,
67
- children: children || [],
68
- };
69
- return result;
61
+ };
62
+
63
+ const parse = function (api) {
64
+ return {
65
+ parse: tokens => tokens.map(token => {
66
+ const children = api.parseInlineTokens(token.children);
67
+ const node = api.shouldReservePosition
68
+ ? { type: FootnoteType, position: api.calcPosition(token), children }
69
+ : { type: FootnoteType, children };
70
+ return node;
71
+ }),
72
+ };
73
+ };
74
+
75
+ const uniqueName = '@yozora/tokenizer-footnote';
76
+
77
+ class FootnoteTokenizer extends BaseInlineTokenizer {
78
+ constructor(props = {}) {
79
+ var _a, _b;
80
+ super({
81
+ name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
82
+ priority: (_b = props.priority) !== null && _b !== void 0 ? _b : TokenizerPriority.LINKS,
83
+ });
84
+ this.match = match;
85
+ this.parse = parse;
70
86
  }
71
87
  }
72
88
 
73
- export { FootnoteTokenizer, uniqueName as FootnoteTokenizerName, FootnoteTokenizer as default };
89
+ export { FootnoteTokenizer, uniqueName as FootnoteTokenizerName, FootnoteTokenizer as default, match as footnoteMatch, parse as footnoteParse };
@@ -1,5 +1,5 @@
1
- import { FootnoteTokenizer } from './tokenizer';
2
- export { FootnoteTokenizer } from './tokenizer';
1
+ export { match as footnoteMatch } from './match';
2
+ export { parse as footnoteParse } from './parse';
3
+ export { FootnoteTokenizer, FootnoteTokenizer as default } from './tokenizer';
3
4
  export { uniqueName as FootnoteTokenizerName } from './types';
4
- export type { Token as FootnoteToken, TokenizerProps as FootnoteTokenizerProps, } from './types';
5
- export default FootnoteTokenizer;
5
+ export type { IThis as IFootnoteHookContext, IToken as IFootnoteToken, ITokenizerProps as IFootnoteTokenizerProps, } from './types';
@@ -0,0 +1,15 @@
1
+ import type { IMatchInlineHookCreator } from '@yozora/core-tokenizer';
2
+ import type { IDelimiter, IThis, IToken, T } from './types';
3
+ /**
4
+ * An inline footnote consists of a footnote text followed immediately by a right
5
+ * square bracket ']'.
6
+ *
7
+ * Like the inline links, footnote could not be contained by other footnote.
8
+ *
9
+ * @see https://github.com/syntax-tree/mdast-util-footnote
10
+ * @see https://github.com/remarkjs/remark-footnotes
11
+ * @see https://github.com/syntax-tree/mdast#link
12
+ * @see https://github.github.com/gfm/#links
13
+ * @see https://www.markdownguide.org/extended-syntax/#footnotes
14
+ */
15
+ export declare const match: IMatchInlineHookCreator<T, IDelimiter, IToken, IThis>;
@@ -0,0 +1,3 @@
1
+ import type { IParseInlineHookCreator } from '@yozora/core-tokenizer';
2
+ import type { INode, IThis, IToken, T } from './types';
3
+ export declare const parse: IParseInlineHookCreator<T, IToken, INode, IThis>;
@@ -1,42 +1,16 @@
1
- import type { YastNode } from '@yozora/ast';
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 { Delimiter, Node, T, Token, TokenizerProps } from './types';
3
+ import type { IDelimiter, INode, IThis, IToken, ITokenizerProps, T } from './types';
6
4
  /**
7
5
  * Lexical Analyzer for inline footnote.
8
- *
9
- * An inline footnote consists of a footnote text followed immediately by a right
10
- * square bracket ']'.
11
- *
12
- * Like the inline links, footnote could not be contained by other footnote.
13
- *
14
6
  * @see https://github.com/syntax-tree/mdast-util-footnote
15
7
  * @see https://github.com/remarkjs/remark-footnotes
16
8
  * @see https://github.com/syntax-tree/mdast#link
17
9
  * @see https://github.github.com/gfm/#links
18
10
  * @see https://www.markdownguide.org/extended-syntax/#footnotes
19
11
  */
20
- export declare class FootnoteTokenizer extends BaseInlineTokenizer<Delimiter> implements Tokenizer, TokenizerMatchInlineHook<T, Delimiter, Token>, TokenizerParseInlineHook<T, Token, Node> {
21
- constructor(props?: TokenizerProps);
22
- /**
23
- * @override
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;
12
+ export declare class FootnoteTokenizer extends BaseInlineTokenizer<T, IDelimiter, IToken, INode, IThis> implements IInlineTokenizer<T, IDelimiter, IToken, INode, IThis> {
13
+ constructor(props?: ITokenizerProps);
14
+ readonly match: IMatchInlineHookCreator<T, IDelimiter, IToken, IThis>;
15
+ readonly parse: IParseInlineHookCreator<T, IToken, INode, IThis>;
42
16
  }
@@ -1,13 +1,14 @@
1
- import type { Footnote, FootnoteType } from '@yozora/ast';
2
- import type { BaseInlineTokenizerProps, PartialYastInlineToken, YastTokenDelimiter } from '@yozora/core-tokenizer';
1
+ import type { FootnoteType, IFootnote } from '@yozora/ast';
2
+ import type { IBaseInlineTokenizerProps, IPartialYastInlineToken, ITokenizer, IYastTokenDelimiter } from '@yozora/core-tokenizer';
3
3
  export declare type T = FootnoteType;
4
- export declare type Node = Footnote;
4
+ export declare type INode = IFootnote;
5
5
  export declare const uniqueName = "@yozora/tokenizer-footnote";
6
- export declare type Token = PartialYastInlineToken<T>;
7
- export interface Delimiter extends YastTokenDelimiter {
6
+ export declare type IToken = IPartialYastInlineToken<T>;
7
+ export interface IDelimiter extends IYastTokenDelimiter {
8
8
  /**
9
- * Delimiter type.
9
+ * IDelimiter type.
10
10
  */
11
11
  type: 'opener' | 'closer';
12
12
  }
13
- export declare type TokenizerProps = Partial<BaseInlineTokenizerProps>;
13
+ export declare type IThis = ITokenizer;
14
+ export declare type ITokenizerProps = Partial<IBaseInlineTokenizerProps>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yozora/tokenizer-footnote",
3
- "version": "1.2.2",
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": "^1.2.2",
39
- "@yozora/character": "^1.2.2",
40
- "@yozora/core-tokenizer": "^1.2.2",
41
- "@yozora/tokenizer-link": "^1.2.2"
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-link": "^2.0.0-alpha.2"
42
42
  },
43
- "gitHead": "fb4b804548592c09259aabcf9cc4dd96176bd024"
43
+ "gitHead": "da59d85520455c59a117a35032ef1a035c10ea21"
44
44
  }