* Create xml.ts

* Update well-known.ts

* Update well-known.ts

* Fix typo

* Update well-known.ts

* Update well-known.ts
This commit is contained in:
Acid Chicken (硫酸鶏) 2019-02-20 16:13:43 +09:00 committed by syuilo
parent 5aadd80243
commit 81aa21915b
2 changed files with 89 additions and 22 deletions

41
src/prelude/xml.ts Normal file
View file

@ -0,0 +1,41 @@
const map: Record<string, string> = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
'\'': '&apos;'
};
const beginingOfCDATA = '<![CDATA[';
const endOfCDATA = ']]>';
export function escapeValue(x: string): string {
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: string): string {
return Object.entries(map).reduce((a, [k, v]) => a.replace(k, v), x);
}