UNPKG

blade

Version:

Blade - HTML Template Compiler, inspired by Jade & Haml

1,490 lines (1,441 loc) • 173 kB
module.exports = (function(){ /* * Generated by PEG.js 0.7.0. * * http://pegjs.majda.cz/ */ function quote(s) { /* * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a * string literal except for the closing quote character, backslash, * carriage return, line separator, paragraph separator, and line feed. * Any character may appear in the form of an escape sequence. * * For portability, we also escape escape all control and non-ASCII * characters. Note that "\0" and "\v" escape sequences are not used * because JSHint does not like the first and IE the second. */ return '"' + s .replace(/\\/g, '\\\\') // backslash .replace(/"/g, '\\"') // closing quote character .replace(/\x08/g, '\\b') // backspace .replace(/\t/g, '\\t') // horizontal tab .replace(/\n/g, '\\n') // line feed .replace(/\f/g, '\\f') // form feed .replace(/\r/g, '\\r') // carriage return .replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g, escape) + '"'; } var result = { /* * Parses the input with a generated parser. If the parsing is successfull, * returns a value explicitly or implicitly specified by the grammar from * which the parser was generated (see |PEG.buildParser|). If the parsing is * unsuccessful, throws |PEG.parser.SyntaxError| describing the error. */ parse: function(input, startRule) { var parseFunctions = { "start": parse_start, "nodes": parse_nodes, "doctype": parse_doctype, "blank_line": parse_blank_line, "node": parse_node, "parent_node": parse_parent_node, "parent_node_types": parse_parent_node_types, "child_node": parse_child_node, "text_block_parent": parse_text_block_parent, "text_block_parent_types": parse_text_block_parent_types, "text_block_child": parse_text_block_child, "tag": parse_tag, "id_class": parse_id_class, "attributes": parse_attributes, "attribute_separator": parse_attribute_separator, "attribute": parse_attribute, "attribute_code": parse_attribute_code, "tag_content": parse_tag_content, "block": parse_block, "block_render": parse_block_render, "block_modifier": parse_block_modifier, "block_modifier_keyword": parse_block_modifier_keyword, "function_definition": parse_function_definition, "function_call": parse_function_call, "matched_parentheses": parse_matched_parentheses, "parameters": parse_parameters, "chunk": parse_chunk, "isolate": parse_isolate, "constant": parse_constant, "preserve": parse_preserve, "foreach": parse_foreach, "foreach_else": parse_foreach_else, "include": parse_include, "exposed_locals": parse_exposed_locals, "comment": parse_comment, "unparsed_comment": parse_unparsed_comment, "code": parse_code, "event_handler": parse_event_handler, "line_of_text": parse_line_of_text, "content_prefix": parse_content_prefix, "filter": parse_filter, "identifier": parse_identifier, "alpha": parse_alpha, "alphanumeric": parse_alphanumeric, "whitespace": parse_whitespace, "quoted_string": parse_quoted_string, "text_until_eol": parse_text_until_eol, "newline": parse_newline, "newline_token": parse_newline_token, "indents": parse_indents }; if (startRule !== undefined) { if (parseFunctions[startRule] === undefined) { throw new Error("Invalid rule name: " + quote(startRule) + "."); } } else { startRule = "start"; } var pos = { offset: 0, line: 1, column: 1, seenCR: false }; var reportFailures = 0; var rightmostFailuresPos = { offset: 0, line: 1, column: 1, seenCR: false }; var rightmostFailuresExpected = []; function padLeft(input, padding, length) { var result = input; var padLength = length - input.length; for (var i = 0; i < padLength; i++) { result = padding + result; } return result; } function escape(ch) { var charCode = ch.charCodeAt(0); var escapeChar; var length; if (charCode <= 0xFF) { escapeChar = 'x'; length = 2; } else { escapeChar = 'u'; length = 4; } return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length); } function clone(object) { var result = {}; for (var key in object) { result[key] = object[key]; } return result; } function advance(pos, n) { var endOffset = pos.offset + n; for (var offset = pos.offset; offset < endOffset; offset++) { var ch = input.charAt(offset); if (ch === "\n") { if (!pos.seenCR) { pos.line++; } pos.column = 1; pos.seenCR = false; } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") { pos.line++; pos.column = 1; pos.seenCR = true; } else { pos.column++; pos.seenCR = false; } } pos.offset += n; } function matchFailed(failure) { if (pos.offset < rightmostFailuresPos.offset) { return; } if (pos.offset > rightmostFailuresPos.offset) { rightmostFailuresPos = clone(pos); rightmostFailuresExpected = []; } rightmostFailuresExpected.push(failure); } function parse_start() { var result0, result1, result2, result3; var pos0, pos1, pos2, pos3; pos0 = clone(pos); pos1 = clone(pos); result0 = []; pos2 = clone(pos); pos3 = clone(pos); result1 = parse_doctype(); if (result1 !== null) { result2 = parse_newline(); if (result2 !== null) { result1 = [result1, result2]; } else { result1 = null; pos = clone(pos3); } } else { result1 = null; pos = clone(pos3); } if (result1 !== null) { result1 = (function(offset, line, column, doctype) {return doctype;})(pos2.offset, pos2.line, pos2.column, result1[0]); } if (result1 === null) { pos = clone(pos2); } while (result1 !== null) { result0.push(result1); pos2 = clone(pos); pos3 = clone(pos); result1 = parse_doctype(); if (result1 !== null) { result2 = parse_newline(); if (result2 !== null) { result1 = [result1, result2]; } else { result1 = null; pos = clone(pos3); } } else { result1 = null; pos = clone(pos3); } if (result1 !== null) { result1 = (function(offset, line, column, doctype) {return doctype;})(pos2.offset, pos2.line, pos2.column, result1[0]); } if (result1 === null) { pos = clone(pos2); } } if (result0 !== null) { result1 = parse_nodes(); result1 = result1 !== null ? result1 : ""; if (result1 !== null) { result2 = []; result3 = parse_newline(); while (result3 !== null) { result2.push(result3); result3 = parse_newline(); } if (result2 !== null) { result0 = [result0, result1, result2]; } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } if (result0 !== null) { result0 = (function(offset, line, column, doctypes, nodes) {return {'doctypes': doctypes, 'nodes': nodes};})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]); } if (result0 === null) { pos = clone(pos0); } return result0; } function parse_nodes() { var result0, result1, result2, result3; var pos0, pos1, pos2, pos3; pos0 = clone(pos); pos1 = clone(pos); result0 = parse_node(); if (result0 !== null) { result1 = []; pos2 = clone(pos); pos3 = clone(pos); result3 = parse_newline(); if (result3 !== null) { result2 = []; while (result3 !== null) { result2.push(result3); result3 = parse_newline(); } } else { result2 = null; } if (result2 !== null) { result3 = parse_node(); if (result3 !== null) { result2 = [result2, result3]; } else { result2 = null; pos = clone(pos3); } } else { result2 = null; pos = clone(pos3); } if (result2 !== null) { result2 = (function(offset, line, column, node) {return node;})(pos2.offset, pos2.line, pos2.column, result2[1]); } if (result2 === null) { pos = clone(pos2); } while (result2 !== null) { result1.push(result2); pos2 = clone(pos); pos3 = clone(pos); result3 = parse_newline(); if (result3 !== null) { result2 = []; while (result3 !== null) { result2.push(result3); result3 = parse_newline(); } } else { result2 = null; } if (result2 !== null) { result3 = parse_node(); if (result3 !== null) { result2 = [result2, result3]; } else { result2 = null; pos = clone(pos3); } } else { result2 = null; pos = clone(pos3); } if (result2 !== null) { result2 = (function(offset, line, column, node) {return node;})(pos2.offset, pos2.line, pos2.column, result2[1]); } if (result2 === null) { pos = clone(pos2); } } if (result1 !== null) { result0 = [result0, result1]; } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } if (result0 !== null) { result0 = (function(offset, line, column, first_node, next_nodes) {next_nodes.unshift(first_node); return next_nodes;})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]); } if (result0 === null) { pos = clone(pos0); } return result0; } function parse_doctype() { var result0, result1, result2; var pos0, pos1; reportFailures++; pos0 = clone(pos); pos1 = clone(pos); if (input.substr(pos.offset, 7) === "doctype") { result0 = "doctype"; advance(pos, 7); } else { result0 = null; if (reportFailures === 0) { matchFailed("\"doctype\""); } } if (result0 !== null) { result1 = parse_whitespace(); result1 = result1 !== null ? result1 : ""; if (result1 !== null) { result2 = parse_text_until_eol(); if (result2 !== null) { result0 = [result0, result1, result2]; } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } if (result0 !== null) { result0 = (function(offset, line, column, type) {return type;})(pos0.offset, pos0.line, pos0.column, result0[2]); } if (result0 === null) { pos = clone(pos0); } if (result0 === null) { pos0 = clone(pos); pos1 = clone(pos); if (input.substr(pos.offset, 3) === "!!!") { result0 = "!!!"; advance(pos, 3); } else { result0 = null; if (reportFailures === 0) { matchFailed("\"!!!\""); } } if (result0 !== null) { result1 = parse_whitespace(); result1 = result1 !== null ? result1 : ""; if (result1 !== null) { result2 = parse_text_until_eol(); if (result2 !== null) { result0 = [result0, result1, result2]; } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } if (result0 !== null) { result0 = (function(offset, line, column, type) {return type;})(pos0.offset, pos0.line, pos0.column, result0[2]); } if (result0 === null) { pos = clone(pos0); } } reportFailures--; if (reportFailures === 0 && result0 === null) { matchFailed("doctype"); } return result0; } function parse_blank_line() { var result0, result1; var pos0, pos1, pos2; reportFailures++; pos0 = clone(pos); pos1 = clone(pos); result0 = []; result1 = parse_whitespace(); while (result1 !== null) { result0.push(result1); result1 = parse_whitespace(); } if (result0 !== null) { pos2 = clone(pos); reportFailures++; result1 = parse_newline(); reportFailures--; if (result1 !== null) { result1 = ""; pos = clone(pos2); } else { result1 = null; } if (result1 !== null) { result0 = [result0, result1]; } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } if (result0 !== null) { result0 = (function(offset, line, column) {return {"type": "blank_line"};})(pos0.offset, pos0.line, pos0.column); } if (result0 === null) { pos = clone(pos0); } reportFailures--; if (reportFailures === 0 && result0 === null) { matchFailed("blank line"); } return result0; } function parse_node() { var result0, result1, result2; var pos0, pos1; pos0 = clone(pos); result0 = parse_include(); if (result0 !== null) { result0 = (function(offset, line, column, include) { include.line = line, include.col = column; return include; })(pos0.offset, pos0.line, pos0.column, result0); } if (result0 === null) { pos = clone(pos0); } if (result0 === null) { pos0 = clone(pos); result0 = parse_block_render(); if (result0 !== null) { result0 = (function(offset, line, column, render) { render.line = line, render.col = column; return render; })(pos0.offset, pos0.line, pos0.column, result0); } if (result0 === null) { pos = clone(pos0); } if (result0 === null) { pos0 = clone(pos); result0 = parse_function_call(); if (result0 !== null) { result0 = (function(offset, line, column, call) { call.line = line, call.col = column; return call; })(pos0.offset, pos0.line, pos0.column, result0); } if (result0 === null) { pos = clone(pos0); } if (result0 === null) { pos0 = clone(pos); pos1 = clone(pos); result0 = parse_parent_node(); if (result0 !== null) { result1 = []; result2 = parse_child_node(); while (result2 !== null) { result1.push(result2); result2 = parse_child_node(); } if (result1 !== null) { result0 = [result0, result1]; } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } if (result0 !== null) { result0 = (function(offset, line, column, parent, children) { currentParentNode = parent.parent; delete parent.parent; //Don't need this back-reference anymore delete parent._indent; //Don't need this either parent.children = parent.children.concat(children); parent.line = line, parent.col = column; return parent; })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]); } if (result0 === null) { pos = clone(pos0); } if (result0 === null) { pos0 = clone(pos); pos1 = clone(pos); result0 = parse_text_block_parent(); if (result0 !== null) { result1 = []; result2 = parse_text_block_child(); while (result2 !== null) { result1.push(result2); result2 = parse_text_block_child(); } if (result1 !== null) { result0 = [result0, result1]; } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } if (result0 !== null) { result0 = (function(offset, line, column, parent, children) { currentParentNode = parent.parent; delete parent.parent; //Don't need this back-reference anymore delete parent._indent; //Don't need this either if(parent[parent.type].length > 0 && children.length > 0) parent[parent.type] += "\n"; parent[parent.type] += children.join("\n"); parent.line = line, parent.col = column; return parent; })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]); } if (result0 === null) { pos = clone(pos0); } if (result0 === null) { pos0 = clone(pos); result0 = parse_unparsed_comment(); if (result0 !== null) { result0 = (function(offset, line, column, comment) { comment.line = line, comment.col = column; return comment; })(pos0.offset, pos0.line, pos0.column, result0); } if (result0 === null) { pos = clone(pos0); } if (result0 === null) { result0 = parse_blank_line(); } } } } } } return result0; } function parse_parent_node() { var result0; var pos0; pos0 = clone(pos); result0 = parse_parent_node_types(); if (result0 !== null) { result0 = (function(offset, line, column, parent) { parent._indent = indent; if(!(parent.children instanceof Array) ) parent.children = []; parent.parent = currentParentNode; currentParentNode = parent; return parent; })(pos0.offset, pos0.line, pos0.column, result0); } if (result0 === null) { pos = clone(pos0); } return result0; } function parse_parent_node_types() { var result0; result0 = parse_block_modifier(); if (result0 === null) { result0 = parse_block(); if (result0 === null) { result0 = parse_function_definition(); if (result0 === null) { result0 = parse_isolate(); if (result0 === null) { result0 = parse_constant(); if (result0 === null) { result0 = parse_preserve(); if (result0 === null) { result0 = parse_foreach(); if (result0 === null) { result0 = parse_foreach_else(); if (result0 === null) { result0 = parse_code(); if (result0 === null) { result0 = parse_tag(); if (result0 === null) { result0 = parse_comment(); } } } } } } } } } } return result0; } function parse_child_node() { var result0, result1, result2, result3; var pos0, pos1; reportFailures++; pos0 = clone(pos); pos1 = clone(pos); result1 = parse_newline(); if (result1 !== null) { result0 = []; while (result1 !== null) { result0.push(result1); result1 = parse_newline(); } } else { result0 = null; } if (result0 !== null) { result1 = parse_indents(); if (result1 !== null) { result2 = (function(offset, line, column, child_indent) { return child_indent == currentParentNode._indent + 1; })(pos.offset, pos.line, pos.column, result1) ? "" : null; if (result2 !== null) { result3 = parse_node(); if (result3 !== null) { result0 = [result0, result1, result2, result3]; } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } if (result0 !== null) { result0 = (function(offset, line, column, child_indent, child) {return child;})(pos0.offset, pos0.line, pos0.column, result0[1], result0[3]); } if (result0 === null) { pos = clone(pos0); } reportFailures--; if (reportFailures === 0 && result0 === null) { matchFailed("child node"); } return result0; } function parse_text_block_parent() { var result0; var pos0; pos0 = clone(pos); result0 = parse_text_block_parent_types(); if (result0 !== null) { result0 = (function(offset, line, column, parent) { parent._indent = indent; parent.parent = currentParentNode; currentParentNode = parent; return parent; })(pos0.offset, pos0.line, pos0.column, result0); } if (result0 === null) { pos = clone(pos0); } return result0; } function parse_text_block_parent_types() { var result0; result0 = parse_filter(); if (result0 === null) { result0 = parse_line_of_text(); if (result0 === null) { result0 = parse_event_handler(); } } return result0; } function parse_text_block_child() { var result0, result1, result2, result3; var pos0, pos1; reportFailures++; pos0 = clone(pos); pos1 = clone(pos); result0 = parse_newline(); if (result0 !== null) { result1 = parse_indents(); if (result1 !== null) { result2 = (function(offset, line, column, child_indent) { return child_indent > currentParentNode._indent; })(pos.offset, pos.line, pos.column, result1) ? "" : null; if (result2 !== null) { result3 = parse_text_until_eol(); result3 = result3 !== null ? result3 : ""; if (result3 !== null) { result0 = [result0, result1, result2, result3]; } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } if (result0 !== null) { result0 = (function(offset, line, column, child_indent, text) { //Add overeaten indents back to the text var pre = ""; for(var i = 0; i < child_indent - currentParentNode._indent - 1; i++) pre += indentToken; return pre + text; })(pos0.offset, pos0.line, pos0.column, result0[1], result0[3]); } if (result0 === null) { pos = clone(pos0); } reportFailures--; if (reportFailures === 0 && result0 === null) { matchFailed("text block"); } return result0; } function parse_tag() { var result0, result1, result2, result3, result4, result5, result6; var pos0, pos1; reportFailures++; pos0 = clone(pos); pos1 = clone(pos); if (input.charCodeAt(pos.offset) === 92) { result0 = "\\"; advance(pos, 1); } else { result0 = null; if (reportFailures === 0) { matchFailed("\"\\\\\""); } } result0 = result0 !== null ? result0 : ""; if (result0 !== null) { if (input.charCodeAt(pos.offset) === 60) { result1 = "<"; advance(pos, 1); } else { result1 = null; if (reportFailures === 0) { matchFailed("\"<\""); } } result1 = result1 !== null ? result1 : ""; if (result1 !== null) { result2 = parse_identifier(); result2 = result2 !== null ? result2 : ""; if (result2 !== null) { if (input.charCodeAt(pos.offset) === 62) { result3 = ">"; advance(pos, 1); } else { result3 = null; if (reportFailures === 0) { matchFailed("\">\""); } } result3 = result3 !== null ? result3 : ""; if (result3 !== null) { result4 = parse_id_class(); if (result4 !== null) { result5 = parse_attributes(); result5 = result5 !== null ? result5 : ""; if (result5 !== null) { result6 = parse_tag_content(); result6 = result6 !== null ? result6 : ""; if (result6 !== null) { result0 = [result0, result1, result2, result3, result4, result5, result6]; } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } if (result0 !== null) { result0 = (function(offset, line, column, prependSpace, tagName, appendSpace, id_class, attrs, content) { /* Special case: you must specify a tag name, id, or at least one class to be a valid tag */ if(tagName == "" && !id_class.id && id_class.classes.length == 0) return null; //Return the tag var tag = { 'type': "tag", 'name': tagName == "" ? "div" : tagName, 'id': id_class.id, 'classes': id_class.classes, 'attributes': attrs == "" ? {} : attrs, 'children': [] }; if(prependSpace) tag.prependSpace = true; if(appendSpace) tag.appendSpace = true; if(content != "") tag.children.push(content); return tag; })(pos0.offset, pos0.line, pos0.column, result0[1], result0[2], result0[3], result0[4], result0[5], result0[6]); } if (result0 === null) { pos = clone(pos0); } reportFailures--; if (reportFailures === 0 && result0 === null) { matchFailed("tag"); } return result0; } function parse_id_class() { var result0, result1, result2, result3, result4; var pos0, pos1, pos2, pos3; pos0 = clone(pos); pos1 = clone(pos); result0 = []; pos2 = clone(pos); pos3 = clone(pos); if (input.charCodeAt(pos.offset) === 46) { result1 = "."; advance(pos, 1); } else { result1 = null; if (reportFailures === 0) { matchFailed("\".\""); } } if (result1 !== null) { result2 = parse_identifier(); if (result2 !== null) { result1 = [result1, result2]; } else { result1 = null; pos = clone(pos3); } } else { result1 = null; pos = clone(pos3); } if (result1 !== null) { result1 = (function(offset, line, column, without_dot) {return without_dot;})(pos2.offset, pos2.line, pos2.column, result1[1]); } if (result1 === null) { pos = clone(pos2); } while (result1 !== null) { result0.push(result1); pos2 = clone(pos); pos3 = clone(pos); if (input.charCodeAt(pos.offset) === 46) { result1 = "."; advance(pos, 1); } else { result1 = null; if (reportFailures === 0) { matchFailed("\".\""); } } if (result1 !== null) { result2 = parse_identifier(); if (result2 !== null) { result1 = [result1, result2]; } else { result1 = null; pos = clone(pos3); } } else { result1 = null; pos = clone(pos3); } if (result1 !== null) { result1 = (function(offset, line, column, without_dot) {return without_dot;})(pos2.offset, pos2.line, pos2.column, result1[1]); } if (result1 === null) { pos = clone(pos2); } } if (result0 !== null) { pos2 = clone(pos); if (input.charCodeAt(pos.offset) === 35) { result1 = "#"; advance(pos, 1); } else { result1 = null; if (reportFailures === 0) { matchFailed("\"#\""); } } if (result1 !== null) { result2 = parse_identifier(); if (result2 !== null) { result1 = [result1, result2]; } else { result1 = null; pos = clone(pos2); } } else { result1 = null; pos = clone(pos2); } result1 = result1 !== null ? result1 : ""; if (result1 !== null) { result2 = []; pos2 = clone(pos); pos3 = clone(pos); if (input.charCodeAt(pos.offset) === 46) { result3 = "."; advance(pos, 1); } else { result3 = null; if (reportFailures === 0) { matchFailed("\".\""); } } if (result3 !== null) { result4 = parse_identifier(); if (result4 !== null) { result3 = [result3, result4]; } else { result3 = null; pos = clone(pos3); } } else { result3 = null; pos = clone(pos3); } if (result3 !== null) { result3 = (function(offset, line, column, without_dot) {return without_dot;})(pos2.offset, pos2.line, pos2.column, result3[1]); } if (result3 === null) { pos = clone(pos2); } while (result3 !== null) { result2.push(result3); pos2 = clone(pos); pos3 = clone(pos); if (input.charCodeAt(pos.offset) === 46) { result3 = "."; advance(pos, 1); } else { result3 = null; if (reportFailures === 0) { matchFailed("\".\""); } } if (result3 !== null) { result4 = parse_identifier(); if (result4 !== null) { result3 = [result3, result4]; } else { result3 = null; pos = clone(pos3); } } else { result3 = null; pos = clone(pos3); } if (result3 !== null) { result3 = (function(offset, line, column, without_dot) {return without_dot;})(pos2.offset, pos2.line, pos2.column, result3[1]); } if (result3 === null) { pos = clone(pos2); } } if (result2 !== null) { result0 = [result0, result1, result2]; } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } if (result0 !== null) { result0 = (function(offset, line, column, classes, id, classes2) {return { 'classes': classes.concat(classes2), 'id': id == "" ? null : id[1] };})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1], result0[2]); } if (result0 === null) { pos = clone(pos0); } return result0; } function parse_attributes() { var result0, result1, result2, result3, result4, result5, result6, result7, result8; var pos0, pos1, pos2, pos3; reportFailures++; pos0 = clone(pos); if (input.substr(pos.offset, 2) === "()") { result0 = "()"; advance(pos, 2); } else { result0 = null; if (reportFailures === 0) { matchFailed("\"()\""); } } if (result0 !== null) { result0 = (function(offset, line, column) {return {};})(pos0.offset, pos0.line, pos0.column); } if (result0 === null) { pos = clone(pos0); } if (result0 === null) { pos0 = clone(pos); pos1 = clone(pos); if (input.charCodeAt(pos.offset) === 40) { result0 = "("; advance(pos, 1); } else { result0 = null; if (reportFailures === 0) { matchFailed("\"(\""); } } if (result0 !== null) { result1 = []; result2 = parse_newline_token(); while (result2 !== null) { result1.push(result2); result2 = parse_newline_token(); } if (result1 !== null) { result2 = []; result3 = parse_whitespace(); while (result3 !== null) { result2.push(result3); result3 = parse_whitespace(); } if (result2 !== null) { result3 = parse_attribute(); if (result3 !== null) { result4 = []; pos2 = clone(pos); pos3 = clone(pos); result5 = parse_attribute_separator(); if (result5 !== null) { result6 = []; result7 = parse_newline_token(); while (result7 !== null) { result6.push(result7); result7 = parse_newline_token(); } if (result6 !== null) { result7 = []; result8 = parse_whitespace(); while (result8 !== null) { result7.push(result8); result8 = parse_whitespace(); } if (result7 !== null) { result8 = parse_attribute(); if (result8 !== null) { result5 = [result5, result6, result7, result8]; } else { result5 = null; pos = clone(pos3); } } else { result5 = null; pos = clone(pos3); } } else { result5 = null; pos = clone(pos3); } } else { result5 = null; pos = clone(pos3); } if (result5 !== null) { result5 = (function(offset, line, column, attr) {return attr;})(pos2.offset, pos2.line, pos2.column, result5[3]); } if (result5 === null) { pos = clone(pos2); } while (result5 !== null) { result4.push(result5); pos2 = clone(pos); pos3 = clone(pos); result5 = parse_attribute_separator(); if (result5 !== null) { result6 = []; result7 = parse_newline_token(); while (result7 !== null) { result6.push(result7); result7 = parse_newline_token(); } if (result6 !== null) { result7 = []; result8 = parse_whitespace(); while (result8 !== null) { result7.push(result8); result8 = parse_whitespace(); } if (result7 !== null) { result8 = parse_attribute(); if (result8 !== null) { result5 = [result5, result6, result7, result8]; } else { result5 = null; pos = clone(pos3); } } else { result5 = null; pos = clone(pos3); } } else { result5 = null; pos = clone(pos3); } } else { result5 = null; pos = clone(pos3); } if (result5 !== null) { result5 = (function(offset, line, column, attr) {return attr;})(pos2.offset, pos2.line, pos2.column, result5[3]); } if (result5 === null) { pos = clone(pos2); } } if (result4 !== null) { result5 = []; result6 = parse_newline_token(); while (result6 !== null) { result5.push(result6); result6 = parse_newline_token(); } if (result5 !== null) { result6 = []; result7 = parse_whitespace(); while (result7 !== null) { result6.push(result7); result7 = parse_whitespace(); } if (result6 !== null) { if (input.charCodeAt(pos.offset) === 41) { result7 = ")"; advance(pos, 1); } else { result7 = null; if (reportFailures === 0) { matchFailed("\")\""); } } if (result7 !== null) { result0 = [result0, result1, result2, result3, result4, result5, result6, result7]; } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } if (result0 !== null) { result0 = (function(offset, line, column, first_attr, next_attrs) { var attrs = {}; attrs[first_attr.name] = first_attr.value; for(var i in next_attrs) attrs[next_attrs[i].name] = next_attrs[i].value; return attrs; })(pos0.offset, pos0.line, pos0.column, result0[3], result0[4]); } if (result0 === null) { pos = clone(pos0); } } reportFailures--; if (reportFailures === 0 && result0 === null) { matchFailed("attribute list"); } return result0; } function parse_attribute_separator() { var result0; if (/^[, \t\r\n]/.test(input.charAt(pos.offset))) { result0 = input.charAt(pos.offset); advance(pos, 1); } else { result0 = null; if (reportFailures === 0) { matchFailed("[, \\t\\r\\n]"); } } return result0; } function parse_attribute() { var result0, result1, result2, result3, result4; var pos0, pos1, pos2; reportFailures++; pos0 = clone(pos); pos1 = clone(pos); result0 = parse_identifier(); if (result0 !== null) { if (input.charCodeAt(pos.offset) === 33) { result1 = "!"; advance(pos, 1); } else { result1 = null; if (reportFailures === 0) { matchFailed("\"!\""); } } result1 = result1 !== null ? result1 : ""; if (result1 !== null) { if (input.charCodeAt(pos.offset) === 61) { result2 = "="; advance(pos, 1); } else { result2 = null; if (reportFailures === 0) { matchFailed("\"=\""); } } if (result2 !== null) { result3 = parse_quoted_string(); if (result3 !== null) { pos2 = clone(pos); reportFailures++; if (input.charCodeAt(pos.offset) === 41) { result4 = ")"; advance(pos, 1); } else { result4 = null; if (reportFailures === 0) { matchFailed("\")\""); } } if (result4 === null) { result4 = parse_attribute_separator(); } reportFailures--; if (result4 !== null) { result4 = ""; pos = clone(pos2); } else { result4 = null; } if (result4 !== null) { result0 = [result0, result1, result2, result3, result4]; } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } if (result0 !== null) { result0 = (function(offset, line, column, name, escape, value) {return {'name': name, 'value': {'escape': escape != "!", 'text': value} }; })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1], result0[3]); } if (result0 === null) { pos = clone(pos0); } if (result0 === null) { pos0 = clone(pos); pos1 = clone(pos); result0 = parse_identifier(); if (result0 !== null) { if (input.charCodeAt(pos.offset) === 33) { result1 = "!"; advance(pos, 1); } else { result1 = null; if (reportFailures === 0) { matchFailed("\"!\""); } } result1 = result1 !== null ? result1 : ""; if (result1 !== null) { if (input.charCodeAt(pos.offset) === 61) { result2 = "="; advance(pos, 1); } else { result2 = null; if (reportFailures === 0) { matchFailed("\"=\""); } } if (result2 !== null) { result3 = parse_attribute_code(); if (result3 !== null) { result0 = [result0, result1, result2, result3]; } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } } else { result0 = null; pos = clone(pos1); } if (result0 !== null) { result0 = (function(offset, line, column, name, escape, value) {return {'name': name, 'value': {'escape': escape != "!", 'code': value} }; })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1], result0[3]); } if (result0 === null) { pos = clone(pos0); } if (result0 === null) { pos0 = clone(pos); pos1 = clone(pos); result0 = parse_identifier(); if (result0 !== null) { pos2 = clone(pos); reportFailures++; if (input.charCodeAt(pos.offset) === 41) { result1 = ")"; advance(pos, 1); } else { result1 = null; if (reportFailures ===