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 + '' + type + '>\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 + `${type}>\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 = '' + text + '';
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 = `' : '>';
return out;
}
text(text) {
return text;
}
}