lix-website/themes/lix/assets/bootstrap/node_modules/mdast-util-to-markdown/lib/index.js
2024-04-26 22:49:34 -06:00

74 lines
1.5 KiB
JavaScript

module.exports = toMarkdown
var zwitch = require('zwitch')
var configure = require('./configure')
var defaultHandlers = require('./handle')
var defaultJoin = require('./join')
var defaultUnsafe = require('./unsafe')
function toMarkdown(tree, options) {
var settings = options || {}
var context = {
enter: enter,
stack: [],
unsafe: [],
join: [],
handlers: {},
options: {}
}
var result
configure(context, {
unsafe: defaultUnsafe,
join: defaultJoin,
handlers: defaultHandlers
})
configure(context, settings)
if (context.options.tightDefinitions) {
context.join = [joinDefinition].concat(context.join)
}
context.handle = zwitch('type', {
invalid: invalid,
unknown: unknown,
handlers: context.handlers
})
result = context.handle(tree, null, context, {before: '\n', after: '\n'})
if (
result &&
result.charCodeAt(result.length - 1) !== 10 &&
result.charCodeAt(result.length - 1) !== 13
) {
result += '\n'
}
return result
function enter(name) {
context.stack.push(name)
return exit
function exit() {
context.stack.pop()
}
}
}
function invalid(value) {
throw new Error('Cannot handle value `' + value + '`, expected node')
}
function unknown(node) {
throw new Error('Cannot handle unknown node `' + node.type + '`')
}
function joinDefinition(left, right) {
// No blank line between adjacent definitions.
if (left.type === 'definition' && left.type === right.type) {
return 0
}
}