51 lines
1.4 KiB
JavaScript
51 lines
1.4 KiB
JavaScript
'use strict'
|
|
|
|
var html = require('property-information/html')
|
|
var svg = require('property-information/svg')
|
|
var voids = require('html-void-elements')
|
|
var omission = require('./omission')
|
|
var one = require('./one')
|
|
|
|
module.exports = toHTML
|
|
|
|
/* Characters. */
|
|
var DQ = '"'
|
|
var SQ = "'"
|
|
|
|
/* Stringify the given HAST node. */
|
|
function toHTML(node, options) {
|
|
var settings = options || {}
|
|
var quote = settings.quote || DQ
|
|
var alternative = quote === DQ ? SQ : DQ
|
|
var smart = settings.quoteSmart
|
|
|
|
if (quote !== DQ && quote !== SQ) {
|
|
throw new Error(
|
|
'Invalid quote `' + quote + '`, expected `' + SQ + '` or `' + DQ + '`'
|
|
)
|
|
}
|
|
|
|
return one(
|
|
{
|
|
valid: settings.allowParseErrors ? 0 : 1,
|
|
safe: settings.allowDangerousCharacters ? 0 : 1,
|
|
schema: settings.space === 'svg' ? svg : html,
|
|
omit: settings.omitOptionalTags && omission,
|
|
quote: quote,
|
|
alternative: smart ? alternative : null,
|
|
unquoted: Boolean(settings.preferUnquoted),
|
|
tight: settings.tightAttributes,
|
|
tightDoctype: Boolean(settings.tightDoctype),
|
|
tightLists: settings.tightCommaSeparatedLists,
|
|
tightClose: settings.tightSelfClosing,
|
|
collapseEmpty: settings.collapseEmptyAttributes,
|
|
dangerous: settings.allowDangerousHTML,
|
|
voids: settings.voids || voids.concat(),
|
|
entities: settings.entities || {},
|
|
close: settings.closeSelfClosing,
|
|
closeEmpty: settings.closeEmptyElements
|
|
},
|
|
node
|
|
)
|
|
}
|