summaryrefslogtreecommitdiff
path: root/node_modules/entities/lib/esm/escape.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:05:55 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:05:55 +0800
commitc06f7ee0a40255214c477e13d9b956a7e07c2900 (patch)
treef5982a568ef8fab865d0142e71c7494fea3e4c1b /node_modules/entities/lib/esm/escape.js
parent3fd9400d4dccc25aa29b5702216732e0b7542073 (diff)
postcss,(plugins): nanocss, postcss-preset-env
Diffstat (limited to 'node_modules/entities/lib/esm/escape.js')
-rw-r--r--node_modules/entities/lib/esm/escape.js116
1 files changed, 116 insertions, 0 deletions
diff --git a/node_modules/entities/lib/esm/escape.js b/node_modules/entities/lib/esm/escape.js
new file mode 100644
index 00000000..c64da6eb
--- /dev/null
+++ b/node_modules/entities/lib/esm/escape.js
@@ -0,0 +1,116 @@
+export const xmlReplacer = /["&'<>$\x80-\uFFFF]/g;
+const xmlCodeMap = new Map([
+ [34, "&quot;"],
+ [38, "&amp;"],
+ [39, "&apos;"],
+ [60, "&lt;"],
+ [62, "&gt;"],
+]);
+// For compatibility with node < 4, we wrap `codePointAt`
+export const getCodePoint =
+// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
+String.prototype.codePointAt != null
+ ? (str, index) => str.codePointAt(index)
+ : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+ (c, index) => (c.charCodeAt(index) & 0xfc00) === 0xd800
+ ? (c.charCodeAt(index) - 0xd800) * 0x400 +
+ c.charCodeAt(index + 1) -
+ 0xdc00 +
+ 0x10000
+ : c.charCodeAt(index);
+/**
+ * Encodes all non-ASCII characters, as well as characters not valid in XML
+ * documents using XML entities.
+ *
+ * If a character has no equivalent entity, a
+ * numeric hexadecimal reference (eg. `&#xfc;`) will be used.
+ */
+export function encodeXML(str) {
+ let ret = "";
+ let lastIdx = 0;
+ let match;
+ while ((match = xmlReplacer.exec(str)) !== null) {
+ const i = match.index;
+ const char = str.charCodeAt(i);
+ const next = xmlCodeMap.get(char);
+ if (next !== undefined) {
+ ret += str.substring(lastIdx, i) + next;
+ lastIdx = i + 1;
+ }
+ else {
+ ret += `${str.substring(lastIdx, i)}&#x${getCodePoint(str, i).toString(16)};`;
+ // Increase by 1 if we have a surrogate pair
+ lastIdx = xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);
+ }
+ }
+ return ret + str.substr(lastIdx);
+}
+/**
+ * Encodes all non-ASCII characters, as well as characters not valid in XML
+ * documents using numeric hexadecimal reference (eg. `&#xfc;`).
+ *
+ * Have a look at `escapeUTF8` if you want a more concise output at the expense
+ * of reduced transportability.
+ *
+ * @param data String to escape.
+ */
+export const escape = encodeXML;
+/**
+ * Creates a function that escapes all characters matched by the given regular
+ * expression using the given map of characters to escape to their entities.
+ *
+ * @param regex Regular expression to match characters to escape.
+ * @param map Map of characters to escape to their entities.
+ *
+ * @returns Function that escapes all characters matched by the given regular
+ * expression using the given map of characters to escape to their entities.
+ */
+function getEscaper(regex, map) {
+ return function escape(data) {
+ let match;
+ let lastIdx = 0;
+ let result = "";
+ while ((match = regex.exec(data))) {
+ if (lastIdx !== match.index) {
+ result += data.substring(lastIdx, match.index);
+ }
+ // We know that this character will be in the map.
+ result += map.get(match[0].charCodeAt(0));
+ // Every match will be of length 1
+ lastIdx = match.index + 1;
+ }
+ return result + data.substring(lastIdx);
+ };
+}
+/**
+ * Encodes all characters not valid in XML documents using XML entities.
+ *
+ * Note that the output will be character-set dependent.
+ *
+ * @param data String to escape.
+ */
+export const escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
+/**
+ * Encodes all characters that have to be escaped in HTML attributes,
+ * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
+ *
+ * @param data String to escape.
+ */
+export const escapeAttribute = getEscaper(/["&\u00A0]/g, new Map([
+ [34, "&quot;"],
+ [38, "&amp;"],
+ [160, "&nbsp;"],
+]));
+/**
+ * Encodes all characters that have to be escaped in HTML text,
+ * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
+ *
+ * @param data String to escape.
+ */
+export const escapeText = getEscaper(/[&<>\u00A0]/g, new Map([
+ [38, "&amp;"],
+ [60, "&lt;"],
+ [62, "&gt;"],
+ [160, "&nbsp;"],
+]));
+//# sourceMappingURL=escape.js.map \ No newline at end of file