ds-markdown 0.1.3-beta.1 → 0.1.4-beta.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.
Files changed (93) hide show
  1. package/README.md +14 -14
  2. package/dist/cjs/index.d.ts +98 -6
  3. package/dist/cjs/index.js +2 -12
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/plugins/index.d.ts +8 -1
  6. package/dist/cjs/plugins/index.js +2 -24
  7. package/dist/cjs/plugins/index.js.map +1 -1
  8. package/dist/esm/index.d.ts +98 -6
  9. package/dist/esm/index.js +2 -5
  10. package/dist/esm/index.js.map +1 -1
  11. package/dist/esm/plugins/index.d.ts +8 -1
  12. package/dist/esm/plugins/index.js +2 -17
  13. package/dist/esm/plugins/index.js.map +1 -1
  14. package/package.json +15 -5
  15. package/dist/cjs/AutoScroll/index.d.ts +0 -6
  16. package/dist/cjs/AutoScroll/index.js +0 -9
  17. package/dist/cjs/AutoScroll/index.js.map +0 -1
  18. package/dist/cjs/Markdown/index.d.ts +0 -4
  19. package/dist/cjs/Markdown/index.js +0 -70
  20. package/dist/cjs/Markdown/index.js.map +0 -1
  21. package/dist/cjs/MarkdownCMD/index.d.ts +0 -3
  22. package/dist/cjs/MarkdownCMD/index.js +0 -197
  23. package/dist/cjs/MarkdownCMD/index.js.map +0 -1
  24. package/dist/cjs/components/BlockWrap/index.d.ts +0 -9
  25. package/dist/cjs/components/BlockWrap/index.js +0 -8
  26. package/dist/cjs/components/BlockWrap/index.js.map +0 -1
  27. package/dist/cjs/components/HighReactMarkdown/index.d.ts +0 -11
  28. package/dist/cjs/components/HighReactMarkdown/index.js +0 -58
  29. package/dist/cjs/components/HighReactMarkdown/index.js.map +0 -1
  30. package/dist/cjs/constant.d.ts +0 -3
  31. package/dist/cjs/constant.js +0 -7
  32. package/dist/cjs/constant.js.map +0 -1
  33. package/dist/cjs/defined.d.ts +0 -132
  34. package/dist/cjs/defined.js +0 -3
  35. package/dist/cjs/defined.js.map +0 -1
  36. package/dist/cjs/hooks/useTypingTask.d.ts +0 -32
  37. package/dist/cjs/hooks/useTypingTask.js +0 -338
  38. package/dist/cjs/hooks/useTypingTask.js.map +0 -1
  39. package/dist/cjs/package.json +0 -1
  40. package/dist/cjs/utils/Tokenizer.d.ts +0 -47
  41. package/dist/cjs/utils/Tokenizer.js +0 -196
  42. package/dist/cjs/utils/Tokenizer.js.map +0 -1
  43. package/dist/cjs/utils/compiler.d.ts +0 -4
  44. package/dist/cjs/utils/compiler.js +0 -65
  45. package/dist/cjs/utils/compiler.js.map +0 -1
  46. package/dist/cjs/utils/methods/deepClone.d.ts +0 -1
  47. package/dist/cjs/utils/methods/deepClone.js +0 -7
  48. package/dist/cjs/utils/methods/deepClone.js.map +0 -1
  49. package/dist/cjs/utils/remarkMathBracket.d.ts +0 -7
  50. package/dist/cjs/utils/remarkMathBracket.js +0 -40
  51. package/dist/cjs/utils/remarkMathBracket.js.map +0 -1
  52. package/dist/cjs/utils/rule.d.ts +0 -25
  53. package/dist/cjs/utils/rule.js +0 -72
  54. package/dist/cjs/utils/rule.js.map +0 -1
  55. package/dist/esm/AutoScroll/index.d.ts +0 -6
  56. package/dist/esm/AutoScroll/index.js +0 -7
  57. package/dist/esm/AutoScroll/index.js.map +0 -1
  58. package/dist/esm/Markdown/index.d.ts +0 -4
  59. package/dist/esm/Markdown/index.js +0 -65
  60. package/dist/esm/Markdown/index.js.map +0 -1
  61. package/dist/esm/MarkdownCMD/index.d.ts +0 -3
  62. package/dist/esm/MarkdownCMD/index.js +0 -192
  63. package/dist/esm/MarkdownCMD/index.js.map +0 -1
  64. package/dist/esm/components/BlockWrap/index.d.ts +0 -9
  65. package/dist/esm/components/BlockWrap/index.js +0 -6
  66. package/dist/esm/components/BlockWrap/index.js.map +0 -1
  67. package/dist/esm/components/HighReactMarkdown/index.d.ts +0 -11
  68. package/dist/esm/components/HighReactMarkdown/index.js +0 -53
  69. package/dist/esm/components/HighReactMarkdown/index.js.map +0 -1
  70. package/dist/esm/constant.d.ts +0 -3
  71. package/dist/esm/constant.js +0 -4
  72. package/dist/esm/constant.js.map +0 -1
  73. package/dist/esm/defined.d.ts +0 -132
  74. package/dist/esm/defined.js +0 -2
  75. package/dist/esm/defined.js.map +0 -1
  76. package/dist/esm/hooks/useTypingTask.d.ts +0 -32
  77. package/dist/esm/hooks/useTypingTask.js +0 -334
  78. package/dist/esm/hooks/useTypingTask.js.map +0 -1
  79. package/dist/esm/utils/Tokenizer.d.ts +0 -47
  80. package/dist/esm/utils/Tokenizer.js +0 -191
  81. package/dist/esm/utils/Tokenizer.js.map +0 -1
  82. package/dist/esm/utils/compiler.d.ts +0 -4
  83. package/dist/esm/utils/compiler.js +0 -62
  84. package/dist/esm/utils/compiler.js.map +0 -1
  85. package/dist/esm/utils/methods/deepClone.d.ts +0 -1
  86. package/dist/esm/utils/methods/deepClone.js +0 -4
  87. package/dist/esm/utils/methods/deepClone.js.map +0 -1
  88. package/dist/esm/utils/remarkMathBracket.d.ts +0 -7
  89. package/dist/esm/utils/remarkMathBracket.js +0 -36
  90. package/dist/esm/utils/remarkMathBracket.js.map +0 -1
  91. package/dist/esm/utils/rule.d.ts +0 -25
  92. package/dist/esm/utils/rule.js +0 -69
  93. package/dist/esm/utils/rule.js.map +0 -1
