mirror of
https://github.com/fooflington/selfdefined.git
synced 2025-06-10 21:01:41 +00:00
update
This commit is contained in:
436
node_modules/hamljs/haml.js
generated
vendored
Normal file
436
node_modules/hamljs/haml.js
generated
vendored
Normal file
@ -0,0 +1,436 @@
|
||||
// Generated by uRequire v0.6.10 - template: 'AMD'
|
||||
(function (window, global) {
|
||||
|
||||
var __isAMD = !!(typeof define === 'function' && define.amd),
|
||||
__isNode = (typeof exports === 'object'),
|
||||
__isWeb = !__isNode;
|
||||
define(function (require, exports, module) {
|
||||
|
||||
|
||||
var HAML = {};
|
||||
HAML.version = "0.6.2";
|
||||
HAML.cache = {};
|
||||
HAML.errorContextLength = 15;
|
||||
HAML.selfClosing = [
|
||||
"meta",
|
||||
"img",
|
||||
"link",
|
||||
"br",
|
||||
"hr",
|
||||
"input",
|
||||
"area",
|
||||
"base"
|
||||
];
|
||||
HAML.doctypes = {
|
||||
"5": "<!DOCTYPE html>",
|
||||
"xml": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>",
|
||||
"default": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">",
|
||||
"strict": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">",
|
||||
"frameset": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">",
|
||||
"1.1": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">",
|
||||
"basic": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML Basic 1.1//EN\" \"http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd\">",
|
||||
"mobile": "<!DOCTYPE html PUBLIC \"-//WAPFORUM//DTD XHTML Mobile 1.2//EN\" \"http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd\">"
|
||||
};
|
||||
HAML.filters = {
|
||||
plain: function (str, buf) {
|
||||
buf.push(str);
|
||||
},
|
||||
cdata: function (str, buf) {
|
||||
buf.push("<![CDATA[\n" + str + "\n]]>");
|
||||
},
|
||||
javascript: function (str, buf) {
|
||||
buf.push("<script type=\"text/javascript\">\n//<![CDATA[\n" + str + "\n//]]></script>");
|
||||
}
|
||||
};
|
||||
var HamlError = HAML.HamlError = function (msg) {
|
||||
this.name = "HamlError";
|
||||
this.message = msg;
|
||||
Error.captureStackTrace(this, HAML.render);
|
||||
};
|
||||
HamlError.super_ = Error;
|
||||
HamlError.prototype = Object.create(Error.prototype, {
|
||||
constructor: {
|
||||
value: HamlError,
|
||||
enumerable: false,
|
||||
writable: true,
|
||||
configurable: true
|
||||
}
|
||||
});
|
||||
var rules = {
|
||||
indent: /^\n( *)(?! *-#)/,
|
||||
conditionalComment: /^\/(\[[^\n]+\])/,
|
||||
comment: /^\n? *\/ */,
|
||||
silentComment: /^\n? *-#([^\n]*)/,
|
||||
doctype: /^!!! *([^\n]*)/,
|
||||
escape: /^\\(.)/,
|
||||
filter: /^:(\w+) */,
|
||||
each: /^\- *each *(\w+)(?: *, *(\w+))? * in ([^\n]+)/,
|
||||
code: /^\-([^\n]+)/,
|
||||
outputCode: /^!=([^\n]+)/,
|
||||
escapeCode: /^=([^\n]+)/,
|
||||
attrs: /^\{(.*?)\}/,
|
||||
tag: /^%([-a-zA-Z][-a-zA-Z0-9:]*)/,
|
||||
class: /^\.([\w\-]+)/,
|
||||
id: /^\#([\w\-]+)/,
|
||||
text: /^([^\n]+)/
|
||||
};
|
||||
function context(str) {
|
||||
return String(str).substr(0, HAML.errorContextLength).replace(/\n/g, "\\n");
|
||||
}
|
||||
function tokenize(str) {
|
||||
var captures, token, tokens = [], line = 1, lastIndents = 0, str = String(str).trim().replace(/\r\n|\r|\n *\n/g, "\n");
|
||||
function error(msg) {
|
||||
throw new HamlError("(Haml):" + line + " " + msg);
|
||||
}
|
||||
while (str.length) {
|
||||
for (var type in rules)
|
||||
if (captures = rules[type].exec(str)) {
|
||||
token = {
|
||||
type: type,
|
||||
line: line,
|
||||
match: captures[0],
|
||||
val: captures.length > 2 ? captures.slice(1) : captures[1]
|
||||
};
|
||||
str = str.substr(captures[0].length);
|
||||
if (type === "indent")
|
||||
++line;
|
||||
else
|
||||
break;
|
||||
var indents = token.val.length / 2;
|
||||
if (indents % 1)
|
||||
error("invalid indentation; got " + token.val.length + " spaces, should be multiple of 2");
|
||||
else if (indents - 1 > lastIndents)
|
||||
error("invalid indentation; got " + indents + ", when previous was " + lastIndents);
|
||||
else if (lastIndents > indents)
|
||||
while (lastIndents-- > indents)
|
||||
tokens.push({
|
||||
type: "outdent",
|
||||
line: line
|
||||
});
|
||||
else if (lastIndents !== indents)
|
||||
tokens.push({
|
||||
type: "indent",
|
||||
line: line
|
||||
});
|
||||
else
|
||||
tokens.push({
|
||||
type: "newline",
|
||||
line: line
|
||||
});
|
||||
lastIndents = indents;
|
||||
}
|
||||
if (token) {
|
||||
if (token.type !== "silentComment")
|
||||
tokens.push(token);
|
||||
token = null;
|
||||
} else
|
||||
error("near \"" + context(str) + "\"");
|
||||
}
|
||||
return tokens.concat({ type: "eof" });
|
||||
}
|
||||
var Parser = HAML.Parser = function (str, options) {
|
||||
options = options || {};
|
||||
this.tokens = tokenize(str);
|
||||
this.xml = options.xml;
|
||||
};
|
||||
Parser.prototype = {
|
||||
get peek() {
|
||||
return this.tokens[0];
|
||||
},
|
||||
get advance() {
|
||||
return this.current = this.tokens.shift();
|
||||
},
|
||||
get outdent() {
|
||||
switch (this.peek.type) {
|
||||
case "eof":
|
||||
return;
|
||||
case "outdent":
|
||||
return this.advance;
|
||||
default:
|
||||
throw new HamlError("expected outdent, got " + this.peek.type);
|
||||
}
|
||||
},
|
||||
get text() {
|
||||
var text = this.advance.val.trim();
|
||||
text = text.replace(/#\{(.*)\}/, "\" + $1 + \"");
|
||||
this.buffer(text);
|
||||
},
|
||||
get block() {
|
||||
this.advance;
|
||||
while (this.peek.type !== "outdent" && this.peek.type !== "eof")
|
||||
this.expr;
|
||||
this.outdent;
|
||||
},
|
||||
get textBlock() {
|
||||
var token, indents = 1;
|
||||
this.advance;
|
||||
while (this.peek.type !== "eof" && indents)
|
||||
switch ((token = this.advance).type) {
|
||||
case "newline":
|
||||
this.buffer("\\n" + Array(indents).join(" ") + "");
|
||||
break;
|
||||
case "indent":
|
||||
++indents;
|
||||
this.buffer("\\n" + Array(indents).join(" ") + "");
|
||||
break;
|
||||
case "outdent":
|
||||
--indents;
|
||||
if (indents === 1)
|
||||
this.buffer("\\n");
|
||||
break;
|
||||
default:
|
||||
this.buffer(token.match.replace(/"/g, "\\\""));
|
||||
}
|
||||
},
|
||||
get attrs() {
|
||||
var attrs = [
|
||||
"attrs",
|
||||
"class",
|
||||
"id"
|
||||
], buf = [];
|
||||
while (attrs.indexOf(this.peek.type) !== -1)
|
||||
switch (this.peek.type) {
|
||||
case "id":
|
||||
buf.push("{ id: \"" + this.advance.val + "\" }");
|
||||
break;
|
||||
case "class":
|
||||
buf.push("{ class: \"" + this.advance.val + "\" }");
|
||||
break;
|
||||
case "attrs":
|
||||
buf.push("{ " + this.advance.val.replace(/(for) *:/gi, "\"$1\":") + " }");
|
||||
}
|
||||
return buf.length ? " \" + attrs([" + buf.join(", ") + "]) + \"" : "";
|
||||
},
|
||||
get tag() {
|
||||
var tag = this.advance.val, selfClosing = !this.xml && HAML.selfClosing.indexOf(tag) !== -1;
|
||||
this.buffer("\\n<" + tag + this.attrs + (selfClosing ? "/>" : ">"));
|
||||
switch (this.peek.type) {
|
||||
case "text":
|
||||
this.text;
|
||||
break;
|
||||
case "conditionalComment":
|
||||
this.conditionalComment;
|
||||
break;
|
||||
case "comment":
|
||||
this.comment;
|
||||
break;
|
||||
case "outputCode":
|
||||
this.outputCode;
|
||||
break;
|
||||
case "escapeCode":
|
||||
this.escapeCode;
|
||||
break;
|
||||
case "indent":
|
||||
this.block;
|
||||
}
|
||||
if (!selfClosing)
|
||||
this.buffer("</" + tag + ">");
|
||||
},
|
||||
get outputCode() {
|
||||
this.buffer(this.advance.val, false);
|
||||
},
|
||||
get escapeCode() {
|
||||
this.buffer("escape(" + this.advance.val + ")", false);
|
||||
},
|
||||
get doctype() {
|
||||
var doctype = this.advance.val.trim().toLowerCase() || "default";
|
||||
if (doctype in HAML.doctypes)
|
||||
this.buffer(HAML.doctypes[doctype].replace(/"/g, "\\\""));
|
||||
else
|
||||
throw new HamlError("doctype `" + doctype + "' does not exist");
|
||||
},
|
||||
get conditionalComment() {
|
||||
var condition = this.advance.val;
|
||||
this.buffer("<!--" + condition + ">");
|
||||
this.peek.type === "indent" ? this.block : this.expr;
|
||||
this.buffer("<![endif]-->");
|
||||
},
|
||||
get comment() {
|
||||
this.advance;
|
||||
this.buffer("<!-- ");
|
||||
var buf = this.peek.type === "indent" ? this.block : this.expr;
|
||||
this.buffer(" -->");
|
||||
},
|
||||
get code() {
|
||||
var code = this.advance.val;
|
||||
if (this.peek.type === "indent") {
|
||||
this.buf.push(code);
|
||||
this.buf.push("{");
|
||||
this.block;
|
||||
this.buf.push("}");
|
||||
return;
|
||||
}
|
||||
this.buf.push(code);
|
||||
},
|
||||
get filter() {
|
||||
var filter = this.advance.val;
|
||||
if (!(filter in HAML.filters))
|
||||
throw new HamlError("filter `" + filter + "' does not exist");
|
||||
if (this.peek.type !== "indent")
|
||||
throw new HamlError("filter `" + filter + "' expects a text block");
|
||||
this.buf.push("HAML.filters." + filter + "(");
|
||||
this.buf.push("(function(){");
|
||||
this.buf.push("var buf = []");
|
||||
this.textBlock;
|
||||
this.buf.push("return buf.join(\"\")");
|
||||
this.buf.push("}).call(this)");
|
||||
this.buf.push(", buf)");
|
||||
},
|
||||
get iterate() {
|
||||
var each = this.advance, key = each.val[1], vals = each.val[2], val = each.val[0];
|
||||
if (this.peek.type !== "indent")
|
||||
throw new HamlError("'- each' expects a block, but got " + this.peek.type);
|
||||
this.buf.push("for (var " + (key || "index") + " in " + vals + ") {");
|
||||
this.buf.push("var " + val + " = " + vals + "[" + (key || "index") + "];");
|
||||
this.block;
|
||||
this.buf.push("}");
|
||||
},
|
||||
get expr() {
|
||||
switch (this.peek.type) {
|
||||
case "id":
|
||||
case "class":
|
||||
this.tokens.unshift({
|
||||
type: "tag",
|
||||
val: "div"
|
||||
});
|
||||
return this.tag;
|
||||
case "tag":
|
||||
return this.tag;
|
||||
case "text":
|
||||
var buf = [];
|
||||
while (this.peek.type === "text") {
|
||||
buf.push(this.advance.val.trim());
|
||||
if (this.peek.type === "newline")
|
||||
this.advance;
|
||||
}
|
||||
return this.buffer(buf.join(" "));
|
||||
case "each":
|
||||
return this.iterate;
|
||||
case "code":
|
||||
return this.code;
|
||||
case "escape":
|
||||
return this.buffer(this.advance.val);
|
||||
case "doctype":
|
||||
return this.doctype;
|
||||
case "filter":
|
||||
return this.filter;
|
||||
case "conditionalComment":
|
||||
return this.conditionalComment;
|
||||
case "comment":
|
||||
return this.comment;
|
||||
case "escapeCode":
|
||||
return this.escapeCode;
|
||||
case "outputCode":
|
||||
return this.outputCode;
|
||||
case "newline":
|
||||
case "indent":
|
||||
case "outdent":
|
||||
this.advance;
|
||||
return this.expr;
|
||||
default:
|
||||
throw new HamlError("unexpected " + this.peek.type);
|
||||
}
|
||||
},
|
||||
get js() {
|
||||
this.buf = [
|
||||
"with (locals || {}) {",
|
||||
" var buf = [];"
|
||||
];
|
||||
while (this.peek.type !== "eof")
|
||||
this.expr;
|
||||
this.buf.push(" return buf.join(\"\")");
|
||||
this.buf.push("}");
|
||||
return this.buf.join("\n");
|
||||
},
|
||||
buffer: function (str, quoted) {
|
||||
if (typeof quoted === "undefined")
|
||||
var quoted = true;
|
||||
if (quoted)
|
||||
this.buf.push(" buf.push(\"" + str + "\")");
|
||||
else
|
||||
this.buf.push(" buf.push(" + str + ")");
|
||||
}
|
||||
};
|
||||
function escape(str) {
|
||||
return String(str).replace(/&/g, "&").replace(/>/g, ">").replace(/</g, "<").replace(/"/g, """);
|
||||
}
|
||||
function attrs(attrs) {
|
||||
var finalAttrs = {}, classes = [], buf = [];
|
||||
for (var i = 0, len = attrs.length; i < len; i++)
|
||||
for (var attrName in attrs[i])
|
||||
if (attrName === "class")
|
||||
classes.push(attrs[i][attrName]);
|
||||
else
|
||||
finalAttrs[attrName] = attrs[i][attrName];
|
||||
if (classes.length)
|
||||
finalAttrs["class"] = classes.join(" ");
|
||||
for (var key in finalAttrs)
|
||||
if (typeof finalAttrs[key] === "boolean") {
|
||||
if (finalAttrs[key] === true)
|
||||
buf.push(key + "=\"" + key + "\"");
|
||||
} else if (finalAttrs[key])
|
||||
buf.push(key + "=\"" + escape(finalAttrs[key]) + "\"");
|
||||
return buf.join(" ");
|
||||
}
|
||||
HAML.compile = function (str, options) {
|
||||
var parser = new Parser(str, options);
|
||||
var fn = new Function("locals, attrs, escape, HAML", parser.js);
|
||||
return function (locals) {
|
||||
return fn.apply(this, [
|
||||
locals,
|
||||
attrs,
|
||||
escape,
|
||||
HAML
|
||||
]);
|
||||
};
|
||||
};
|
||||
HAML.render = function (str, options) {
|
||||
var parser, options = options || {};
|
||||
if (options.cache && !options.filename)
|
||||
throw new Error("filename option must be passed when cache is enabled");
|
||||
return function () {
|
||||
try {
|
||||
var fn;
|
||||
if (options.cache && HAML.cache[options.filename])
|
||||
fn = HAML.cache[options.filename];
|
||||
else {
|
||||
parser = new Parser(str, options);
|
||||
fn = Function("locals, attrs, escape, HAML", parser.js);
|
||||
}
|
||||
return (options.cache ? HAML.cache[options.filename] = fn : fn).call(options.context, options.locals, attrs, escape, HAML);
|
||||
} catch (err) {
|
||||
if (parser && err instanceof HamlError)
|
||||
err.message = "(Haml):" + parser.peek.line + " " + err.message;
|
||||
else if (!(err instanceof HamlError))
|
||||
err.message = "(Haml): " + err.message;
|
||||
if (options.filename)
|
||||
err.message = err.message.replace("Haml", options.filename);
|
||||
throw err;
|
||||
}
|
||||
}.call(options.context);
|
||||
};
|
||||
HAML.renderFile = function (filename, encoding, options, callback) {
|
||||
var fs = require("fs");
|
||||
options = options || {};
|
||||
options.filename = options.filename || filename;
|
||||
options.cache = options.hasOwnProperty("cache") ? options.cache : true;
|
||||
if (HAML.cache[filename]) {
|
||||
process.nextTick(function () {
|
||||
callback(null, HAML.render(null, options));
|
||||
});
|
||||
} else {
|
||||
fs.readFile(filename, encoding, function (err, str) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
} else {
|
||||
callback(null, HAML.render(str, options));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
module.exports = HAML;
|
||||
|
||||
return module.exports;
|
||||
|
||||
})
|
||||
}).call(this, (typeof exports === 'object' ? global : window), (typeof exports === 'object' ? global : window))
|
Reference in New Issue
Block a user