AK-21/Graphite-Industrial-Intelligence
0
1import {characterEntitiesLegacy} from 'character-entities-legacy'2import {characterEntitiesHtml4} from 'character-entities-html4'3import {dangerous} from '../constant/dangerous.js'4 5const own = {}.hasOwnProperty6 7/**8 * `characterEntitiesHtml4` but inverted.9 *10 * @type {Record<string, string>}11 */12const characters = {}13 14/** @type {string} */15let key16 17for (key in characterEntitiesHtml4) {18 if (own.call(characterEntitiesHtml4, key)) {19 characters[characterEntitiesHtml4[key]] = key20 }21}22 23const notAlphanumericRegex = /[^\dA-Za-z]/24 25/**26 * Configurable ways to encode characters as named references.27 *28 * @param {number} code29 * @param {number} next30 * @param {boolean|undefined} omit31 * @param {boolean|undefined} attribute32 * @returns {string}33 */34export function toNamed(code, next, omit, attribute) {35 const character = String.fromCharCode(code)36 37 if (own.call(characters, character)) {38 const name = characters[character]39 const value = '&' + name40 41 if (42 omit &&43 characterEntitiesLegacy.includes(name) &&44 !dangerous.includes(name) &&45 (!attribute ||46 (next &&47 next !== 61 /* `=` */ &&48 notAlphanumericRegex.test(String.fromCharCode(next))))49 ) {50 return value51 }52 53 return value + ';'54 }55 56 return ''57}58 