aboutsummaryrefslogtreecommitdiff
path: root/node_modules/toml
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/toml')
-rw-r--r--node_modules/toml/.jshintrc18
-rw-r--r--node_modules/toml/.npmignore1
-rw-r--r--node_modules/toml/.travis.yml7
-rw-r--r--node_modules/toml/CHANGELOG.md116
-rw-r--r--node_modules/toml/LICENSE22
-rw-r--r--node_modules/toml/README.md93
-rw-r--r--node_modules/toml/benchmark.js12
-rw-r--r--node_modules/toml/index.d.ts3
-rw-r--r--node_modules/toml/index.js9
-rw-r--r--node_modules/toml/lib/compiler.js195
-rw-r--r--node_modules/toml/lib/parser.js3841
-rw-r--r--node_modules/toml/package.json24
-rw-r--r--node_modules/toml/src/toml.pegjs231
-rw-r--r--node_modules/toml/test/bad.toml5
-rw-r--r--node_modules/toml/test/example.toml32
-rw-r--r--node_modules/toml/test/hard_example.toml33
-rw-r--r--node_modules/toml/test/inline_tables.toml10
-rw-r--r--node_modules/toml/test/literal_strings.toml5
-rw-r--r--node_modules/toml/test/multiline_eat_whitespace.toml15
-rw-r--r--node_modules/toml/test/multiline_literal_strings.toml7
-rw-r--r--node_modules/toml/test/multiline_strings.toml6
-rw-r--r--node_modules/toml/test/smoke.js22
-rw-r--r--node_modules/toml/test/table_arrays_easy.toml10
-rw-r--r--node_modules/toml/test/table_arrays_hard.toml31
-rw-r--r--node_modules/toml/test/test_toml.js586
25 files changed, 5334 insertions, 0 deletions
diff --git a/node_modules/toml/.jshintrc b/node_modules/toml/.jshintrc
new file mode 100644
index 00000000..96747b1a
--- /dev/null
+++ b/node_modules/toml/.jshintrc
@@ -0,0 +1,18 @@
+{
+ "node": true,
+ "browser": true,
+ "browserify": true,
+ "curly": true,
+ "eqeqeq": true,
+ "eqnull": false,
+ "latedef": "nofunc",
+ "newcap": true,
+ "noarg": true,
+ "undef": true,
+ "strict": true,
+ "trailing": true,
+ "smarttabs": true,
+ "indent": 2,
+ "quotmark": true,
+ "laxbreak": true
+}
diff --git a/node_modules/toml/.npmignore b/node_modules/toml/.npmignore
new file mode 100644
index 00000000..8d87b1d2
--- /dev/null
+++ b/node_modules/toml/.npmignore
@@ -0,0 +1 @@
+node_modules/*
diff --git a/node_modules/toml/.travis.yml b/node_modules/toml/.travis.yml
new file mode 100644
index 00000000..f46aeb8c
--- /dev/null
+++ b/node_modules/toml/.travis.yml
@@ -0,0 +1,7 @@
+language: node_js
+sudo: false
+node_js:
+ - "4.1"
+ - "4.0"
+ - "0.12"
+ - "0.10"
diff --git a/node_modules/toml/CHANGELOG.md b/node_modules/toml/CHANGELOG.md
new file mode 100644
index 00000000..65b4db69
--- /dev/null
+++ b/node_modules/toml/CHANGELOG.md
@@ -0,0 +1,116 @@
+2.3.0 - July 13 2015
+====================
+
+* Correctly handle quoted keys ([#21](https://github.com/BinaryMuse/toml-node/issues/21))
+
+2.2.3 - June 8 2015
+===================
+
+* Support empty inline tables ([#24](https://github.com/BinaryMuse/toml-node/issues/24))
+* Do not allow implicit table definitions to replace value ([#23](https://github.com/BinaryMuse/toml-node/issues/23))
+* Don't allow tables to replace inline tables ([#25](https://github.com/BinaryMuse/toml-node/issues/25))
+
+2.2.2 - April 3 2015
+====================
+
+* Correctly handle newlines at beginning of string ([#22](https://github.com/BinaryMuse/toml-node/issues/22))
+
+2.2.1 - March 17 2015
+=====================
+
+* Parse dates generated by Date#toISOString() ([#20](https://github.com/BinaryMuse/toml-node/issues/20))
+
+2.2.0 - Feb 26 2015
+===================
+
+* Support TOML spec v0.4.0
+
+2.1.0 - Jan 7 2015
+==================
+
+* Support TOML spec v0.3.1
+
+2.0.6 - May 23 2014
+===================
+
+### Bug Fixes
+
+* Fix support for empty arrays with newlines ([#13](https://github.com/BinaryMuse/toml-node/issues/13))
+
+2.0.5 - May 5 2014
+==================
+
+### Bug Fixes
+
+* Fix loop iteration leak, by [sebmck](https://github.com/sebmck) ([#12](https://github.com/BinaryMuse/toml-node/pull/12))
+
+### Development
+
+* Tests now run JSHint on `lib/compiler.js`
+
+2.0.4 - Mar 9 2014
+==================
+
+### Bug Fixes
+
+* Fix failure on duplicate table name inside table array ([#11](https://github.com/BinaryMuse/toml-node/issues/11))
+
+2.0.2 - Feb 23 2014
+===================
+
+### Bug Fixes
+
+* Fix absence of errors when table path starts or ends with period
+
+2.0.1 - Feb 23 2014
+===================
+
+### Bug Fixes
+
+* Fix incorrect messaging in array type errors
+* Fix missing error when overwriting key with table array
+
+2.0.0 - Feb 23 2014
+===================
+
+### Features
+
+* Add support for [version 0.2 of the TOML spec](https://github.com/mojombo/toml/blob/master/versions/toml-v0.2.0.md) ([#9](https://github.com/BinaryMuse/toml-node/issues/9))
+
+### Internals
+
+* Upgrade to PEG.js v0.8 and rewrite compiler; parser is now considerably faster (from ~7000ms to ~1000ms to parse `example.toml` 1000 times on Node.js v0.10)
+
+1.0.4 - Aug 17 2013
+===================
+
+### Bug Fixes
+
+* Fix support for empty arrays
+
+1.0.3 - Aug 17 2013
+===================
+
+### Bug Fixes
+
+* Fix typo in array type error message
+* Fix single-element arrays with no trailing commas
+
+1.0.2 - Aug 17 2013
+===================
+
+### Bug Fixes
+
+* Fix errors on lines that contain only whitespace ([#7](https://github.com/BinaryMuse/toml-node/issues/7))
+
+1.0.1 - Aug 17 2013
+===================
+
+### Internals
+
+* Remove old code remaining from the remove streaming API
+
+1.0.0 - Aug 17 2013
+===================
+
+Initial stable release
diff --git a/node_modules/toml/LICENSE b/node_modules/toml/LICENSE
new file mode 100644
index 00000000..44ae2bfc
--- /dev/null
+++ b/node_modules/toml/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2012 Michelle Tilley
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/toml/README.md b/node_modules/toml/README.md
new file mode 100644
index 00000000..ff4dc587
--- /dev/null
+++ b/node_modules/toml/README.md
@@ -0,0 +1,93 @@
+TOML Parser for Node.js
+=======================
+
+[![Build Status](https://travis-ci.org/BinaryMuse/toml-node.png?branch=master)](https://travis-ci.org/BinaryMuse/toml-node)
+
+[![NPM](https://nodei.co/npm/toml.png?downloads=true)](https://nodei.co/npm/toml/)
+
+If you haven't heard of TOML, well you're just missing out. [Go check it out now.](https://github.com/mojombo/toml) Back? Good.
+
+TOML Spec Support
+-----------------
+
+toml-node supports version 0.4.0 the TOML spec as specified by [mojombo/toml@v0.4.0](https://github.com/mojombo/toml/blob/master/versions/en/toml-v0.4.0.md)
+
+Installation
+------------
+
+toml-node is available via npm.
+
+ npm install toml
+
+toml-node also works with browser module bundlers like Browserify and webpack.
+
+Usage
+-----
+
+### Standalone
+
+Say you have some awesome TOML in a variable called `someTomlString`. Maybe it came from the web; maybe it came from a file; wherever it came from, it came asynchronously! Let's turn that sucker into a JavaScript object.
+
+```javascript
+var toml = require('toml');
+var data = toml.parse(someTomlString);
+console.dir(data);
+```
+
+`toml.parse` throws an exception in the case of a parsing error; such exceptions have a `line` and `column` property on them to help identify the offending text.
+
+```javascript
+try {
+ toml.parse(someCrazyKnuckleHeadedTrblToml);
+} catch (e) {
+ console.error("Parsing error on line " + e.line + ", column " + e.column +
+ ": " + e.message);
+}
+```
+
+### Streaming
+
+As of toml-node version 1.0, the streaming interface has been removed. Instead, use a module like [concat-stream](https://npmjs.org/package/concat-stream):
+
+```javascript
+var toml = require('toml');
+var concat = require('concat-stream');
+var fs = require('fs');
+
+fs.createReadStream('tomlFile.toml', 'utf8').pipe(concat(function(data) {
+ var parsed = toml.parse(data);
+}));
+```
+
+Thanks [@ForbesLindesay](https://github.com/ForbesLindesay) for the suggestion.
+
+### Requiring with Node.js
+
+You can use the [toml-require package](https://github.com/BinaryMuse/toml-require) to `require()` your `.toml` files with Node.js
+
+Live Demo
+---------
+
+You can experiment with TOML online at http://binarymuse.github.io/toml-node/, which uses the latest version of this library.
+
+Building & Testing
+------------------
+
+toml-node uses [the PEG.js parser generator](http://pegjs.majda.cz/).
+
+ npm install
+ npm run build
+ npm test
+
+Any changes to `src/toml.peg` requires a regeneration of the parser with `npm run build`.
+
+toml-node is tested on Travis CI and is tested against:
+
+ * Node 0.10
+ * Node 0.12
+ * Latest stable io.js
+
+License
+-------
+
+toml-node is licensed under the MIT license agreement. See the LICENSE file for more information.
diff --git a/node_modules/toml/benchmark.js b/node_modules/toml/benchmark.js
new file mode 100644
index 00000000..99fba1d3
--- /dev/null
+++ b/node_modules/toml/benchmark.js
@@ -0,0 +1,12 @@
+var toml = require('./index');
+var fs = require('fs');
+var data = fs.readFileSync('./test/example.toml', 'utf8');
+
+var iterations = 1000;
+
+var start = new Date();
+for(var i = 0; i < iterations; i++) {
+ toml.parse(data);
+}
+var end = new Date();
+console.log("%s iterations in %sms", iterations, end - start);
diff --git a/node_modules/toml/index.d.ts b/node_modules/toml/index.d.ts
new file mode 100644
index 00000000..7e9052b4
--- /dev/null
+++ b/node_modules/toml/index.d.ts
@@ -0,0 +1,3 @@
+declare module 'toml' {
+ export function parse(input: string): any;
+}
diff --git a/node_modules/toml/index.js b/node_modules/toml/index.js
new file mode 100644
index 00000000..6caf44a0
--- /dev/null
+++ b/node_modules/toml/index.js
@@ -0,0 +1,9 @@
+var parser = require('./lib/parser');
+var compiler = require('./lib/compiler');
+
+module.exports = {
+ parse: function(input) {
+ var nodes = parser.parse(input.toString());
+ return compiler.compile(nodes);
+ }
+};
diff --git a/node_modules/toml/lib/compiler.js b/node_modules/toml/lib/compiler.js
new file mode 100644
index 00000000..10dc59a1
--- /dev/null
+++ b/node_modules/toml/lib/compiler.js
@@ -0,0 +1,195 @@
+"use strict";
+function compile(nodes) {
+ var assignedPaths = [];
+ var valueAssignments = [];
+ var currentPath = "";
+ var data = {};
+ var context = data;
+ var arrayMode = false;
+
+ return reduce(nodes);
+
+ function reduce(nodes) {
+ var node;
+ for (var i = 0; i < nodes.length; i++) {
+ node = nodes[i];
+ switch (node.type) {
+ case "Assign":
+ assign(node);
+ break;
+ case "ObjectPath":
+ setPath(node);
+ break;
+ case "ArrayPath":
+ addTableArray(node);
+ break;
+ }
+ }
+
+ return data;
+ }
+
+ function genError(err, line, col) {
+ var ex = new Error(err);
+ ex.line = line;
+ ex.column = col;
+ throw ex;
+ }
+
+ function assign(node) {
+ var key = node.key;
+ var value = node.value;
+ var line = node.line;
+ var column = node.column;
+
+ var fullPath;
+ if (currentPath) {
+ fullPath = currentPath + "." + key;
+ } else {
+ fullPath = key;
+ }
+ if (typeof context[key] !== "undefined") {
+ genError("Cannot redefine existing key '" + fullPath + "'.", line, column);
+ }
+
+ context[key] = reduceValueNode(value);
+
+ if (!pathAssigned(fullPath)) {
+ assignedPaths.push(fullPath);
+ valueAssignments.push(fullPath);
+ }
+ }
+
+
+ function pathAssigned(path) {
+ return assignedPaths.indexOf(path) !== -1;
+ }
+
+ function reduceValueNode(node) {
+ if (node.type === "Array") {
+ return reduceArrayWithTypeChecking(node.value);
+ } else if (node.type === "InlineTable") {
+ return reduceInlineTableNode(node.value);
+ } else {
+ return node.value;
+ }
+ }
+
+ function reduceInlineTableNode(values) {
+ var obj = {};
+ for (var i = 0; i < values.length; i++) {
+ var val = values[i];
+ if (val.value.type === "InlineTable") {
+ obj[val.key] = reduceInlineTableNode(val.value.value);
+ } else if (val.type === "InlineTableValue") {
+ obj[val.key] = reduceValueNode(val.value);
+ }
+ }
+
+ return obj;
+ }
+
+ function setPath(node) {
+ var path = node.value;
+ var quotedPath = path.map(quoteDottedString).join(".");
+ var line = node.line;
+ var column = node.column;
+
+ if (pathAssigned(quotedPath)) {
+ genError("Cannot redefine existing key '" + path + "'.", line, column);
+ }
+ assignedPaths.push(quotedPath);
+ context = deepRef(data, path, {}, line, column);
+ currentPath = path;
+ }
+
+ function addTableArray(node) {
+ var path = node.value;
+ var quotedPath = path.map(quoteDottedString).join(".");
+ var line = node.line;
+ var column = node.column;
+
+ if (!pathAssigned(quotedPath)) {
+ assignedPaths.push(quotedPath);
+ }
+ assignedPaths = assignedPaths.filter(function(p) {
+ return p.indexOf(quotedPath) !== 0;
+ });
+ assignedPaths.push(quotedPath);
+ context = deepRef(data, path, [], line, column);
+ currentPath = quotedPath;
+
+ if (context instanceof Array) {
+ var newObj = {};
+ context.push(newObj);
+ context = newObj;
+ } else {
+ genError("Cannot redefine existing key '" + path + "'.", line, column);
+ }
+ }
+
+ // Given a path 'a.b.c', create (as necessary) `start.a`,
+ // `start.a.b`, and `start.a.b.c`, assigning `value` to `start.a.b.c`.
+ // If `a` or `b` are arrays and have items in them, the last item in the
+ // array is used as the context for the next sub-path.
+ function deepRef(start, keys, value, line, column) {
+ var traversed = [];
+ var traversedPath = "";
+ var path = keys.join(".");
+ var ctx = start;
+
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i];
+ traversed.push(key);
+ traversedPath = traversed.join(".");
+ if (typeof ctx[key] === "undefined") {
+ if (i === keys.length - 1) {
+ ctx[key] = value;
+ } else {
+ ctx[key] = {};
+ }
+ } else if (i !== keys.length - 1 && valueAssignments.indexOf(traversedPath) > -1) {
+ // already a non-object value at key, can't be used as part of a new path
+ genError("Cannot redefine existing key '" + traversedPath + "'.", line, column);
+ }
+
+ ctx = ctx[key];
+ if (ctx instanceof Array && ctx.length && i < keys.length - 1) {
+ ctx = ctx[ctx.length - 1];
+ }
+ }
+
+ return ctx;
+ }
+
+ function reduceArrayWithTypeChecking(array) {
+ // Ensure that all items in the array are of the same type
+ var firstType = null;
+ for (var i = 0; i < array.length; i++) {
+ var node = array[i];
+ if (firstType === null) {
+ firstType = node.type;
+ } else {
+ if (node.type !== firstType) {
+ genError("Cannot add value of type " + node.type + " to array of type " +
+ firstType + ".", node.line, node.column);
+ }
+ }
+ }
+
+ // Recursively reduce array of nodes into array of the nodes' values
+ return array.map(reduceValueNode);
+ }
+
+ function quoteDottedString(str) {
+ if (str.indexOf(".") > -1) {
+ return "\"" + str + "\"";
+ } else {
+ return str;
+ }
+ }
+}
+
+module.exports = {
+ compile: compile
+};
diff --git a/node_modules/toml/lib/parser.js b/node_modules/toml/lib/parser.js
new file mode 100644
index 00000000..69cbd6fd
--- /dev/null
+++ b/node_modules/toml/lib/parser.js
@@ -0,0 +1,3841 @@
+module.exports = (function() {
+ /*
+ * Generated by PEG.js 0.8.0.
+ *
+ * http://pegjs.majda.cz/
+ */
+
+ function peg$subclass(child, parent) {
+ function ctor() { this.constructor = child; }
+ ctor.prototype = parent.prototype;
+ child.prototype = new ctor();
+ }
+
+ function SyntaxError(message, expected, found, offset, line, column) {
+ this.message = message;
+ this.expected = expected;
+ this.found = found;
+ this.offset = offset;
+ this.line = line;
+ this.column = column;
+
+ this.name = "SyntaxError";
+ }
+
+ peg$subclass(SyntaxError, Error);
+
+ function parse(input) {
+ var options = arguments.length > 1 ? arguments[1] : {},
+
+ peg$FAILED = {},
+
+ peg$startRuleFunctions = { start: peg$parsestart },
+ peg$startRuleFunction = peg$parsestart,
+
+ peg$c0 = [],
+ peg$c1 = function() { return nodes },
+ peg$c2 = peg$FAILED,
+ peg$c3 = "#",
+ peg$c4 = { type: "literal", value: "#", description: "\"#\"" },
+ peg$c5 = void 0,
+ peg$c6 = { type: "any", description: "any character" },
+ peg$c7 = "[",
+ peg$c8 = { type: "literal", value: "[", description: "\"[\"" },
+ peg$c9 = "]",
+ peg$c10 = { type: "literal", value: "]", description: "\"]\"" },
+ peg$c11 = function(name) { addNode(node('ObjectPath', name, line, column)) },
+ peg$c12 = function(name) { addNode(node('ArrayPath', name, line, column)) },
+ peg$c13 = function(parts, name) { return parts.concat(name) },
+ peg$c14 = function(name) { return [name] },
+ peg$c15 = function(name) { return name },
+ peg$c16 = ".",
+ peg$c17 = { type: "literal", value: ".", description: "\".\"" },
+ peg$c18 = "=",
+ peg$c19 = { type: "literal", value: "=", description: "\"=\"" },
+ peg$c20 = function(key, value) { addNode(node('Assign', value, line, column, key)) },
+ peg$c21 = function(chars) { return chars.join('') },
+ peg$c22 = function(node) { return node.value },
+ peg$c23 = "\"\"\"",
+ peg$c24 = { type: "literal", value: "\"\"\"", description: "\"\\\"\\\"\\\"\"" },
+ peg$c25 = null,
+ peg$c26 = function(chars) { return node('String', chars.join(''), line, column) },
+ peg$c27 = "\"",
+ peg$c28 = { type: "literal", value: "\"", description: "\"\\\"\"" },
+ peg$c29 = "'''",
+ peg$c30 = { type: "literal", value: "'''", description: "\"'''\"" },
+ peg$c31 = "'",
+ peg$c32 = { type: "literal", value: "'", description: "\"'\"" },
+ peg$c33 = function(char) { return char },
+ peg$c34 = function(char) { return char},
+ peg$c35 = "\\",
+ peg$c36 = { type: "literal", value: "\\", description: "\"\\\\\"" },
+ peg$c37 = function() { return '' },
+ peg$c38 = "e",
+ peg$c39 = { type: "literal", value: "e", description: "\"e\"" },
+ peg$c40 = "E",
+ peg$c41 = { type: "literal", value: "E", description: "\"E\"" },
+ peg$c42 = function(left, right) { return node('Float', parseFloat(left + 'e' + right), line, column) },
+ peg$c43 = function(text) { return node('Float', parseFloat(text), line, column) },
+ peg$c44 = "+",
+ peg$c45 = { type: "literal", value: "+", description: "\"+\"" },
+ peg$c46 = function(digits) { return digits.join('') },
+ peg$c47 = "-",
+ peg$c48 = { type: "literal", value: "-", description: "\"-\"" },
+ peg$c49 = function(digits) { return '-' + digits.join('') },
+ peg$c50 = function(text) { return node('Integer', parseInt(text, 10), line, column) },
+ peg$c51 = "true",
+ peg$c52 = { type: "literal", value: "true", description: "\"true\"" },
+ peg$c53 = function() { return node('Boolean', true, line, column) },
+ peg$c54 = "false",
+ peg$c55 = { type: "literal", value: "false", description: "\"false\"" },
+ peg$c56 = function() { return node('Boolean', false, line, column) },
+ peg$c57 = function() { return node('Array', [], line, column) },
+ peg$c58 = function(value) { return node('Array', value ? [value] : [], line, column) },
+ peg$c59 = function(values) { return node('Array', values, line, column) },
+ peg$c60 = function(values, value) { return node('Array', values.concat(value), line, column) },
+ peg$c61 = function(value) { return value },
+ peg$c62 = ",",
+ peg$c63 = { type: "literal", value: ",", description: "\",\"" },
+ peg$c64 = "{",
+ peg$c65 = { type: "literal", value: "{", description: "\"{\"" },
+ peg$c66 = "}",
+ peg$c67 = { type: "literal", value: "}", description: "\"}\"" },
+ peg$c68 = function(values) { return node('InlineTable', values, line, column) },
+ peg$c69 = function(key, value) { return node('InlineTableValue', value, line, column, key) },
+ peg$c70 = function(digits) { return "." + digits },
+ peg$c71 = function(date) { return date.join('') },
+ peg$c72 = ":",
+ peg$c73 = { type: "literal", value: ":", description: "\":\"" },
+ peg$c74 = function(time) { return time.join('') },
+ peg$c75 = "T",
+ peg$c76 = { type: "literal", value: "T", description: "\"T\"" },
+ peg$c77 = "Z",
+ peg$c78 = { type: "literal", value: "Z", description: "\"Z\"" },
+ peg$c79 = function(date, time) { return node('Date', new Date(date + "T" + time + "Z"), line, column) },
+ peg$c80 = function(date, time) { return node('Date', new Date(date + "T" + time), line, column) },
+ peg$c81 = /^[ \t]/,
+ peg$c82 = { type: "class", value: "[ \\t]", description: "[ \\t]" },
+ peg$c83 = "\n",
+ peg$c84 = { type: "literal", value: "\n", description: "\"\\n\"" },
+ peg$c85 = "\r",
+ peg$c86 = { type: "literal", value: "\r", description: "\"\\r\"" },
+ peg$c87 = /^[0-9a-f]/i,
+ peg$c88 = { type: "class", value: "[0-9a-f]i", description: "[0-9a-f]i" },
+ peg$c89 = /^[0-9]/,
+ peg$c90 = { type: "class", value: "[0-9]", description: "[0-9]" },
+ peg$c91 = "_",
+ peg$c92 = { type: "literal", value: "_", description: "\"_\"" },
+ peg$c93 = function() { return "" },
+ peg$c94 = /^[A-Za-z0-9_\-]/,
+ peg$c95 = { type: "class", value: "[A-Za-z0-9_\\-]", description: "[A-Za-z0-9_\\-]" },
+ peg$c96 = function(d) { return d.join('') },
+ peg$c97 = "\\\"",
+ peg$c98 = { type: "literal", value: "\\\"", description: "\"\\\\\\\"\"" },
+ peg$c99 = function() { return '"' },
+ peg$c100 = "\\\\",
+ peg$c101 = { type: "literal", value: "\\\\", description: "\"\\\\\\\\\"" },
+ peg$c102 = function() { return '\\' },
+ peg$c103 = "\\b",
+ peg$c104 = { type: "literal", value: "\\b", description: "\"\\\\b\"" },
+ peg$c105 = function() { return '\b' },
+ peg$c106 = "\\t",
+ peg$c107 = { type: "literal", value: "\\t", description: "\"\\\\t\"" },
+ peg$c108 = function() { return '\t' },
+ peg$c109 = "\\n",
+ peg$c110 = { type: "literal", value: "\\n", description: "\"\\\\n\"" },
+ peg$c111 = function() { return '\n' },
+ peg$c112 = "\\f",
+ peg$c113 = { type: "literal", value: "\\f", description: "\"\\\\f\"" },
+ peg$c114 = function() { return '\f' },
+ peg$c115 = "\\r",
+ peg$c116 = { type: "literal", value: "\\r", description: "\"\\\\r\"" },
+ peg$c117 = function() { return '\r' },
+ peg$c118 = "\\U",
+ peg$c119 = { type: "literal", value: "\\U", description: "\"\\\\U\"" },
+ peg$c120 = function(digits) { return convertCodePoint(digits.join('')) },
+ peg$c121 = "\\u",
+ peg$c122 = { type: "literal", value: "\\u", description: "\"\\\\u\"" },
+
+ peg$currPos = 0,
+ peg$reportedPos = 0,
+ peg$cachedPos = 0,
+ peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },
+ peg$maxFailPos = 0,
+ peg$maxFailExpected = [],
+ peg$silentFails = 0,
+
+ peg$cache = {},
+ peg$result;
+
+ if ("startRule" in options) {
+ if (!(options.startRule in peg$startRuleFunctions)) {
+ throw new Error("Can't start parsing from rule \"" + options.startRule + "\".");
+ }
+
+ peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
+ }
+
+ function text() {
+ return input.substring(peg$reportedPos, peg$currPos);
+ }
+
+ function offset() {
+ return peg$reportedPos;
+ }
+
+ function line() {
+ return peg$computePosDetails(peg$reportedPos).line;
+ }
+
+ function column() {
+ return peg$computePosDetails(peg$reportedPos).column;
+ }
+
+ function expected(description) {
+ throw peg$buildException(
+ null,
+ [{ type: "other", description: description }],
+ peg$reportedPos
+ );
+ }
+
+ function error(message) {
+ throw peg$buildException(message, null, peg$reportedPos);
+ }
+
+ function peg$computePosDetails(pos) {
+ function advance(details, startPos, endPos) {
+ var p, ch;
+
+ for (p = startPos; p < endPos; p++) {
+ ch = input.charAt(p);
+ if (ch === "\n") {
+ if (!details.seenCR) { details.line++; }
+ details.column = 1;
+ details.seenCR = false;
+ } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {
+ details.line++;
+ details.column = 1;
+ details.seenCR = true;
+ } else {
+ details.column++;
+ details.seenCR = false;
+ }
+ }
+ }
+
+ if (peg$cachedPos !== pos) {
+ if (peg$cachedPos > pos) {
+ peg$cachedPos = 0;
+ peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };
+ }
+ advance(peg$cachedPosDetails, peg$cachedPos, pos);
+ peg$cachedPos = pos;
+ }
+
+ return peg$cachedPosDetails;
+ }
+
+ function peg$fail(expected) {
+ if (peg$currPos < peg$maxFailPos) { return; }
+
+ if (peg$currPos > peg$maxFailPos) {
+ peg$maxFailPos = peg$currPos;
+ peg$maxFailExpected = [];
+ }
+
+ peg$maxFailExpected.push(expected);
+ }
+
+ function peg$buildException(message, expected, pos) {
+ function cleanupExpected(expected) {
+ var i = 1;
+
+ expected.sort(function(a, b) {
+ if (a.description < b.description) {
+ return -1;
+ } else if (a.description > b.description) {
+ return 1;
+ } else {
+ return 0;
+ }
+ });
+
+ while (i < expected.length) {
+ if (expected[i - 1] === expected[i]) {
+ expected.splice(i, 1);
+ } else {
+ i++;
+ }
+ }
+ }
+
+ function buildMessage(expected, found) {
+ function stringEscape(s) {
+ function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }
+
+ return s
+ .replace(/\\/g, '\\\\')
+ .replace(/"/g, '\\"')
+ .replace(/\x08/g, '\\b')
+ .replace(/\t/g, '\\t')
+ .replace(/\n/g, '\\n')
+ .replace(/\f/g, '\\f')
+ .replace(/\r/g, '\\r')
+ .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(ch) { return '\\x0' + hex(ch); })
+ .replace(/[\x10-\x1F\x80-\xFF]/g, function(ch) { return '\\x' + hex(ch); })
+ .replace(/[\u0180-\u0FFF]/g, function(ch) { return '\\u0' + hex(ch); })
+ .replace(/[\u1080-\uFFFF]/g, function(ch) { return '\\u' + hex(ch); });
+ }
+
+ var expectedDescs = new Array(expected.length),
+ expectedDesc, foundDesc, i;
+
+ for (i = 0; i < expected.length; i++) {
+ expectedDescs[i] = expected[i].description;
+ }
+
+ expectedDesc = expected.length > 1
+ ? expectedDescs.slice(0, -1).join(", ")
+ + " or "
+ + expectedDescs[expected.length - 1]
+ : expectedDescs[0];
+
+ foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input";
+
+ return "Expected " + expectedDesc + " but " + foundDesc + " found.";
+ }
+
+ var posDetails = peg$computePosDetails(pos),
+ found = pos < input.length ? input.charAt(pos) : null;
+
+ if (expected !== null) {
+ cleanupExpected(expected);
+ }
+
+ return new SyntaxError(
+ message !== null ? message : buildMessage(expected, found),
+ expected,
+ found,
+ pos,
+ posDetails.line,
+ posDetails.column
+ );
+ }
+
+ function peg$parsestart() {
+ var s0, s1, s2;
+
+ var key = peg$currPos * 49 + 0,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parseline();
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parseline();
+ }
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c1();
+ }
+ s0 = s1;
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseline() {
+ var s0, s1, s2, s3, s4, s5, s6;
+
+ var key = peg$currPos * 49 + 1,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parseS();
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parseS();
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parseexpression();
+ if (s2 !== peg$FAILED) {
+ s3 = [];
+ s4 = peg$parseS();
+ while (s4 !== peg$FAILED) {
+ s3.push(s4);
+ s4 = peg$parseS();
+ }
+ if (s3 !== peg$FAILED) {
+ s4 = [];
+ s5 = peg$parsecomment();
+ while (s5 !== peg$FAILED) {
+ s4.push(s5);
+ s5 = peg$parsecomment();
+ }
+ if (s4 !== peg$FAILED) {
+ s5 = [];
+ s6 = peg$parseNL();
+ if (s6 !== peg$FAILED) {
+ while (s6 !== peg$FAILED) {
+ s5.push(s6);
+ s6 = peg$parseNL();
+ }
+ } else {
+ s5 = peg$c2;
+ }
+ if (s5 === peg$FAILED) {
+ s5 = peg$parseEOF();
+ }
+ if (s5 !== peg$FAILED) {
+ s1 = [s1, s2, s3, s4, s5];
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parseS();
+ if (s2 !== peg$FAILED) {
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parseS();
+ }
+ } else {
+ s1 = peg$c2;
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = [];
+ s3 = peg$parseNL();
+ if (s3 !== peg$FAILED) {
+ while (s3 !== peg$FAILED) {
+ s2.push(s3);
+ s3 = peg$parseNL();
+ }
+ } else {
+ s2 = peg$c2;
+ }
+ if (s2 === peg$FAILED) {
+ s2 = peg$parseEOF();
+ }
+ if (s2 !== peg$FAILED) {
+ s1 = [s1, s2];
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$parseNL();
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseexpression() {
+ var s0;
+
+ var key = peg$currPos * 49 + 2,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$parsecomment();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parsepath();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parsetablearray();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parseassignment();
+ }
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsecomment() {
+ var s0, s1, s2, s3, s4, s5;
+
+ var key = peg$currPos * 49 + 3,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 35) {
+ s1 = peg$c3;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c4); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = [];
+ s3 = peg$currPos;
+ s4 = peg$currPos;
+ peg$silentFails++;
+ s5 = peg$parseNL();
+ if (s5 === peg$FAILED) {
+ s5 = peg$parseEOF();
+ }
+ peg$silentFails--;
+ if (s5 === peg$FAILED) {
+ s4 = peg$c5;
+ } else {
+ peg$currPos = s4;
+ s4 = peg$c2;
+ }
+ if (s4 !== peg$FAILED) {
+ if (input.length > peg$currPos) {
+ s5 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s5 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c6); }
+ }
+ if (s5 !== peg$FAILED) {
+ s4 = [s4, s5];
+ s3 = s4;
+ } else {
+ peg$currPos = s3;
+ s3 = peg$c2;
+ }
+ } else {
+ peg$currPos = s3;
+ s3 = peg$c2;
+ }
+ while (s3 !== peg$FAILED) {
+ s2.push(s3);
+ s3 = peg$currPos;
+ s4 = peg$currPos;
+ peg$silentFails++;
+ s5 = peg$parseNL();
+ if (s5 === peg$FAILED) {
+ s5 = peg$parseEOF();
+ }
+ peg$silentFails--;
+ if (s5 === peg$FAILED) {
+ s4 = peg$c5;
+ } else {
+ peg$currPos = s4;
+ s4 = peg$c2;
+ }
+ if (s4 !== peg$FAILED) {
+ if (input.length > peg$currPos) {
+ s5 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s5 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c6); }
+ }
+ if (s5 !== peg$FAILED) {
+ s4 = [s4, s5];
+ s3 = s4;
+ } else {
+ peg$currPos = s3;
+ s3 = peg$c2;
+ }
+ } else {
+ peg$currPos = s3;
+ s3 = peg$c2;
+ }
+ }
+ if (s2 !== peg$FAILED) {
+ s1 = [s1, s2];
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsepath() {
+ var s0, s1, s2, s3, s4, s5;
+
+ var key = peg$currPos * 49 + 4,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 91) {
+ s1 = peg$c7;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c8); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = [];
+ s3 = peg$parseS();
+ while (s3 !== peg$FAILED) {
+ s2.push(s3);
+ s3 = peg$parseS();
+ }
+ if (s2 !== peg$FAILED) {
+ s3 = peg$parsetable_key();
+ if (s3 !== peg$FAILED) {
+ s4 = [];
+ s5 = peg$parseS();
+ while (s5 !== peg$FAILED) {
+ s4.push(s5);
+ s5 = peg$parseS();
+ }
+ if (s4 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 93) {
+ s5 = peg$c9;
+ peg$currPos++;
+ } else {
+ s5 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c10); }
+ }
+ if (s5 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c11(s3);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsetablearray() {
+ var s0, s1, s2, s3, s4, s5, s6, s7;
+
+ var key = peg$currPos * 49 + 5,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 91) {
+ s1 = peg$c7;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c8); }
+ }
+ if (s1 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 91) {
+ s2 = peg$c7;
+ peg$currPos++;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c8); }
+ }
+ if (s2 !== peg$FAILED) {
+ s3 = [];
+ s4 = peg$parseS();
+ while (s4 !== peg$FAILED) {
+ s3.push(s4);
+ s4 = peg$parseS();
+ }
+ if (s3 !== peg$FAILED) {
+ s4 = peg$parsetable_key();
+ if (s4 !== peg$FAILED) {
+ s5 = [];
+ s6 = peg$parseS();
+ while (s6 !== peg$FAILED) {
+ s5.push(s6);
+ s6 = peg$parseS();
+ }
+ if (s5 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 93) {
+ s6 = peg$c9;
+ peg$currPos++;
+ } else {
+ s6 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c10); }
+ }
+ if (s6 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 93) {
+ s7 = peg$c9;
+ peg$currPos++;
+ } else {
+ s7 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c10); }
+ }
+ if (s7 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c12(s4);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsetable_key() {
+ var s0, s1, s2;
+
+ var key = peg$currPos * 49 + 6,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parsedot_ended_table_key_part();
+ if (s2 !== peg$FAILED) {
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parsedot_ended_table_key_part();
+ }
+ } else {
+ s1 = peg$c2;
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parsetable_key_part();
+ if (s2 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c13(s1, s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ s1 = peg$parsetable_key_part();
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c14(s1);
+ }
+ s0 = s1;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsetable_key_part() {
+ var s0, s1, s2, s3, s4;
+
+ var key = peg$currPos * 49 + 7,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parseS();
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parseS();
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parsekey();
+ if (s2 !== peg$FAILED) {
+ s3 = [];
+ s4 = peg$parseS();
+ while (s4 !== peg$FAILED) {
+ s3.push(s4);
+ s4 = peg$parseS();
+ }
+ if (s3 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c15(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parseS();
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parseS();
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parsequoted_key();
+ if (s2 !== peg$FAILED) {
+ s3 = [];
+ s4 = peg$parseS();
+ while (s4 !== peg$FAILED) {
+ s3.push(s4);
+ s4 = peg$parseS();
+ }
+ if (s3 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c15(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsedot_ended_table_key_part() {
+ var s0, s1, s2, s3, s4, s5, s6;
+
+ var key = peg$currPos * 49 + 8,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parseS();
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parseS();
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parsekey();
+ if (s2 !== peg$FAILED) {
+ s3 = [];
+ s4 = peg$parseS();
+ while (s4 !== peg$FAILED) {
+ s3.push(s4);
+ s4 = peg$parseS();
+ }
+ if (s3 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 46) {
+ s4 = peg$c16;
+ peg$currPos++;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c17); }
+ }
+ if (s4 !== peg$FAILED) {
+ s5 = [];
+ s6 = peg$parseS();
+ while (s6 !== peg$FAILED) {
+ s5.push(s6);
+ s6 = peg$parseS();
+ }
+ if (s5 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c15(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parseS();
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parseS();
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parsequoted_key();
+ if (s2 !== peg$FAILED) {
+ s3 = [];
+ s4 = peg$parseS();
+ while (s4 !== peg$FAILED) {
+ s3.push(s4);
+ s4 = peg$parseS();
+ }
+ if (s3 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 46) {
+ s4 = peg$c16;
+ peg$currPos++;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c17); }
+ }
+ if (s4 !== peg$FAILED) {
+ s5 = [];
+ s6 = peg$parseS();
+ while (s6 !== peg$FAILED) {
+ s5.push(s6);
+ s6 = peg$parseS();
+ }
+ if (s5 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c15(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseassignment() {
+ var s0, s1, s2, s3, s4, s5;
+
+ var key = peg$currPos * 49 + 9,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = peg$parsekey();
+ if (s1 !== peg$FAILED) {
+ s2 = [];
+ s3 = peg$parseS();
+ while (s3 !== peg$FAILED) {
+ s2.push(s3);
+ s3 = peg$parseS();
+ }
+ if (s2 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 61) {
+ s3 = peg$c18;
+ peg$currPos++;
+ } else {
+ s3 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c19); }
+ }
+ if (s3 !== peg$FAILED) {
+ s4 = [];
+ s5 = peg$parseS();
+ while (s5 !== peg$FAILED) {
+ s4.push(s5);
+ s5 = peg$parseS();
+ }
+ if (s4 !== peg$FAILED) {
+ s5 = peg$parsevalue();
+ if (s5 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c20(s1, s5);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ s1 = peg$parsequoted_key();
+ if (s1 !== peg$FAILED) {
+ s2 = [];
+ s3 = peg$parseS();
+ while (s3 !== peg$FAILED) {
+ s2.push(s3);
+ s3 = peg$parseS();
+ }
+ if (s2 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 61) {
+ s3 = peg$c18;
+ peg$currPos++;
+ } else {
+ s3 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c19); }
+ }
+ if (s3 !== peg$FAILED) {
+ s4 = [];
+ s5 = peg$parseS();
+ while (s5 !== peg$FAILED) {
+ s4.push(s5);
+ s5 = peg$parseS();
+ }
+ if (s4 !== peg$FAILED) {
+ s5 = peg$parsevalue();
+ if (s5 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c20(s1, s5);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsekey() {
+ var s0, s1, s2;
+
+ var key = peg$currPos * 49 + 10,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parseASCII_BASIC();
+ if (s2 !== peg$FAILED) {
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parseASCII_BASIC();
+ }
+ } else {
+ s1 = peg$c2;
+ }
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c21(s1);
+ }
+ s0 = s1;
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsequoted_key() {
+ var s0, s1;
+
+ var key = peg$currPos * 49 + 11,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = peg$parsedouble_quoted_single_line_string();
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c22(s1);
+ }
+ s0 = s1;
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ s1 = peg$parsesingle_quoted_single_line_string();
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c22(s1);
+ }
+ s0 = s1;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsevalue() {
+ var s0;
+
+ var key = peg$currPos * 49 + 12,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$parsestring();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parsedatetime();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parsefloat();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parseinteger();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parseboolean();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parsearray();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parseinline_table();
+ }
+ }
+ }
+ }
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsestring() {
+ var s0;
+
+ var key = peg$currPos * 49 + 13,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$parsedouble_quoted_multiline_string();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parsedouble_quoted_single_line_string();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parsesingle_quoted_multiline_string();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parsesingle_quoted_single_line_string();
+ }
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsedouble_quoted_multiline_string() {
+ var s0, s1, s2, s3, s4;
+
+ var key = peg$currPos * 49 + 14,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 3) === peg$c23) {
+ s1 = peg$c23;
+ peg$currPos += 3;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c24); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parseNL();
+ if (s2 === peg$FAILED) {
+ s2 = peg$c25;
+ }
+ if (s2 !== peg$FAILED) {
+ s3 = [];
+ s4 = peg$parsemultiline_string_char();
+ while (s4 !== peg$FAILED) {
+ s3.push(s4);
+ s4 = peg$parsemultiline_string_char();
+ }
+ if (s3 !== peg$FAILED) {
+ if (input.substr(peg$currPos, 3) === peg$c23) {
+ s4 = peg$c23;
+ peg$currPos += 3;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c24); }
+ }
+ if (s4 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c26(s3);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsedouble_quoted_single_line_string() {
+ var s0, s1, s2, s3;
+
+ var key = peg$currPos * 49 + 15,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 34) {
+ s1 = peg$c27;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c28); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = [];
+ s3 = peg$parsestring_char();
+ while (s3 !== peg$FAILED) {
+ s2.push(s3);
+ s3 = peg$parsestring_char();
+ }
+ if (s2 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 34) {
+ s3 = peg$c27;
+ peg$currPos++;
+ } else {
+ s3 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c28); }
+ }
+ if (s3 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c26(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsesingle_quoted_multiline_string() {
+ var s0, s1, s2, s3, s4;
+
+ var key = peg$currPos * 49 + 16,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 3) === peg$c29) {
+ s1 = peg$c29;
+ peg$currPos += 3;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c30); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parseNL();
+ if (s2 === peg$FAILED) {
+ s2 = peg$c25;
+ }
+ if (s2 !== peg$FAILED) {
+ s3 = [];
+ s4 = peg$parsemultiline_literal_char();
+ while (s4 !== peg$FAILED) {
+ s3.push(s4);
+ s4 = peg$parsemultiline_literal_char();
+ }
+ if (s3 !== peg$FAILED) {
+ if (input.substr(peg$currPos, 3) === peg$c29) {
+ s4 = peg$c29;
+ peg$currPos += 3;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c30); }
+ }
+ if (s4 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c26(s3);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsesingle_quoted_single_line_string() {
+ var s0, s1, s2, s3;
+
+ var key = peg$currPos * 49 + 17,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 39) {
+ s1 = peg$c31;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c32); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = [];
+ s3 = peg$parseliteral_char();
+ while (s3 !== peg$FAILED) {
+ s2.push(s3);
+ s3 = peg$parseliteral_char();
+ }
+ if (s2 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 39) {
+ s3 = peg$c31;
+ peg$currPos++;
+ } else {
+ s3 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c32); }
+ }
+ if (s3 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c26(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsestring_char() {
+ var s0, s1, s2;
+
+ var key = peg$currPos * 49 + 18,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$parseESCAPED();
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ s1 = peg$currPos;
+ peg$silentFails++;
+ if (input.charCodeAt(peg$currPos) === 34) {
+ s2 = peg$c27;
+ peg$currPos++;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c28); }
+ }
+ peg$silentFails--;
+ if (s2 === peg$FAILED) {
+ s1 = peg$c5;
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ if (s1 !== peg$FAILED) {
+ if (input.length > peg$currPos) {
+ s2 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c6); }
+ }
+ if (s2 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c33(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseliteral_char() {
+ var s0, s1, s2;
+
+ var key = peg$currPos * 49 + 19,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = peg$currPos;
+ peg$silentFails++;
+ if (input.charCodeAt(peg$currPos) === 39) {
+ s2 = peg$c31;
+ peg$currPos++;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c32); }
+ }
+ peg$silentFails--;
+ if (s2 === peg$FAILED) {
+ s1 = peg$c5;
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ if (s1 !== peg$FAILED) {
+ if (input.length > peg$currPos) {
+ s2 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c6); }
+ }
+ if (s2 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c33(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsemultiline_string_char() {
+ var s0, s1, s2;
+
+ var key = peg$currPos * 49 + 20,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$parseESCAPED();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parsemultiline_string_delim();
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ s1 = peg$currPos;
+ peg$silentFails++;
+ if (input.substr(peg$currPos, 3) === peg$c23) {
+ s2 = peg$c23;
+ peg$currPos += 3;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c24); }
+ }
+ peg$silentFails--;
+ if (s2 === peg$FAILED) {
+ s1 = peg$c5;
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ if (s1 !== peg$FAILED) {
+ if (input.length > peg$currPos) {
+ s2 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c6); }
+ }
+ if (s2 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c34(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsemultiline_string_delim() {
+ var s0, s1, s2, s3, s4;
+
+ var key = peg$currPos * 49 + 21,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 92) {
+ s1 = peg$c35;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c36); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parseNL();
+ if (s2 !== peg$FAILED) {
+ s3 = [];
+ s4 = peg$parseNLS();
+ while (s4 !== peg$FAILED) {
+ s3.push(s4);
+ s4 = peg$parseNLS();
+ }
+ if (s3 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c37();
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsemultiline_literal_char() {
+ var s0, s1, s2;
+
+ var key = peg$currPos * 49 + 22,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = peg$currPos;
+ peg$silentFails++;
+ if (input.substr(peg$currPos, 3) === peg$c29) {
+ s2 = peg$c29;
+ peg$currPos += 3;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c30); }
+ }
+ peg$silentFails--;
+ if (s2 === peg$FAILED) {
+ s1 = peg$c5;
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ if (s1 !== peg$FAILED) {
+ if (input.length > peg$currPos) {
+ s2 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c6); }
+ }
+ if (s2 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c33(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsefloat() {
+ var s0, s1, s2, s3;
+
+ var key = peg$currPos * 49 + 23,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = peg$parsefloat_text();
+ if (s1 === peg$FAILED) {
+ s1 = peg$parseinteger_text();
+ }
+ if (s1 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 101) {
+ s2 = peg$c38;
+ peg$currPos++;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c39); }
+ }
+ if (s2 === peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 69) {
+ s2 = peg$c40;
+ peg$currPos++;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c41); }
+ }
+ }
+ if (s2 !== peg$FAILED) {
+ s3 = peg$parseinteger_text();
+ if (s3 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c42(s1, s3);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ s1 = peg$parsefloat_text();
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c43(s1);
+ }
+ s0 = s1;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsefloat_text() {
+ var s0, s1, s2, s3, s4, s5;
+
+ var key = peg$currPos * 49 + 24,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 43) {
+ s1 = peg$c44;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c45); }
+ }
+ if (s1 === peg$FAILED) {
+ s1 = peg$c25;
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$currPos;
+ s3 = peg$parseDIGITS();
+ if (s3 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 46) {
+ s4 = peg$c16;
+ peg$currPos++;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c17); }
+ }
+ if (s4 !== peg$FAILED) {
+ s5 = peg$parseDIGITS();
+ if (s5 !== peg$FAILED) {
+ s3 = [s3, s4, s5];
+ s2 = s3;
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ if (s2 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c46(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 45) {
+ s1 = peg$c47;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c48); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$currPos;
+ s3 = peg$parseDIGITS();
+ if (s3 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 46) {
+ s4 = peg$c16;
+ peg$currPos++;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c17); }
+ }
+ if (s4 !== peg$FAILED) {
+ s5 = peg$parseDIGITS();
+ if (s5 !== peg$FAILED) {
+ s3 = [s3, s4, s5];
+ s2 = s3;
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ if (s2 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c49(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseinteger() {
+ var s0, s1;
+
+ var key = peg$currPos * 49 + 25,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = peg$parseinteger_text();
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c50(s1);
+ }
+ s0 = s1;
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseinteger_text() {
+ var s0, s1, s2, s3, s4;
+
+ var key = peg$currPos * 49 + 26,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 43) {
+ s1 = peg$c44;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c45); }
+ }
+ if (s1 === peg$FAILED) {
+ s1 = peg$c25;
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = [];
+ s3 = peg$parseDIGIT_OR_UNDER();
+ if (s3 !== peg$FAILED) {
+ while (s3 !== peg$FAILED) {
+ s2.push(s3);
+ s3 = peg$parseDIGIT_OR_UNDER();
+ }
+ } else {
+ s2 = peg$c2;
+ }
+ if (s2 !== peg$FAILED) {
+ s3 = peg$currPos;
+ peg$silentFails++;
+ if (input.charCodeAt(peg$currPos) === 46) {
+ s4 = peg$c16;
+ peg$currPos++;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c17); }
+ }
+ peg$silentFails--;
+ if (s4 === peg$FAILED) {
+ s3 = peg$c5;
+ } else {
+ peg$currPos = s3;
+ s3 = peg$c2;
+ }
+ if (s3 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c46(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 45) {
+ s1 = peg$c47;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c48); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = [];
+ s3 = peg$parseDIGIT_OR_UNDER();
+ if (s3 !== peg$FAILED) {
+ while (s3 !== peg$FAILED) {
+ s2.push(s3);
+ s3 = peg$parseDIGIT_OR_UNDER();
+ }
+ } else {
+ s2 = peg$c2;
+ }
+ if (s2 !== peg$FAILED) {
+ s3 = peg$currPos;
+ peg$silentFails++;
+ if (input.charCodeAt(peg$currPos) === 46) {
+ s4 = peg$c16;
+ peg$currPos++;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c17); }
+ }
+ peg$silentFails--;
+ if (s4 === peg$FAILED) {
+ s3 = peg$c5;
+ } else {
+ peg$currPos = s3;
+ s3 = peg$c2;
+ }
+ if (s3 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c49(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseboolean() {
+ var s0, s1;
+
+ var key = peg$currPos * 49 + 27,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 4) === peg$c51) {
+ s1 = peg$c51;
+ peg$currPos += 4;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c52); }
+ }
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c53();
+ }
+ s0 = s1;
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 5) === peg$c54) {
+ s1 = peg$c54;
+ peg$currPos += 5;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c55); }
+ }
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c56();
+ }
+ s0 = s1;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsearray() {
+ var s0, s1, s2, s3, s4;
+
+ var key = peg$currPos * 49 + 28,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 91) {
+ s1 = peg$c7;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c8); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = [];
+ s3 = peg$parsearray_sep();
+ while (s3 !== peg$FAILED) {
+ s2.push(s3);
+ s3 = peg$parsearray_sep();
+ }
+ if (s2 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 93) {
+ s3 = peg$c9;
+ peg$currPos++;
+ } else {
+ s3 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c10); }
+ }
+ if (s3 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c57();
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 91) {
+ s1 = peg$c7;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c8); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parsearray_value();
+ if (s2 === peg$FAILED) {
+ s2 = peg$c25;
+ }
+ if (s2 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 93) {
+ s3 = peg$c9;
+ peg$currPos++;
+ } else {
+ s3 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c10); }
+ }
+ if (s3 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c58(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 91) {
+ s1 = peg$c7;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c8); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = [];
+ s3 = peg$parsearray_value_list();
+ if (s3 !== peg$FAILED) {
+ while (s3 !== peg$FAILED) {
+ s2.push(s3);
+ s3 = peg$parsearray_value_list();
+ }
+ } else {
+ s2 = peg$c2;
+ }
+ if (s2 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 93) {
+ s3 = peg$c9;
+ peg$currPos++;
+ } else {
+ s3 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c10); }
+ }
+ if (s3 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c59(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 91) {
+ s1 = peg$c7;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c8); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = [];
+ s3 = peg$parsearray_value_list();
+ if (s3 !== peg$FAILED) {
+ while (s3 !== peg$FAILED) {
+ s2.push(s3);
+ s3 = peg$parsearray_value_list();
+ }
+ } else {
+ s2 = peg$c2;
+ }
+ if (s2 !== peg$FAILED) {
+ s3 = peg$parsearray_value();
+ if (s3 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 93) {
+ s4 = peg$c9;
+ peg$currPos++;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c10); }
+ }
+ if (s4 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c60(s2, s3);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ }
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsearray_value() {
+ var s0, s1, s2, s3, s4;
+
+ var key = peg$currPos * 49 + 29,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parsearray_sep();
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parsearray_sep();
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parsevalue();
+ if (s2 !== peg$FAILED) {
+ s3 = [];
+ s4 = peg$parsearray_sep();
+ while (s4 !== peg$FAILED) {
+ s3.push(s4);
+ s4 = peg$parsearray_sep();
+ }
+ if (s3 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c61(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsearray_value_list() {
+ var s0, s1, s2, s3, s4, s5, s6;
+
+ var key = peg$currPos * 49 + 30,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parsearray_sep();
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parsearray_sep();
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parsevalue();
+ if (s2 !== peg$FAILED) {
+ s3 = [];
+ s4 = peg$parsearray_sep();
+ while (s4 !== peg$FAILED) {
+ s3.push(s4);
+ s4 = peg$parsearray_sep();
+ }
+ if (s3 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 44) {
+ s4 = peg$c62;
+ peg$currPos++;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c63); }
+ }
+ if (s4 !== peg$FAILED) {
+ s5 = [];
+ s6 = peg$parsearray_sep();
+ while (s6 !== peg$FAILED) {
+ s5.push(s6);
+ s6 = peg$parsearray_sep();
+ }
+ if (s5 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c61(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsearray_sep() {
+ var s0;
+
+ var key = peg$currPos * 49 + 31,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$parseS();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parseNL();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parsecomment();
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseinline_table() {
+ var s0, s1, s2, s3, s4, s5;
+
+ var key = peg$currPos * 49 + 32,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 123) {
+ s1 = peg$c64;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c65); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = [];
+ s3 = peg$parseS();
+ while (s3 !== peg$FAILED) {
+ s2.push(s3);
+ s3 = peg$parseS();
+ }
+ if (s2 !== peg$FAILED) {
+ s3 = [];
+ s4 = peg$parseinline_table_assignment();
+ while (s4 !== peg$FAILED) {
+ s3.push(s4);
+ s4 = peg$parseinline_table_assignment();
+ }
+ if (s3 !== peg$FAILED) {
+ s4 = [];
+ s5 = peg$parseS();
+ while (s5 !== peg$FAILED) {
+ s4.push(s5);
+ s5 = peg$parseS();
+ }
+ if (s4 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 125) {
+ s5 = peg$c66;
+ peg$currPos++;
+ } else {
+ s5 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c67); }
+ }
+ if (s5 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c68(s3);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseinline_table_assignment() {
+ var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;
+
+ var key = peg$currPos * 49 + 33,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parseS();
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parseS();
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parsekey();
+ if (s2 !== peg$FAILED) {
+ s3 = [];
+ s4 = peg$parseS();
+ while (s4 !== peg$FAILED) {
+ s3.push(s4);
+ s4 = peg$parseS();
+ }
+ if (s3 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 61) {
+ s4 = peg$c18;
+ peg$currPos++;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c19); }
+ }
+ if (s4 !== peg$FAILED) {
+ s5 = [];
+ s6 = peg$parseS();
+ while (s6 !== peg$FAILED) {
+ s5.push(s6);
+ s6 = peg$parseS();
+ }
+ if (s5 !== peg$FAILED) {
+ s6 = peg$parsevalue();
+ if (s6 !== peg$FAILED) {
+ s7 = [];
+ s8 = peg$parseS();
+ while (s8 !== peg$FAILED) {
+ s7.push(s8);
+ s8 = peg$parseS();
+ }
+ if (s7 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 44) {
+ s8 = peg$c62;
+ peg$currPos++;
+ } else {
+ s8 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c63); }
+ }
+ if (s8 !== peg$FAILED) {
+ s9 = [];
+ s10 = peg$parseS();
+ while (s10 !== peg$FAILED) {
+ s9.push(s10);
+ s10 = peg$parseS();
+ }
+ if (s9 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c69(s2, s6);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parseS();
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parseS();
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parsekey();
+ if (s2 !== peg$FAILED) {
+ s3 = [];
+ s4 = peg$parseS();
+ while (s4 !== peg$FAILED) {
+ s3.push(s4);
+ s4 = peg$parseS();
+ }
+ if (s3 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 61) {
+ s4 = peg$c18;
+ peg$currPos++;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c19); }
+ }
+ if (s4 !== peg$FAILED) {
+ s5 = [];
+ s6 = peg$parseS();
+ while (s6 !== peg$FAILED) {
+ s5.push(s6);
+ s6 = peg$parseS();
+ }
+ if (s5 !== peg$FAILED) {
+ s6 = peg$parsevalue();
+ if (s6 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c69(s2, s6);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsesecfragment() {
+ var s0, s1, s2;
+
+ var key = peg$currPos * 49 + 34,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 46) {
+ s1 = peg$c16;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c17); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parseDIGITS();
+ if (s2 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c70(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsedate() {
+ var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11;
+
+ var key = peg$currPos * 49 + 35,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = peg$currPos;
+ s2 = peg$parseDIGIT_OR_UNDER();
+ if (s2 !== peg$FAILED) {
+ s3 = peg$parseDIGIT_OR_UNDER();
+ if (s3 !== peg$FAILED) {
+ s4 = peg$parseDIGIT_OR_UNDER();
+ if (s4 !== peg$FAILED) {
+ s5 = peg$parseDIGIT_OR_UNDER();
+ if (s5 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 45) {
+ s6 = peg$c47;
+ peg$currPos++;
+ } else {
+ s6 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c48); }
+ }
+ if (s6 !== peg$FAILED) {
+ s7 = peg$parseDIGIT_OR_UNDER();
+ if (s7 !== peg$FAILED) {
+ s8 = peg$parseDIGIT_OR_UNDER();
+ if (s8 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 45) {
+ s9 = peg$c47;
+ peg$currPos++;
+ } else {
+ s9 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c48); }
+ }
+ if (s9 !== peg$FAILED) {
+ s10 = peg$parseDIGIT_OR_UNDER();
+ if (s10 !== peg$FAILED) {
+ s11 = peg$parseDIGIT_OR_UNDER();
+ if (s11 !== peg$FAILED) {
+ s2 = [s2, s3, s4, s5, s6, s7, s8, s9, s10, s11];
+ s1 = s2;
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c71(s1);
+ }
+ s0 = s1;
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsetime() {
+ var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;
+
+ var key = peg$currPos * 49 + 36,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = peg$currPos;
+ s2 = peg$parseDIGIT_OR_UNDER();
+ if (s2 !== peg$FAILED) {
+ s3 = peg$parseDIGIT_OR_UNDER();
+ if (s3 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 58) {
+ s4 = peg$c72;
+ peg$currPos++;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c73); }
+ }
+ if (s4 !== peg$FAILED) {
+ s5 = peg$parseDIGIT_OR_UNDER();
+ if (s5 !== peg$FAILED) {
+ s6 = peg$parseDIGIT_OR_UNDER();
+ if (s6 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 58) {
+ s7 = peg$c72;
+ peg$currPos++;
+ } else {
+ s7 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c73); }
+ }
+ if (s7 !== peg$FAILED) {
+ s8 = peg$parseDIGIT_OR_UNDER();
+ if (s8 !== peg$FAILED) {
+ s9 = peg$parseDIGIT_OR_UNDER();
+ if (s9 !== peg$FAILED) {
+ s10 = peg$parsesecfragment();
+ if (s10 === peg$FAILED) {
+ s10 = peg$c25;
+ }
+ if (s10 !== peg$FAILED) {
+ s2 = [s2, s3, s4, s5, s6, s7, s8, s9, s10];
+ s1 = s2;
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c74(s1);
+ }
+ s0 = s1;
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsetime_with_offset() {
+ var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16;
+
+ var key = peg$currPos * 49 + 37,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = peg$currPos;
+ s2 = peg$parseDIGIT_OR_UNDER();
+ if (s2 !== peg$FAILED) {
+ s3 = peg$parseDIGIT_OR_UNDER();
+ if (s3 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 58) {
+ s4 = peg$c72;
+ peg$currPos++;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c73); }
+ }
+ if (s4 !== peg$FAILED) {
+ s5 = peg$parseDIGIT_OR_UNDER();
+ if (s5 !== peg$FAILED) {
+ s6 = peg$parseDIGIT_OR_UNDER();
+ if (s6 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 58) {
+ s7 = peg$c72;
+ peg$currPos++;
+ } else {
+ s7 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c73); }
+ }
+ if (s7 !== peg$FAILED) {
+ s8 = peg$parseDIGIT_OR_UNDER();
+ if (s8 !== peg$FAILED) {
+ s9 = peg$parseDIGIT_OR_UNDER();
+ if (s9 !== peg$FAILED) {
+ s10 = peg$parsesecfragment();
+ if (s10 === peg$FAILED) {
+ s10 = peg$c25;
+ }
+ if (s10 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 45) {
+ s11 = peg$c47;
+ peg$currPos++;
+ } else {
+ s11 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c48); }
+ }
+ if (s11 === peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 43) {
+ s11 = peg$c44;
+ peg$currPos++;
+ } else {
+ s11 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c45); }
+ }
+ }
+ if (s11 !== peg$FAILED) {
+ s12 = peg$parseDIGIT_OR_UNDER();
+ if (s12 !== peg$FAILED) {
+ s13 = peg$parseDIGIT_OR_UNDER();
+ if (s13 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 58) {
+ s14 = peg$c72;
+ peg$currPos++;
+ } else {
+ s14 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c73); }
+ }
+ if (s14 !== peg$FAILED) {
+ s15 = peg$parseDIGIT_OR_UNDER();
+ if (s15 !== peg$FAILED) {
+ s16 = peg$parseDIGIT_OR_UNDER();
+ if (s16 !== peg$FAILED) {
+ s2 = [s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16];
+ s1 = s2;
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$c2;
+ }
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c74(s1);
+ }
+ s0 = s1;
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parsedatetime() {
+ var s0, s1, s2, s3, s4;
+
+ var key = peg$currPos * 49 + 38,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = peg$parsedate();
+ if (s1 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 84) {
+ s2 = peg$c75;
+ peg$currPos++;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c76); }
+ }
+ if (s2 !== peg$FAILED) {
+ s3 = peg$parsetime();
+ if (s3 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 90) {
+ s4 = peg$c77;
+ peg$currPos++;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c78); }
+ }
+ if (s4 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c79(s1, s3);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ s1 = peg$parsedate();
+ if (s1 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 84) {
+ s2 = peg$c75;
+ peg$currPos++;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c76); }
+ }
+ if (s2 !== peg$FAILED) {
+ s3 = peg$parsetime_with_offset();
+ if (s3 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c80(s1, s3);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseS() {
+ var s0;
+
+ var key = peg$currPos * 49 + 39,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ if (peg$c81.test(input.charAt(peg$currPos))) {
+ s0 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s0 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c82); }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseNL() {
+ var s0, s1, s2;
+
+ var key = peg$currPos * 49 + 40,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ if (input.charCodeAt(peg$currPos) === 10) {
+ s0 = peg$c83;
+ peg$currPos++;
+ } else {
+ s0 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c84); }
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 13) {
+ s1 = peg$c85;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c86); }
+ }
+ if (s1 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 10) {
+ s2 = peg$c83;
+ peg$currPos++;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c84); }
+ }
+ if (s2 !== peg$FAILED) {
+ s1 = [s1, s2];
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseNLS() {
+ var s0;
+
+ var key = peg$currPos * 49 + 41,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$parseNL();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parseS();
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseEOF() {
+ var s0, s1;
+
+ var key = peg$currPos * 49 + 42,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ peg$silentFails++;
+ if (input.length > peg$currPos) {
+ s1 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c6); }
+ }
+ peg$silentFails--;
+ if (s1 === peg$FAILED) {
+ s0 = peg$c5;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseHEX() {
+ var s0;
+
+ var key = peg$currPos * 49 + 43,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ if (peg$c87.test(input.charAt(peg$currPos))) {
+ s0 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s0 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c88); }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseDIGIT_OR_UNDER() {
+ var s0, s1;
+
+ var key = peg$currPos * 49 + 44,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ if (peg$c89.test(input.charAt(peg$currPos))) {
+ s0 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s0 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c90); }
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 95) {
+ s1 = peg$c91;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c92); }
+ }
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c93();
+ }
+ s0 = s1;
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseASCII_BASIC() {
+ var s0;
+
+ var key = peg$currPos * 49 + 45,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ if (peg$c94.test(input.charAt(peg$currPos))) {
+ s0 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s0 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c95); }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseDIGITS() {
+ var s0, s1, s2;
+
+ var key = peg$currPos * 49 + 46,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parseDIGIT_OR_UNDER();
+ if (s2 !== peg$FAILED) {
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parseDIGIT_OR_UNDER();
+ }
+ } else {
+ s1 = peg$c2;
+ }
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c96(s1);
+ }
+ s0 = s1;
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseESCAPED() {
+ var s0, s1;
+
+ var key = peg$currPos * 49 + 47,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 2) === peg$c97) {
+ s1 = peg$c97;
+ peg$currPos += 2;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c98); }
+ }
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c99();
+ }
+ s0 = s1;
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 2) === peg$c100) {
+ s1 = peg$c100;
+ peg$currPos += 2;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c101); }
+ }
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c102();
+ }
+ s0 = s1;
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 2) === peg$c103) {
+ s1 = peg$c103;
+ peg$currPos += 2;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c104); }
+ }
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c105();
+ }
+ s0 = s1;
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 2) === peg$c106) {
+ s1 = peg$c106;
+ peg$currPos += 2;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c107); }
+ }
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c108();
+ }
+ s0 = s1;
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 2) === peg$c109) {
+ s1 = peg$c109;
+ peg$currPos += 2;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c110); }
+ }
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c111();
+ }
+ s0 = s1;
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 2) === peg$c112) {
+ s1 = peg$c112;
+ peg$currPos += 2;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c113); }
+ }
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c114();
+ }
+ s0 = s1;
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 2) === peg$c115) {
+ s1 = peg$c115;
+ peg$currPos += 2;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c116); }
+ }
+ if (s1 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c117();
+ }
+ s0 = s1;
+ if (s0 === peg$FAILED) {
+ s0 = peg$parseESCAPED_UNICODE();
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+ function peg$parseESCAPED_UNICODE() {
+ var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;
+
+ var key = peg$currPos * 49 + 48,
+ cached = peg$cache[key];
+
+ if (cached) {
+ peg$currPos = cached.nextPos;
+ return cached.result;
+ }
+
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 2) === peg$c118) {
+ s1 = peg$c118;
+ peg$currPos += 2;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c119); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$currPos;
+ s3 = peg$parseHEX();
+ if (s3 !== peg$FAILED) {
+ s4 = peg$parseHEX();
+ if (s4 !== peg$FAILED) {
+ s5 = peg$parseHEX();
+ if (s5 !== peg$FAILED) {
+ s6 = peg$parseHEX();
+ if (s6 !== peg$FAILED) {
+ s7 = peg$parseHEX();
+ if (s7 !== peg$FAILED) {
+ s8 = peg$parseHEX();
+ if (s8 !== peg$FAILED) {
+ s9 = peg$parseHEX();
+ if (s9 !== peg$FAILED) {
+ s10 = peg$parseHEX();
+ if (s10 !== peg$FAILED) {
+ s3 = [s3, s4, s5, s6, s7, s8, s9, s10];
+ s2 = s3;
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ if (s2 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c120(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 2) === peg$c121) {
+ s1 = peg$c121;
+ peg$currPos += 2;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c122); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$currPos;
+ s3 = peg$parseHEX();
+ if (s3 !== peg$FAILED) {
+ s4 = peg$parseHEX();
+ if (s4 !== peg$FAILED) {
+ s5 = peg$parseHEX();
+ if (s5 !== peg$FAILED) {
+ s6 = peg$parseHEX();
+ if (s6 !== peg$FAILED) {
+ s3 = [s3, s4, s5, s6];
+ s2 = s3;
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$c2;
+ }
+ if (s2 !== peg$FAILED) {
+ peg$reportedPos = s0;
+ s1 = peg$c120(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$c2;
+ }
+ }
+
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
+
+ return s0;
+ }
+
+
+ var nodes = [];
+
+ function genError(err, line, col) {
+ var ex = new Error(err);
+ ex.line = line;
+ ex.column = col;
+ throw ex;
+ }
+
+ function addNode(node) {
+ nodes.push(node);
+ }
+
+ function node(type, value, line, column, key) {
+ var obj = { type: type, value: value, line: line(), column: column() };
+ if (key) obj.key = key;
+ return obj;
+ }
+
+ function convertCodePoint(str, line, col) {
+ var num = parseInt("0x" + str);
+
+ if (
+ !isFinite(num) ||
+ Math.floor(num) != num ||
+ num < 0 ||
+ num > 0x10FFFF ||
+ (num > 0xD7FF && num < 0xE000)
+ ) {
+ genError("Invalid Unicode escape code: " + str, line, col);
+ } else {
+ return fromCodePoint(num);
+ }
+ }
+
+ function fromCodePoint() {
+ var MAX_SIZE = 0x4000;
+ var codeUnits = [];
+ var highSurrogate;
+ var lowSurrogate;
+ var index = -1;
+ var length = arguments.length;
+ if (!length) {
+ return '';
+ }
+ var result = '';
+ while (++index < length) {
+ var codePoint = Number(arguments[index]);
+ if (codePoint <= 0xFFFF) { // BMP code point
+ codeUnits.push(codePoint);
+ } else { // Astral code point; split in surrogate halves
+ // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+ codePoint -= 0x10000;
+ highSurrogate = (codePoint >> 10) + 0xD800;
+ lowSurrogate = (codePoint % 0x400) + 0xDC00;
+ codeUnits.push(highSurrogate, lowSurrogate);
+ }
+ if (index + 1 == length || codeUnits.length > MAX_SIZE) {
+ result += String.fromCharCode.apply(null, codeUnits);
+ codeUnits.length = 0;
+ }
+ }
+ return result;
+ }
+
+
+ peg$result = peg$startRuleFunction();
+
+ if (peg$result !== peg$FAILED && peg$currPos === input.length) {
+ return peg$result;
+ } else {
+ if (peg$result !== peg$FAILED && peg$currPos < input.length) {
+ peg$fail({ type: "end", description: "end of input" });
+ }
+
+ throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);
+ }
+ }
+
+ return {
+ SyntaxError: SyntaxError,
+ parse: parse
+ };
+})();
diff --git a/node_modules/toml/package.json b/node_modules/toml/package.json
new file mode 100644
index 00000000..53418e93
--- /dev/null
+++ b/node_modules/toml/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "toml",
+ "version": "2.3.3",
+ "description": "TOML parser for Node.js (parses TOML spec v0.4.0)",
+ "main": "index.js",
+ "types": "index.d.ts",
+ "scripts": {
+ "build": "pegjs --cache src/toml.pegjs lib/parser.js",
+ "test": "jshint lib/compiler.js && nodeunit test/test_*.js",
+ "prepublish": "npm run build"
+ },
+ "repository": "git://github.com/BinaryMuse/toml-node.git",
+ "keywords": [
+ "toml",
+ "parser"
+ ],
+ "author": "Michelle Tilley <michelle@michelletilley.net>",
+ "license": "MIT",
+ "devDependencies": {
+ "jshint": "*",
+ "nodeunit": "~0.9.0",
+ "pegjs": "~0.8.0"
+ }
+}
diff --git a/node_modules/toml/src/toml.pegjs b/node_modules/toml/src/toml.pegjs
new file mode 100644
index 00000000..70517078
--- /dev/null
+++ b/node_modules/toml/src/toml.pegjs
@@ -0,0 +1,231 @@
+{
+ var nodes = [];
+
+ function genError(err, line, col) {
+ var ex = new Error(err);
+ ex.line = line;
+ ex.column = col;
+ throw ex;
+ }
+
+ function addNode(node) {
+ nodes.push(node);
+ }
+
+ function node(type, value, line, column, key) {
+ var obj = { type: type, value: value, line: line(), column: column() };
+ if (key) obj.key = key;
+ return obj;
+ }
+
+ function convertCodePoint(str, line, col) {
+ var num = parseInt("0x" + str);
+
+ if (
+ !isFinite(num) ||
+ Math.floor(num) != num ||
+ num < 0 ||
+ num > 0x10FFFF ||
+ (num > 0xD7FF && num < 0xE000)
+ ) {
+ genError("Invalid Unicode escape code: " + str, line, col);
+ } else {
+ return fromCodePoint(num);
+ }
+ }
+
+ function fromCodePoint() {
+ var MAX_SIZE = 0x4000;
+ var codeUnits = [];
+ var highSurrogate;
+ var lowSurrogate;
+ var index = -1;
+ var length = arguments.length;
+ if (!length) {
+ return '';
+ }
+ var result = '';
+ while (++index < length) {
+ var codePoint = Number(arguments[index]);
+ if (codePoint <= 0xFFFF) { // BMP code point
+ codeUnits.push(codePoint);
+ } else { // Astral code point; split in surrogate halves
+ // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+ codePoint -= 0x10000;
+ highSurrogate = (codePoint >> 10) + 0xD800;
+ lowSurrogate = (codePoint % 0x400) + 0xDC00;
+ codeUnits.push(highSurrogate, lowSurrogate);
+ }
+ if (index + 1 == length || codeUnits.length > MAX_SIZE) {
+ result += String.fromCharCode.apply(null, codeUnits);
+ codeUnits.length = 0;
+ }
+ }
+ return result;
+ }
+}
+
+start
+ = line* { return nodes }
+
+line
+ = S* expr:expression S* comment* (NL+ / EOF)
+ / S+ (NL+ / EOF)
+ / NL
+
+expression
+ = comment / path / tablearray / assignment
+
+comment
+ = '#' (!(NL / EOF) .)*
+
+path
+ = '[' S* name:table_key S* ']' { addNode(node('ObjectPath', name, line, column)) }
+
+tablearray
+ = '[' '[' S* name:table_key S* ']' ']' { addNode(node('ArrayPath', name, line, column)) }
+
+table_key
+ = parts:dot_ended_table_key_part+ name:table_key_part { return parts.concat(name) }
+ / name:table_key_part { return [name] }
+
+table_key_part
+ = S* name:key S* { return name }
+ / S* name:quoted_key S* { return name }
+
+dot_ended_table_key_part
+ = S* name:key S* '.' S* { return name }
+ / S* name:quoted_key S* '.' S* { return name }
+
+assignment
+ = key:key S* '=' S* value:value { addNode(node('Assign', value, line, column, key)) }
+ / key:quoted_key S* '=' S* value:value { addNode(node('Assign', value, line, column, key)) }
+
+key
+ = chars:ASCII_BASIC+ { return chars.join('') }
+
+quoted_key
+ = node:double_quoted_single_line_string { return node.value }
+ / node:single_quoted_single_line_string { return node.value }
+
+value
+ = string / datetime / float / integer / boolean / array / inline_table
+
+string
+ = double_quoted_multiline_string
+ / double_quoted_single_line_string
+ / single_quoted_multiline_string
+ / single_quoted_single_line_string
+
+double_quoted_multiline_string
+ = '"""' NL? chars:multiline_string_char* '"""' { return node('String', chars.join(''), line, column) }
+double_quoted_single_line_string
+ = '"' chars:string_char* '"' { return node('String', chars.join(''), line, column) }
+single_quoted_multiline_string
+ = "'''" NL? chars:multiline_literal_char* "'''" { return node('String', chars.join(''), line, column) }
+single_quoted_single_line_string
+ = "'" chars:literal_char* "'" { return node('String', chars.join(''), line, column) }
+
+string_char
+ = ESCAPED / (!'"' char:. { return char })
+
+literal_char
+ = (!"'" char:. { return char })
+
+multiline_string_char
+ = ESCAPED / multiline_string_delim / (!'"""' char:. { return char})
+
+multiline_string_delim
+ = '\\' NL NLS* { return '' }
+
+multiline_literal_char
+ = (!"'''" char:. { return char })
+
+float
+ = left:(float_text / integer_text) ('e' / 'E') right:integer_text { return node('Float', parseFloat(left + 'e' + right), line, column) }
+ / text:float_text { return node('Float', parseFloat(text), line, column) }
+
+float_text
+ = '+'? digits:(DIGITS '.' DIGITS) { return digits.join('') }
+ / '-' digits:(DIGITS '.' DIGITS) { return '-' + digits.join('') }
+
+integer
+ = text:integer_text { return node('Integer', parseInt(text, 10), line, column) }
+
+integer_text
+ = '+'? digits:DIGIT+ !'.' { return digits.join('') }
+ / '-' digits:DIGIT+ !'.' { return '-' + digits.join('') }
+
+boolean
+ = 'true' { return node('Boolean', true, line, column) }
+ / 'false' { return node('Boolean', false, line, column) }
+
+array
+ = '[' array_sep* ']' { return node('Array', [], line, column) }
+ / '[' value:array_value? ']' { return node('Array', value ? [value] : [], line, column) }
+ / '[' values:array_value_list+ ']' { return node('Array', values, line, column) }
+ / '[' values:array_value_list+ value:array_value ']' { return node('Array', values.concat(value), line, column) }
+
+array_value
+ = array_sep* value:value array_sep* { return value }
+
+array_value_list
+ = array_sep* value:value array_sep* ',' array_sep* { return value }
+
+array_sep
+ = S / NL / comment
+
+inline_table
+ = '{' S* values:inline_table_assignment* S* '}' { return node('InlineTable', values, line, column) }
+
+inline_table_assignment
+ = S* key:key S* '=' S* value:value S* ',' S* { return node('InlineTableValue', value, line, column, key) }
+ / S* key:key S* '=' S* value:value { return node('InlineTableValue', value, line, column, key) }
+
+secfragment
+ = '.' digits:DIGITS { return "." + digits }
+
+date
+ = date:(
+ DIGIT DIGIT DIGIT DIGIT
+ '-'
+ DIGIT DIGIT
+ '-'
+ DIGIT DIGIT
+ ) { return date.join('') }
+
+time
+ = time:(DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT secfragment?) { return time.join('') }
+
+time_with_offset
+ = time:(
+ DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT secfragment?
+ ('-' / '+')
+ DIGIT DIGIT ':' DIGIT DIGIT
+ ) { return time.join('') }
+
+datetime
+ = date:date 'T' time:time 'Z' { return node('Date', new Date(date + "T" + time + "Z"), line, column) }
+ / date:date 'T' time:time_with_offset { return node('Date', new Date(date + "T" + time), line, column) }
+
+
+S = [ \t]
+NL = "\n" / "\r" "\n"
+NLS = NL / S
+EOF = !.
+HEX = [0-9a-f]i
+DIGIT = DIGIT_OR_UNDER
+DIGIT_OR_UNDER = [0-9]
+ / '_' { return "" }
+ASCII_BASIC = [A-Za-z0-9_\-]
+DIGITS = d:DIGIT_OR_UNDER+ { return d.join('') }
+ESCAPED = '\\"' { return '"' }
+ / '\\\\' { return '\\' }
+ / '\\b' { return '\b' }
+ / '\\t' { return '\t' }
+ / '\\n' { return '\n' }
+ / '\\f' { return '\f' }
+ / '\\r' { return '\r' }
+ / ESCAPED_UNICODE
+ESCAPED_UNICODE = "\\U" digits:(HEX HEX HEX HEX HEX HEX HEX HEX) { return convertCodePoint(digits.join('')) }
+ / "\\u" digits:(HEX HEX HEX HEX) { return convertCodePoint(digits.join('')) }
diff --git a/node_modules/toml/test/bad.toml b/node_modules/toml/test/bad.toml
new file mode 100644
index 00000000..d51c3f31
--- /dev/null
+++ b/node_modules/toml/test/bad.toml
@@ -0,0 +1,5 @@
+[something]
+awesome = "this is"
+
+[something.awesome]
+this = "isn't"
diff --git a/node_modules/toml/test/example.toml b/node_modules/toml/test/example.toml
new file mode 100644
index 00000000..ea9dc35d
--- /dev/null
+++ b/node_modules/toml/test/example.toml
@@ -0,0 +1,32 @@
+# This is a TOML document. Boom.
+
+title = "TOML Example"
+
+[owner]
+name = "Tom Preston-Werner"
+organization = "GitHub"
+bio = "GitHub Cofounder & CEO\n\tLikes \"tater tots\" and beer and backslashes: \\"
+dob = 1979-05-27T07:32:00Z # First class dates? Why not?
+
+[database]
+server = "192.168.1.1"
+ports = [ 8001, 8001, 8003 ]
+connection_max = 5000
+connection_min = -2 # Don't ask me how
+max_temp = 87.1 # It's a float
+min_temp = -17.76
+enabled = true
+
+[servers]
+
+ # You can indent as you please. Tabs or spaces. TOML don't care.
+ [servers.alpha]
+ ip = "10.0.0.1"
+ dc = "eqdc10"
+
+ [servers.beta]
+ ip = "10.0.0.2"
+ dc = "eqdc10"
+
+[clients]
+data = [ ["gamma", "delta"], [1, 2] ] # just an update to make sure parsers support it
diff --git a/node_modules/toml/test/hard_example.toml b/node_modules/toml/test/hard_example.toml
new file mode 100644
index 00000000..38856c87
--- /dev/null
+++ b/node_modules/toml/test/hard_example.toml
@@ -0,0 +1,33 @@
+# Test file for TOML
+# Only this one tries to emulate a TOML file written by a user of the kind of parser writers probably hate
+# This part you'll really hate
+
+[the]
+test_string = "You'll hate me after this - #" # " Annoying, isn't it?
+
+ [the.hard]
+ test_array = [ "] ", " # "] # ] There you go, parse this!
+ test_array2 = [ "Test #11 ]proved that", "Experiment #9 was a success" ]
+ # You didn't think it'd as easy as chucking out the last #, did you?
+ another_test_string = " Same thing, but with a string #"
+ harder_test_string = " And when \"'s are in the string, along with # \"" # "and comments are there too"
+ # Things will get harder
+
+ [the.hard."bit#"]
+ "what?" = "You don't think some user won't do that?"
+ multi_line_array = [
+ "]",
+ # ] Oh yes I did
+ ]
+
+# Each of the following keygroups/key value pairs should produce an error. Uncomment to them to test
+
+#[error] if you didn't catch this, your parser is broken
+#string = "Anything other than tabs, spaces and newline after a keygroup or key value pair has ended should produce an error unless it is a comment" like this
+#array = [
+# "This might most likely happen in multiline arrays",
+# Like here,
+# "or here,
+# and here"
+# ] End of array comment, forgot the #
+#number = 3.14 pi <--again forgot the #
diff --git a/node_modules/toml/test/inline_tables.toml b/node_modules/toml/test/inline_tables.toml
new file mode 100644
index 00000000..c91088ee
--- /dev/null
+++ b/node_modules/toml/test/inline_tables.toml
@@ -0,0 +1,10 @@
+name = { first = "Tom", last = "Preston-Werner" }
+point = { x = 1, y = 2 }
+nested = { x = { a = { b = 3 } } }
+
+points = [ { x = 1, y = 2, z = 3 },
+ { x = 7, y = 8, z = 9 },
+ { x = 2, y = 4, z = 8 } ]
+
+arrays = [ { x = [1, 2, 3], y = [4, 5, 6] },
+ { x = [7, 8, 9], y = [0, 1, 2] } ]
diff --git a/node_modules/toml/test/literal_strings.toml b/node_modules/toml/test/literal_strings.toml
new file mode 100644
index 00000000..36772bb6
--- /dev/null
+++ b/node_modules/toml/test/literal_strings.toml
@@ -0,0 +1,5 @@
+# What you see is what you get.
+winpath = 'C:\Users\nodejs\templates'
+winpath2 = '\\ServerX\admin$\system32\'
+quoted = 'Tom "Dubs" Preston-Werner'
+regex = '<\i\c*\s*>'
diff --git a/node_modules/toml/test/multiline_eat_whitespace.toml b/node_modules/toml/test/multiline_eat_whitespace.toml
new file mode 100644
index 00000000..904c1707
--- /dev/null
+++ b/node_modules/toml/test/multiline_eat_whitespace.toml
@@ -0,0 +1,15 @@
+# The following strings are byte-for-byte equivalent:
+key1 = "The quick brown fox jumps over the lazy dog."
+
+key2 = """
+The quick brown \
+
+
+ fox jumps over \
+ the lazy dog."""
+
+key3 = """\
+ The quick brown \
+ fox jumps over \
+ the lazy dog.\
+ """
diff --git a/node_modules/toml/test/multiline_literal_strings.toml b/node_modules/toml/test/multiline_literal_strings.toml
new file mode 100644
index 00000000..bc88494c
--- /dev/null
+++ b/node_modules/toml/test/multiline_literal_strings.toml
@@ -0,0 +1,7 @@
+regex2 = '''I [dw]on't need \d{2} apples'''
+lines = '''
+The first newline is
+trimmed in raw strings.
+ All other whitespace
+ is preserved.
+'''
diff --git a/node_modules/toml/test/multiline_strings.toml b/node_modules/toml/test/multiline_strings.toml
new file mode 100644
index 00000000..6eb8c45a
--- /dev/null
+++ b/node_modules/toml/test/multiline_strings.toml
@@ -0,0 +1,6 @@
+# The following strings are byte-for-byte equivalent:
+key1 = "One\nTwo"
+key2 = """One\nTwo"""
+key3 = """
+One
+Two"""
diff --git a/node_modules/toml/test/smoke.js b/node_modules/toml/test/smoke.js
new file mode 100644
index 00000000..7769f9c4
--- /dev/null
+++ b/node_modules/toml/test/smoke.js
@@ -0,0 +1,22 @@
+var fs = require('fs');
+var parser = require('../index');
+
+var codes = [
+ "# test\n my.key=\"value\"\nother = 101\nthird = -37",
+ "first = 1.2\nsecond = -56.02\nth = true\nfth = false",
+ "time = 1979-05-27T07:32:00Z",
+ "test = [\"one\", ]",
+ "test = [[1, 2,], [true, false,],]",
+ "[my.sub.path]\nkey = true\nother = -15.3\n[my.sub]\nkey=false",
+ "arry = [\"one\", \"two\",\"thr\nee\", \"\\u03EA\"]",
+ fs.readFileSync(__dirname + '/example.toml', 'utf8'),
+ fs.readFileSync(__dirname + '/hard_example.toml', 'utf8')
+]
+
+console.log("=============================================");
+for(i in codes) {
+ var code = codes[i];
+ console.log(code + "\n");
+ console.log(JSON.stringify(parser.parse(code)));
+ console.log("=============================================");
+}
diff --git a/node_modules/toml/test/table_arrays_easy.toml b/node_modules/toml/test/table_arrays_easy.toml
new file mode 100644
index 00000000..ac3883bb
--- /dev/null
+++ b/node_modules/toml/test/table_arrays_easy.toml
@@ -0,0 +1,10 @@
+[[products]]
+name = "Hammer"
+sku = 738594937
+
+[[products]]
+
+[[products]]
+name = "Nail"
+sku = 284758393
+color = "gray"
diff --git a/node_modules/toml/test/table_arrays_hard.toml b/node_modules/toml/test/table_arrays_hard.toml
new file mode 100644
index 00000000..2ade5409
--- /dev/null
+++ b/node_modules/toml/test/table_arrays_hard.toml
@@ -0,0 +1,31 @@
+[[fruit]]
+name = "durian"
+variety = []
+
+[[fruit]]
+name = "apple"
+
+ [fruit.physical]
+ color = "red"
+ shape = "round"
+
+ [[fruit.variety]]
+ name = "red delicious"
+
+ [[fruit.variety]]
+ name = "granny smith"
+
+[[fruit]]
+
+[[fruit]]
+name = "banana"
+
+ [[fruit.variety]]
+ name = "plantain"
+
+[[fruit]]
+name = "orange"
+
+[fruit.physical]
+color = "orange"
+shape = "round"
diff --git a/node_modules/toml/test/test_toml.js b/node_modules/toml/test/test_toml.js
new file mode 100644
index 00000000..adbdc4a6
--- /dev/null
+++ b/node_modules/toml/test/test_toml.js
@@ -0,0 +1,586 @@
+var toml = require('../');
+var fs = require('fs');
+
+var assert = require("nodeunit").assert;
+
+assert.parsesToml = function(tomlStr, expected) {
+ try {
+ var actual = toml.parse(tomlStr);
+ } catch (e) {
+ var errInfo = "line: " + e.line + ", column: " + e.column;
+ return assert.fail("TOML parse error: " + e.message, errInfo, null, "at", assert.parsesToml);
+ }
+ return assert.deepEqual(actual, expected);
+};
+
+var exampleExpected = {
+ title: "TOML Example",
+ owner: {
+ name: "Tom Preston-Werner",
+ organization: "GitHub",
+ bio: "GitHub Cofounder & CEO\n\tLikes \"tater tots\" and beer and backslashes: \\",
+ dob: new Date("1979-05-27T07:32:00Z")
+ },
+ database: {
+ server: "192.168.1.1",
+ ports: [8001, 8001, 8003],
+ connection_max: 5000,
+ connection_min: -2,
+ max_temp: 87.1,
+ min_temp: -17.76,
+ enabled: true
+ },
+ servers: {
+ alpha: {
+ ip: "10.0.0.1",
+ dc: "eqdc10"
+ },
+ beta: {
+ ip: "10.0.0.2",
+ dc: "eqdc10"
+ }
+ },
+ clients: {
+ data: [ ["gamma", "delta"], [1, 2] ]
+ }
+};
+
+var hardExampleExpected = {
+ the: {
+ hard: {
+ another_test_string: ' Same thing, but with a string #',
+ 'bit#': {
+ multi_line_array: [']'],
+ 'what?': "You don't think some user won't do that?"
+ },
+ harder_test_string: " And when \"'s are in the string, along with # \"",
+ test_array: ['] ', ' # '],
+ test_array2: ['Test #11 ]proved that', 'Experiment #9 was a success']
+ },
+ test_string: "You'll hate me after this - #"
+ }
+};
+
+var easyTableArrayExpected = {
+ "products": [
+ { "name": "Hammer", "sku": 738594937 },
+ { },
+ { "name": "Nail", "sku": 284758393, "color": "gray" }
+ ]
+};
+
+var hardTableArrayExpected = {
+ "fruit": [
+ {
+ "name": "durian",
+ "variety": []
+ },
+ {
+ "name": "apple",
+ "physical": {
+ "color": "red",
+ "shape": "round"
+ },
+ "variety": [
+ { "name": "red delicious" },
+ { "name": "granny smith" }
+ ]
+ },
+ {},
+ {
+ "name": "banana",
+ "variety": [
+ { "name": "plantain" }
+ ]
+ },
+ {
+ "name": "orange",
+ "physical": {
+ "color": "orange",
+ "shape": "round"
+ }
+ }
+ ]
+}
+
+var badInputs = [
+ '[error] if you didn\'t catch this, your parser is broken',
+ 'string = "Anything other than tabs, spaces and newline after a table or key value pair has ended should produce an error unless it is a comment" like this',
+ 'array = [\n \"This might most likely happen in multiline arrays\",\n Like here,\n \"or here,\n and here\"\n ] End of array comment, forgot the #',
+ 'number = 3.14 pi <--again forgot the #'
+];
+
+exports.testParsesExample = function(test) {
+ var str = fs.readFileSync(__dirname + "/example.toml", 'utf-8')
+ test.parsesToml(str, exampleExpected);
+ test.done();
+};
+
+exports.testParsesHardExample = function(test) {
+ var str = fs.readFileSync(__dirname + "/hard_example.toml", 'utf-8')
+ test.parsesToml(str, hardExampleExpected);
+ test.done();
+};
+
+exports.testEasyTableArrays = function(test) {
+ var str = fs.readFileSync(__dirname + "/table_arrays_easy.toml", 'utf8')
+ test.parsesToml(str, easyTableArrayExpected);
+ test.done();
+};
+
+exports.testHarderTableArrays = function(test) {
+ var str = fs.readFileSync(__dirname + "/table_arrays_hard.toml", 'utf8')
+ test.parsesToml(str, hardTableArrayExpected);
+ test.done();
+};
+
+exports.testSupportsTrailingCommasInArrays = function(test) {
+ var str = 'arr = [1, 2, 3,]';
+ var expected = { arr: [1, 2, 3] };
+ test.parsesToml(str, expected);
+ test.done();
+};
+
+exports.testSingleElementArrayWithNoTrailingComma = function(test) {
+ var str = "a = [1]";
+ test.parsesToml(str, {
+ a: [1]
+ });
+ test.done();
+};
+
+exports.testEmptyArray = function(test) {
+ var str = "a = []";
+ test.parsesToml(str, {
+ a: []
+ });
+ test.done();
+};
+
+exports.testArrayWithWhitespace = function(test) {
+ var str = "[versions]\nfiles = [\n 3, \n 5 \n\n ]";
+ test.parsesToml(str, {
+ versions: {
+ files: [3, 5]
+ }
+ });
+ test.done();
+};
+
+exports.testEmptyArrayWithWhitespace = function(test) {
+ var str = "[versions]\nfiles = [\n \n ]";
+ test.parsesToml(str, {
+ versions: {
+ files: []
+ }
+ });
+ test.done();
+};
+
+exports.testDefineOnSuperkey = function(test) {
+ var str = "[a.b]\nc = 1\n\n[a]\nd = 2";
+ var expected = {
+ a: {
+ b: {
+ c: 1
+ },
+ d: 2
+ }
+ };
+ test.parsesToml(str, expected);
+ test.done();
+};
+
+exports.testWhitespace = function(test) {
+ var str = "a = 1\n \n b = 2 ";
+ test.parsesToml(str, {
+ a: 1, b: 2
+ });
+ test.done();
+};
+
+exports.testUnicode = function(test) {
+ var str = "str = \"My name is Jos\\u00E9\"";
+ test.parsesToml(str, {
+ str: "My name is Jos\u00E9"
+ });
+
+ var str = "str = \"My name is Jos\\U000000E9\"";
+ test.parsesToml(str, {
+ str: "My name is Jos\u00E9"
+ });
+ test.done();
+};
+
+exports.testMultilineStrings = function(test) {
+ var str = fs.readFileSync(__dirname + "/multiline_strings.toml", 'utf8');
+ test.parsesToml(str, {
+ key1: "One\nTwo",
+ key2: "One\nTwo",
+ key3: "One\nTwo"
+ });
+ test.done();
+};
+
+exports.testMultilineEatWhitespace = function(test) {
+ var str = fs.readFileSync(__dirname + "/multiline_eat_whitespace.toml", 'utf8');
+ test.parsesToml(str, {
+ key1: "The quick brown fox jumps over the lazy dog.",
+ key2: "The quick brown fox jumps over the lazy dog.",
+ key3: "The quick brown fox jumps over the lazy dog."
+ });
+ test.done();
+};
+
+exports.testLiteralStrings = function(test) {
+ var str = fs.readFileSync(__dirname + "/literal_strings.toml", 'utf8');
+ test.parsesToml(str, {
+ winpath: "C:\\Users\\nodejs\\templates",
+ winpath2: "\\\\ServerX\\admin$\\system32\\",
+ quoted: "Tom \"Dubs\" Preston-Werner",
+ regex: "<\\i\\c*\\s*>"
+ });
+ test.done();
+};
+
+exports.testMultilineLiteralStrings = function(test) {
+ var str = fs.readFileSync(__dirname + "/multiline_literal_strings.toml", 'utf8');
+ test.parsesToml(str, {
+ regex2: "I [dw]on't need \\d{2} apples",
+ lines: "The first newline is\ntrimmed in raw strings.\n All other whitespace\n is preserved.\n"
+ });
+ test.done();
+};
+
+exports.testIntegerFormats = function(test) {
+ var str = "a = +99\nb = 42\nc = 0\nd = -17\ne = 1_000_001\nf = 1_2_3_4_5 # why u do dis";
+ test.parsesToml(str, {
+ a: 99,
+ b: 42,
+ c: 0,
+ d: -17,
+ e: 1000001,
+ f: 12345
+ });
+ test.done();
+};
+
+exports.testFloatFormats = function(test) {
+ var str = "a = +1.0\nb = 3.1415\nc = -0.01\n" +
+ "d = 5e+22\ne = 1e6\nf = -2E-2\n" +
+ "g = 6.626e-34\n" +
+ "h = 9_224_617.445_991_228_313\n" +
+ "i = 1e1_000";
+ test.parsesToml(str, {
+ a: 1.0,
+ b: 3.1415,
+ c: -0.01,
+ d: 5e22,
+ e: 1e6,
+ f: -2e-2,
+ g: 6.626e-34,
+ h: 9224617.445991228313,
+ i: 1e1000
+ });
+ test.done();
+};
+
+exports.testDate = function(test) {
+ var date = new Date("1979-05-27T07:32:00Z");
+ test.parsesToml("a = 1979-05-27T07:32:00Z", {
+ a: date
+ });
+ test.done();
+};
+
+exports.testDateWithOffset = function(test) {
+ var date1 = new Date("1979-05-27T07:32:00-07:00"),
+ date2 = new Date("1979-05-27T07:32:00+02:00");
+ test.parsesToml("a = 1979-05-27T07:32:00-07:00\nb = 1979-05-27T07:32:00+02:00", {
+ a: date1,
+ b: date2
+ });
+ test.done();
+};
+
+exports.testDateWithSecondFraction = function(test) {
+ var date = new Date("1979-05-27T00:32:00.999999-07:00");
+ test.parsesToml("a = 1979-05-27T00:32:00.999999-07:00", {
+ a: date
+ });
+ test.done();
+};
+
+exports.testDateFromIsoString = function(test) {
+ // https://github.com/BinaryMuse/toml-node/issues/20
+ var date = new Date(),
+ dateStr = date.toISOString(),
+ tomlStr = "a = " + dateStr;
+
+ test.parsesToml(tomlStr, {
+ a: date
+ });
+ test.done();
+};
+
+exports.testLeadingNewlines = function(test) {
+ // https://github.com/BinaryMuse/toml-node/issues/22
+ var str = "\ntest = \"ing\"";
+ test.parsesToml(str, {
+ test: "ing"
+ });
+ test.done();
+};
+
+exports.testInlineTables = function(test) {
+ var str = fs.readFileSync(__dirname + "/inline_tables.toml", 'utf8');
+ test.parsesToml(str, {
+ name: {
+ first: "Tom",
+ last: "Preston-Werner"
+ },
+ point: {
+ x: 1,
+ y: 2
+ },
+ nested: {
+ x: {
+ a: {
+ b: 3
+ }
+ }
+ },
+ points: [
+ { x: 1, y: 2, z: 3 },
+ { x: 7, y: 8, z: 9 },
+ { x: 2, y: 4, z: 8 }
+ ],
+ arrays: [
+ { x: [1, 2, 3], y: [4, 5, 6] },
+ { x: [7, 8, 9], y: [0, 1, 2] }
+ ]
+ });
+ test.done();
+};
+
+exports.testEmptyInlineTables = function(test) {
+ // https://github.com/BinaryMuse/toml-node/issues/24
+ var str = "a = { }";
+ test.parsesToml(str, {
+ a: {}
+ });
+ test.done();
+};
+
+exports.testKeyNamesWithWhitespaceAroundStartAndFinish = function(test) {
+ var str = "[ a ]\nb = 1";
+ test.parsesToml(str, {
+ a: {
+ b: 1
+ }
+ });
+ test.done();
+};
+
+exports.testKeyNamesWithWhitespaceAroundDots = function(test) {
+ var str = "[ a . b . c]\nd = 1";
+ test.parsesToml(str, {
+ a: {
+ b: {
+ c: {
+ d: 1
+ }
+ }
+ }
+ });
+ test.done();
+};
+
+exports.testSimpleQuotedKeyNames = function(test) {
+ var str = "[\"ʞ\"]\na = 1";
+ test.parsesToml(str, {
+ "ʞ": {
+ a: 1
+ }
+ });
+ test.done();
+};
+
+exports.testComplexQuotedKeyNames = function(test) {
+ var str = "[ a . \"ʞ\" . c ]\nd = 1";
+ test.parsesToml(str, {
+ a: {
+ "ʞ": {
+ c: {
+ d: 1
+ }
+ }
+ }
+ });
+ test.done();
+};
+
+exports.testEscapedQuotesInQuotedKeyNames = function(test) {
+ test.parsesToml("[\"the \\\"thing\\\"\"]\na = true", {
+ 'the "thing"': {
+ a: true
+ }
+ });
+ test.done();
+};
+
+exports.testMoreComplexQuotedKeyNames = function(test) {
+ // https://github.com/BinaryMuse/toml-node/issues/21
+ test.parsesToml('["the\\ key"]\n\none = "one"\ntwo = 2\nthree = false', {
+ "the\\ key": {
+ one: "one",
+ two: 2,
+ three: false
+ }
+ });
+ test.parsesToml('[a."the\\ key"]\n\none = "one"\ntwo = 2\nthree = false', {
+ a: {
+ "the\\ key": {
+ one: "one",
+ two: 2,
+ three: false
+ }
+ }
+ });
+ test.parsesToml('[a."the-key"]\n\none = "one"\ntwo = 2\nthree = false', {
+ a: {
+ "the-key": {
+ one: "one",
+ two: 2,
+ three: false
+ }
+ }
+ });
+ test.parsesToml('[a."the.key"]\n\none = "one"\ntwo = 2\nthree = false', {
+ a: {
+ "the.key": {
+ one: "one",
+ two: 2,
+ three: false
+ }
+ }
+ });
+ // https://github.com/BinaryMuse/toml-node/issues/34
+ test.parsesToml('[table]\n\'a "quoted value"\' = "value"', {
+ table: {
+ 'a "quoted value"': "value"
+ }
+ });
+ // https://github.com/BinaryMuse/toml-node/issues/33
+ test.parsesToml('[module]\n"foo=bar" = "zzz"', {
+ module: {
+ "foo=bar": "zzz"
+ }
+ });
+
+ test.done();
+};
+
+exports.testErrorOnBadUnicode = function(test) {
+ var str = "str = \"My name is Jos\\uD800\"";
+ test.throws(function() {
+ toml.parse(str);
+ });
+ test.done();
+};
+
+exports.testErrorOnDotAtStartOfKey = function(test) {
+ test.throws(function() {
+ var str = "[.a]\nb = 1";
+ toml.parse(str);
+ });
+ test.done()
+};
+
+exports.testErrorOnDotAtEndOfKey = function(test) {
+ test.throws(function() {
+ var str = "[.a]\nb = 1";
+ toml.parse(str);
+ });
+ test.done()
+};
+
+exports.testErrorOnTableOverride = function(test) {
+ test.throws(function() {
+ var str = "[a]\nb = 1\n\n[a]\nc = 2";
+ toml.parse(str);
+ });
+ test.done()
+};
+
+exports.testErrorOnKeyOverride = function(test) {
+ test.throws(function() {
+ var str = "[a]\nb = 1\n[a.b]\nc = 2";
+ toml.parse(str);
+ });
+ test.done()
+};
+
+exports.testErrorOnKeyOverrideWithNested = function(test) {
+ // https://github.com/BinaryMuse/toml-node/issues/23
+ test.throws(function() {
+ var str = "[a]\nb = \"a\"\n[a.b.c]";
+ toml.parse(str);
+ }, "existing key 'a.b'");
+ test.done();
+};
+
+exports.testErrorOnKeyOverrideWithArrayTable = function(test) {
+ test.throws(function() {
+ var str = "[a]\nb = 1\n[[a]]\nc = 2";
+ toml.parse(str);
+ });
+ test.done()
+};
+
+exports.testErrorOnKeyReplace = function(test) {
+ test.throws(function() {
+ var str = "[a]\nb = 1\nb = 2";
+ toml.parse(str);
+ });
+ test.done()
+};
+
+exports.testErrorOnInlineTableReplace = function(test) {
+ // https://github.com/BinaryMuse/toml-node/issues/25
+ test.throws(function() {
+ var str = "a = { b = 1 }\n[a]\nc = 2";
+ toml.parse(str);
+ }, "existing key 'a'");
+ test.done();
+};
+
+exports.testErrorOnArrayMismatch = function(test) {
+ test.throws(function() {
+ var str = 'data = [1, 2, "test"]'
+ toml.parse(str);
+ });
+ test.done();
+};
+
+exports.testErrorOnBadInputs = function(test) {
+ var count = 0;
+ for (i in badInputs) {
+ (function(num) {
+ test.throws(function() {
+ toml.parse(badInputs[num]);
+ });
+ })(i);
+ }
+ test.done();
+};
+
+exports.testErrorsHaveCorrectLineAndColumn = function(test) {
+ var str = "[a]\nb = 1\n [a.b]\nc = 2";
+ try { toml.parse(str); }
+ catch (e) {
+ test.equal(e.line, 3);
+ test.equal(e.column, 2);
+ test.done();
+ }
+};