@yozora/tokenizer-emphasis 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` / `GfmExParser` / `GfmParser` 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 EmphasisTokenizer from '@yozora/tokenizer-emphasis'
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 EmphasisTokenizer())
96
96
 
97
97
  // parse source markdown content
@@ -265,7 +265,6 @@ Name | Type | Required | Default
265
265
  [@yozora/tokenizer-link]: https://github.com/yozorajs/yozora/tree/main/tokenizers/link#readme
266
266
  [@yozora/tokenizer-link-reference]: https://github.com/yozorajs/yozora/tree/main/tokenizers/link-reference#readme
267
267
  [@yozora/tokenizer-list]: https://github.com/yozorajs/yozora/tree/main/tokenizers/list#readme
268
- [@yozora/tokenizer-list-item]: https://github.com/yozorajs/yozora/tree/main/tokenizers/list-item#readme
269
268
  [@yozora/tokenizer-math]: https://github.com/yozorajs/yozora/tree/main/tokenizers/math#readme
270
269
  [@yozora/tokenizer-paragraph]: https://github.com/yozorajs/yozora/tree/main/tokenizers/paragraph#readme
271
270
  [@yozora/tokenizer-setext-heading]: https://github.com/yozorajs/yozora/tree/main/tokenizers/setext-heading#readme
@@ -325,7 +324,6 @@ Name | Type | Required | Default
325
324
  [doc-@yozora/tokenizer-definition]: https://yozora.guanghechen.com/docs/package/tokenizer-definition
326
325
  [doc-@yozora/tokenizer-link-reference]: https://yozora.guanghechen.com/docs/package/tokenizer-link-reference
327
326
  [doc-@yozora/tokenizer-list]: https://yozora.guanghechen.com/docs/package/tokenizer-list
328
- [doc-@yozora/tokenizer-list-item]: https://yozora.guanghechen.com/docs/package/tokenizer-list-item
329
327
  [doc-@yozora/tokenizer-math]: https://yozora.guanghechen.com/docs/package/tokenizer-math
330
328
  [doc-@yozora/tokenizer-paragraph]: https://yozora.guanghechen.com/docs/package/tokenizer-paragraph
331
329
  [doc-@yozora/tokenizer-setext-heading]: https://yozora.guanghechen.com/docs/package/tokenizer-setext-heading
package/lib/cjs/index.js CHANGED
@@ -6,17 +6,14 @@ var ast = require('@yozora/ast');
6
6
  var character = require('@yozora/character');
7
7
  var coreTokenizer = require('@yozora/core-tokenizer');
8
8
 
9
- const uniqueName = '@yozora/tokenizer-emphasis';
10
-
11
- class EmphasisTokenizer extends coreTokenizer.BaseInlineTokenizer {
12
- constructor(props = {}) {
13
- var _a, _b;
14
- super({
15
- name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
16
- priority: (_b = props.priority) !== null && _b !== void 0 ? _b : coreTokenizer.TokenizerPriority.CONTAINING_INLINE,
17
- });
18
- }
19
- _findDelimiter(startIndex, endIndex, nodePoints, api) {
9
+ const match = function (api) {
10
+ return {
11
+ findDelimiter: () => coreTokenizer.genFindDelimiter(_findDelimiter),
12
+ isDelimiterPair,
13
+ processDelimiterPair,
14
+ };
15
+ function _findDelimiter(startIndex, endIndex) {
16
+ const nodePoints = api.getNodePoints();
20
17
  const blockStartIndex = api.getBlockStartIndex();
21
18
  const blockEndIndex = api.getBlockEndIndex();
22
19
  const isOpenerDelimiter = (delimiterStartIndex, delimiterEndIndex) => {
@@ -93,25 +90,23 @@ class EmphasisTokenizer extends coreTokenizer.BaseInlineTokenizer {
93
90
  }
94
91
  return null;
95
92
  }
96
- isDelimiterPair(openerDelimiter, closerDelimiter, internalTokens, nodePoints) {
93
+ function isDelimiterPair(openerDelimiter, closerDelimiter) {
94
+ const nodePoints = api.getNodePoints();
97
95
  if (nodePoints[openerDelimiter.startIndex].codePoint !==
98
96
  nodePoints[closerDelimiter.startIndex].codePoint ||
99
97
  ((openerDelimiter.type === 'both' || closerDelimiter.type === 'both') &&
100
- (openerDelimiter.originalThickness +
101
- closerDelimiter.originalThickness) %
102
- 3 ===
103
- 0 &&
98
+ (openerDelimiter.originalThickness + closerDelimiter.originalThickness) % 3 === 0 &&
104
99
  openerDelimiter.originalThickness % 3 !== 0)) {
105
100
  return { paired: false, opener: true, closer: true };
106
101
  }
107
102
  return { paired: true };
108
103
  }
109
- processDelimiterPair(openerDelimiter, closerDelimiter, internalTokens, nodePoints, api) {
104
+ function processDelimiterPair(openerDelimiter, closerDelimiter, internalTokens) {
110
105
  let thickness = 1;
111
106
  if (openerDelimiter.thickness > 1 && closerDelimiter.thickness > 1) {
112
107
  thickness = 2;
113
108
  }
114
- internalTokens = api.resolveInternalTokens(internalTokens, openerDelimiter.endIndex, closerDelimiter.startIndex, nodePoints);
109
+ internalTokens = api.resolveInternalTokens(internalTokens, openerDelimiter.endIndex, closerDelimiter.startIndex);
115
110
  const token = {
116
111
  nodeType: thickness === 1 ? ast.EmphasisType : ast.StrongType,
117
112
  startIndex: openerDelimiter.endIndex - thickness,
@@ -143,15 +138,36 @@ class EmphasisTokenizer extends coreTokenizer.BaseInlineTokenizer {
143
138
  remainCloserDelimiter,
144
139
  };
145
140
  }
146
- processToken(token, children) {
147
- const result = {
148
- type: token.nodeType,
149
- children: children !== null && children !== void 0 ? children : [],
150
- };
151
- return result;
141
+ };
142
+
143
+ const parse = function (api) {
144
+ return {
145
+ parse: tokens => tokens.map(token => {
146
+ const children = api.parseInlineTokens(token.children);
147
+ const node = api.shouldReservePosition
148
+ ? { type: token.nodeType, position: api.calcPosition(token), children }
149
+ : { type: token.nodeType, children };
150
+ return node;
151
+ }),
152
+ };
153
+ };
154
+
155
+ const uniqueName = '@yozora/tokenizer-emphasis';
156
+
157
+ class EmphasisTokenizer extends coreTokenizer.BaseInlineTokenizer {
158
+ constructor(props = {}) {
159
+ var _a, _b;
160
+ super({
161
+ name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
162
+ priority: (_b = props.priority) !== null && _b !== void 0 ? _b : coreTokenizer.TokenizerPriority.CONTAINING_INLINE,
163
+ });
164
+ this.match = match;
165
+ this.parse = parse;
152
166
  }
153
167
  }
154
168
 
155
169
  exports.EmphasisTokenizer = EmphasisTokenizer;
156
170
  exports.EmphasisTokenizerName = uniqueName;
157
- exports['default'] = EmphasisTokenizer;
171
+ exports["default"] = EmphasisTokenizer;
172
+ exports.emphasisMatch = match;
173
+ exports.emphasisParse = parse;
package/lib/esm/index.js CHANGED
@@ -1,18 +1,15 @@
1
1
  import { EmphasisType, StrongType } from '@yozora/ast';
2
2
  import { AsciiCodePoint, isPunctuationCharacter, isUnicodeWhitespaceCharacter } from '@yozora/character';
3
- import { BaseInlineTokenizer, TokenizerPriority, eatOptionalCharacters } from '@yozora/core-tokenizer';
3
+ import { genFindDelimiter, eatOptionalCharacters, BaseInlineTokenizer, TokenizerPriority } from '@yozora/core-tokenizer';
4
4
 
5
- const uniqueName = '@yozora/tokenizer-emphasis';
6
-
7
- class EmphasisTokenizer extends BaseInlineTokenizer {
8
- constructor(props = {}) {
9
- var _a, _b;
10
- super({
11
- name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
12
- priority: (_b = props.priority) !== null && _b !== void 0 ? _b : TokenizerPriority.CONTAINING_INLINE,
13
- });
14
- }
15
- _findDelimiter(startIndex, endIndex, nodePoints, api) {
5
+ const match = function (api) {
6
+ return {
7
+ findDelimiter: () => genFindDelimiter(_findDelimiter),
8
+ isDelimiterPair,
9
+ processDelimiterPair,
10
+ };
11
+ function _findDelimiter(startIndex, endIndex) {
12
+ const nodePoints = api.getNodePoints();
16
13
  const blockStartIndex = api.getBlockStartIndex();
17
14
  const blockEndIndex = api.getBlockEndIndex();
18
15
  const isOpenerDelimiter = (delimiterStartIndex, delimiterEndIndex) => {
@@ -89,25 +86,23 @@ class EmphasisTokenizer extends BaseInlineTokenizer {
89
86
  }
90
87
  return null;
91
88
  }
92
- isDelimiterPair(openerDelimiter, closerDelimiter, internalTokens, nodePoints) {
89
+ function isDelimiterPair(openerDelimiter, closerDelimiter) {
90
+ const nodePoints = api.getNodePoints();
93
91
  if (nodePoints[openerDelimiter.startIndex].codePoint !==
94
92
  nodePoints[closerDelimiter.startIndex].codePoint ||
95
93
  ((openerDelimiter.type === 'both' || closerDelimiter.type === 'both') &&
96
- (openerDelimiter.originalThickness +
97
- closerDelimiter.originalThickness) %
98
- 3 ===
99
- 0 &&
94
+ (openerDelimiter.originalThickness + closerDelimiter.originalThickness) % 3 === 0 &&
100
95
  openerDelimiter.originalThickness % 3 !== 0)) {
101
96
  return { paired: false, opener: true, closer: true };
102
97
  }
103
98
  return { paired: true };
104
99
  }
105
- processDelimiterPair(openerDelimiter, closerDelimiter, internalTokens, nodePoints, api) {
100
+ function processDelimiterPair(openerDelimiter, closerDelimiter, internalTokens) {
106
101
  let thickness = 1;
107
102
  if (openerDelimiter.thickness > 1 && closerDelimiter.thickness > 1) {
108
103
  thickness = 2;
109
104
  }
110
- internalTokens = api.resolveInternalTokens(internalTokens, openerDelimiter.endIndex, closerDelimiter.startIndex, nodePoints);
105
+ internalTokens = api.resolveInternalTokens(internalTokens, openerDelimiter.endIndex, closerDelimiter.startIndex);
111
106
  const token = {
112
107
  nodeType: thickness === 1 ? EmphasisType : StrongType,
113
108
  startIndex: openerDelimiter.endIndex - thickness,
@@ -139,13 +134,32 @@ class EmphasisTokenizer extends BaseInlineTokenizer {
139
134
  remainCloserDelimiter,
140
135
  };
141
136
  }
142
- processToken(token, children) {
143
- const result = {
144
- type: token.nodeType,
145
- children: children !== null && children !== void 0 ? children : [],
146
- };
147
- return result;
137
+ };
138
+
139
+ const parse = function (api) {
140
+ return {
141
+ parse: tokens => tokens.map(token => {
142
+ const children = api.parseInlineTokens(token.children);
143
+ const node = api.shouldReservePosition
144
+ ? { type: token.nodeType, position: api.calcPosition(token), children }
145
+ : { type: token.nodeType, children };
146
+ return node;
147
+ }),
148
+ };
149
+ };
150
+
151
+ const uniqueName = '@yozora/tokenizer-emphasis';
152
+
153
+ class EmphasisTokenizer extends BaseInlineTokenizer {
154
+ constructor(props = {}) {
155
+ var _a, _b;
156
+ super({
157
+ name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
158
+ priority: (_b = props.priority) !== null && _b !== void 0 ? _b : TokenizerPriority.CONTAINING_INLINE,
159
+ });
160
+ this.match = match;
161
+ this.parse = parse;
148
162
  }
149
163
  }
150
164
 
151
- export { EmphasisTokenizer, uniqueName as EmphasisTokenizerName, EmphasisTokenizer as default };
165
+ export { EmphasisTokenizer, uniqueName as EmphasisTokenizerName, EmphasisTokenizer as default, match as emphasisMatch, parse as emphasisParse };
@@ -1,5 +1,5 @@
1
- import { EmphasisTokenizer } from './tokenizer';
2
- export { EmphasisTokenizer } from './tokenizer';
1
+ export { match as emphasisMatch } from './match';
2
+ export { parse as emphasisParse } from './parse';
3
+ export { EmphasisTokenizer, EmphasisTokenizer as default } from './tokenizer';
3
4
  export { uniqueName as EmphasisTokenizerName } from './types';
4
- export type { Token as EmphasisToken, TokenizerProps as EmphasisTokenizerProps, } from './types';
5
- export default EmphasisTokenizer;
5
+ export type { IThis as IEmphasisHookContext, IToken as IEmphasisToken, ITokenizerProps as IEmphasisTokenizerProps, } from './types';
@@ -0,0 +1,7 @@
1
+ import type { IMatchInlineHookCreator } from '@yozora/core-tokenizer';
2
+ import type { IDelimiter, IThis, IToken, T } from './types';
3
+ /**
4
+ * @see https://github.com/syntax-tree/mdast#strong
5
+ * @see https://github.github.com/gfm/#emphasis-and-strong-emphasis
6
+ */
7
+ 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,34 +1,13 @@
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 Emphasis and Strong Emphasis.
8
- *
9
6
  * @see https://github.com/syntax-tree/mdast#strong
10
7
  * @see https://github.github.com/gfm/#emphasis-and-strong-emphasis
11
8
  */
12
- export declare class EmphasisTokenizer extends BaseInlineTokenizer<Delimiter> implements Tokenizer, TokenizerMatchInlineHook<T, Delimiter, Token>, TokenizerParseInlineHook<T, Token, Node> {
13
- constructor(props?: TokenizerProps);
14
- /**
15
- * @override
16
- * @see BaseInlineTokenizer
17
- */
18
- protected _findDelimiter(startIndex: number, endIndex: number, nodePoints: ReadonlyArray<NodePoint>, api: Readonly<MatchInlinePhaseApi>): Delimiter | null;
19
- /**
20
- * @override
21
- * @see TokenizerMatchInlineHook
22
- */
23
- isDelimiterPair(openerDelimiter: Delimiter, closerDelimiter: Delimiter, internalTokens: ReadonlyArray<YastInlineToken>, nodePoints: ReadonlyArray<NodePoint>): ResultOfIsDelimiterPair;
24
- /**
25
- * @override
26
- * @see TokenizerMatchInlineHook
27
- */
28
- processDelimiterPair(openerDelimiter: Delimiter, closerDelimiter: Delimiter, internalTokens: ReadonlyArray<YastInlineToken>, nodePoints: ReadonlyArray<NodePoint>, api: Readonly<MatchInlinePhaseApi>): ResultOfProcessDelimiterPair<T, Token, Delimiter>;
29
- /**
30
- * @override
31
- * @see TokenizerParseInlineHook
32
- */
33
- processToken(token: Token, children?: YastNode[]): Node;
9
+ export declare class EmphasisTokenizer 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>;
34
13
  }
@@ -1,15 +1,15 @@
1
- import type { Emphasis, EmphasisType, Strong, StrongType } from '@yozora/ast';
2
- import type { BaseInlineTokenizerProps, PartialYastInlineToken, YastTokenDelimiter } from '@yozora/core-tokenizer';
1
+ import type { EmphasisType, IEmphasis, IStrong, StrongType } from '@yozora/ast';
2
+ import type { IBaseInlineTokenizerProps, IPartialYastInlineToken, ITokenizer, IYastTokenDelimiter } from '@yozora/core-tokenizer';
3
3
  export declare type T = EmphasisType | StrongType;
4
- export declare type Node = Emphasis | Strong;
4
+ export declare type INode = IEmphasis | IStrong;
5
5
  export declare const uniqueName = "@yozora/tokenizer-emphasis";
6
- export interface Token extends PartialYastInlineToken<T> {
6
+ export interface IToken extends IPartialYastInlineToken<T> {
7
7
  /**
8
- * Delimiter thickness.
8
+ * IDelimiter thickness.
9
9
  */
10
10
  thickness: number;
11
11
  }
12
- export interface Delimiter extends YastTokenDelimiter {
12
+ export interface IDelimiter extends IYastTokenDelimiter {
13
13
  /**
14
14
  * Thickness of the delimiter.
15
15
  */
@@ -19,4 +19,5 @@ export interface Delimiter extends YastTokenDelimiter {
19
19
  */
20
20
  originalThickness: number;
21
21
  }
22
- export declare type TokenizerProps = Partial<BaseInlineTokenizerProps>;
22
+ export declare type IThis = ITokenizer;
23
+ export declare type ITokenizerProps = Partial<IBaseInlineTokenizerProps>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yozora/tokenizer-emphasis",
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,9 +35,9 @@
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"
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
41
  },
42
- "gitHead": "fb4b804548592c09259aabcf9cc4dd96176bd024"
42
+ "gitHead": "da59d85520455c59a117a35032ef1a035c10ea21"
43
43
  }