@rr0/cms
Version:
RR0 Content Management System (CMS)
47 lines (46 loc) • 1.35 kB
JavaScript
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);
}
}
}