@yozora/tokenizer-footnote-reference 1.3.0 → 2.0.0-alpha.3

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 FootnoteReferenceTokenizer from '@yozora/tokenizer-footnote-reference'
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 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,12 @@ 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 uniqueName = '@yozora/tokenizer-footnote-reference';
11
-
12
- class FootnoteReferenceTokenizer 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.ATOMIC,
18
- });
19
- }
20
- _findDelimiter(startIndex, endIndex, api) {
10
+ const match = function (api) {
11
+ return {
12
+ findDelimiter: () => coreTokenizer.genFindDelimiter(_findDelimiter),
13
+ processSingleDelimiter,
14
+ };
15
+ function _findDelimiter(startIndex, endIndex) {
21
16
  const nodePoints = api.getNodePoints();
22
17
  for (let i = startIndex; i < endIndex; ++i) {
23
18
  const p = nodePoints[i];
@@ -40,7 +35,7 @@ class FootnoteReferenceTokenizer extends coreTokenizer.BaseInlineTokenizer {
40
35
  }
41
36
  return null;
42
37
  }
43
- processSingleDelimiter(delimiter, api) {
38
+ function processSingleDelimiter(delimiter) {
44
39
  const nodePoints = api.getNodePoints();
45
40
  const labelAndIdentifier = coreTokenizer.resolveLinkLabelAndIdentifier(nodePoints, delimiter.startIndex + 2, delimiter.endIndex - 1);
46
41
  if (labelAndIdentifier == null)
@@ -57,17 +52,36 @@ class FootnoteReferenceTokenizer extends coreTokenizer.BaseInlineTokenizer {
57
52
  };
58
53
  return [token];
59
54
  }
60
- parseInline(token) {
61
- const { identifier, label } = token;
62
- const result = {
63
- type: ast.FootnoteReferenceType,
64
- identifier,
65
- label,
66
- };
67
- return result;
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;
68
80
  }
69
81
  }
70
82
 
71
83
  exports.FootnoteReferenceTokenizer = FootnoteReferenceTokenizer;
72
84
  exports.FootnoteReferenceTokenizerName = uniqueName;
73
- exports['default'] = FootnoteReferenceTokenizer;
85
+ exports["default"] = FootnoteReferenceTokenizer;
86
+ exports.footnoteReferenceMatch = match;
87
+ exports.footnoteReferenceParse = parse;
package/lib/esm/index.js CHANGED
@@ -1,19 +1,14 @@
1
1
  import { FootnoteReferenceType } from '@yozora/ast';
2
2
  import { AsciiCodePoint } from '@yozora/character';
3
- import { BaseInlineTokenizer, TokenizerPriority, resolveLinkLabelAndIdentifier } from '@yozora/core-tokenizer';
3
+ import { genFindDelimiter, resolveLinkLabelAndIdentifier, BaseInlineTokenizer, TokenizerPriority } from '@yozora/core-tokenizer';
4
4
  import { eatFootnoteLabel } from '@yozora/tokenizer-footnote-definition';
5
5
 
6
- const uniqueName = '@yozora/tokenizer-footnote-reference';
7
-
8
- class FootnoteReferenceTokenizer 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.ATOMIC,
14
- });
15
- }
16
- _findDelimiter(startIndex, endIndex, api) {
6
+ const match = function (api) {
7
+ return {
8
+ findDelimiter: () => genFindDelimiter(_findDelimiter),
9
+ processSingleDelimiter,
10
+ };
11
+ function _findDelimiter(startIndex, endIndex) {
17
12
  const nodePoints = api.getNodePoints();
18
13
  for (let i = startIndex; i < endIndex; ++i) {
19
14
  const p = nodePoints[i];
@@ -36,7 +31,7 @@ class FootnoteReferenceTokenizer extends BaseInlineTokenizer {
36
31
  }
37
32
  return null;
38
33
  }
39
- processSingleDelimiter(delimiter, api) {
34
+ function processSingleDelimiter(delimiter) {
40
35
  const nodePoints = api.getNodePoints();
41
36
  const labelAndIdentifier = resolveLinkLabelAndIdentifier(nodePoints, delimiter.startIndex + 2, delimiter.endIndex - 1);
42
37
  if (labelAndIdentifier == null)
@@ -53,15 +48,32 @@ class FootnoteReferenceTokenizer extends BaseInlineTokenizer {
53
48
  };
54
49
  return [token];
55
50
  }
56
- parseInline(token) {
57
- const { identifier, label } = token;
58
- const result = {
59
- type: FootnoteReferenceType,
60
- identifier,
61
- label,
62
- };
63
- return result;
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;
64
76
  }
65
77
  }
66
78
 
67
- export { FootnoteReferenceTokenizer, uniqueName as FootnoteReferenceTokenizerName, FootnoteReferenceTokenizer as default };
79
+ export { FootnoteReferenceTokenizer, uniqueName as FootnoteReferenceTokenizerName, FootnoteReferenceTokenizer as default, match as footnoteReferenceMatch, parse as footnoteReferenceParse };
@@ -1,5 +1,5 @@
1
- import { FootnoteReferenceTokenizer } from './tokenizer';
2
- export { FootnoteReferenceTokenizer } from './tokenizer';
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 { Token as FootnoteReferenceToken, TokenizerProps as FootnoteReferenceTokenizerProps, } from './types';
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>;
@@ -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,37 +1,13 @@
1
- import type { MatchInlinePhaseApi, ResultOfProcessSingleDelimiter, Tokenizer, TokenizerMatchInlineHook, TokenizerParseInlineHook } from '@yozora/core-tokenizer';
1
+ import type { IInlineTokenizer, IMatchInlineHookCreator, IParseInlineHookCreator } from '@yozora/core-tokenizer';
2
2
  import { BaseInlineTokenizer } from '@yozora/core-tokenizer';
3
- import type { Delimiter, Node, T, Token, TokenizerProps } from './types';
3
+ import type { IDelimiter, INode, IThis, IToken, ITokenizerProps, T } from './types';
4
4
  /**
5
5
  * Lexical Analyzer for footnote reference.
6
- *
7
- * A full footnote consists of a footnote label.
8
- *
9
- * Unlike the link label, the footnote label should be on the same line and it
10
- * begins with a left bracket ([) followed by a caret (^), and ends with the
11
- * first right bracket (]) that is not backslash-escaped. Between the caret of
12
- * right bracket, there must be at least one non-whitespace character.
13
- * Unescaped square bracket characters are not allowed inside the opening creat
14
- * and closing square bracket of footnote labels. A footnote label can have at
15
- * most 999 characters inside the caret and right bracket.
16
- *
17
6
  * @see https://github.com/syntax-tree/mdast#footnotereference
18
7
  * @see https://github.github.com/gfm/#link-label
19
8
  */
20
- export declare class FootnoteReferenceTokenizer 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, api: Readonly<MatchInlinePhaseApi>): Delimiter | null;
27
- /**
28
- * @override
29
- * @see TokenizerMatchInlineHook
30
- */
31
- processSingleDelimiter(delimiter: Delimiter, api: Readonly<MatchInlinePhaseApi>): ResultOfProcessSingleDelimiter<T, Token>;
32
- /**
33
- * @override
34
- * @see TokenizerParseInlineHook
35
- */
36
- parseInline(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>;
37
13
  }
@@ -1,11 +1,12 @@
1
- import type { FootnoteReference, FootnoteReferenceType, YastAssociation } from '@yozora/ast';
2
- import type { BaseInlineTokenizerProps, PartialYastInlineToken, YastTokenDelimiter } from '@yozora/core-tokenizer';
1
+ import type { Association, FootnoteReference, FootnoteReferenceType } 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 Node = FootnoteReference;
6
- export interface Token extends PartialYastInlineToken<T>, YastAssociation {
5
+ export declare type INode = FootnoteReference;
6
+ export interface IToken extends IPartialYastInlineToken<T>, Association {
7
7
  }
8
- export interface Delimiter extends YastTokenDelimiter {
8
+ export interface IDelimiter extends IYastTokenDelimiter {
9
9
  type: 'full';
10
10
  }
11
- export declare type TokenizerProps = Partial<BaseInlineTokenizerProps>;
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": "1.3.0",
3
+ "version": "2.0.0-alpha.3",
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.3.0",
39
- "@yozora/character": "^1.3.0",
40
- "@yozora/core-tokenizer": "^1.3.0",
41
- "@yozora/tokenizer-footnote-definition": "^1.3.0"
38
+ "@yozora/ast": "^2.0.0-alpha.3",
39
+ "@yozora/character": "^2.0.0-alpha.3",
40
+ "@yozora/core-tokenizer": "^2.0.0-alpha.3",
41
+ "@yozora/tokenizer-footnote-definition": "^2.0.0-alpha.3"
42
42
  },
43
- "gitHead": "18c9b167004ad97718b2f94f25139f80598cbf7a"
43
+ "gitHead": "9f274fc7487a8c1dd213405d92508f9a7621f730"
44
44
  }