diff --git a/deepClone.js b/deepClone.js
new file mode 100644
index 0000000..604feb4
--- /dev/null
+++ b/deepClone.js
@@ -0,0 +1,9 @@
+function deepClone(src) {
+ var copy = Array.isArray(src) ? [] : {};
+ for (var item in src) {
+ copy[item] = typeof src[item] == 'object' ?
+ deepClone(src[item]) :
+ src[item];
+ }
+ return copy;
+}
diff --git a/index.htm b/index.htm
new file mode 100644
index 0000000..2684a21
--- /dev/null
+++ b/index.htm
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/template.js b/template.js
new file mode 100644
index 0000000..03c106a
--- /dev/null
+++ b/template.js
@@ -0,0 +1,69 @@
+function template(str, vars) {
+ if (!vars) {
+ vars = {};
+ }
+
+ var rawCommand = function(str) {
+ return str.trim();
+ };
+
+ var tagPos = {}, argv, substrs = {}, rep;
+
+ while ((tagPos.bb = str.search(/\[\[(.*?)\]\]/)) != -1) {
+ rep = '';
+ tagPos.be = str.indexOf(']]', tagPos.bb);
+ substrs.btag = str.substring(tagPos.bb+2, tagPos.be);
+
+ var argv = substrs.btag.split(' ');
+ argv = argv.filter(function(item) {
+ return item != '';
+ });
+
+ tagPos.eb = str.indexOf('[[/'+argv[0]+']]', tagPos.be+2);
+ if (tagPos.eb > -1) {
+ tagPos.ee = str.indexOf(']]', tagPos.eb);
+ }
+ substrs.inner = str.substring(tagPos.be+2, tagPos.eb);
+ //substrs.etag = str.substring(tagPos.eb+2, tagPos.ee);
+
+ if (tagPos.eb > -1) {
+ switch (argv[0]) {
+ case 'each':
+ if (argv.length == 4 && argv[2] == 'in') {
+ var extVars = deepClone(vars);
+ for (var key in vars[argv[3]]) {
+ extVars[argv[1]] = vars[argv[3]][key];
+ rep += template(substrs.inner, extVars);
+ }
+ break;
+ } // else default
+ case 'repeat':
+ if (argv.length == 2 && parseInt(argv[1]) != NaN) {
+ for (var i=0; i -1 ?
+ tagPos.ee+2 :
+ tagPos.be+2
+ );
+
+ tagPos.eb = null;
+ tagPos.ee = null;
+ }
+
+ return str;
+}