123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485 |
- // Generated by CoffeeScript 1.12.4
- var DumpException, Escaper, Inline, ParseException, ParseMore, Pattern, Unescaper, Utils,
- indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
- Pattern = require('./Pattern');
- Unescaper = require('./Unescaper');
- Escaper = require('./Escaper');
- Utils = require('./Utils');
- ParseException = require('./Exception/ParseException');
- ParseMore = require('./Exception/ParseMore');
- DumpException = require('./Exception/DumpException');
- Inline = (function() {
- function Inline() {}
- Inline.REGEX_QUOTED_STRING = '(?:"(?:[^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'(?:[^\']*(?:\'\'[^\']*)*)\')';
- Inline.PATTERN_TRAILING_COMMENTS = new Pattern('^\\s*#.*$');
- Inline.PATTERN_QUOTED_SCALAR = new Pattern('^' + Inline.REGEX_QUOTED_STRING);
- Inline.PATTERN_THOUSAND_NUMERIC_SCALAR = new Pattern('^(-|\\+)?[0-9,]+(\\.[0-9]+)?$');
- Inline.PATTERN_SCALAR_BY_DELIMITERS = {};
- Inline.settings = {};
- Inline.configure = function(exceptionOnInvalidType, objectDecoder) {
- if (exceptionOnInvalidType == null) {
- exceptionOnInvalidType = null;
- }
- if (objectDecoder == null) {
- objectDecoder = null;
- }
- this.settings.exceptionOnInvalidType = exceptionOnInvalidType;
- this.settings.objectDecoder = objectDecoder;
- };
- Inline.parse = function(value, exceptionOnInvalidType, objectDecoder) {
- var context, result;
- if (exceptionOnInvalidType == null) {
- exceptionOnInvalidType = false;
- }
- if (objectDecoder == null) {
- objectDecoder = null;
- }
- this.settings.exceptionOnInvalidType = exceptionOnInvalidType;
- this.settings.objectDecoder = objectDecoder;
- if (value == null) {
- return '';
- }
- value = Utils.trim(value);
- if (0 === value.length) {
- return '';
- }
- context = {
- exceptionOnInvalidType: exceptionOnInvalidType,
- objectDecoder: objectDecoder,
- i: 0
- };
- switch (value.charAt(0)) {
- case '[':
- result = this.parseSequence(value, context);
- ++context.i;
- break;
- case '{':
- result = this.parseMapping(value, context);
- ++context.i;
- break;
- default:
- result = this.parseScalar(value, null, ['"', "'"], context);
- }
- if (this.PATTERN_TRAILING_COMMENTS.replace(value.slice(context.i), '') !== '') {
- throw new ParseException('Unexpected characters near "' + value.slice(context.i) + '".');
- }
- return result;
- };
- Inline.dump = function(value, exceptionOnInvalidType, objectEncoder) {
- var ref, result, type;
- if (exceptionOnInvalidType == null) {
- exceptionOnInvalidType = false;
- }
- if (objectEncoder == null) {
- objectEncoder = null;
- }
- if (value == null) {
- return 'null';
- }
- type = typeof value;
- if (type === 'object') {
- if (value instanceof Date) {
- return value.toISOString();
- } else if (objectEncoder != null) {
- result = objectEncoder(value);
- if (typeof result === 'string' || (result != null)) {
- return result;
- }
- }
- return this.dumpObject(value);
- }
- if (type === 'boolean') {
- return (value ? 'true' : 'false');
- }
- if (Utils.isDigits(value)) {
- return (type === 'string' ? "'" + value + "'" : String(parseInt(value)));
- }
- if (Utils.isNumeric(value)) {
- return (type === 'string' ? "'" + value + "'" : String(parseFloat(value)));
- }
- if (type === 'number') {
- return (value === 2e308 ? '.Inf' : (value === -2e308 ? '-.Inf' : (isNaN(value) ? '.NaN' : value)));
- }
- if (Escaper.requiresDoubleQuoting(value)) {
- return Escaper.escapeWithDoubleQuotes(value);
- }
- if (Escaper.requiresSingleQuoting(value)) {
- return Escaper.escapeWithSingleQuotes(value);
- }
- if ('' === value) {
- return '""';
- }
- if (Utils.PATTERN_DATE.test(value)) {
- return "'" + value + "'";
- }
- if ((ref = value.toLowerCase()) === 'null' || ref === '~' || ref === 'true' || ref === 'false') {
- return "'" + value + "'";
- }
- return value;
- };
- Inline.dumpObject = function(value, exceptionOnInvalidType, objectSupport) {
- var j, key, len1, output, val;
- if (objectSupport == null) {
- objectSupport = null;
- }
- if (value instanceof Array) {
- output = [];
- for (j = 0, len1 = value.length; j < len1; j++) {
- val = value[j];
- output.push(this.dump(val));
- }
- return '[' + output.join(', ') + ']';
- } else {
- output = [];
- for (key in value) {
- val = value[key];
- output.push(this.dump(key) + ': ' + this.dump(val));
- }
- return '{' + output.join(', ') + '}';
- }
- };
- Inline.parseScalar = function(scalar, delimiters, stringDelimiters, context, evaluate) {
- var i, joinedDelimiters, match, output, pattern, ref, ref1, strpos, tmp;
- if (delimiters == null) {
- delimiters = null;
- }
- if (stringDelimiters == null) {
- stringDelimiters = ['"', "'"];
- }
- if (context == null) {
- context = null;
- }
- if (evaluate == null) {
- evaluate = true;
- }
- if (context == null) {
- context = {
- exceptionOnInvalidType: this.settings.exceptionOnInvalidType,
- objectDecoder: this.settings.objectDecoder,
- i: 0
- };
- }
- i = context.i;
- if (ref = scalar.charAt(i), indexOf.call(stringDelimiters, ref) >= 0) {
- output = this.parseQuotedScalar(scalar, context);
- i = context.i;
- if (delimiters != null) {
- tmp = Utils.ltrim(scalar.slice(i), ' ');
- if (!(ref1 = tmp.charAt(0), indexOf.call(delimiters, ref1) >= 0)) {
- throw new ParseException('Unexpected characters (' + scalar.slice(i) + ').');
- }
- }
- } else {
- if (!delimiters) {
- output = scalar.slice(i);
- i += output.length;
- strpos = output.indexOf(' #');
- if (strpos !== -1) {
- output = Utils.rtrim(output.slice(0, strpos));
- }
- } else {
- joinedDelimiters = delimiters.join('|');
- pattern = this.PATTERN_SCALAR_BY_DELIMITERS[joinedDelimiters];
- if (pattern == null) {
- pattern = new Pattern('^(.+?)(' + joinedDelimiters + ')');
- this.PATTERN_SCALAR_BY_DELIMITERS[joinedDelimiters] = pattern;
- }
- if (match = pattern.exec(scalar.slice(i))) {
- output = match[1];
- i += output.length;
- } else {
- throw new ParseException('Malformed inline YAML string (' + scalar + ').');
- }
- }
- if (evaluate) {
- output = this.evaluateScalar(output, context);
- }
- }
- context.i = i;
- return output;
- };
- Inline.parseQuotedScalar = function(scalar, context) {
- var i, match, output;
- i = context.i;
- if (!(match = this.PATTERN_QUOTED_SCALAR.exec(scalar.slice(i)))) {
- throw new ParseMore('Malformed inline YAML string (' + scalar.slice(i) + ').');
- }
- output = match[0].substr(1, match[0].length - 2);
- if ('"' === scalar.charAt(i)) {
- output = Unescaper.unescapeDoubleQuotedString(output);
- } else {
- output = Unescaper.unescapeSingleQuotedString(output);
- }
- i += match[0].length;
- context.i = i;
- return output;
- };
- Inline.parseSequence = function(sequence, context) {
- var e, i, isQuoted, len, output, ref, value;
- output = [];
- len = sequence.length;
- i = context.i;
- i += 1;
- while (i < len) {
- context.i = i;
- switch (sequence.charAt(i)) {
- case '[':
- output.push(this.parseSequence(sequence, context));
- i = context.i;
- break;
- case '{':
- output.push(this.parseMapping(sequence, context));
- i = context.i;
- break;
- case ']':
- return output;
- case ',':
- case ' ':
- case "\n":
- break;
- default:
- isQuoted = ((ref = sequence.charAt(i)) === '"' || ref === "'");
- value = this.parseScalar(sequence, [',', ']'], ['"', "'"], context);
- i = context.i;
- if (!isQuoted && typeof value === 'string' && (value.indexOf(': ') !== -1 || value.indexOf(":\n") !== -1)) {
- try {
- value = this.parseMapping('{' + value + '}');
- } catch (error) {
- e = error;
- }
- }
- output.push(value);
- --i;
- }
- ++i;
- }
- throw new ParseMore('Malformed inline YAML string ' + sequence);
- };
- Inline.parseMapping = function(mapping, context) {
- var done, i, key, len, output, shouldContinueWhileLoop, value;
- output = {};
- len = mapping.length;
- i = context.i;
- i += 1;
- shouldContinueWhileLoop = false;
- while (i < len) {
- context.i = i;
- switch (mapping.charAt(i)) {
- case ' ':
- case ',':
- case "\n":
- ++i;
- context.i = i;
- shouldContinueWhileLoop = true;
- break;
- case '}':
- return output;
- }
- if (shouldContinueWhileLoop) {
- shouldContinueWhileLoop = false;
- continue;
- }
- key = this.parseScalar(mapping, [':', ' ', "\n"], ['"', "'"], context, false);
- i = context.i;
- done = false;
- while (i < len) {
- context.i = i;
- switch (mapping.charAt(i)) {
- case '[':
- value = this.parseSequence(mapping, context);
- i = context.i;
- if (output[key] === void 0) {
- output[key] = value;
- }
- done = true;
- break;
- case '{':
- value = this.parseMapping(mapping, context);
- i = context.i;
- if (output[key] === void 0) {
- output[key] = value;
- }
- done = true;
- break;
- case ':':
- case ' ':
- case "\n":
- break;
- default:
- value = this.parseScalar(mapping, [',', '}'], ['"', "'"], context);
- i = context.i;
- if (output[key] === void 0) {
- output[key] = value;
- }
- done = true;
- --i;
- }
- ++i;
- if (done) {
- break;
- }
- }
- }
- throw new ParseMore('Malformed inline YAML string ' + mapping);
- };
- Inline.evaluateScalar = function(scalar, context) {
- var cast, date, exceptionOnInvalidType, firstChar, firstSpace, firstWord, objectDecoder, raw, scalarLower, subValue, trimmedScalar;
- scalar = Utils.trim(scalar);
- scalarLower = scalar.toLowerCase();
- switch (scalarLower) {
- case 'null':
- case '':
- case '~':
- return null;
- case 'true':
- return true;
- case 'false':
- return false;
- case '.inf':
- return 2e308;
- case '.nan':
- return 0/0;
- case '-.inf':
- return 2e308;
- default:
- firstChar = scalarLower.charAt(0);
- switch (firstChar) {
- case '!':
- firstSpace = scalar.indexOf(' ');
- if (firstSpace === -1) {
- firstWord = scalarLower;
- } else {
- firstWord = scalarLower.slice(0, firstSpace);
- }
- switch (firstWord) {
- case '!':
- if (firstSpace !== -1) {
- return parseInt(this.parseScalar(scalar.slice(2)));
- }
- return null;
- case '!str':
- return Utils.ltrim(scalar.slice(4));
- case '!!str':
- return Utils.ltrim(scalar.slice(5));
- case '!!int':
- return parseInt(this.parseScalar(scalar.slice(5)));
- case '!!bool':
- return Utils.parseBoolean(this.parseScalar(scalar.slice(6)), false);
- case '!!float':
- return parseFloat(this.parseScalar(scalar.slice(7)));
- case '!!timestamp':
- return Utils.stringToDate(Utils.ltrim(scalar.slice(11)));
- default:
- if (context == null) {
- context = {
- exceptionOnInvalidType: this.settings.exceptionOnInvalidType,
- objectDecoder: this.settings.objectDecoder,
- i: 0
- };
- }
- objectDecoder = context.objectDecoder, exceptionOnInvalidType = context.exceptionOnInvalidType;
- if (objectDecoder) {
- trimmedScalar = Utils.rtrim(scalar);
- firstSpace = trimmedScalar.indexOf(' ');
- if (firstSpace === -1) {
- return objectDecoder(trimmedScalar, null);
- } else {
- subValue = Utils.ltrim(trimmedScalar.slice(firstSpace + 1));
- if (!(subValue.length > 0)) {
- subValue = null;
- }
- return objectDecoder(trimmedScalar.slice(0, firstSpace), subValue);
- }
- }
- if (exceptionOnInvalidType) {
- throw new ParseException('Custom object support when parsing a YAML file has been disabled.');
- }
- return null;
- }
- break;
- case '0':
- if ('0x' === scalar.slice(0, 2)) {
- return Utils.hexDec(scalar);
- } else if (Utils.isDigits(scalar)) {
- return Utils.octDec(scalar);
- } else if (Utils.isNumeric(scalar)) {
- return parseFloat(scalar);
- } else {
- return scalar;
- }
- break;
- case '+':
- if (Utils.isDigits(scalar)) {
- raw = scalar;
- cast = parseInt(raw);
- if (raw === String(cast)) {
- return cast;
- } else {
- return raw;
- }
- } else if (Utils.isNumeric(scalar)) {
- return parseFloat(scalar);
- } else if (this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(scalar)) {
- return parseFloat(scalar.replace(',', ''));
- }
- return scalar;
- case '-':
- if (Utils.isDigits(scalar.slice(1))) {
- if ('0' === scalar.charAt(1)) {
- return -Utils.octDec(scalar.slice(1));
- } else {
- raw = scalar.slice(1);
- cast = parseInt(raw);
- if (raw === String(cast)) {
- return -cast;
- } else {
- return -raw;
- }
- }
- } else if (Utils.isNumeric(scalar)) {
- return parseFloat(scalar);
- } else if (this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(scalar)) {
- return parseFloat(scalar.replace(',', ''));
- }
- return scalar;
- default:
- if (date = Utils.stringToDate(scalar)) {
- return date;
- } else if (Utils.isNumeric(scalar)) {
- return parseFloat(scalar);
- } else if (this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(scalar)) {
- return parseFloat(scalar.replace(',', ''));
- }
- return scalar;
- }
- }
- };
- return Inline;
- })();
- module.exports = Inline;
|