diff options
author | John MacFarlane <jgm@berkeley.edu> | 2015-01-11 23:19:03 -0800 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2015-01-11 23:19:03 -0800 |
commit | f846824b17c83092fcb1e5dd92d3e931c39e76ef (patch) | |
tree | 7390209baa9393657b99efb666b54cc98f269e8a /js/lib/common.js | |
parent | c6d83e713df9864d704e2d12c3f62ff3be8535fd (diff) |
Moved common xml escaping code from xml.js, html.js to common.js.
Diffstat (limited to 'js/lib/common.js')
-rw-r--r-- | js/lib/common.js | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/js/lib/common.js b/js/lib/common.js index 0104e68..8ba70a8 100644 --- a/js/lib/common.js +++ b/js/lib/common.js @@ -8,6 +8,12 @@ var ESCAPABLE = '[!"#$%&\'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]'; var reEntityOrEscapedChar = new RegExp('\\\\' + ESCAPABLE + '|' + ENTITY, 'gi'); +var XMLSPECIAL = '[&<>"]'; + +var reXmlSpecial = new RegExp(XMLSPECIAL, 'g'); + +var reXmlSpecialOrEntity = new RegExp(ENTITY + '|' + XMLSPECIAL, 'gi'); + var unescapeChar = function(s) { "use strict"; if (s[0] === '\\') { @@ -32,6 +38,34 @@ var normalizeURI = function(uri) { return encodeURI(unescape(uri)); } +var replaceUnsafeChar = function(s) { + switch (s) { + case '&': + return '&'; + case '<': + return '<'; + case '>': + return '>'; + case '"': + return '"'; + default: + return s; + } +}; + +var escapeXml = function(s, preserve_entities) { + if (reXmlSpecial.test(s)) { + if (preserve_entities) { + return s.replace(reXmlSpecialOrEntity, replaceUnsafeChar); + } else { + return s.replace(reXmlSpecial, replaceUnsafeChar); + } + } else { + return s; + } +}; + module.exports = { unescapeString: unescapeString, - normalizeURI: normalizeURI + normalizeURI: normalizeURI, + escapeXml: escapeXml, }; |