ndoc
Version:
JavaScript API documentor with simple syntax.
1,566 lines (1,505 loc) • 168 kB
JavaScript
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 = {
"file": parse_file,
"chunk": parse_chunk,
"entity": parse_entity,
"OPEN": parse_OPEN,
"CLOSE": parse_CLOSE,
"documentation": parse_documentation,
"tags_container": parse_tags_container,
"heading": parse_heading,
"addition": parse_addition,
"description_container": parse_description_container,
"tags": parse_tags,
"tag": parse_tag,
"version": parse_version,
"description_text": parse_description_text,
"signatures": parse_signatures,
"class": parse_class,
"mixin": parse_mixin,
"section": parse_section,
"namespace": parse_namespace,
"includes": parse_includes,
"fires": parse_fires,
"events": parse_events,
"event": parse_event,
"name_or_namespace": parse_name_or_namespace,
"name": parse_name,
"names": parse_names,
"bare_signatures": parse_bare_signatures,
"signature": parse_signature,
"method": parse_method,
"constructor": parse_constructor,
"property": parse_property,
"constant": parse_constant,
"method_entry": parse_method_entry,
"args": parse_args,
"optional_args": parse_optional_args,
"arg": parse_arg,
"bare_arg": parse_bare_arg,
"results": parse_results,
"result_entries": parse_result_entries,
"argument_descriptions": parse_argument_descriptions,
"argument_description": parse_argument_description,
"argument_description_types": parse_argument_description_types,
"argument_description_text": parse_argument_description_text,
"VALUE": parse_VALUE,
"QUOTED_STRING": parse_QUOTED_STRING,
"NULL": parse_NULL,
"NUMBER": parse_NUMBER,
"BOOLEAN": parse_BOOLEAN,
"REGEXP": parse_REGEXP,
"ARRAY": parse_ARRAY,
"OBJECT": parse_OBJECT,
"ARRAY_ENTRIES": parse_ARRAY_ENTRIES,
"OBJECT_ENTRIES": parse_OBJECT_ENTRIES,
"NAME": parse_NAME,
"NAME_EDGE": parse_NAME_EDGE,
"KEY": parse_KEY,
"TEXT": parse_TEXT,
"ANY": parse_ANY,
"INDENT": parse_INDENT,
"EMPTY_LINE": parse_EMPTY_LINE,
"_": parse__,
"_$": parse__$,
"$": parse_$
};
if (startRule !== undefined) {
if (parseFunctions[startRule] === undefined) {
throw new Error("Invalid rule name: " + quote(startRule) + ".");
}
} else {
startRule = "file";
}
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_file() {
var result0, result1;
var pos0;
pos0 = clone(pos);
result0 = [];
result1 = parse_chunk();
while (result1 !== null) {
result0.push(result1);
result1 = parse_chunk();
}
if (result0 !== null) {
result0 = (function(offset, line, column) { return entities; })(pos0.offset, pos0.line, pos0.column);
}
if (result0 === null) {
pos = clone(pos0);
}
return result0;
}
function parse_chunk() {
var result0;
result0 = parse_entity();
if (result0 === null) {
result0 = parse_ANY();
}
return result0;
}
function parse_entity() {
var result0, result1, result2, result3;
var pos0, pos1;
pos0 = clone(pos);
pos1 = clone(pos);
result0 = parse_OPEN();
if (result0 !== null) {
result1 = parse_documentation();
if (result1 === null) {
result1 = (function(offset, line, column) { throwError(); })(pos.offset, pos.line, pos.column) ? "" : null;
}
if (result1 !== null) {
result2 = parse_CLOSE();
if (result2 !== null) {
result3 = (function(offset, line, column) {
/* capture line number workaround */
if(typeof line !== 'undefined'){
entity.line = line + 1;
}
})(pos.offset, pos.line, pos.column) ? null : "";
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) {
entities[entity.id] = entity;
/* init new supposed entity */
entity = Entity();
})(pos0.offset, pos0.line, pos0.column);
}
if (result0 === null) {
pos = clone(pos0);
}
return result0;
}
function parse_OPEN() {
var result0, result1, result2, result3, result4;
var pos0;
pos0 = clone(pos);
result0 = parse_$();
if (result0 === null) {
result0 = (function(offset, line, column) { return 0 === offset; })(pos.offset, pos.line, pos.column) ? "" : null;
}
if (result0 !== null) {
result1 = [];
result2 = parse__();
while (result2 !== null) {
result1.push(result2);
result2 = parse__();
}
if (result1 !== null) {
if (input.substr(pos.offset, 3) === "/**") {
result2 = "/**";
advance(pos, 3);
} else {
result2 = null;
if (reportFailures === 0) {
matchFailed("\"/**\"");
}
}
if (result2 !== null) {
result3 = [];
result4 = parse__();
while (result4 !== null) {
result3.push(result4);
result4 = parse__();
}
if (result3 !== null) {
result0 = [result0, result1, result2, result3];
} else {
result0 = null;
pos = clone(pos0);
}
} else {
result0 = null;
pos = clone(pos0);
}
} else {
result0 = null;
pos = clone(pos0);
}
} else {
result0 = null;
pos = clone(pos0);
}
return result0;
}
function parse_CLOSE() {
var result0, result1, result2;
var pos0, pos1;
pos0 = clone(pos);
result0 = [];
result1 = parse__();
while (result1 !== null) {
result0.push(result1);
result1 = parse__();
}
if (result0 !== null) {
if (input.substr(pos.offset, 3) === "**/") {
result1 = "**/";
advance(pos, 3);
} else {
result1 = null;
if (reportFailures === 0) {
matchFailed("\"**/\"");
}
}
if (result1 === null) {
pos1 = clone(pos);
if (input.substr(pos.offset, 2) === "*/") {
result1 = "*/";
advance(pos, 2);
} else {
result1 = null;
if (reportFailures === 0) {
matchFailed("\"*/\"");
}
}
if (result1 !== null) {
result2 = (function(offset, line, column) { throw new parser.SyntaxError(['**/'], '*/', offset, line, column); })(pos.offset, pos.line, pos.column) ? "" : null;
if (result2 !== null) {
result1 = [result1, result2];
} else {
result1 = null;
pos = clone(pos1);
}
} else {
result1 = null;
pos = clone(pos1);
}
}
if (result1 !== null) {
result0 = [result0, result1];
} else {
result0 = null;
pos = clone(pos0);
}
} else {
result0 = null;
pos = clone(pos0);
}
return result0;
}
function parse_documentation() {
var result0, result1, result2, result3;
var pos0;
pos0 = clone(pos);
result0 = parse_tags_container();
if (result0 !== null) {
result1 = parse_heading();
if (result1 !== null) {
result2 = [];
result3 = parse_addition();
while (result3 !== null) {
result2.push(result3);
result3 = parse_addition();
}
if (result2 !== null) {
result3 = parse_description_container();
result3 = result3 !== null ? result3 : "";
if (result3 !== null) {
result0 = [result0, result1, result2, result3];
} else {
result0 = null;
pos = clone(pos0);
}
} else {
result0 = null;
pos = clone(pos0);
}
} else {
result0 = null;
pos = clone(pos0);
}
} else {
result0 = null;
pos = clone(pos0);
}
return result0;
}
function parse_tags_container() {
var result0, result1;
var pos0;
pos0 = clone(pos);
result0 = parse_tags();
result0 = result0 !== null ? result0 : "";
if (result0 !== null) {
result1 = parse_$();
if (result1 !== null) {
result0 = [result0, result1];
} else {
result0 = null;
pos = clone(pos0);
}
} else {
result0 = null;
pos = clone(pos0);
}
return result0;
}
function parse_heading() {
var result0;
result0 = parse_signatures();
if (result0 === null) {
result0 = parse_class();
if (result0 === null) {
result0 = parse_mixin();
if (result0 === null) {
result0 = parse_section();
if (result0 === null) {
result0 = parse_namespace();
}
}
}
}
return result0;
}
function parse_addition() {
var result0;
result0 = parse_includes();
if (result0 === null) {
result0 = parse_fires();
}
return result0;
}
function parse_description_container() {
var result0, result1;
var pos0;
pos0 = clone(pos);
result0 = parse_EMPTY_LINE();
if (result0 !== null) {
result1 = parse_description_text();
result1 = result1 !== null ? result1 : "";
if (result1 !== null) {
result0 = [result0, result1];
} else {
result0 = null;
pos = clone(pos0);
}
} else {
result0 = null;
pos = clone(pos0);
}
return result0;
}
function parse_tags() {
var result0, result1, result2, result3, result4;
var pos0, pos1;
pos0 = clone(pos);
result0 = parse_tag();
if (result0 !== null) {
pos1 = clone(pos);
result1 = [];
result2 = parse__();
while (result2 !== null) {
result1.push(result2);
result2 = parse__();
}
if (result1 !== null) {
if (input.charCodeAt(pos.offset) === 44) {
result2 = ",";
advance(pos, 1);
} else {
result2 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (result2 !== null) {
result3 = [];
result4 = parse__();
while (result4 !== null) {
result3.push(result4);
result4 = parse__();
}
if (result3 !== null) {
result4 = parse_tags();
if (result4 !== null) {
result1 = [result1, result2, result3, result4];
} else {
result1 = null;
pos = clone(pos1);
}
} else {
result1 = null;
pos = clone(pos1);
}
} else {
result1 = null;
pos = clone(pos1);
}
} else {
result1 = null;
pos = clone(pos1);
}
result1 = result1 !== null ? result1 : "";
if (result1 !== null) {
result0 = [result0, result1];
} else {
result0 = null;
pos = clone(pos0);
}
} else {
result0 = null;
pos = clone(pos0);
}
return result0;
}
function parse_tag() {
var result0, result1, result2, result3, result4, result5, result6, result7, result8;
var pos0, pos1, pos2;
pos0 = clone(pos);
if (input.substr(pos.offset, 9) === "read-only") {
result0 = "read-only";
advance(pos, 9);
} else {
result0 = null;
if (reportFailures === 0) {
matchFailed("\"read-only\"");
}
}
if (result0 !== null) {
result0 = (function(offset, line, column, id) {
entity.readonly = true;
})(pos0.offset, pos0.line, pos0.column, result0);
}
if (result0 === null) {
pos = clone(pos0);
}
if (result0 === null) {
pos0 = clone(pos);
if (input.substr(pos.offset, 8) === "internal") {
result0 = "internal";
advance(pos, 8);
} else {
result0 = null;
if (reportFailures === 0) {
matchFailed("\"internal\"");
}
}
if (result0 === null) {
if (input.substr(pos.offset, 9) === "chainable") {
result0 = "chainable";
advance(pos, 9);
} else {
result0 = null;
if (reportFailures === 0) {
matchFailed("\"chainable\"");
}
}
}
if (result0 !== null) {
result0 = (function(offset, line, column, id) {
entity[id] = true;
})(pos0.offset, pos0.line, pos0.column, result0);
}
if (result0 === null) {
pos = clone(pos0);
}
if (result0 === null) {
pos0 = clone(pos);
pos1 = clone(pos);
if (input.substr(pos.offset, 7) === "section") {
result0 = "section";
advance(pos, 7);
} else {
result0 = null;
if (reportFailures === 0) {
matchFailed("\"section\"");
}
}
if (result0 === null) {
if (input.substr(pos.offset, 8) === "alias of") {
result0 = "alias of";
advance(pos, 8);
} else {
result0 = null;
if (reportFailures === 0) {
matchFailed("\"alias of\"");
}
}
if (result0 === null) {
if (input.substr(pos.offset, 10) === "related to") {
result0 = "related to";
advance(pos, 10);
} else {
result0 = null;
if (reportFailures === 0) {
matchFailed("\"related to\"");
}
}
if (result0 === null) {
if (input.substr(pos.offset, 10) === "belongs to") {
result0 = "belongs to";
advance(pos, 10);
} else {
result0 = null;
if (reportFailures === 0) {
matchFailed("\"belongs to\"");
}
}
}
}
}
if (result0 !== null) {
result1 = [];
result2 = parse__();
while (result2 !== null) {
result1.push(result2);
result2 = parse__();
}
if (result1 !== null) {
if (input.charCodeAt(pos.offset) === 58) {
result2 = ":";
advance(pos, 1);
} else {
result2 = null;
if (reportFailures === 0) {
matchFailed("\":\"");
}
}
if (result2 !== null) {
result3 = [];
result4 = parse__();
while (result4 !== null) {
result3.push(result4);
result4 = parse__();
}
if (result3 !== null) {
result4 = parse_name();
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, id, name) {
/* `alias of' -> `alias_of' */
entity[id.replace(/\ /g, '_')] = name;
})(pos0.offset, pos0.line, pos0.column, result0[0], result0[4]);
}
if (result0 === null) {
pos = clone(pos0);
}
if (result0 === null) {
pos0 = clone(pos);
if (input.substr(pos.offset, 10) === "deprecated") {
result0 = "deprecated";
advance(pos, 10);
} else {
result0 = null;
if (reportFailures === 0) {
matchFailed("\"deprecated\"");
}
}
if (result0 !== null) {
pos1 = clone(pos);
pos2 = clone(pos);
result1 = [];
result2 = parse__();
while (result2 !== null) {
result1.push(result2);
result2 = parse__();
}
if (result1 !== null) {
if (input.charCodeAt(pos.offset) === 58) {
result2 = ":";
advance(pos, 1);
} else {
result2 = null;
if (reportFailures === 0) {
matchFailed("\":\"");
}
}
if (result2 !== null) {
result3 = [];
result4 = parse__();
while (result4 !== null) {
result3.push(result4);
result4 = parse__();
}
if (result3 !== null) {
result4 = parse_version();
if (result4 !== null) {
result5 = [];
result6 = parse__();
while (result6 !== null) {
result5.push(result6);
result6 = parse__();
}
if (result5 !== null) {
if (input.substr(pos.offset, 2) === "..") {
result6 = "..";
advance(pos, 2);
} else {
result6 = null;
if (reportFailures === 0) {
matchFailed("\"..\"");
}
}
if (result6 !== null) {
result7 = [];
result8 = parse__();
while (result8 !== null) {
result7.push(result8);
result8 = parse__();
}
if (result7 !== null) {
result8 = parse_version();
if (result8 !== null) {
result1 = [result1, result2, result3, result4, result5, result6, result7, result8];
} else {
result1 = null;
pos = clone(pos2);
}
} else {
result1 = null;
pos = clone(pos2);
}
} else {
result1 = null;
pos = clone(pos2);
}
} else {
result1 = null;
pos = clone(pos2);
}
} else {
result1 = null;
pos = clone(pos2);
}
} else {
result1 = null;
pos = clone(pos2);
}
} else {
result1 = null;
pos = clone(pos2);
}
} else {
result1 = null;
pos = clone(pos2);
}
if (result1 !== null) {
result1 = (function(offset, line, column, since, off) { entity.deprecated = {since: since, off:off}; })(pos1.offset, pos1.line, pos1.column, result1[3], result1[7]);
}
if (result1 === null) {
pos = clone(pos1);
}
if (result1 === null) {
pos1 = clone(pos);
pos2 = clone(pos);
result1 = [];
result2 = parse__();
while (result2 !== null) {
result1.push(result2);
result2 = parse__();
}
if (result1 !== null) {
if (input.charCodeAt(pos.offset) === 58) {
result2 = ":";
advance(pos, 1);
} else {
result2 = null;
if (reportFailures === 0) {
matchFailed("\":\"");
}
}
if (result2 !== null) {
result3 = [];
result4 = parse__();
while (result4 !== null) {
result3.push(result4);
result4 = parse__();
}
if (result3 !== null) {
result4 = parse_version();
if (result4 !== null) {
result1 = [result1, result2, result3, result4];
} else {
result1 = null;
pos = clone(pos2);
}
} else {
result1 = null;
pos = clone(pos2);
}
} else {
result1 = null;
pos = clone(pos2);
}
} else {
result1 = null;
pos = clone(pos2);
}
if (result1 !== null) {
result1 = (function(offset, line, column, since) { entity.deprecated = {since: since}; })(pos1.offset, pos1.line, pos1.column, result1[3]);
}
if (result1 === null) {
pos = clone(pos1);
}
if (result1 === null) {
pos1 = clone(pos);
pos2 = clone(pos);
result1 = [];
if (result1 !== null) {
result1 = (function(offset, line, column) { entity.deprecated = true; })(pos1.offset, pos1.line, pos1.column);
}
if (result1 === null) {
pos = clone(pos1);
}
}
}
if (result1 !== null) {
result0 = [result0, result1];
} else {
result0 = null;
pos = clone(pos0);
}
} else {
result0 = null;
pos = clone(pos0);
}
}
}
}
return result0;
}
function parse_version() {
var result0, result1, result2;
var pos0, pos1, pos2, pos3;
pos0 = clone(pos);
pos1 = clone(pos);
if (/^[0-9]/.test(input.charAt(pos.offset))) {
result1 = input.charAt(pos.offset);
advance(pos, 1);
} else {
result1 = null;
if (reportFailures === 0) {
matchFailed("[0-9]");
}
}
if (result1 !== null) {
result0 = [];
while (result1 !== null) {
result0.push(result1);
if (/^[0-9]/.test(input.charAt(pos.offset))) {
result1 = input.charAt(pos.offset);
advance(pos, 1);
} else {
result1 = null;
if (reportFailures === 0) {
matchFailed("[0-9]");
}
}
}
} else {
result0 = null;
}
if (result0 !== null) {
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_version();
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, v) { return v; })(pos2.offset, pos2.line, pos2.column, result1[1]);
}
if (result1 === null) {
pos = clone(pos2);
}
result1 = result1 !== null ? result1 : "";
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, rest) {
return first.join('') + (rest ? '.' + rest : '');
})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);
}
if (result0 === null) {
pos = clone(pos0);
}
return result0;
}
function parse_description_text() {
var result0, result1, result2, result3;
var pos0, pos1, pos2;
pos0 = clone(pos);
pos1 = clone(pos);
pos2 = clone(pos);
result1 = parse_INDENT();
if (result1 !== null) {
result2 = parse_TEXT();
if (result2 !== null) {
result3 = parse_$();
if (result3 !== null) {
result1 = [result1, result2, result3];
} else {
result1 = null;
pos = clone(pos2);
}
} else {
result1 = null;
pos = clone(pos2);
}
} else {
result1 = null;
pos = clone(pos2);
}
if (result1 !== null) {
result1 = (function(offset, line, column, indent, nested) { return indent + nested; })(pos1.offset, pos1.line, pos1.column, result1[0], result1[1]);
}
if (result1 === null) {
pos = clone(pos1);
}
if (result1 === null) {
result1 = parse_EMPTY_LINE();
}
if (result1 !== null) {
result0 = [];
while (result1 !== null) {
result0.push(result1);
pos1 = clone(pos);
pos2 = clone(pos);
result1 = parse_INDENT();
if (result1 !== null) {
result2 = parse_TEXT();
if (result2 !== null) {
result3 = parse_$();
if (result3 !== null) {
result1 = [result1, result2, result3];
} else {
result1 = null;
pos = clone(pos2);
}
} else {
result1 = null;
pos = clone(pos2);
}
} else {
result1 = null;
pos = clone(pos2);
}
if (result1 !== null) {
result1 = (function(offset, line, column, indent, nested) { return indent + nested; })(pos1.offset, pos1.line, pos1.column, result1[0], result1[1]);
}
if (result1 === null) {
pos = clone(pos1);
}
if (result1 === null) {
result1 = parse_EMPTY_LINE();
}
}
} else {
result0 = null;
}
if (result0 !== null) {
result0 = (function(offset, line, column, text) {
entity.description = indent_shift(text.join('\n'));
// short description lasts until the first empty line
entity.short_description = entity.description.replace(/\n\n[\s\S]*$/, '');
})(pos0.offset, pos0.line, pos0.column, result0);
}
if (result0 === null) {
pos = clone(pos0);
}
return result0;
}
function parse_signatures() {
var result0, result1;
var pos0;
pos0 = clone(pos);
result0 = parse_bare_signatures();
if (result0 !== null) {
result1 = parse_argument_descriptions();
result1 = result1 !== null ? result1 : "";
if (result1 !== null) {
result0 = [result0, result1];
} else {
result0 = null;
pos = clone(pos0);
}
} else {
result0 = null;
pos = clone(pos0);
}
return result0;
}
function parse_class() {
var result0, result1, result2, result3, result4, result5, result6, result7;
var pos0, pos1, pos2, pos3;
pos0 = clone(pos);
pos1 = clone(pos);
result0 = parse_INDENT();
if (result0 !== null) {
if (input.substr(pos.offset, 5) === "class") {
result1 = "class";
advance(pos, 5);
} else {
result1 = null;
if (reportFailures === 0) {
matchFailed("\"class\"");
}
}
if (result1 !== null) {
result3 = parse__();
if (result3 !== null) {
result2 = [];
while (result3 !== null) {
result2.push(result3);
result3 = parse__();
}
} else {
result2 = null;
}
if (result2 !== null) {
result3 = parse_name();
if (result3 !== null) {
pos2 = clone(pos);
pos3 = clone(pos);
result4 = [];
result5 = parse__();
while (result5 !== null) {
result4.push(result5);
result5 = parse__();
}
if (result4 !== null) {
if (input.charCodeAt(pos.offset) === 60) {
result5 = "<";
advance(pos, 1);
} else {
result5 = null;
if (reportFailures === 0) {
matchFailed("\"<\"");
}
}
if (result5 !== null) {
result6 = [];
result7 = parse__();
while (result7 !== null) {
result6.push(result7);
result7 = parse__();
}
if (result6 !== null) {
result7 = parse_name();
if (result7 !== null) {
result4 = [result4, result5, result6, result7];
} else {
result4 = null;
pos = clone(pos3);
}
} else {
result4 = null;
pos = clone(pos3);
}
} else {
result4 = null;
pos = clone(pos3);
}
} else {
result4 = null;
pos = clone(pos3);
}
if (result4 !== null) {
result4 = (function(offset, line, column, nested) { return nested; })(pos2.offset, pos2.line, pos2.column, result4[3]);
}
if (result4 === null) {
pos = clone(pos2);
}
result4 = result4 !== null ? result4 : "";
if (result4 !== null) {
result5 = parse_$();
if (result5 !== null) {
result0 = [result0, result1, result2, result3, result4, result5];
} 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, id, superclass) {
entity.id = id;
entity.type = 'class';
entity.superclass = superclass || none;
})(pos0.offset, pos0.line, pos0.column, result0[3], result0[4]);
}
if (result0 === null) {
pos = clone(pos0);
}
return result0;
}
function parse_mixin() {
var result0, result1, result2, result3, result4;
var pos0, pos1;
pos0 = clone(pos);
pos1 = clone(pos);
result0 = parse_INDENT();
if (result0 !== null) {
if (input.substr(pos.offset, 5) === "mixin") {
result1 = "mixin";
advance(pos, 5);
} else {
result1 = null;
if (reportFailures === 0) {
matchFailed("\"mixin\"");
}
}
if (result1 !== null) {
result3 = parse__();
if (result3 !== null) {
result2 = [];
while (result3 !== null) {
result2.push(result3);
result3 = parse__();
}
} else {
result2 = null;
}
if (result2 !== null) {
result3 = parse_name();
if (result3 !== null) {
result4 = parse_$();
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, id) {
entity.id = id;
entity.type = 'mixin';
})(pos0.offset, pos0.line, pos0.column, result0[3]);
}
if (result0 === null) {
pos = clone(pos0);
}
return result0;
}
function parse_section() {
var result0, result1, result2, result3, result4, result5, result6;
var pos0, pos1;
pos0 = clone(pos);
pos1 = clone(pos);
result0 = parse_INDENT();
if (result0 !== null) {
if (input.substr(pos.offset, 2) === "==") {
result1 = "==";
advance(pos, 2);
} else {
result1 = null;
if (reportFailures === 0) {
matchFailed("\"==\"");
}
}
if (result1 !== null) {
result2 = [];
result3 = parse__();
while (result3 !== null) {
result2.push(result3);
result3 = parse__();
}
if (result2 !== null) {
result3 = parse_name();
if (result3 !== null) {
result4 = [];
result5 = parse__();
while (result5 !== null) {
result4.push(result5);
result5 = parse__();
}
if (result4 !== null) {
if (input.substr(pos.offset, 2) === "==") {
result5 = "==";
advance(pos, 2);
} else {
result5 = null;
if (reportFailures === 0) {
matchFailed("\"==\"");
}
}
if (result5 !== null) {
result6 = parse_$();
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, id) {
entity.id = id;
entity.type = 'section';
})(pos0.offset, pos0.line, pos0.column, result0[3]);
}
if (result0 === null) {
pos = clone(pos0);
}
return result0;
}
function parse_namespace() {
var result0, result1, result2;
var pos0, pos1;
pos0 = clone(pos);
pos1 = clone(pos);
result0 = parse_INDENT();
if (result0 !== null) {
result1 = parse_name();
if (result1 !== null) {
result2 = parse_$();
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, id) {
entity.id = id;
entity.type = 'namespace';
})(pos0.offset, pos0.line, pos0.column, result0[1]);
}
if (result0 === null) {
pos = clone(pos0);
}
return result0;
}
function parse_includes() {
var result0, result1, result2, result3, result4;
var pos0, pos1;
pos0 = clone(pos);
pos1 = clone(pos);
result0 = parse_INDENT();
if (result0 !== null) {
if (input.substr(pos.offset, 8) === "includes") {
result1 = "includes";
advance(pos, 8);
} else {
result1 = null;
if (reportFailures === 0) {
matchFailed("\"includes\"");
}
}
if (result1 !== null) {
result3 = parse__();
if (result3 !== null) {
result2 = [];
while (result3 !== null) {
result2.push(result3);
result3 = parse__();
}
} else {
result2 = null;
}
if (result2 !== null) {
result3 = parse_names();
if (result3 !== null) {
result4 = parse_$();
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, includes) {
entity.included_mixins = includes;
})(pos0.offset, pos0.line, pos0.column, result0[3]);
}
if (result0 === null) {
pos = clone(pos0);
}
return result0;
}
function parse_fires() {
var result0, result1, result2, result3, result4;
var pos0, pos1;
pos0 = clone(pos);
pos1 = clone(pos);
result0 = parse_INDENT();
if (result0 !== null) {
if (input.substr(pos.offset, 5) === "fires") {
result1 = "fires";
advance(pos, 5);
} else {
result1 = null;
if (reportFailures === 0) {
matchFailed("\"fires\"");
}
}
if (result1 !== null) {
result3 = parse__();
if (result3 !== null) {
result2 = [];
while (result3 !== null) {
result2.push(result3);
result3 = parse__();
}
} else {
result2 = null;
}
if (result2 !== null) {
result3 = parse_events();
if (result3 !== null) {
result4 = parse_$();
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, events) {
entity.events = events;
})(pos0.offset, pos0.line, pos0.column, result0[3]);
}
if (result0 === null) {
pos = clone(pos0);
}
return result0;
}
function parse_events() {
var result0, result1, result2;
var pos0, pos1, pos2, pos3;
pos0 = clone(pos);
pos1 = clone(pos);
result0 = parse_event();
if (result0 !== null) {
pos2 = clone(pos);
pos3 = clone(pos);
if (input.charCodeAt(pos.offset) === 44) {
result1 = ",";
advance(pos, 1);
} else {
result1 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (result1 !== null) {
result2 = parse_events();
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, nested) { return