Urara-Blog/node_modules/.pnpm-store/v3/files/ed/cabe020eac3f119401321336482cf485d3d5d2a121c7c99d456cb3a3be76c297d72cf9cee53468fa24fa3f558b05767b8d6ad171703c36ceec7b9cfc792866
2022-08-14 01:14:53 +08:00

37 lines
1 KiB
Text

import {codes} from 'micromark-util-symbol/codes.js'
import {values} from 'micromark-util-symbol/values.js'
/**
* 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 < codes.ht ||
code === codes.vt ||
(code > codes.cr && code < codes.space) ||
// Control character (DEL) of the basic block and C1 controls.
(code > codes.tilde && 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 values.replacementCharacter
}
return String.fromCharCode(code)
}