import { defaults } from './defaults.js'; import { cleanUrl, escape } from './helpers.js'; /** * Renderer */ export class Renderer { constructor(options) { this.options = options || defaults; } code(code, infostring, escaped) { const lang = (infostring || '').match(/\S*/)[0]; if (this.options.highlight) { const out = this.options.highlight(code, lang); if (out != null && out !== code) { escaped = true; code = out; } } code = code.replace(/\n$/, '') + '\n'; if (!lang) { return '
'
        + (escaped ? code : escape(code, true))
        + '
\n'; } return '
'
      + (escaped ? code : escape(code, true))
      + '
\n'; } /** * @param {string} quote */ blockquote(quote) { return `
\n${quote}
\n`; } html(html) { return html; } /** * @param {string} text * @param {string} level * @param {string} raw * @param {any} slugger */ heading(text, level, raw, slugger) { if (this.options.headerIds) { const id = this.options.headerPrefix + slugger.slug(raw); return `${text}\n`; } // ignore IDs return `${text}\n`; } hr() { return this.options.xhtml ? '
\n' : '
\n'; } list(body, ordered, start) { const type = ordered ? 'ol' : 'ul', startatt = (ordered && start !== 1) ? (' start="' + start + '"') : ''; return '<' + type + startatt + '>\n' + body + '\n'; } /** * @param {string} text */ listitem(text) { return `
  • ${text}
  • \n`; } checkbox(checked) { return ' '; } /** * @param {string} text */ paragraph(text) { return `

    ${text}

    \n`; } /** * @param {string} header * @param {string} body */ table(header, body) { if (body) body = `${body}`; return '\n' + '\n' + header + '\n' + body + '
    \n'; } /** * @param {string} content */ tablerow(content) { return `\n${content}\n`; } tablecell(content, flags) { const type = flags.header ? 'th' : 'td'; const tag = flags.align ? `<${type} align="${flags.align}">` : `<${type}>`; return tag + content + `\n`; } /** * span level renderer * @param {string} text */ strong(text) { return `${text}`; } /** * @param {string} text */ em(text) { return `${text}`; } /** * @param {string} text */ codespan(text) { return `${text}`; } br() { return this.options.xhtml ? '
    ' : '
    '; } /** * @param {string} text */ del(text) { return `${text}`; } /** * @param {string} href * @param {string} title * @param {string} text */ link(href, title, text) { href = cleanUrl(this.options.sanitize, this.options.baseUrl, href); if (href === null) { return text; } let out = ''; return out; } /** * @param {string} href * @param {string} title * @param {string} text */ image(href, title, text) { href = cleanUrl(this.options.sanitize, this.options.baseUrl, href); if (href === null) { return text; } let out = `${text}' : '>'; return out; } text(text) { return text; } }