very-small-parser
Version:
A very small Markdown, HTML, and CSS parser.
35 lines (34 loc) • 954 B
JavaScript
import { Parser } from '../../Parser';
export class MdBlockParser extends Parser {
inline;
constructor(opts) {
super(opts);
this.inline = opts.inline;
}
parsef(src) {
const tokens = this.parse(src);
const token = {
type: 'root',
children: tokens,
len: src.length,
};
// Merge adjacent "list" tokens.
const length = tokens.length;
for (let i = 0; i < length - 1; i++) {
const tok1 = tokens[i];
if (tok1?.type === 'list') {
const tok2 = tokens[i + 1];
if (tok2?.type === 'list') {
tok1.spread = true;
tok1.children.push(...tok2.children);
tokens.splice(i + 1, 1);
i--;
}
}
}
return token;
}
parsei(src) {
return this.inline.parse(src);
}
}