import { escapeHTML } from './utils'; const SPAN_CLOSE = ''; const emitsWrappingTags = (node) => { return !!node.kind; }; export default class HTMLRenderer { constructor(tree, options) { this.buffer = ""; this.classPrefix = options.classPrefix; tree.walk(this); } // renderer API addText(text) { this.buffer += escapeHTML(text); } openNode(node) { if (!emitsWrappingTags(node)) return; let className = node.kind; if (!node.sublanguage) { className = `${this.classPrefix}${className}`; } this.span(className); } closeNode(node) { if (!emitsWrappingTags(node)) return; this.buffer += SPAN_CLOSE; } // helpers span(className) { this.buffer += ``; } value() { return this.buffer; } }