ds-markdown 0.0.9-beta.1 → 0.0.10-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.
- package/README.md +2 -9
- package/dist/cjs/MarkdownCMD/index.js +72 -37
- package/dist/cjs/MarkdownCMD/index.js.map +1 -1
- package/dist/cjs/components/HighReactMarkdown/index.js.map +1 -1
- package/dist/cjs/utils/Tokenizer.d.ts +40 -0
- package/dist/cjs/utils/Tokenizer.js +183 -0
- package/dist/cjs/utils/Tokenizer.js.map +1 -0
- package/dist/cjs/utils/compiler.d.ts +4 -0
- package/dist/cjs/utils/compiler.js +52 -0
- package/dist/cjs/utils/compiler.js.map +1 -0
- package/dist/cjs/utils/rule.d.ts +25 -0
- package/dist/cjs/utils/rule.js +71 -0
- package/dist/cjs/utils/rule.js.map +1 -0
- package/dist/esm/MarkdownCMD/index.js +71 -36
- package/dist/esm/MarkdownCMD/index.js.map +1 -1
- package/dist/esm/components/HighReactMarkdown/index.js.map +1 -1
- package/dist/esm/utils/Tokenizer.d.ts +40 -0
- package/dist/esm/utils/Tokenizer.js +179 -0
- package/dist/esm/utils/Tokenizer.js.map +1 -0
- package/dist/esm/utils/compiler.d.ts +4 -0
- package/dist/esm/utils/compiler.js +49 -0
- package/dist/esm/utils/compiler.js.map +1 -0
- package/dist/esm/utils/rule.d.ts +25 -0
- package/dist/esm/utils/rule.js +68 -0
- package/dist/esm/utils/rule.js.map +1 -0
- package/dist/style.css +3 -0
- package/package.json +12 -3
- package/dist/cjs/components/HighReactMarkdown/Highlighter/index.d.ts +0 -9
- package/dist/cjs/components/HighReactMarkdown/Highlighter/index.js +0 -23
- package/dist/cjs/components/HighReactMarkdown/Highlighter/index.js.map +0 -1
- package/dist/esm/components/HighReactMarkdown/Highlighter/index.d.ts +0 -9
- package/dist/esm/components/HighReactMarkdown/Highlighter/index.js +0 -18
- package/dist/esm/components/HighReactMarkdown/Highlighter/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
## 特性
|
|
8
8
|
|
|
9
|
+
- 🦮 对`deepseek`官网的聊天响应效果进行了1:1还原
|
|
9
10
|
- 🛠 自带打字效果
|
|
10
11
|
- 🦮 内部封装了常用的`markdown`格式的文本显示
|
|
11
12
|
- 🔤 对大文档进行了性能优化,进行分批处理,生成打字效果的时候不会对页面造成卡顿现象
|
|
@@ -46,6 +47,7 @@ const markdown = `# ds-markdown
|
|
|
46
47
|
|
|
47
48
|
## 特性
|
|
48
49
|
|
|
50
|
+
- 🦮 对`deepseek`官网的聊天响应效果进行了1:1还原
|
|
49
51
|
- 🛠 自带打字效果
|
|
50
52
|
- 🦮 内部封装了常用的\`markdown\`格式的文本显示
|
|
51
53
|
- 🔤 对大文档进行了性能优化,进行分批处理,生成打字效果的时候不会对页面造成卡顿现象
|
|
@@ -139,15 +141,6 @@ export default App;
|
|
|
139
141
|
|
|
140
142
|
由于本组件采用`react hooks`编写,所以`react`版本最低为`v16.8.0`
|
|
141
143
|
|
|
142
|
-
## 期待中的功能
|
|
143
|
-
|
|
144
|
-
- 支持多种主题(开发中)
|
|
145
|
-
- 增加测试用例(开发中)
|
|
146
|
-
- 支持H5端(未开始,预计2025年5月底完成)
|
|
147
|
-
- 支持微信、支付宝小程序端(未开始,预计2025年6月底完成)
|
|
148
|
-
|
|
149
|
-
由于本页面仔写业务写的飞起,只能在闲暇之余来开发本库,也希望各位小伙伴一起来共建😘
|
|
150
|
-
|
|
151
144
|
## License
|
|
152
145
|
|
|
153
146
|
MIT
|
|
@@ -5,8 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
7
|
const react_1 = require("react");
|
|
8
|
-
const
|
|
8
|
+
const index_1 = __importDefault(require("../components/HighReactMarkdown/index"));
|
|
9
9
|
const classnames_1 = __importDefault(require("classnames"));
|
|
10
|
+
const compiler_js_1 = require("../utils/compiler.js");
|
|
10
11
|
const constant_js_1 = require("../constant.js");
|
|
11
12
|
const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, isClosePrettyTyped = false, onEnd, onStart, onTypedChar }, ref) => {
|
|
12
13
|
/** 当前需要打字的内容 */
|
|
@@ -31,11 +32,19 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, isClosePrettyTyped
|
|
|
31
32
|
/** 打字过程中回调 */
|
|
32
33
|
const onTypedCharRef = (0, react_1.useRef)(onTypedChar);
|
|
33
34
|
onTypedCharRef.current = onTypedChar;
|
|
35
|
+
/** 打字定时器 */
|
|
34
36
|
const timerRef = (0, react_1.useRef)(null);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
+
/**
|
|
38
|
+
* 稳定段落
|
|
39
|
+
* 稳定段落是已经打过字,并且不会再变化的段落
|
|
40
|
+
*/
|
|
41
|
+
const [stableSegments, setStableSegments] = (0, react_1.useState)([]);
|
|
42
|
+
/** 当前段落 */
|
|
43
|
+
const [currentSegment, setCurrentSegment] = (0, react_1.useState)(undefined);
|
|
44
|
+
/** 当前段落引用 */
|
|
37
45
|
const currentParagraphRef = (0, react_1.useRef)(undefined);
|
|
38
|
-
currentParagraphRef.current =
|
|
46
|
+
currentParagraphRef.current = currentSegment;
|
|
47
|
+
/** 清除打字定时器 */
|
|
39
48
|
const clearTimer = () => {
|
|
40
49
|
if (timerRef.current) {
|
|
41
50
|
clearTimeout(timerRef.current);
|
|
@@ -49,8 +58,10 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, isClosePrettyTyped
|
|
|
49
58
|
isUnmountRef.current = true;
|
|
50
59
|
};
|
|
51
60
|
}, []);
|
|
52
|
-
|
|
53
|
-
const
|
|
61
|
+
/** 思考段落 */
|
|
62
|
+
const thinkingParagraphs = (0, react_1.useMemo)(() => stableSegments.filter((paragraph) => paragraph.answerType === 'thinking'), [stableSegments]);
|
|
63
|
+
/** 回答段落 */
|
|
64
|
+
const answerParagraphs = (0, react_1.useMemo)(() => stableSegments.filter((paragraph) => paragraph.answerType === 'answer'), [stableSegments]);
|
|
54
65
|
/**
|
|
55
66
|
* 记录打过的字
|
|
56
67
|
* @param char 当前字符
|
|
@@ -125,11 +136,13 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, isClosePrettyTyped
|
|
|
125
136
|
prevStr: typedCharsRef.current?.prevStr || '',
|
|
126
137
|
});
|
|
127
138
|
};
|
|
139
|
+
/** 开始打字任务 */
|
|
128
140
|
const startTypedTask = () => {
|
|
129
141
|
if (isTypedRef.current) {
|
|
130
142
|
return;
|
|
131
143
|
}
|
|
132
144
|
const chars = charsRef.current;
|
|
145
|
+
/** 停止打字 */
|
|
133
146
|
const stopTyped = () => {
|
|
134
147
|
isTypedRef.current = false;
|
|
135
148
|
if (timerRef.current) {
|
|
@@ -138,13 +151,14 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, isClosePrettyTyped
|
|
|
138
151
|
}
|
|
139
152
|
triggerOnEnd();
|
|
140
153
|
};
|
|
141
|
-
|
|
154
|
+
/** 打下一个字 */
|
|
155
|
+
const nextTyped = () => {
|
|
142
156
|
if (chars.length === 0) {
|
|
143
157
|
stopTyped();
|
|
144
158
|
return;
|
|
145
159
|
}
|
|
146
160
|
timerRef.current = setTimeout(startTyped, interval);
|
|
147
|
-
}
|
|
161
|
+
};
|
|
148
162
|
/**
|
|
149
163
|
* 开始打字
|
|
150
164
|
* @param isStartPoint 是否是开始打字
|
|
@@ -166,14 +180,14 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, isClosePrettyTyped
|
|
|
166
180
|
else {
|
|
167
181
|
triggerOnTypedChar(char);
|
|
168
182
|
}
|
|
169
|
-
const
|
|
170
|
-
/** 如果碰到 则需要处理成两个段落 */
|
|
171
|
-
if (char.
|
|
172
|
-
if (
|
|
173
|
-
|
|
183
|
+
const currentSegment = currentParagraphRef.current;
|
|
184
|
+
/** 如果碰到 space 则需要处理成两个段落 */
|
|
185
|
+
if (char.contentType === 'space') {
|
|
186
|
+
if (currentSegment) {
|
|
187
|
+
setStableSegments((prev) => {
|
|
174
188
|
const newParagraphs = [...prev];
|
|
175
|
-
if (
|
|
176
|
-
newParagraphs.push({ ...
|
|
189
|
+
if (currentSegment) {
|
|
190
|
+
newParagraphs.push({ ...currentSegment, isTyped: false });
|
|
177
191
|
}
|
|
178
192
|
newParagraphs.push({
|
|
179
193
|
content: '',
|
|
@@ -183,10 +197,10 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, isClosePrettyTyped
|
|
|
183
197
|
});
|
|
184
198
|
return newParagraphs;
|
|
185
199
|
});
|
|
186
|
-
|
|
200
|
+
setCurrentSegment(undefined);
|
|
187
201
|
}
|
|
188
202
|
else {
|
|
189
|
-
|
|
203
|
+
setStableSegments((prev) => {
|
|
190
204
|
const newParagraphs = [...prev];
|
|
191
205
|
newParagraphs.push({
|
|
192
206
|
content: '',
|
|
@@ -201,7 +215,7 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, isClosePrettyTyped
|
|
|
201
215
|
return;
|
|
202
216
|
}
|
|
203
217
|
// 处理当前段落
|
|
204
|
-
let _currentParagraph =
|
|
218
|
+
let _currentParagraph = currentSegment;
|
|
205
219
|
const newCurrentParagraph = {
|
|
206
220
|
content: '',
|
|
207
221
|
isTyped: false,
|
|
@@ -212,17 +226,17 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, isClosePrettyTyped
|
|
|
212
226
|
// 如果当前没有段落,则直接设置为当前段落
|
|
213
227
|
_currentParagraph = newCurrentParagraph;
|
|
214
228
|
}
|
|
215
|
-
else if (
|
|
229
|
+
else if (currentSegment && currentSegment?.answerType !== char.answerType) {
|
|
216
230
|
// 如果当前段落和当前字符的回答类型不一致,则需要处理成两个段落
|
|
217
|
-
|
|
231
|
+
setStableSegments((prev) => {
|
|
218
232
|
const newParagraphs = [...prev];
|
|
219
|
-
newParagraphs.push({ ...
|
|
233
|
+
newParagraphs.push({ ...currentSegment, isTyped: false });
|
|
220
234
|
return newParagraphs;
|
|
221
235
|
});
|
|
222
236
|
_currentParagraph = newCurrentParagraph;
|
|
223
|
-
|
|
237
|
+
setCurrentSegment(_currentParagraph);
|
|
224
238
|
}
|
|
225
|
-
|
|
239
|
+
setCurrentSegment((prev) => {
|
|
226
240
|
return {
|
|
227
241
|
..._currentParagraph,
|
|
228
242
|
content: (prev?.content || '') + char.content,
|
|
@@ -233,7 +247,13 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, isClosePrettyTyped
|
|
|
233
247
|
}
|
|
234
248
|
startTyped(true);
|
|
235
249
|
};
|
|
250
|
+
const lastSegmentRaw = (0, react_1.useRef)('');
|
|
236
251
|
(0, react_1.useImperativeHandle)(ref, () => ({
|
|
252
|
+
/**
|
|
253
|
+
* 添加内容
|
|
254
|
+
* @param content 内容 {string}
|
|
255
|
+
* @param answerType 回答类型 {AnswerType}
|
|
256
|
+
*/
|
|
237
257
|
push: (content, answerType) => {
|
|
238
258
|
if (isWholeTypedEndRef.current) {
|
|
239
259
|
if (constant_js_1.__DEV__) {
|
|
@@ -241,30 +261,45 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, isClosePrettyTyped
|
|
|
241
261
|
}
|
|
242
262
|
return;
|
|
243
263
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
264
|
+
if (!lastSegmentRaw.current) {
|
|
265
|
+
lastSegmentRaw.current = content;
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
lastSegmentRaw.current += content;
|
|
269
|
+
}
|
|
270
|
+
const tokens = (0, compiler_js_1.compiler)(lastSegmentRaw.current);
|
|
271
|
+
// 如果最后一个token是segment,则把最后一个token的raw赋值给lastSegmentRaw
|
|
272
|
+
if (tokens[tokens.length - 1].type === 'segment') {
|
|
273
|
+
lastSegmentRaw.current = tokens[tokens.length - 1].raw;
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
lastSegmentRaw.current = '';
|
|
277
|
+
}
|
|
278
|
+
tokens.forEach((token) => {
|
|
279
|
+
if (token.type === 'space') {
|
|
280
|
+
charsRef.current.push({ content: token.raw, answerType, contentType: 'space' });
|
|
249
281
|
}
|
|
250
282
|
else {
|
|
251
|
-
charsRef.current.push(...
|
|
252
|
-
}
|
|
253
|
-
if (index !== charsGroup.length - 1) {
|
|
254
|
-
charsRef.current.push({ content: '\n\n', answerType });
|
|
283
|
+
charsRef.current.push(...token.raw.split('').map((char) => ({ content: char, answerType, contentType: 'segment' })));
|
|
255
284
|
}
|
|
256
285
|
});
|
|
257
286
|
if (!isTypedRef.current) {
|
|
258
287
|
startTypedTask();
|
|
259
288
|
}
|
|
260
289
|
},
|
|
290
|
+
/**
|
|
291
|
+
* 清除打字任务
|
|
292
|
+
*/
|
|
261
293
|
clear: () => {
|
|
262
294
|
clearTimer();
|
|
263
295
|
charsRef.current = [];
|
|
264
|
-
|
|
265
|
-
|
|
296
|
+
setStableSegments([]);
|
|
297
|
+
setCurrentSegment(undefined);
|
|
266
298
|
isWholeTypedEndRef.current = false;
|
|
267
299
|
},
|
|
300
|
+
/**
|
|
301
|
+
* 主动触发打字结束
|
|
302
|
+
*/
|
|
268
303
|
triggerWholeEnd: () => {
|
|
269
304
|
isWholeTypedEndRef.current = true;
|
|
270
305
|
if (!isTypedRef.current) {
|
|
@@ -277,13 +312,13 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, isClosePrettyTyped
|
|
|
277
312
|
if (paragraph.type === 'br') {
|
|
278
313
|
return null;
|
|
279
314
|
}
|
|
280
|
-
return (0, jsx_runtime_1.jsx)(
|
|
281
|
-
}),
|
|
315
|
+
return (0, jsx_runtime_1.jsx)(index_1.default, { children: paragraph.content || '' }, index);
|
|
316
|
+
}), currentSegment?.answerType === answerType && (0, jsx_runtime_1.jsx)(index_1.default, { children: currentSegment.content || '' }, currentSegment.content)] }));
|
|
282
317
|
};
|
|
283
318
|
return ((0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)({
|
|
284
319
|
'ds-markdown': true,
|
|
285
320
|
apple: true,
|
|
286
|
-
}), children: [(thinkingParagraphs.length > 0 ||
|
|
321
|
+
}), children: [(thinkingParagraphs.length > 0 || currentSegment?.answerType === 'thinking') && (0, jsx_runtime_1.jsx)("div", { className: "ds-markdown-thinking", children: getParagraphs(thinkingParagraphs, 'thinking') }), (answerParagraphs.length > 0 || currentSegment?.answerType === 'answer') && (0, jsx_runtime_1.jsx)("div", { className: "ds-markdown-answer", children: getParagraphs(answerParagraphs, 'answer') })] }));
|
|
287
322
|
});
|
|
288
323
|
exports.default = MarkdownCMD;
|
|
289
324
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/MarkdownCMD/index.tsx"],"names":[],"mappings":";;;;;;AAAA,iCAA8F;AAE9F,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/MarkdownCMD/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/HighReactMarkdown/index.tsx"],"names":[],"mappings":";;;;;;AAAA,iCAAoC;AACpC,oEAAsC;AAEtC,uEAAsE;AACtE,4DAAmC;AAEnC,qEAA8C;AAM9C,MAAM,YAAY,GAAG,mBAAmB,CAAC;AACzC,MAAM,iBAAiB,GAAqC,CAAC,KAAK,EAAE,EAAE;IACpE,OAAO,CACL,uBAAC,wBAAQ,IACP,aAAa,EAAE,CAAC,oBAAS,CAAC,EAC1B,UAAU,EAAE;YACV,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;gBAC1C,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;gBACrD,OAAO,KAAK,CAAC,CAAC,CAAC,CACb,uBAAC,kBAAS,IAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,YAC3B,uBAAC,gCAAiB,IAAC,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,YAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAClB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/HighReactMarkdown/index.tsx"],"names":[],"mappings":";;;;;;AAAA,iCAAoC;AACpC,oEAAsC;AAEtC,uEAAsE;AACtE,4DAAmC;AAEnC,qEAA8C;AAM9C,MAAM,YAAY,GAAG,mBAAmB,CAAC;AACzC,MAAM,iBAAiB,GAAqC,CAAC,KAAK,EAAE,EAAE;IACpE,OAAO,CACL,uBAAC,wBAAQ,IACP,aAAa,EAAE,CAAC,oBAAS,CAAC,EAC1B,UAAU,EAAE;YACV,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;gBAC1C,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;gBACrD,OAAO,KAAK,CAAC,CAAC,CAAC,CACb,uBAAC,kBAAS,IAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,YAC3B,uBAAC,gCAAiB,IAAC,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,YAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAClB,GACV,CACb,CAAC,CAAC,CAAC,CACF,iCAAM,SAAS,EAAE,SAAS,KAAM,KAAK,YAClC,QAAQ,GACJ,CACR,CAAC;YACJ,CAAC;YACD,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;gBAChC,OAAO,CACL,gCAAK,SAAS,EAAC,wBAAwB,YACrC,kCAAO,SAAS,EAAC,mBAAmB,YAAE,QAAQ,GAAS,GACnD,CACP,CAAC;YACJ,CAAC;SACF,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CAAC;AACF,kBAAe,IAAA,YAAI,EAAC,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** 此文件借鉴 marked 的部分代码 */
|
|
2
|
+
interface Space {
|
|
3
|
+
type: 'space';
|
|
4
|
+
raw: string;
|
|
5
|
+
}
|
|
6
|
+
interface Fence {
|
|
7
|
+
type: 'fence';
|
|
8
|
+
raw: string;
|
|
9
|
+
}
|
|
10
|
+
interface Segment {
|
|
11
|
+
type: 'segment';
|
|
12
|
+
raw: string;
|
|
13
|
+
}
|
|
14
|
+
interface List {
|
|
15
|
+
type: 'list';
|
|
16
|
+
raw: string;
|
|
17
|
+
items: ListItem[];
|
|
18
|
+
loose: boolean;
|
|
19
|
+
}
|
|
20
|
+
interface ListItem {
|
|
21
|
+
type: 'list_item';
|
|
22
|
+
raw: string;
|
|
23
|
+
task: boolean;
|
|
24
|
+
checked: boolean | undefined;
|
|
25
|
+
loose: boolean;
|
|
26
|
+
text: string;
|
|
27
|
+
tokens: Token[];
|
|
28
|
+
}
|
|
29
|
+
export type Token = Space | Fence | Segment | List | ListItem;
|
|
30
|
+
export declare class Tokenizer {
|
|
31
|
+
/** 空行 */
|
|
32
|
+
space(src: string): Space | undefined;
|
|
33
|
+
/** 围栏 fence */
|
|
34
|
+
fence(src: string): Fence | undefined;
|
|
35
|
+
/** 块 */
|
|
36
|
+
segment(src: string): Segment | undefined;
|
|
37
|
+
/** 列表 */
|
|
38
|
+
list(src: string): List | undefined;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** 此文件借鉴 marked 的部分代码 */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Tokenizer = void 0;
|
|
5
|
+
const rule_1 = require("./rule");
|
|
6
|
+
class Tokenizer {
|
|
7
|
+
/** 空行 */
|
|
8
|
+
space(src) {
|
|
9
|
+
const cap = rule_1.rules.block.newline.exec(src);
|
|
10
|
+
if (cap) {
|
|
11
|
+
return {
|
|
12
|
+
type: 'space',
|
|
13
|
+
raw: cap[0],
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** 围栏 fence */
|
|
18
|
+
fence(src) {
|
|
19
|
+
const cap = rule_1.rules.block.fences.exec(src);
|
|
20
|
+
if (cap) {
|
|
21
|
+
return {
|
|
22
|
+
type: 'fence',
|
|
23
|
+
raw: cap[0],
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** 块 */
|
|
28
|
+
segment(src) {
|
|
29
|
+
const cap = rule_1.rules.block.segment.exec(src);
|
|
30
|
+
if (cap) {
|
|
31
|
+
return {
|
|
32
|
+
type: 'segment',
|
|
33
|
+
raw: cap[0],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** 列表 */
|
|
38
|
+
list(src) {
|
|
39
|
+
let cap = rule_1.rules.block.list.exec(src);
|
|
40
|
+
if (cap) {
|
|
41
|
+
let bull = cap[1].trim();
|
|
42
|
+
const isordered = bull.length > 1;
|
|
43
|
+
const list = {
|
|
44
|
+
type: 'list',
|
|
45
|
+
raw: cap[0],
|
|
46
|
+
items: [],
|
|
47
|
+
loose: false,
|
|
48
|
+
};
|
|
49
|
+
bull = isordered ? `\\d{1,9}\\${bull.slice(-1)}` : `\\${bull}`;
|
|
50
|
+
// Get next list item
|
|
51
|
+
const itemRegex = rule_1.rules.other.listItemRegex(bull);
|
|
52
|
+
while (src) {
|
|
53
|
+
let endEarly = false;
|
|
54
|
+
let raw = '';
|
|
55
|
+
let itemContents = '';
|
|
56
|
+
if (!(cap = itemRegex.exec(src))) {
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
if (rule_1.rules.block.hr.test(src)) {
|
|
60
|
+
// End list if bullet was actually HR (possibly move into itemRegex?)
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
raw = cap[0];
|
|
64
|
+
src = src.substring(raw.length);
|
|
65
|
+
/** 获取列表项 */
|
|
66
|
+
let line = cap[2].split('\n', 1)[0].replace(rule_1.rules.other.listReplaceTabs, (t) => ' '.repeat(3 * t.length));
|
|
67
|
+
let nextLine = src.split('\n', 1)[0];
|
|
68
|
+
let blankLine = !line.trim();
|
|
69
|
+
let indent = 0;
|
|
70
|
+
if (blankLine) {
|
|
71
|
+
indent = cap[1].length + 1;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
indent = cap[2].search(rule_1.rules.other.nonSpaceChar); // Find first non-space char
|
|
75
|
+
indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent
|
|
76
|
+
itemContents = line.slice(indent);
|
|
77
|
+
indent += cap[1].length;
|
|
78
|
+
}
|
|
79
|
+
if (blankLine && rule_1.rules.other.blankLine.test(nextLine)) {
|
|
80
|
+
// Items begin with at most one blank line
|
|
81
|
+
raw += nextLine + '\n';
|
|
82
|
+
src = src.substring(nextLine.length + 1);
|
|
83
|
+
endEarly = true;
|
|
84
|
+
}
|
|
85
|
+
if (!endEarly) {
|
|
86
|
+
const nextBulletRegex = rule_1.rules.other.nextBulletRegex(indent);
|
|
87
|
+
const hrRegex = rule_1.rules.other.hrRegex(indent);
|
|
88
|
+
const fencesBeginRegex = rule_1.rules.other.fencesBeginRegex(indent);
|
|
89
|
+
const headingBeginRegex = rule_1.rules.other.headingBeginRegex(indent);
|
|
90
|
+
const htmlBeginRegex = rule_1.rules.other.htmlBeginRegex(indent);
|
|
91
|
+
// Check if following lines should be included in List Item
|
|
92
|
+
while (src) {
|
|
93
|
+
const rawLine = src.split('\n', 1)[0];
|
|
94
|
+
const nextLineWithoutTabs = nextLine.replace(rule_1.rules.other.tabCharGlobal, ' ');
|
|
95
|
+
nextLine = rawLine;
|
|
96
|
+
// End list item if found code fences
|
|
97
|
+
if (fencesBeginRegex.test(nextLine)) {
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
// End list item if found start of new heading
|
|
101
|
+
if (headingBeginRegex.test(nextLine)) {
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
// End list item if found start of html block
|
|
105
|
+
if (htmlBeginRegex.test(nextLine)) {
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
// End list item if found start of new bullet
|
|
109
|
+
if (nextBulletRegex.test(nextLine)) {
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
// Horizontal rule found
|
|
113
|
+
if (hrRegex.test(nextLine)) {
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
if (nextLineWithoutTabs.search(rule_1.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) {
|
|
117
|
+
// Dedent if possible
|
|
118
|
+
itemContents += '\n' + nextLineWithoutTabs.slice(indent);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
// not enough indentation
|
|
122
|
+
if (blankLine) {
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
// paragraph continuation unless last line was a different block level element
|
|
126
|
+
if (line.replace(rule_1.rules.other.tabCharGlobal, ' ').search(rule_1.rules.other.nonSpaceChar) >= 4) {
|
|
127
|
+
// indented code block
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
if (fencesBeginRegex.test(line)) {
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
if (headingBeginRegex.test(line)) {
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
if (hrRegex.test(line)) {
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
itemContents += '\n' + nextLine;
|
|
140
|
+
}
|
|
141
|
+
if (!blankLine && !nextLine.trim()) {
|
|
142
|
+
// Check if current line is blank
|
|
143
|
+
blankLine = true;
|
|
144
|
+
}
|
|
145
|
+
raw += rawLine + '\n';
|
|
146
|
+
src = src.substring(rawLine.length + 1);
|
|
147
|
+
line = nextLineWithoutTabs.slice(indent);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
let ischecked;
|
|
151
|
+
const istask = rule_1.rules.other.listIsTask.exec(itemContents);
|
|
152
|
+
if (istask) {
|
|
153
|
+
ischecked = istask[0] !== '[ ] ';
|
|
154
|
+
itemContents = itemContents.replace(rule_1.rules.other.listReplaceTask, '');
|
|
155
|
+
}
|
|
156
|
+
list.items.push({
|
|
157
|
+
type: 'list_item',
|
|
158
|
+
raw,
|
|
159
|
+
task: !!istask,
|
|
160
|
+
checked: ischecked,
|
|
161
|
+
loose: false,
|
|
162
|
+
text: itemContents,
|
|
163
|
+
tokens: [],
|
|
164
|
+
});
|
|
165
|
+
list.raw += raw;
|
|
166
|
+
}
|
|
167
|
+
// Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic
|
|
168
|
+
const lastItem = list.items.at(-1);
|
|
169
|
+
if (lastItem) {
|
|
170
|
+
lastItem.raw = lastItem.raw.trimEnd();
|
|
171
|
+
lastItem.text = lastItem.text.trimEnd();
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
// not a list since there were no items
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
list.raw = list.raw.trimEnd();
|
|
178
|
+
return list;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
exports.Tokenizer = Tokenizer;
|
|
183
|
+
//# sourceMappingURL=Tokenizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tokenizer.js","sourceRoot":"","sources":["../../../src/utils/Tokenizer.ts"],"names":[],"mappings":";AAAA,yBAAyB;;;AAEzB,iCAA+B;AAmC/B,MAAa,SAAS;IACpB,SAAS;IACT,KAAK,CAAC,GAAW;QACf,MAAM,GAAG,GAAG,YAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,GAAG,EAAE,CAAC;YACR,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;aACZ,CAAC;QACJ,CAAC;IACH,CAAC;IACD,eAAe;IACf,KAAK,CAAC,GAAW;QACf,MAAM,GAAG,GAAG,YAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,GAAG,EAAE,CAAC;YACR,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;aACZ,CAAC;QACJ,CAAC;IACH,CAAC;IACD,QAAQ;IACR,OAAO,CAAC,GAAW;QACjB,MAAM,GAAG,GAAG,YAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,GAAG,EAAE,CAAC;YACR,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;aACZ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,SAAS;IACT,IAAI,CAAC,GAAW;QACd,IAAI,GAAG,GAAG,YAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAElC,MAAM,IAAI,GAAS;gBACjB,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;gBACX,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,KAAK;aACb,CAAC;YAEF,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAE/D,qBAAqB;YACrB,MAAM,SAAS,GAAG,YAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAElD,OAAO,GAAG,EAAE,CAAC;gBACX,IAAI,QAAQ,GAAG,KAAK,CAAC;gBACrB,IAAI,GAAG,GAAG,EAAE,CAAC;gBACb,IAAI,YAAY,GAAG,EAAE,CAAC;gBACtB,IAAI,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBACjC,MAAM;gBACR,CAAC;gBAED,IAAI,YAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7B,qEAAqE;oBACrE,MAAM;gBACR,CAAC;gBAED,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACb,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAEhC,YAAY;gBACZ,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAK,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBAElH,IAAI,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrC,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAE7B,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,4BAA4B;oBAC9E,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,kEAAkE;oBACpG,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAClC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC1B,CAAC;gBAED,IAAI,SAAS,IAAI,YAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACtD,0CAA0C;oBAC1C,GAAG,IAAI,QAAQ,GAAG,IAAI,CAAC;oBACvB,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACzC,QAAQ,GAAG,IAAI,CAAC;gBAClB,CAAC;gBAED,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,eAAe,GAAG,YAAK,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;oBAC5D,MAAM,OAAO,GAAG,YAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC5C,MAAM,gBAAgB,GAAG,YAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;oBAC9D,MAAM,iBAAiB,GAAG,YAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;oBAChE,MAAM,cAAc,GAAG,YAAK,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;oBAE1D,2DAA2D;oBAC3D,OAAO,GAAG,EAAE,CAAC;wBACX,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACtC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAK,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;wBAChF,QAAQ,GAAG,OAAO,CAAC;wBAEnB,qCAAqC;wBACrC,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;4BACpC,MAAM;wBACR,CAAC;wBAED,8CAA8C;wBAC9C,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;4BACrC,MAAM;wBACR,CAAC;wBAED,6CAA6C;wBAC7C,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;4BAClC,MAAM;wBACR,CAAC;wBAED,6CAA6C;wBAC7C,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;4BACnC,MAAM;wBACR,CAAC;wBAED,wBAAwB;wBACxB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;4BAC3B,MAAM;wBACR,CAAC;wBAED,IAAI,mBAAmB,CAAC,MAAM,CAAC,YAAK,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;4BACvF,qBAAqB;4BACrB,YAAY,IAAI,IAAI,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBAC3D,CAAC;6BAAM,CAAC;4BACN,yBAAyB;4BACzB,IAAI,SAAS,EAAE,CAAC;gCACd,MAAM;4BACR,CAAC;4BACD,8EAA8E;4BAC9E,IAAI,IAAI,CAAC,OAAO,CAAC,YAAK,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,YAAK,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gCAC1F,sBAAsB;gCACtB,MAAM;4BACR,CAAC;4BACD,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gCAChC,MAAM;4BACR,CAAC;4BACD,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gCACjC,MAAM;4BACR,CAAC;4BACD,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gCACvB,MAAM;4BACR,CAAC;4BAED,YAAY,IAAI,IAAI,GAAG,QAAQ,CAAC;wBAClC,CAAC;wBAED,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;4BACnC,iCAAiC;4BACjC,SAAS,GAAG,IAAI,CAAC;wBACnB,CAAC;wBAED,GAAG,IAAI,OAAO,GAAG,IAAI,CAAC;wBACtB,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBACxC,IAAI,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC3C,CAAC;gBACH,CAAC;gBAED,IAAI,SAA8B,CAAC;gBAEnC,MAAM,MAAM,GAAG,YAAK,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACzD,IAAI,MAAM,EAAE,CAAC;oBACX,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;oBACjC,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,YAAK,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;gBACvE,CAAC;gBAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,WAAW;oBACjB,GAAG;oBACH,IAAI,EAAE,CAAC,CAAC,MAAM;oBACd,OAAO,EAAE,SAAS;oBAClB,KAAK,EAAE,KAAK;oBACZ,IAAI,EAAE,YAAY;oBAClB,MAAM,EAAE,EAAE;iBACX,CAAC,CAAC;gBAEH,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC;YAClB,CAAC;YAED,qJAAqJ;YACrJ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gBACtC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,uCAAuC;gBACvC,OAAO;YACT,CAAC;YACD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAE9B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAxMD,8BAwMC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.compiler = void 0;
|
|
4
|
+
const Tokenizer_1 = require("./Tokenizer");
|
|
5
|
+
function compile(src) {
|
|
6
|
+
const tokenizer = new Tokenizer_1.Tokenizer();
|
|
7
|
+
const tokens = [];
|
|
8
|
+
let prevScr = src;
|
|
9
|
+
while (src) {
|
|
10
|
+
const space = tokenizer.space(src);
|
|
11
|
+
if (space) {
|
|
12
|
+
tokens.push(space);
|
|
13
|
+
src = src.slice(space.raw.length);
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
const list = tokenizer.list(src);
|
|
17
|
+
if (list) {
|
|
18
|
+
tokens.push(list);
|
|
19
|
+
src = src.slice(list.raw.length);
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const fence = tokenizer.fence(src);
|
|
23
|
+
if (fence) {
|
|
24
|
+
tokens.push(fence);
|
|
25
|
+
src = src.slice(fence.raw.length);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const segment = tokenizer.segment(src);
|
|
29
|
+
if (segment) {
|
|
30
|
+
tokens.push(segment);
|
|
31
|
+
src = src.slice(segment.raw.length);
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (prevScr === src && src) {
|
|
35
|
+
// 如果src没有变化,则认为是一个段落
|
|
36
|
+
// todo: 后面会做优化,进行细分
|
|
37
|
+
tokens.push({
|
|
38
|
+
type: 'segment',
|
|
39
|
+
raw: src,
|
|
40
|
+
});
|
|
41
|
+
src = '';
|
|
42
|
+
}
|
|
43
|
+
prevScr = src;
|
|
44
|
+
}
|
|
45
|
+
return tokens;
|
|
46
|
+
}
|
|
47
|
+
function createCompiler(src) {
|
|
48
|
+
const tokens = compile(src);
|
|
49
|
+
return tokens;
|
|
50
|
+
}
|
|
51
|
+
exports.compiler = createCompiler;
|
|
52
|
+
//# sourceMappingURL=compiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../../src/utils/compiler.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAE/C,SAAS,OAAO,CAAC,GAAW;IAC1B,MAAM,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAC;IAElC,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAG,GAAG,CAAC;IAClB,OAAO,GAAG,EAAE,CAAC;QACX,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;aACT,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;AAEY,QAAA,QAAQ,GAAG,cAAc,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
};
|