Move HTML entities JSON file to src/core/vendor/htmlEntities with txt file containing link and copyright notice.

This commit is contained in:
Michael Roberson 2026-07-17 12:20:47 -04:00
parent ff0826bd50
commit 98a768ffda
4 changed files with 21 additions and 4 deletions

View File

@ -4,7 +4,8 @@
* operations. * operations.
* *
* The data is derived from the vendored WHATWG named character reference set * The data is derived from the vendored WHATWG named character reference set
* (htmlEntities.json, from https://html.spec.whatwg.org/entities.json) so the * (src/core/vendor/htmlEntities/entity.json, from
* https://html.spec.whatwg.org/entities.json) so the
* two operations cannot drift apart and every entity is spec-conformant: * two operations cannot drift apart and every entity is spec-conformant:
* *
* - HTML_ENTITY_REVERSE_LOOKUP (decode) is every single-code-point spec name. * - HTML_ENTITY_REVERSE_LOOKUP (decode) is every single-code-point spec name.
@ -34,7 +35,8 @@ if (!fs.existsSync(path.join(process.cwd(), "src/core/lib"))) {
process.exit(1); process.exit(1);
} }
const SPEC = JSON.parse(fs.readFileSync(path.join(scriptDir, "htmlEntities.json"), "utf8")); const SPEC = JSON.parse(fs.readFileSync(
path.join(scriptDir, "..", "..", "vendor", "htmlEntities", "entity.json"), "utf8"));
// Build code point -> [spec names] for single-code-point, semicolon-terminated // Build code point -> [spec names] for single-code-point, semicolon-terminated
// references (the representable subset; multi-code-point entities are skipped). // references (the representable subset; multi-code-point entities are skipped).
@ -97,7 +99,8 @@ const code = `/**
* HTML entity lookup tables shared by the "To HTML Entity" and "From HTML Entity" * HTML entity lookup tables shared by the "To HTML Entity" and "From HTML Entity"
* operations, derived from the WHATWG named character reference set * operations, derived from the WHATWG named character reference set
* (https://html.spec.whatwg.org/entities.json). Do not edit by hand — change the * (https://html.spec.whatwg.org/entities.json). Do not edit by hand — change the
* vendored htmlEntities.json or htmlEntityOverrides.mjs and regenerate. * vendored src/core/vendor/htmlEntities/entity.json or htmlEntityOverrides.mjs
* and regenerate.
* *
* @author roberson-io [michaelroberson@gmail.com] * @author roberson-io [michaelroberson@gmail.com]
* @copyright Crown Copyright ${new Date().getUTCFullYear()} * @copyright Crown Copyright ${new Date().getUTCFullYear()}

14
src/core/vendor/htmlEntities/entity.txt vendored Normal file
View File

@ -0,0 +1,14 @@
entity.json is the WHATWG named character reference set, retrieved verbatim from:
https://html.spec.whatwg.org/entities.json
It is used by src/core/config/scripts/generateHTMLEntities.mjs to generate the
shared HTML entity lookup tables (src/core/lib/HTMLEntities.mjs) consumed by the
"To HTML Entity" and "From HTML Entity" operations.
Source: HTML Standard — 13.5 Named character references
https://html.spec.whatwg.org/multipage/named-characters.html
Copyright and licence
---------------------
Copyright © WHATWG (Apple, Google, Mozilla, Microsoft). This work is licensed under a Creative Commons Attribution 4.0 International License. To the extent portions of it are incorporated into source code, such portions in the source code are licensed under the BSD 3-Clause License instead.

View File

@ -11,7 +11,7 @@ import path from "path";
// Vendored WHATWG named character reference set (https://html.spec.whatwg.org/entities.json). // Vendored WHATWG named character reference set (https://html.spec.whatwg.org/entities.json).
const SPEC = JSON.parse(readFileSync(path.join( const SPEC = JSON.parse(readFileSync(path.join(
path.dirname(fileURLToPath(import.meta.url)), path.dirname(fileURLToPath(import.meta.url)),
"../../../src/core/config/scripts/htmlEntities.json"), "utf8")); "../../../src/core/vendor/htmlEntities/entity.json"), "utf8"));
const specByName = {}; const specByName = {};
for (const [key, val] of Object.entries(SPEC)) for (const [key, val] of Object.entries(SPEC))
if (key.endsWith(";")) specByName[key.slice(1, -1)] = val.codepoints; if (key.endsWith(";")) specByName[key.slice(1, -1)] = val.codepoints;