123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- 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 '<pre><code>'
- + (escaped ? code : escape(code, true))
- + '</code></pre>\n';
- }
- return '<pre><code class="'
- + this.options.langPrefix
- + escape(lang, true)
- + '">'
- + (escaped ? code : escape(code, true))
- + '</code></pre>\n';
- }
- blockquote(quote) {
- return '<blockquote>\n' + quote + '</blockquote>\n';
- }
- html(html) {
- return html;
- }
- heading(text, level, raw, slugger) {
- if (this.options.headerIds) {
- return '<h'
- + level
- + ' id="'
- + this.options.headerPrefix
- + slugger.slug(raw)
- + '">'
- + text
- + '</h'
- + level
- + '>\n';
- }
- // ignore IDs
- return '<h' + level + '>' + text + '</h' + level + '>\n';
- }
- hr() {
- return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
- }
- list(body, ordered, start) {
- const type = ordered ? 'ol' : 'ul',
- startatt = (ordered && start !== 1) ? (' start="' + start + '"') : '';
- return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
- }
- listitem(text) {
- return '<li>' + text + '</li>\n';
- }
- checkbox(checked) {
- return '<input '
- + (checked ? 'checked="" ' : '')
- + 'disabled="" type="checkbox"'
- + (this.options.xhtml ? ' /' : '')
- + '> ';
- }
- paragraph(text) {
- return '<p>' + text + '</p>\n';
- }
- table(header, body) {
- if (body) body = '<tbody>' + body + '</tbody>';
- return '<table>\n'
- + '<thead>\n'
- + header
- + '</thead>\n'
- + body
- + '</table>\n';
- }
- tablerow(content) {
- return '<tr>\n' + content + '</tr>\n';
- }
- tablecell(content, flags) {
- const type = flags.header ? 'th' : 'td';
- const tag = flags.align
- ? '<' + type + ' align="' + flags.align + '">'
- : '<' + type + '>';
- return tag + content + '</' + type + '>\n';
- }
- // span level renderer
- strong(text) {
- return '<strong>' + text + '</strong>';
- }
- em(text) {
- return '<em>' + text + '</em>';
- }
- codespan(text) {
- return '<code>' + text + '</code>';
- }
- br() {
- return this.options.xhtml ? '<br/>' : '<br>';
- }
- del(text) {
- return '<del>' + text + '</del>';
- }
- link(href, title, text) {
- href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
- if (href === null) {
- return text;
- }
- let out = '<a href="' + escape(href) + '"';
- if (title) {
- out += ' title="' + title + '"';
- }
- out += '>' + text + '</a>';
- return out;
- }
- image(href, title, text) {
- href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
- if (href === null) {
- return text;
- }
- let out = '<img src="' + href + '" alt="' + text + '"';
- if (title) {
- out += ' title="' + title + '"';
- }
- out += this.options.xhtml ? '/>' : '>';
- return out;
- }
- text(text) {
- return text;
- }
- }
|