UNPKG

ts-markdown

Version:

An extensible TypeScript markdown generator that takes JSON and creates a markdown document.

67 lines (66 loc) 2.19 kB
"use strict"; 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;