blob: ed809113534cf90f1dcb1c4f69605d71080ea578 [file] [log] [blame]
var entities = {
' ': '\u00a0',
'¡': '\u00a1',
'¢': '\u00a2',
'£': '\u00a3',
'¤': '\u20ac',
'¥': '\u00a5',
'¦': '\u0160',
'§': '\u00a7',
'¨': '\u0161',
'©': '\u00a9',
'ª': '\u00aa',
'«': '\u00ab',
'¬': '\u00ac',
'­': '\u00ad',
'®': '\u00ae',
'¯': '\u00af',
'°': '\u00b0',
'±': '\u00b1',
'²': '\u00b2',
'³': '\u00b3',
'´': '\u017d',
'µ': '\u00b5',
'¶': '\u00b6',
'·': '\u00b7',
'¸': '\u017e',
'¹': '\u00b9',
'º': '\u00ba',
'»': '\u00bb',
'¼': '\u0152',
'½': '\u0153',
'¾': '\u0178',
'¿': '\u00bf',
'À': '\u00c0',
'Á': '\u00c1',
'Â': '\u00c2',
'Ã': '\u00c3',
'Ä': '\u00c4',
'Å': '\u00c5',
'Æ': '\u00c6',
'Ç': '\u00c7',
'È': '\u00c8',
'É': '\u00c9',
'Ê': '\u00ca',
'Ë': '\u00cb',
'Ì': '\u00cc',
'Í': '\u00cd',
'Î': '\u00ce',
'Ï': '\u00cf',
'Ð': '\u00d0',
'Ñ': '\u00d1',
'Ò': '\u00d2',
'Ó': '\u00d3',
'Ô': '\u00d4',
'Õ': '\u00d5',
'Ö': '\u00d6',
'×': '\u00d7',
'Ø': '\u00d8',
'Ù': '\u00d9',
'Ú': '\u00da',
'Û': '\u00db',
'Ü': '\u00dc',
'Ý': '\u00dd',
'Þ': '\u00de',
'ß': '\u00df',
'à': '\u00e0',
'á': '\u00e1',
'â': '\u00e2',
'ã': '\u00e3',
'ä': '\u00e4',
'å': '\u00e5',
'æ': '\u00e6',
'ç': '\u00e7',
'è': '\u00e8',
'é': '\u00e9',
'ê': '\u00ea',
'ë': '\u00eb',
'ì': '\u00ec',
'í': '\u00ed',
'î': '\u00ee',
'ï': '\u00ef',
'ð': '\u00f0',
'ñ': '\u00f1',
'ò': '\u00f2',
'ó': '\u00f3',
'ô': '\u00f4',
'õ': '\u00f5',
'ö': '\u00f6',
'÷': '\u00f7',
'ø': '\u00f8',
'ù': '\u00f9',
'ú': '\u00fa',
'û': '\u00fb',
'ü': '\u00fc',
'ý': '\u00fd',
'þ': '\u00fe',
'ÿ': '\u00ff',
'"': '\u0022',
'<': '\u003c',
'>': '\u003e',
''': '\u0027',
'−': '\u2212',
'ˆ': '\u02c6',
'˜': '\u02dc',
'Š': '\u0160',
'‹': '\u2039',
'Œ': '\u0152',
'‘': '\u2018',
'’': '\u2019',
'“': '\u201c',
'”': '\u201d',
'•': '\u2022',
'–': '\u2013',
'—': '\u2014',
'™': '\u2122',
'š': '\u0161',
'›': '\u203a',
'œ': '\u0153',
'Ÿ': '\u0178',
'ƒ': '\u0192',
'Α': '\u0391',
'Β': '\u0392',
'Γ': '\u0393',
'Δ': '\u0394',
'Ε': '\u0395',
'Ζ': '\u0396',
'Η': '\u0397',
'Θ': '\u0398',
'Ι': '\u0399',
'Κ': '\u039a',
'Λ': '\u039b',
'Μ': '\u039c',
'Ν': '\u039d',
'Ξ': '\u039e',
'Ο': '\u039f',
'Π': '\u03a0',
'Ρ': '\u03a1',
'Σ': '\u03a3',
'Τ': '\u03a4',
'Υ': '\u03a5',
'Φ': '\u03a6',
'Χ': '\u03a7',
'Ψ': '\u03a8',
'Ω': '\u03a9',
'α': '\u03b1',
'β': '\u03b2',
'γ': '\u03b3',
'δ': '\u03b4',
'ε': '\u03b5',
'ζ': '\u03b6',
'η': '\u03b7',
'θ': '\u03b8',
'ι': '\u03b9',
'κ': '\u03ba',
'λ': '\u03bb',
'μ': '\u03bc',
'ν': '\u03bd',
'ξ': '\u03be',
'ο': '\u03bf',
'π': '\u03c0',
'ρ': '\u03c1',
'ς': '\u03c2',
'σ': '\u03c3',
'τ': '\u03c4',
'υ': '\u03c5',
'φ': '\u03c6',
'χ': '\u03c7',
'ψ': '\u03c8',
'ω': '\u03c9',
'ϑ': '\u03d1',
'ϒ': '\u03d2',
'ϖ': '\u03d6',
' ': '\u2002',
' ': '\u2003',
' ': '\u2009',
'‌': '\u200c',
'‍': '\u200d',
'‎': '\u200e',
'‏': '\u200f',
'‚': '\u201a',
'„': '\u201e',
'†': '\u2020',
'‡': '\u2021',
'…': '\u2026',
'‰': '\u2030',
'′': '\u2032',
'″': '\u2033',
'‾': '\u203e',
'⁄': '\u2044',
'€': '\u20ac',
'ℑ': '\u2111',
'℘': '\u2118',
'ℜ': '\u211c',
'ℵ': '\u2135',
'←': '\u2190',
'↑': '\u2191',
'→': '\u2192',
'↓': '\u2193',
'↔': '\u2194',
'↵': '\u21b5',
'⇐': '\u21d0',
'⇑': '\u21d1',
'⇒': '\u21d2',
'⇓': '\u21d3',
'⇔': '\u21d4',
'∀': '\u2200',
'∂': '\u2202',
'∃': '\u2203',
'∅': '\u2205',
'∇': '\u2207',
'∈': '\u2208',
'∉': '\u2209',
'∋': '\u220b',
'∏': '\u220f',
'∑': '\u2211',
'∗': '\u2217',
'√': '\u221a',
'∝': '\u221d',
'∞': '\u221e',
'∠': '\u2220',
'∧': '\u2227',
'∨': '\u2228',
'∩': '\u2229',
'∪': '\u222a',
'∫': '\u222b',
'∴': '\u2234',
'∼': '\u223c',
'≅': '\u2245',
'≈': '\u2248',
'≠': '\u2260',
'≡': '\u2261',
'≤': '\u2264',
'≥': '\u2265',
'⊂': '\u2282',
'⊃': '\u2283',
'⊄': '\u2284',
'⊆': '\u2286',
'⊇': '\u2287',
'⊕': '\u2295',
'⊗': '\u2297',
'⊥': '\u22a5',
'⋅': '\u22c5',
'⌈': '\u2308',
'⌉': '\u2309',
'⌊': '\u230a',
'⌋': '\u230b',
'⟨': '\u2329',
'⟩': '\u232a',
'◊': '\u25ca',
'♠': '\u2660',
'♣': '\u2663',
'♥': '\u2665',
'♦': '\u2666'
};
exports.decode = function (str) {
if (!~str.indexOf('&')) return str;
//Decode literal entities
for (var i in entities) {
str = str.replace(new RegExp(i, 'g'), entities[i]);
}
//Decode hex entities
str = str.replace(/&#x(0*[0-9a-f]{2,5});?/gi, function (m, code) {
return String.fromCharCode(parseInt(+code, 16));
});
//Decode numeric entities
str = str.replace(/&#([0-9]{2,4});?/gi, function (m, code) {
return String.fromCharCode(+code);
});
str = str.replace(/&/g, '&');
return str;
}
exports.encode = function (str) {
str = str.replace(/&/g, '&');
//IE doesn't accept '
str = str.replace(/'/g, ''');
//Encode literal entities
for (var i in entities) {
str = str.replace(new RegExp(entities[i], 'g'), i);
}
return str;
}