42 lines
1.1 KiB
JavaScript
42 lines
1.1 KiB
JavaScript
/**
|
|
* @typedef {import('hast').Parents} Parents
|
|
* @typedef {import('hast').Text} Text
|
|
*
|
|
* @typedef {import('mdast-util-to-hast').Raw} Raw
|
|
*
|
|
* @typedef {import('../index.js').State} State
|
|
*/
|
|
|
|
import {stringifyEntities} from 'stringify-entities'
|
|
|
|
// Declare array as variable so it can be cached by `stringifyEntities`
|
|
const textEntitySubset = ['<', '&']
|
|
|
|
/**
|
|
* Serialize a text node.
|
|
*
|
|
* @param {Raw | Text} node
|
|
* Node to handle.
|
|
* @param {number | undefined} _
|
|
* Index of `node` in `parent.
|
|
* @param {Parents | undefined} parent
|
|
* Parent of `node`.
|
|
* @param {State} state
|
|
* Info passed around about the current state.
|
|
* @returns {string}
|
|
* Serialized node.
|
|
*/
|
|
export function text(node, _, parent, state) {
|
|
// Check if content of `node` should be escaped.
|
|
return parent &&
|
|
parent.type === 'element' &&
|
|
(parent.tagName === 'script' || parent.tagName === 'style')
|
|
? node.value
|
|
: stringifyEntities(
|
|
node.value,
|
|
Object.assign({}, state.settings.characterReferences, {
|
|
subset: textEntitySubset
|
|
})
|
|
)
|
|
}
|