ts-markdown
Version:
An extensible TypeScript markdown generator that takes JSON and creates a markdown document.
67 lines (66 loc) • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.dl = exports.dlRenderer = void 0;
const rendering_1 = require("../rendering");
/**
* The renderer for descriptions list entries.
*
* @param entry The description list entry.
* @param options Document-level render options.
* @returns Block-level description list markdown content.
*/
const dlRenderer = (entry, options) => {
if ('dl' in entry) {
let useHtml = options.useDescriptionListHtml ?? entry.html;
let termStart = useHtml ? ' <dt>' : '';
let termEnd = useHtml ? '</dt>' : '';
let descriptionStart = useHtml ? ' <dd>' : ': ';
let descriptionEnd = useHtml ? '</dd>' : '';
let lines = [];
if (useHtml) {
lines.push('<dl>');
}
let lastItem = undefined;
for (let descriptionItem of entry.dl) {
if ('dt' in descriptionItem && lastItem === 'dd') {
if (lines.length > 0) {
lines.push('\n');
}
}
if ('dt' in descriptionItem) {
const termContent = termStart + (0, rendering_1.getMarkdownString)(descriptionItem.dt, options) + termEnd;
lines.push(termContent);
lastItem = 'dt';
}
else if ('dd' in descriptionItem) {
const descriptionContent = descriptionStart +
(0, rendering_1.getMarkdownString)(descriptionItem.dd, options) +
descriptionEnd;
lines.push(descriptionContent);
lastItem = 'dd';
}
}
if (useHtml) {
lines.push('</dl>');
}
return {
markdown: lines.join('\n'),
blockLevel: true,
};
}
throw new Error('Entry is not a dl entry. Unable to render.');
};
exports.dlRenderer = dlRenderer;
/**
* Helper which creates a description list entry.
*
* @param options Entry-level options for this element.
* @returns a description list entry
*/
function dl(content, options) {
return {
dl: content,
...options,
};
}
exports.dl = dl;