[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