@yozora/tokenizer-break 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` / `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 BreakTokenizer from '@yozora/tokenizer-break'
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 BreakTokenizer())
96
96
 
97
97
  // parse source markdown content
@@ -250,7 +250,6 @@ Name | Type | Required | Default
250
250
  [@yozora/tokenizer-link]: https://github.com/yozorajs/yozora/tree/main/tokenizers/link#readme
251
251
  [@yozora/tokenizer-link-reference]: https://github.com/yozorajs/yozora/tree/main/tokenizers/link-reference#readme
252
252
  [@yozora/tokenizer-list]: https://github.com/yozorajs/yozora/tree/main/tokenizers/list#readme
253
- [@yozora/tokenizer-list-item]: https://github.com/yozorajs/yozora/tree/main/tokenizers/list-item#readme
254
253
  [@yozora/tokenizer-math]: https://github.com/yozorajs/yozora/tree/main/tokenizers/math#readme
255
254
  [@yozora/tokenizer-paragraph]: https://github.com/yozorajs/yozora/tree/main/tokenizers/paragraph#readme
256
255
  [@yozora/tokenizer-setext-heading]: https://github.com/yozorajs/yozora/tree/main/tokenizers/setext-heading#readme
@@ -310,7 +309,6 @@ Name | Type | Required | Default
310
309
  [doc-@yozora/tokenizer-definition]: https://yozora.guanghechen.com/docs/package/tokenizer-definition
311
310
  [doc-@yozora/tokenizer-link-reference]: https://yozora.guanghechen.com/docs/package/tokenizer-link-reference
312
311
  [doc-@yozora/tokenizer-list]: https://yozora.guanghechen.com/docs/package/tokenizer-list
313
- [doc-@yozora/tokenizer-list-item]: https://yozora.guanghechen.com/docs/package/tokenizer-list-item
314
312
  [doc-@yozora/tokenizer-math]: https://yozora.guanghechen.com/docs/package/tokenizer-math
315
313
  [doc-@yozora/tokenizer-paragraph]: https://yozora.guanghechen.com/docs/package/tokenizer-paragraph
316
314
  [doc-@yozora/tokenizer-setext-heading]: https://yozora.guanghechen.com/docs/package/tokenizer-setext-heading
package/lib/cjs/index.js CHANGED
@@ -13,15 +13,12 @@ var BreakTokenMarkerType;
13
13
  BreakTokenMarkerType["MORE_THAN_TWO_SPACES"] = "more-than-two-spaces";
14
14
  })(BreakTokenMarkerType || (BreakTokenMarkerType = {}));
15
15
 
