123456789101112131415161718192021222324252627282930313233 |
- /// <reference lib="dom" />
- /* eslint-env browser */
- const element = document.createElement('i')
- /**
- * @param {string} value
- * @returns {string|false}
- */
- export function decodeNamedCharacterReference(value) {
- const characterReference = '&' + value + ';'
- element.innerHTML = characterReference
- const char = element.textContent
- // Some named character references do not require the closing semicolon
- // (`¬`, for instance), which leads to situations where parsing the assumed
- // named reference of `¬it;` will result in the string `¬it;`.
- // When we encounter a trailing semicolon after parsing, and the character
- // reference to decode was not a semicolon (`;`), we can assume that the
- // matching was not complete.
- // @ts-expect-error: TypeScript is wrong that `textContent` on elements can
- // yield `null`.
- if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {
- return false
- }
- // If the decoded string is equal to the input, the character reference was
- // not valid.
- // @ts-expect-error: TypeScript is wrong that `textContent` on elements can
- // yield `null`.
- return char === characterReference ? false : char
- }
|