UNPKG

ds-markdown

Version:

> 🚀 React Markdown 打字动画组件,提供现代聊天界面效果

62 lines 1.86 kB
import { getTokenId, Tokenizer } from './Tokenizer.js'; function compile(src) { const tokenizer = new Tokenizer(); const tokens = []; let prevScr = src; while (src) { if (src.length === 0) { break; } // TODO: 临时方案 if (src.trim().length === 0 && tokens.length > 0) { const lastToken = tokens[tokens.length - 1]; // 如果只剩下空格或换行符,则加到上一个token中 if (lastToken.type === 'list') { lastToken.raw = lastToken.raw + src; break; } } const space = tokenizer.space(src); if (space) { tokens.push(space); src = src.slice(space.raw.length); continue; } const list = tokenizer.list(src); if (list) { tokens.push(list); src = src.slice(list.raw.length); continue; } const fence = tokenizer.fence(src); if (fence) { tokens.push(fence); src = src.slice(fence.raw.length); continue; } const segment = tokenizer.segment(src); if (segment) { tokens.push(segment); src = src.slice(segment.raw.length); continue; } if (prevScr === src && src) { // 如果src没有变化,则认为是一个段落 // todo: 后面会做优化,进行细分 tokens.push({ type: 'segment', raw: src, id: getTokenId(), }); src = ''; } prevScr = src; } return tokens; } function createCompiler(src) { const tokens = compile(src); return tokens; } export const compiler = createCompiler; //# sourceMappingURL=compiler.js.map