16
- class BreakTokenizer extends coreTokenizer.BaseInlineTokenizer {
17
- constructor(props = {}) {
18
- var _a, _b;
19
- super({
20
- name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
21
- priority: (_b = props.priority) !== null && _b !== void 0 ? _b : coreTokenizer.TokenizerPriority.SOFT_INLINE,
22
- });
23
- }
24
- _findDelimiter(startIndex, endIndex, api) {
16
+ const match = function (api) {
17
+ return {
18
+ findDelimiter: () => coreTokenizer.genFindDelimiter(_findDelimiter),
19
+ processSingleDelimiter,
20
+ };
21
+ function _findDelimiter(startIndex, endIndex) {
25
22
  const nodePoints = api.getNodePoints();
26
23
  for (let i = startIndex + 1; i < endIndex; ++i) {
27
24
  if (nodePoints[i].codePoint !== character.VirtualCodePoint.LINE_END)
@@ -66,7 +63,7 @@ class BreakTokenizer extends coreTokenizer.BaseInlineTokenizer {
66
63
  }
67
64
  return null;
68
65
  }
69
- processSingleDelimiter(delimiter) {
66
+ function processSingleDelimiter(delimiter) {
70
67
  const token = {
71
68
  nodeType: ast.BreakType,
72
69
  startIndex: delimiter.startIndex,
@@ -74,12 +71,33 @@ class BreakTokenizer extends coreTokenizer.BaseInlineTokenizer {
74
71
  };
75
72
  return [token];
76
73
  }
77
- parseInline() {
78
- const result = { type: ast.BreakType };
79
- return result;
74
+ };
75
+
76
+ const parse = function (api) {
77
+ return {
78
+ parse: tokens => tokens.map(token => {
79
+ const node = api.shouldReservePosition
80
+ ? { type: ast.BreakType, position: api.calcPosition(token) }
81
+ : { type: ast.BreakType };
82
+ return node;
83
+ }),
84
+ };
85
+ };
86
+
87
+ class BreakTokenizer extends coreTokenizer.BaseInlineTokenizer {
88
+ constructor(props = {}) {
89
+ var _a, _b;
90
+ super({
91
+ name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
92
+ priority: (_b = props.priority) !== null && _b !== void 0 ? _b : coreTokenizer.TokenizerPriority.SOFT_INLINE,
93
+ });
94
+ this.match = match;
95
+ this.parse = parse;
80
96
  }
81
97
  }
82
98
 
83
99
  exports.BreakTokenizer = BreakTokenizer;
84
100
  exports.BreakTokenizerName = uniqueName;
85
- exports['default'] = BreakTokenizer;
101
+ exports.breakMatch = match;
102
+ exports.breakParse = parse;
103
+ exports["default"] = BreakTokenizer;
package/lib/esm/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { BreakType } from '@yozora/ast';
2
2
  import { VirtualCodePoint, AsciiCodePoint } from '@yozora/character';
3
- import { BaseInlineTokenizer, TokenizerPriority } from '@yozora/core-tokenizer';
3
+ import { genFindDelimiter, BaseInlineTokenizer, TokenizerPriority } from '@yozora/core-tokenizer';
4
4
 
5
5
  const uniqueName = '@yozora/tokenizer-break';
6
6
  var BreakTokenMarkerType;
@@ -9,15 +9,12 @@ var BreakTokenMarkerType;
9
9
  BreakTokenMarkerType["MORE_THAN_TWO_SPACES"] = "more-than-two-spaces";
10
10
  })(BreakTokenMarkerType || (BreakTokenMarkerType = {}));
11
11
 
12
- class BreakTokenizer extends 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 : TokenizerPriority.SOFT_INLINE,
18
- });
19
- }
20
- _findDelimiter(startIndex, endIndex, api) {
12
+ const match = function (api) {
13
+ return {
14
+ findDelimiter: () => genFindDelimiter(_findDelimiter),
15
+ processSingleDelimiter,
16
+ };
17
+ function _findDelimiter(startIndex, endIndex) {
21
18
  const nodePoints = api.getNodePoints();
22
19
  for (let i = startIndex + 1; i < endIndex; ++i) {
23
20
  if (nodePoints[i].codePoint !== VirtualCodePoint.LINE_END)
@@ -62,7 +59,7 @@ class BreakTokenizer extends BaseInlineTokenizer {
62
59
  }
63
60
  return null;
64
61
  }
65
- processSingleDelimiter(delimiter) {
62
+ function processSingleDelimiter(delimiter) {
66
63
  const token = {
67
64
  nodeType: BreakType,
68
65
  startIndex: delimiter.startIndex,
@@ -70,10 +67,29 @@ class BreakTokenizer extends BaseInlineTokenizer {
70
67
  };
71
68
  return [token];
72
69
  }
73
- parseInline() {
74
- const result = { type: BreakType };
75
- return result;
70
+ };
71
+
72
+ const parse = function (api) {
73
+ return {
74
+ parse: tokens => tokens.map(token => {
75
+ const node = api.shouldReservePosition
76
+ ? { type: BreakType, position: api.calcPosition(token) }
77
+ : { type: BreakType };
78
+ return node;
79
+ }),
80
+ };
81
+ };
82
+
83
+ class BreakTokenizer extends BaseInlineTokenizer {
84
+ constructor(props = {}) {
85
+ var _a, _b;
86
+ super({
87
+ name: (_a = props.name) !== null && _a !== void 0 ? _a : uniqueName,
88
+ priority: (_b = props.priority) !== null && _b !== void 0 ? _b : TokenizerPriority.SOFT_INLINE,
89
+ });
90
+ this.match = match;
91
+ this.parse = parse;
76
92
  }
77
93
  }
78
94
 
79
- export { BreakTokenizer, uniqueName as BreakTokenizerName, BreakTokenizer as default };
95
+ export { BreakTokenizer, uniqueName as BreakTokenizerName, match as breakMatch, parse as breakParse, BreakTokenizer as default };
@@ -1,5 +1,5 @@
1
- import { BreakTokenizer } from './tokenizer';
2
- export { BreakTokenizer } from './tokenizer';
1
+ export { match as breakMatch } from './match';
2
+ export { parse as breakParse } from './parse';
3
+ export { BreakTokenizer, BreakTokenizer as default } from './tokenizer';
3
4
  export { uniqueName as BreakTokenizerName } from './types';
4
- export type { Token as BreakToken, TokenizerProps as BreakTokenizerProps, } from './types';
5
- export default BreakTokenizer;
5
+ export type { IThis as IBreakHookContext, IToken as IBreakToken, ITokenizerProps as IBreakTokenizerProps, } 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 line break (not in a code span or HTML tag) that is preceded by two or more
5
+ * spaces and does not occur at the end of a block is parsed as a hard line
6
+ * break (rendered in HTML as a <br /> tag)
7
+ * @see https://github.github.com/gfm/#hard-line-breaks
8
+ *
9
+ * A regular line break (not in a code span or HTML tag) that is not preceded
10
+ * by two or more spaces or a backslash is parsed as a softbreak. (A softbreak
11
+ * may be rendered in HTML either as a line ending or as a space. The result
12
+ * will be the same in browsers.
13
+ * @see https://github.github.com/gfm/#soft-line-breaks
14
+ *
15
+ * @see https://github.com/syntax-tree/mdast#break
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,14 @@
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 a line break.
6
- *
7
- * A line break (not in a code span or HTML tag) that is preceded by two or more
8
- * spaces and does not occur at the end of a block is parsed as a hard line
9
- * break (rendered in HTML as a <br /> tag)
10
6
  * @see https://github.github.com/gfm/#hard-line-breaks
11
- *
12
- * A regular line break (not in a code span or HTML tag) that is not preceded
13
- * by two or more spaces or a backslash is parsed as a softbreak. (A softbreak
14
- * may be rendered in HTML either as a line ending or as a space. The result
15
- * will be the same in browsers.
16
7
  * @see https://github.github.com/gfm/#soft-line-breaks
17
- *
18
8
  * @see https://github.com/syntax-tree/mdast#break
19
9
  */
20
- export declare class BreakTokenizer 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): ResultOfProcessSingleDelimiter<T, Token>;
32
- /**
33
- * @override
34
- * @see TokenizerParseInlineHook
35
- */
36
- parseInline(): Node;
10
+ export declare class BreakTokenizer extends BaseInlineTokenizer<T, IDelimiter, IToken, INode, IThis> implements IInlineTokenizer<T, IDelimiter, IToken, INode, IThis> {
11
+ constructor(props?: ITokenizerProps);
12
+ readonly match: IMatchInlineHookCreator<T, IDelimiter, IToken, IThis>;
13
+ readonly parse: IParseInlineHookCreator<T, IToken, INode, IThis>;
37
14
  }
@@ -1,17 +1,18 @@
1
1
  import type { Break, BreakType } from '@yozora/ast';
2
- import type { BaseInlineTokenizerProps, PartialYastInlineToken, YastTokenDelimiter } from '@yozora/core-tokenizer';
2
+ import type { IBaseInlineTokenizerProps, IPartialYastInlineToken, ITokenizer, IYastTokenDelimiter } from '@yozora/core-tokenizer';
3
3
  export declare type T = BreakType;
4
- export declare type Node = Break;
4
+ export declare type INode = Break;
5
5
  export declare const uniqueName = "@yozora/tokenizer-break";
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
  type: 'full';
9
9
  /**
10
10
  * Line break marker type.
11
11
  */
12
12
  markerType: BreakTokenMarkerType;
13
13
  }
14
- export declare type TokenizerProps = Partial<BaseInlineTokenizerProps>;
14
+ export declare type IThis = ITokenizer;
15
+ export declare type ITokenizerProps = Partial<IBaseInlineTokenizerProps>;
15
16
  /**
16
17
  * Line break marker type.
17
18
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yozora/tokenizer-break",
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,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.3.0",
39
- "@yozora/character": "^1.3.0",
40
- "@yozora/core-tokenizer": "^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
41
  },
42
- "gitHead": "18c9b167004ad97718b2f94f25139f80598cbf7a"
42
+ "gitHead": "9f274fc7487a8c1dd213405d92508f9a7621f730"
43
43
  }