[Pkg-javascript-commits] [node-entities] 01/63: Initial commit
Wolfgang Borgert
debacle at moszumanska.debian.org
Mon Sep 22 08:15:43 UTC 2014
This is an automated email from the git hooks/post-receive script.
debacle pushed a commit to branch master
in repository node-entities.
commit 968574167e6dc203dee8fafb0f2e0da1ffd8746e
Author: Felix Böhm <me at feedic.com>
Date: Fri Jan 13 17:57:38 2012 +0100
Initial commit
---
entities/html4.json | 1 +
entities/xml.json | 1 +
index.js | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++
package.json | 12 ++++++++
test.js | 23 ++++++++++++++
5 files changed, 126 insertions(+)
diff --git a/entities/html4.json b/entities/html4.json
new file mode 100644
index 0000000..28b0545
--- /dev/null
+++ b/entities/html4.json
@@ -0,0 +1 @@
+{"AElig":"\u00c6","AElig;":"\u00c6","Aacute":"\u00c1","Aacute;":"\u00c1","Acirc":"\u00c2","Acirc;":"\u00c2","Agrave":"\u00c0","Agrave;":"\u00c0","Alpha;":"\u0391","Aring":"\u00c5","Aring;":"\u00c5","Atilde":"\u00c3","Atilde;":"\u00c3","Auml":"\u00c4","Auml;":"\u00c4","Beta;":"\u0392","Ccedil":"\u00c7","Ccedil;":"\u00c7","Chi;":"\u03a7","Dagger;":"\u2021","Delta;":"\u0394","ETH":"\u00d0","ETH;":"\u00d0","Eacute":"\u00c9","Eacute;":"\u00c9","Ecirc":"\u00ca","Ecirc;":"\u00ca","Egrave":"\u00 [...]
\ No newline at end of file
diff --git a/entities/xml.json b/entities/xml.json
new file mode 100644
index 0000000..b6e781c
--- /dev/null
+++ b/entities/xml.json
@@ -0,0 +1 @@
+{"amp;":"\u0026","apos;":"\u0027","gt;":"\u003e","lt;":"\u003c","quot;":"\u0022"}
\ No newline at end of file
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..9085ae8
--- /dev/null
+++ b/index.js
@@ -0,0 +1,89 @@
+var re_hex = /&#x[\da-f]+;?/gi,
+ re_strictHex = /&#x[\da-f]+;/gi,
+ re_charCode = /&#\d+;?/g,
+ re_strictCharCode = /&#\d+;/g,
+ re_notUTF8 = /[\u0000-\u001f\u007f-\uffff]/g,
+ fromCharCode = String.fromCharCode,
+ num_func = function(num){return fromCharCode(parseInt(num.substr(2), 10));},
+ hex_func = function(hex){return fromCharCode(parseInt(hex.substr(3), 16));},
+ strictNum_func = function(num){return fromCharCode(num.slice(2, -1));},
+ strictHex_func = function(num){return fromCharCode(parseInt(num.slice(3, -1), 16));},
+ charCode_func = function(c){ return "&#" +c.charCodeAt(0) +";";};
+
+var readFile = require("fs").readFileSync;
+var fetch = function(filename, inherits){
+ var obj = JSON.parse(readFile(__dirname +"/entities/" +filename +".json", "utf8"));
+
+ if(inherits) for(var name in inherits) obj[name] = inherits[name];
+
+ var re = Object.keys(obj).sort().join("|").replace(/(\w+)\|\1;/g, "$1;?");
+
+ return {
+ func: function(name){
+ return obj[name.substr(1)];
+ },
+ re: new RegExp("&(?:" +re +")", "g"),
+ obj: obj
+ };
+};
+
+var getReverse = function(obj){
+ var reverse = Object.keys(obj).reduce(function(reverse, name){
+ reverse[obj[name]] = name;
+ return reverse;
+ }, {});
+
+ return {
+ func: function(name){ return "&" +reverse[name]; },
+ re: new RegExp("\\" +Object.keys(reverse).sort().join("|\\"), "g")
+ }
+};
+
+var modes = ["XML", "HTML4", "HTML5"];
+
+module.exports = {
+ decode: function(data, level){
+ if(!modes[level]) level = 0;
+ return module.exports["decode" +modes[level]](data);
+ },
+ encode: function(data, level){
+ if(!modes[level]) level = 0;
+ return module.exports["encode" +modes[level]](data);
+ },
+ decodeXML: function(data){
+ return data
+ .replace(regex, func)
+ .replace(re_strictHex, strictHex_func)
+ .replace(re_strictCharCode, strictNum_func);
+
+ }
+};
+
+var tmp;
+
+modes.forEach(function(name){
+ var obj = fetch(name.toLowerCase(), tmp),
+ regex = obj.re,
+ func = obj.func;
+
+ tmp = obj.obj;
+
+ if(!module.exports["decode" +name]){
+ module.exports["decode" +name] = function(data){
+ return data
+ .replace(regex, func)
+ .replace(re_hex, hex_func)
+ .replace(re_charCode, num_func);
+ };
+ }
+
+ var reverse = getReverse(obj.obj),
+ reverse_re = reverse.re,
+ reverse_func = reverse.func;
+
+ module.exports["encode" +name] = function(data){
+ return data
+ .replace(reverse_re, reverse_func)
+ .replace(re_notUTF8, charCode_func);
+ };
+});
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..ef836d3
--- /dev/null
+++ b/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "entities",
+ "version": "0.1.0",
+ "description": "Encode & decode XML/HTML entities with ease",
+ "author": "Felix Boehm <me at feedic.com>",
+ "keywords": ["html", "xml", "entity", "encoding"],
+ "main": "./index.js",
+ "repository": {
+ "type": "git"
+ , "url": "git://github.com/fb55/node-entities.git"
+ }
+}
\ No newline at end of file
diff --git a/test.js b/test.js
new file mode 100644
index 0000000..a8bd925
--- /dev/null
+++ b/test.js
@@ -0,0 +1,23 @@
+var ben = require("ben"),
+ decode = require("./").decodeXML,
+ encode = require("./").encode,
+ decoded = "asdf & ÿ ü '",
+ encoded = encode(decoded);
+
+(function(result){
+ if(result !== "asdf & ÿ ü '"){
+ throw Error("Unexpected output: " + result);
+ }
+}(encode(decoded)));
+
+var tmp = Array(201).join(decoded);
+console.log("Encoding:", ben(function(){ encode(tmp); }));
+
+(function(result){
+ if(result !== decoded){
+ throw Error("Unexpected output: " + result);
+ }
+}(decode(encoded, 2)));
+
+tmp = Array(201).join(encoded);
+console.log("Decoding:", ben(function(){ decode(tmp, 2); }));
\ No newline at end of file
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-entities.git
More information about the Pkg-javascript-commits
mailing list