Urara-Blog/node_modules/.pnpm-store/v3/files/ab/3f28f7719198c21bc9bbeee4d21d8f2ddfa4f9b9b1b37e72385560eb5fcc956c210e53bb48c0522dfbed7ed96b71af053bf3e3dc0fa50414b6a110b768c9d5
2022-08-14 01:14:53 +08:00

30 lines
881 B
Text

/**
* Turn the number (in string form as either hexa- or plain decimal) coming from
* a numeric character reference into a character.
*
* @param {string} value
* Value to decode.
* @param {number} base
* Numeric base.
* @returns {string}
*/
export function decodeNumericCharacterReference(value, base) {
const code = Number.parseInt(value, base)
if (
// C0 except for HT, LF, FF, CR, space
code < 9 ||
code === 11 ||
(code > 13 && code < 32) || // Control character (DEL) of the basic block and C1 controls.
(code > 126 && code < 160) || // Lone high surrogates and low surrogates.
(code > 55295 && code < 57344) || // Noncharacters.
(code > 64975 && code < 65008) ||
(code & 65535) === 65535 ||
(code & 65535) === 65534 || // Out of range
code > 1114111
) {
return '\uFFFD'
}
return String.fromCharCode(code)
}