UNPKG

hast-util-to-html

Version:
53 lines (47 loc) 1.33 kB
/** * @import {Comment, Parents} from 'hast' * @import {State} from '../index.js' */ import {stringifyEntities} from 'stringify-entities' const htmlCommentRegex = /^>|^->|<!--|-->|--!>|<!-$/g // Declare arrays as variables so it can be cached by `stringifyEntities` const bogusCommentEntitySubset = ['>'] const commentEntitySubset = ['<', '>'] /** * Serialize a comment. * * @param {Comment} node * Node to handle. * @param {number | undefined} _1 * Index of `node` in `parent. * @param {Parents | undefined} _2 * Parent of `node`. * @param {State} state * Info passed around about the current state. * @returns {string} * Serialized node. */ export function comment(node, _1, _2, state) { // See: <https://html.spec.whatwg.org/multipage/syntax.html#comments> return state.settings.bogusComments ? '<?' + stringifyEntities( node.value, Object.assign({}, state.settings.characterReferences, { subset: bogusCommentEntitySubset }) ) + '>' : '<!--' + node.value.replace(htmlCommentRegex, encode) + '-->' /** * @param {string} $0 */ function encode($0) { return stringifyEntities( $0, Object.assign({}, state.settings.characterReferences, { subset: commentEntitySubset }) ) } }