UNPKG

@rr0/cms

Version:

RR0 Content Management System (CMS)

47 lines (46 loc) 1.35 kB
export class CodeReplacer { constructor(parsers) { this.parsers = parsers; } async replacement(context, codeElement) { if (codeElement) { const output = context.file.document.createElement("code"); const innerHTML = codeElement.innerHTML; const lines = innerHTML.split("\n"); this.trimEnd(lines); this.removeIndent(lines); this.parse(lines); output.innerHTML = lines.join("\n"); codeElement = output; } return codeElement; } removeIndent(lines) { let minIndent = Number.MAX_VALUE; for (const line of lines) { if (line.length > 0) { let i = 0; while (line.charAt(i) === " ") i++; if (i < minIndent) { minIndent = i; } } } for (let i = 0; i < lines.length; i++) { const line = lines[i]; lines[i] = line.substring(minIndent); } } trimEnd(lines) { for (let i = 0; i < lines.length; i++) { const line = lines[i]; lines[i] = line.trimEnd(); } } parse(lines) { for (const parser of this.parsers) { parser.parse(lines); } } }