Files
FrozenFriendsYume/packages/backend/built/prelude/xml.js
T
2026-07-26 18:25:37 +09:00

36 lines
972 B
JavaScript

const map = {
"&": "&",
"<": "&lt;",
">": "&gt;",
'"': "&quot;",
"'": "&apos;"
};
const beginingOfCDATA = "<![CDATA[";
const endOfCDATA = "]]>";
export function escapeValue(x) {
let insideOfCDATA = false;
let builder = "";
for(let i = 0; i < x.length;){
if (insideOfCDATA) {
if (x.slice(i, i + beginingOfCDATA.length) === beginingOfCDATA) {
insideOfCDATA = true;
i += beginingOfCDATA.length;
} else {
builder += x[i++];
}
} else {
if (x.slice(i, i + endOfCDATA.length) === endOfCDATA) {
insideOfCDATA = false;
i += endOfCDATA.length;
} else {
const b = x[i++];
builder += map[b] || b;
}
}
}
return builder;
}
export function escapeAttribute(x) {
return Object.entries(map).reduce((a, [k, v])=>a.replace(k, v), x);
}