@@ -1,191 +0,0 @@
1
- /** 此文件借鉴 marked 的部分代码 */
2
- import { rules } from './rule.js';
3
- let id = 0;
4
- export const getTokenId = () => {
5
- return id++;
6
- };
7
- export class Tokenizer {
8
- /** 空行 */
9
- space(src) {
10
- const cap = rules.block.newline.exec(src);
11
- if (cap) {
12
- return {
13
- type: 'space',
14
- raw: cap[0],
15
- id: getTokenId(),
16
- };
17
- }
18
- }
19
- /** 围栏 fence */
20
- fence(src) {
21
- const cap = rules.block.fences.exec(src);
22
- if (cap) {
23
- return {
24
- type: 'fence',
25
- raw: cap[0],
26
- id: getTokenId(),
27
- };
28
- }
29
- }
30
- /** 块 */
31
- segment(src) {
32
- const cap = rules.block.segment.exec(src);
33
- if (cap) {
34
- return {
35
- type: 'segment',
36
- raw: cap[0],
37
- id: getTokenId(),
38
- };
39
- }
40
- }
41
- /** 列表 */
42
- list(src) {
43
- let cap = rules.block.list.exec(src);
44
- if (cap) {
45
- let bull = cap[1].trim();
46
- const isordered = bull.length > 1;
47
- const list = {
48
- type: 'list',
49
- raw: '',
50
- items: [],
51
- loose: false,
52
- id: getTokenId(),
53
- };
54
- bull = isordered ? `\\d{1,9}\\${bull.slice(-1)}` : `\\${bull}`;
55
- // Get next list item
56
- const itemRegex = rules.other.listItemRegex(bull);
57
- while (src) {
58
- let endEarly = false;
59
- let raw = '';
60
- let itemContents = '';
61
- if (!(cap = itemRegex.exec(src))) {
62
- break;
63
- }
64
- if (rules.block.hr.test(src)) {
65
- // End list if bullet was actually HR (possibly move into itemRegex?)
66
- break;
67
- }
68
- raw = cap[0];
69
- src = src.substring(raw.length);
70
- /** 获取列表项 */
71
- let line = cap[2].split('\n', 1)[0].replace(rules.other.listReplaceTabs, (t) => ' '.repeat(3 * t.length));
72
- let nextLine = src.split('\n', 1)[0];
73
- let blankLine = !line.trim();
74
- let indent = 0;
75
- if (blankLine) {
76
- indent = cap[1].length + 1;
77
- }
78
- else {
79
- indent = cap[2].search(rules.other.nonSpaceChar); // Find first non-space char
80
- indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent
81
- itemContents = line.slice(indent);
82
- indent += cap[1].length;
83
- }
84
- if (blankLine && src === '') {
85
- endEarly = true;
86
- }
87
- else if (blankLine && rules.other.blankLine.test(nextLine)) {
88
- // Items begin with at most one blank line
89
- raw += nextLine + '\n';
90
- src = src.substring(nextLine.length + 1);
91
- endEarly = true;
92
- }
93
- if (!endEarly) {
94
- const nextBulletRegex = rules.other.nextBulletRegex(indent);
95
- const hrRegex = rules.other.hrRegex(indent);
96
- const fencesBeginRegex = rules.other.fencesBeginRegex(indent);
97
- const headingBeginRegex = rules.other.headingBeginRegex(indent);
98
- const htmlBeginRegex = rules.other.htmlBeginRegex(indent);
99
- // Check if following lines should be included in List Item
100
- while (src) {
101
- const rawLine = src.split('\n', 1)[0];
102
- const nextLineWithoutTabs = nextLine.replace(rules.other.tabCharGlobal, ' ');
103
- nextLine = rawLine;
104
- // End list item if found code fences
105
- if (fencesBeginRegex.test(nextLine)) {
106
- break;
107
- }
108
- // End list item if found start of new heading
109
- if (headingBeginRegex.test(nextLine)) {
110
- break;
111
- }
112
- // End list item if found start of html block
113
- if (htmlBeginRegex.test(nextLine)) {
114
- break;
115
- }
116
- // End list item if found start of new bullet
117
- if (nextBulletRegex.test(nextLine)) {
118
- break;
119
- }
120
- // Horizontal rule found
121
- if (hrRegex.test(nextLine)) {
122
- break;
123
- }
124
- if (nextLineWithoutTabs.search(rules.other.nonSpaceChar) >= indent || !nextLine.trim()) {
125
- // Dedent if possible
126
- itemContents += '\n' + nextLineWithoutTabs.slice(indent);
127
- }
128
- else {
129
- // not enough indentation
130
- if (blankLine) {
131
- break;
132
- }
133
- // paragraph continuation unless last line was a different block level element
134
- if (line.replace(rules.other.tabCharGlobal, ' ').search(rules.other.nonSpaceChar) >= 4) {
135
- // indented code block
136
- break;
137
- }
138
- if (fencesBeginRegex.test(line)) {
139
- break;
140
- }
141
- if (headingBeginRegex.test(line)) {
142
- break;
143
- }
144
- if (hrRegex.test(line)) {
145
- break;
146
- }
147
- itemContents += '\n' + nextLine;
148
- }
149
- if (!blankLine && !nextLine.trim()) {
150
- // Check if current line is blank
151
- blankLine = true;
152
- }
153
- raw += rawLine + '\n';
154
- src = src.substring(rawLine.length + 1);
155
- line = nextLineWithoutTabs.slice(indent);
156
- }
157
- }
158
- let ischecked;
159
- const istask = rules.other.listIsTask.exec(itemContents);
160
- if (istask) {
161
- ischecked = istask[0] !== '[ ] ';
162
- itemContents = itemContents.replace(rules.other.listReplaceTask, '');
163
- }
164
- list.items.push({
165
- type: 'list_item',
166
- raw,
167
- task: !!istask,
168
- checked: ischecked,
169
- loose: false,
170
- text: itemContents,
171
- tokens: [],
172
- id: getTokenId(),
173
- });
174
- list.raw += raw;
175
- }
176
- // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic
177
- const lastItem = list.items.at(-1);
178
- if (lastItem) {
179
- lastItem.raw = lastItem.raw.trimEnd();
180
- lastItem.text = lastItem.text.trimEnd();
181
- }
182
- else {
183
- // not a list since there were no items
184
- return;
185
- }
186
- list.raw = list.raw.trimEnd();
187
- return list;
188
- }
189
- }
190
- }
191
- //# sourceMappingURL=Tokenizer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tokenizer.js","sourceRoot":"","sources":["../../../src/utils/Tokenizer.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import { Token } from './Tokenizer.js';
2
- declare function createCompiler(src: string): Token[];
3
- export declare const compiler: typeof createCompiler;
4
- export {};
@@ -1,62 +0,0 @@
1
- import { getTokenId, Tokenizer } from './Tokenizer.js';
2
- function compile(src) {
3
- const tokenizer = new Tokenizer();
4
- const tokens = [];
5
- let prevScr = src;
6
- while (src) {
7
- if (src.length === 0) {
8
- break;
9
- }
10
- // TODO: 临时方案
11
- if (src.trim().length === 0 && tokens.length > 0) {
12
- const lastToken = tokens[tokens.length - 1];
13
- // 如果只剩下空格或换行符,则加到上一个token中
14
- if (lastToken.type === 'list') {
15
- lastToken.raw = lastToken.raw + src;
16
- break;
17
- }
18
- }
19
- const space = tokenizer.space(src);
20
- if (space) {
21
- tokens.push(space);
22
- src = src.slice(space.raw.length);
23
- continue;
24
- }
25
- const list = tokenizer.list(src);
26
- if (list) {
27
- tokens.push(list);
28
- src = src.slice(list.raw.length);
29
- continue;
30
- }
31
- const fence = tokenizer.fence(src);
32
- if (fence) {
33
- tokens.push(fence);
34
- src = src.slice(fence.raw.length);
35
- continue;
36
- }
37
- const segment = tokenizer.segment(src);
38
- if (segment) {
39
- tokens.push(segment);
40
- src = src.slice(segment.raw.length);
41
- continue;
42
- }
43
- if (prevScr === src && src) {
44
- // 如果src没有变化,则认为是一个段落
45
- // todo: 后面会做优化,进行细分
46
- tokens.push({
47
- type: 'segment',
48
- raw: src,
49
- id: getTokenId(),
50
- });
51
- src = '';
52
- }
53
- prevScr = src;
54
- }
55
- return tokens;
56
- }
57
- function createCompiler(src) {
58
- const tokens = compile(src);
59
- return tokens;
60
- }
61
- export const compiler = createCompiler;
62
- //# sourceMappingURL=compiler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../../src/utils/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAS,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE9D,SAAS,OAAO,CAAC,GAAW;IAC1B,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAElC,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAG,GAAG,CAAC;IAElB,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM;QACR,CAAC;QAED,aAAa;QACb,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC5C,2BAA2B;YAC3B,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC9B,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,GAAG,GAAG,CAAC;gBACpC,MAAM;YACR,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACjC,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpC,SAAS;QACX,CAAC;QACD,IAAI,OAAO,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;YAC3B,qBAAqB;YACrB,oBAAoB;YACpB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,SAAS;gBACf,GAAG,EAAE,GAAG;gBACR,EAAE,EAAE,UAAU,EAAE;aACjB,CAAC,CAAC;YACH,GAAG,GAAG,EAAE,CAAC;QACX,CAAC;QACD,OAAO,GAAG,GAAG,CAAC;IAChB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAc,CAAC"}
@@ -1 +0,0 @@
1
- export default function deepClone<T>(obj: T): T;
@@ -1,4 +0,0 @@
1
- export default function deepClone(obj) {
2
- return JSON.parse(JSON.stringify(obj));
3
- }
4
- //# sourceMappingURL=deepClone.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deepClone.js","sourceRoot":"","sources":["../../../../src/utils/methods/deepClone.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,SAAS,CAAI,GAAM;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC"}
@@ -1,7 +0,0 @@
1
- import { Plugin } from 'unified';
2
- /**
3
- * remark 插件:将 \[...\] 转换为 $$...$$,\(...\) 转换为 $...$,以便 remark-math 能识别。
4
- */
5
- declare const remarkMathBracket: Plugin;
6
- export declare const replaceMathBracket: (value: string) => string;
7
- export default remarkMathBracket;
@@ -1,36 +0,0 @@
1
- import { visit } from 'unist-util-visit';
2
- /**
3
- * remark 插件:将 \[...\] 转换为 $$...$$,\(...\) 转换为 $...$,以便 remark-math 能识别。
4
- */
5
- const remarkMathBracket = () => (tree, file) => {
6
- visit(tree, 'text', (node) => {
7
- const value = node.value;
8
- if (typeof value === 'string') {
9
- node.value = replaceMathBracket(value);
10
- }
11
- });
12
- };
13
- export const replaceMathBracket = (value) => {
14
- // 1. 提取所有块级公式内容,临时替换为占位符, [...]
15
- const blockMatches = [];
16
- let replaced = value.replace(/\\*\[([\s\S]+?)\\*\]/g, (_m, p1) => {
17
- blockMatches.push(p1);
18
- return `__BLOCK_MATH_${blockMatches.length - 1}__`;
19
- });
20
- // 也需要兼容 $$ xxxx $$ 这种写法
21
- replaced = replaced.replace(/\$\$([\s\S]+?)\$\$/g, (_m, p1) => {
22
- blockMatches.push(p1);
23
- return `__BLOCK_MATH_${blockMatches.length - 1}__`;
24
- });
25
- // 2. 替换块级公式外部的 ( ... ) 为 $...$
26
- replaced = replaced.replace(/\\*\(([^)]+?)\\*\)/g, (_m, p1) => {
27
- return '$' + p1 + '$';
28
- });
29
- // 3. 还原块级公式内容,保持其内部小括号原样
30
- replaced = replaced.replace(/__BLOCK_MATH_(\d+)__/g, (_m, idx) => {
31
- return '$$' + blockMatches[Number(idx)] + '$$';
32
- });
33
- return replaced;
34
- };
35
- export default remarkMathBracket;
36
- //# sourceMappingURL=remarkMathBracket.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remarkMathBracket.js","sourceRoot":"","sources":["../../../src/utils/remarkMathBracket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC;;GAEG;AACH,MAAM,iBAAiB,GAAW,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;IACrD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,IAAuB,EAAE,EAAE;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAE,EAAE;IAClD,gCAAgC;IAChC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QAC/D,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,OAAO,gBAAgB,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,wBAAwB;IACxB,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QAC5D,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,OAAO,gBAAgB,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,+BAA+B;IAC/B,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QAC5D,OAAO,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,yBAAyB;IACzB,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE;QAC/D,OAAO,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -1,25 +0,0 @@
1
- /** 此文件借鉴 marked 的部分代码 */
2
- export declare const rules: {
3
- block: {
4
- newline: RegExp;
5
- fences: RegExp;
6
- segment: RegExp;
7
- list: RegExp;
8
- hr: RegExp;
9
- };
10
- other: {
11
- caret: RegExp;
12
- listItemRegex: (bull: string) => RegExp;
13
- nextBulletRegex: (indent: number) => RegExp;
14
- listReplaceTabs: RegExp;
15
- nonSpaceChar: RegExp;
16
- blankLine: RegExp;
17
- listIsTask: RegExp;
18
- listReplaceTask: RegExp;
19
- tabCharGlobal: RegExp;
20
- hrRegex: (indent: number) => RegExp;
21
- headingBeginRegex: (indent: number) => RegExp;
22
- htmlBeginRegex: (indent: number) => RegExp;
23
- fencesBeginRegex: (indent: number) => RegExp;
24
- };
25
- };
@@ -1,69 +0,0 @@
1
- /** 此文件借鉴 marked 的部分代码 */
2
- const other = {
3
- caret: /(^|[^[])\^/g,
4
- listItemRegex: (bull) => new RegExp(`^( {0,3}${bull})((?:[\t ][^\\n]*)?(?:\\n|$))`),
5
- nextBulletRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`),
6
- listReplaceTabs: /^\t+/,
7
- nonSpaceChar: /[^ ]/,
8
- blankLine: /^[ \t]*$/,
9
- listIsTask: /^\[[ xX]\] /,
10
- listReplaceTask: /^\[[ xX]\] +/,
11
- tabCharGlobal: /\t/g,
12
- hrRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),
13
- headingBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),
14
- htmlBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, 'i'),
15
- fencesBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\`\`\`|~~~)`),
16
- };
17
- /**
18
- * 编辑正则表达式
19
- * @param regex 正则表达式
20
- * @param opt 正则表达式选项
21
- * @returns 编辑后的正则表达式
22
- */
23
- function edit(regex, opt = '') {
24
- let source = typeof regex === 'string' ? regex : regex.source;
25
- const obj = {
26
- replace: (name, val) => {
27
- let valSource = typeof val === 'string' ? val : val.source;
28
- valSource = valSource.replace(other.caret, '$1');
29
- source = source.replace(name, valSource);
30
- return obj;
31
- },
32
- getRegex: () => {
33
- return new RegExp(source, opt);
34
- },
35
- };
36
- return obj;
37
- }
38
- const newline = /^(?:[ \t]*(?:\n|$))+/;
39
- const hr = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/;
40
- /** 列表 */
41
- const bullet = /(?:[*+-]|\d{1,9}[.)])/;
42
- /** 列表 */
43
- const list = edit(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/)
44
- .replace(/bull/g, bullet)
45
- .getRegex();
46
- /** 围栏 fence
47
- * 什么是围栏: 围栏是用来包裹代码块的,比如 ```javascript 和 ``` 之间就是围栏
48
- */
49
- const fences = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/;
50
- // 一个块
51
- // const _segment = /^([^\n]+(?:\n(?!fences|list|hr| +\n)[^\n]+)*)/;
52
- const _segment = /^([^\n]+(?:\n(?!fences|list|hr| +\n|\n)[^\n]+)*\n?)/;
53
- const segment = edit(_segment)
54
- .replace(/fences/, fences)
55
- .replace(/list/, list)
56
- .replace(/hr/, hr)
57
- .getRegex();
58
- const blockNormal = {
59
- newline,
60
- fences,
61
- segment,
62
- list,
63
- hr,
64
- };
65
- export const rules = {
66
- block: blockNormal,
67
- other,
68
- };
69
- //# sourceMappingURL=rule.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rule.js","sourceRoot":"","sources":["../../../src/utils/rule.ts"],"names":[],"mappings":"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"}