3353 lines
167 KiB
JavaScript
3353 lines
167 KiB
JavaScript
|
(function() {
|
|||
|
var root = this, modules, require_from, register, error;
|
|||
|
if (typeof global == "undefined") {
|
|||
|
var global;
|
|||
|
if (typeof window != "undefined") {
|
|||
|
global = window;
|
|||
|
} else {
|
|||
|
global = {};
|
|||
|
}
|
|||
|
}
|
|||
|
modules = {};
|
|||
|
require_from = function(parent, from) {
|
|||
|
return function(name) {
|
|||
|
if (modules[from] && modules[from][name]) {
|
|||
|
modules[from][name].parent = parent;
|
|||
|
if (modules[from][name].initialize) {
|
|||
|
modules[from][name].initialize();
|
|||
|
}
|
|||
|
return modules[from][name].exports;
|
|||
|
} else {
|
|||
|
return error(name, from);
|
|||
|
}
|
|||
|
};
|
|||
|
};
|
|||
|
register = function(names, directory, callback) {
|
|||
|
var module = {
|
|||
|
exports: {},
|
|||
|
initialize: function() {
|
|||
|
callback.call(module.exports, global, module, module.exports, require_from(module, directory), undefined);
|
|||
|
delete module.initialize;
|
|||
|
},
|
|||
|
parent: null
|
|||
|
};
|
|||
|
for (var from in names) {
|
|||
|
modules[from] = modules[from] || {};
|
|||
|
for (var j in names[from]) {
|
|||
|
var name = names[from][j];
|
|||
|
modules[from][name] = module;
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
error = function anonymous(name, from) {
|
|||
|
var message = "Warn: could not find module " + name;
|
|||
|
console.log(message);
|
|||
|
};
|
|||
|
register({
|
|||
|
"0": [ "./events" ]
|
|||
|
}, 0, function(global, module, exports, require, window) {
|
|||
|
(function() {
|
|||
|
var _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) {
|
|||
|
for (var key in parent) {
|
|||
|
if (__hasProp.call(parent, key)) child[key] = parent[key];
|
|||
|
}
|
|||
|
function ctor() {
|
|||
|
this.constructor = child;
|
|||
|
}
|
|||
|
ctor.prototype = parent.prototype;
|
|||
|
child.prototype = new ctor;
|
|||
|
child.__super__ = parent.prototype;
|
|||
|
return child;
|
|||
|
};
|
|||
|
this.Event = function() {
|
|||
|
function Event(start_mark, end_mark) {
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
}
|
|||
|
return Event;
|
|||
|
}();
|
|||
|
this.NodeEvent = function(_super) {
|
|||
|
__extends(NodeEvent, _super);
|
|||
|
function NodeEvent(anchor, start_mark, end_mark) {
|
|||
|
this.anchor = anchor;
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
}
|
|||
|
return NodeEvent;
|
|||
|
}(this.Event);
|
|||
|
this.CollectionStartEvent = function(_super) {
|
|||
|
__extends(CollectionStartEvent, _super);
|
|||
|
function CollectionStartEvent(anchor, tag, implicit, start_mark, end_mark) {
|
|||
|
this.anchor = anchor;
|
|||
|
this.tag = tag;
|
|||
|
this.implicit = implicit;
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
}
|
|||
|
return CollectionStartEvent;
|
|||
|
}(this.NodeEvent);
|
|||
|
this.CollectionEndEvent = function(_super) {
|
|||
|
__extends(CollectionEndEvent, _super);
|
|||
|
function CollectionEndEvent() {
|
|||
|
_ref = CollectionEndEvent.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref;
|
|||
|
}
|
|||
|
return CollectionEndEvent;
|
|||
|
}(this.Event);
|
|||
|
this.StreamStartEvent = function(_super) {
|
|||
|
__extends(StreamStartEvent, _super);
|
|||
|
function StreamStartEvent(start_mark, end_mark, explicit, version, tags) {
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
this.explicit = explicit;
|
|||
|
this.version = version;
|
|||
|
this.tags = tags;
|
|||
|
}
|
|||
|
return StreamStartEvent;
|
|||
|
}(this.Event);
|
|||
|
this.StreamEndEvent = function(_super) {
|
|||
|
__extends(StreamEndEvent, _super);
|
|||
|
function StreamEndEvent() {
|
|||
|
_ref1 = StreamEndEvent.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref1;
|
|||
|
}
|
|||
|
return StreamEndEvent;
|
|||
|
}(this.Event);
|
|||
|
this.DocumentStartEvent = function(_super) {
|
|||
|
__extends(DocumentStartEvent, _super);
|
|||
|
function DocumentStartEvent(start_mark, end_mark, explicit, version, tags) {
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
this.explicit = explicit;
|
|||
|
this.version = version;
|
|||
|
this.tags = tags;
|
|||
|
}
|
|||
|
return DocumentStartEvent;
|
|||
|
}(this.Event);
|
|||
|
this.DocumentEndEvent = function(_super) {
|
|||
|
__extends(DocumentEndEvent, _super);
|
|||
|
function DocumentEndEvent(start_mark, end_mark, explicit) {
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
this.explicit = explicit;
|
|||
|
}
|
|||
|
return DocumentEndEvent;
|
|||
|
}(this.Event);
|
|||
|
this.AliasEvent = function(_super) {
|
|||
|
__extends(AliasEvent, _super);
|
|||
|
function AliasEvent() {
|
|||
|
_ref2 = AliasEvent.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref2;
|
|||
|
}
|
|||
|
return AliasEvent;
|
|||
|
}(this.NodeEvent);
|
|||
|
this.ScalarEvent = function(_super) {
|
|||
|
__extends(ScalarEvent, _super);
|
|||
|
function ScalarEvent(anchor, tag, implicit, value, start_mark, end_mark, style) {
|
|||
|
this.anchor = anchor;
|
|||
|
this.tag = tag;
|
|||
|
this.implicit = implicit;
|
|||
|
this.value = value;
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
this.style = style;
|
|||
|
}
|
|||
|
return ScalarEvent;
|
|||
|
}(this.NodeEvent);
|
|||
|
this.SequenceStartEvent = function(_super) {
|
|||
|
__extends(SequenceStartEvent, _super);
|
|||
|
function SequenceStartEvent() {
|
|||
|
_ref3 = SequenceStartEvent.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref3;
|
|||
|
}
|
|||
|
return SequenceStartEvent;
|
|||
|
}(this.CollectionStartEvent);
|
|||
|
this.SequenceEndEvent = function(_super) {
|
|||
|
__extends(SequenceEndEvent, _super);
|
|||
|
function SequenceEndEvent() {
|
|||
|
_ref4 = SequenceEndEvent.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref4;
|
|||
|
}
|
|||
|
return SequenceEndEvent;
|
|||
|
}(this.CollectionEndEvent);
|
|||
|
this.MappingStartEvent = function(_super) {
|
|||
|
__extends(MappingStartEvent, _super);
|
|||
|
function MappingStartEvent() {
|
|||
|
_ref5 = MappingStartEvent.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref5;
|
|||
|
}
|
|||
|
return MappingStartEvent;
|
|||
|
}(this.CollectionStartEvent);
|
|||
|
this.MappingEndEvent = function(_super) {
|
|||
|
__extends(MappingEndEvent, _super);
|
|||
|
function MappingEndEvent() {
|
|||
|
_ref6 = MappingEndEvent.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref6;
|
|||
|
}
|
|||
|
return MappingEndEvent;
|
|||
|
}(this.CollectionEndEvent);
|
|||
|
}).call(this);
|
|||
|
});
|
|||
|
register({
|
|||
|
"0": [ "./errors" ]
|
|||
|
}, 0, function(global, module, exports, require, window) {
|
|||
|
(function() {
|
|||
|
var __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;
|
|||
|
}, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) {
|
|||
|
for (var key in parent) {
|
|||
|
if (__hasProp.call(parent, key)) child[key] = parent[key];
|
|||
|
}
|
|||
|
function ctor() {
|
|||
|
this.constructor = child;
|
|||
|
}
|
|||
|
ctor.prototype = parent.prototype;
|
|||
|
child.prototype = new ctor;
|
|||
|
child.__super__ = parent.prototype;
|
|||
|
return child;
|
|||
|
};
|
|||
|
this.Mark = function() {
|
|||
|
function Mark(name, line, column, buffer, pointer) {
|
|||
|
this.name = name;
|
|||
|
this.line = line;
|
|||
|
this.column = column;
|
|||
|
this.buffer = buffer;
|
|||
|
this.pointer = pointer;
|
|||
|
}
|
|||
|
Mark.prototype.get_snippet = function(indent, max_length) {
|
|||
|
var break_chars, end, head, start, tail, _ref, _ref1;
|
|||
|
if (indent == null) {
|
|||
|
indent = 4;
|
|||
|
}
|
|||
|
if (max_length == null) {
|
|||
|
max_length = 75;
|
|||
|
}
|
|||
|
if (this.buffer == null) {
|
|||
|
return null;
|
|||
|
}
|
|||
|
break_chars = "\0\r\n
\u2028\u2029";
|
|||
|
head = "";
|
|||
|
start = this.pointer;
|
|||
|
while (start > 0 && (_ref = this.buffer[start - 1], __indexOf.call(break_chars, _ref) < 0)) {
|
|||
|
start--;
|
|||
|
if (this.pointer - start > max_length / 2 - 1) {
|
|||
|
head = " ... ";
|
|||
|
start += 5;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
tail = "";
|
|||
|
end = this.pointer;
|
|||
|
while (end < this.buffer.length && (_ref1 = this.buffer[end], __indexOf.call(break_chars, _ref1) < 0)) {
|
|||
|
end++;
|
|||
|
if (end - this.pointer > max_length / 2 - 1) {
|
|||
|
tail = " ... ";
|
|||
|
end -= 5;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
return "" + (new Array(indent)).join(" ") + head + this.buffer.slice(start, end) + tail + "\n" + (new Array(indent + this.pointer - start + head.length)).join(" ") + "^";
|
|||
|
};
|
|||
|
Mark.prototype.toString = function() {
|
|||
|
var snippet, where;
|
|||
|
snippet = this.get_snippet();
|
|||
|
where = ' in "' + this.name + '", line ' + (this.line + 1) + ", column " + (this.column + 1);
|
|||
|
if (snippet) {
|
|||
|
return where;
|
|||
|
} else {
|
|||
|
return "" + where + ":\n" + snippet;
|
|||
|
}
|
|||
|
};
|
|||
|
return Mark;
|
|||
|
}();
|
|||
|
this.YAMLError = function(_super) {
|
|||
|
__extends(YAMLError, _super);
|
|||
|
function YAMLError() {
|
|||
|
YAMLError.__super__.constructor.call(this);
|
|||
|
this.stack = this.toString() + "\n" + (new Error).stack.split("\n").slice(1).join("\n");
|
|||
|
}
|
|||
|
return YAMLError;
|
|||
|
}(Error);
|
|||
|
this.MarkedYAMLError = function(_super) {
|
|||
|
__extends(MarkedYAMLError, _super);
|
|||
|
function MarkedYAMLError(context, context_mark, problem, problem_mark, note) {
|
|||
|
this.context = context;
|
|||
|
this.context_mark = context_mark;
|
|||
|
this.problem = problem;
|
|||
|
this.problem_mark = problem_mark;
|
|||
|
this.note = note;
|
|||
|
MarkedYAMLError.__super__.constructor.call(this);
|
|||
|
}
|
|||
|
MarkedYAMLError.prototype.toString = function() {
|
|||
|
var lines;
|
|||
|
lines = [];
|
|||
|
if (this.context != null) {
|
|||
|
lines.push(this.context);
|
|||
|
}
|
|||
|
if (this.context_mark != null && (this.problem == null || this.problem_mark == null || this.context_mark.name !== this.problem_mark.name || this.context_mark.line !== this.problem_mark.line || this.context_mark.column !== this.problem_mark.column)) {
|
|||
|
lines.push(this.context_mark.toString());
|
|||
|
}
|
|||
|
if (this.problem != null) {
|
|||
|
lines.push(this.problem);
|
|||
|
}
|
|||
|
if (this.problem_mark != null) {
|
|||
|
lines.push(this.problem_mark.toString());
|
|||
|
}
|
|||
|
if (this.note != null) {
|
|||
|
lines.push(this.note);
|
|||
|
}
|
|||
|
return lines.join("\n");
|
|||
|
};
|
|||
|
return MarkedYAMLError;
|
|||
|
}(this.YAMLError);
|
|||
|
}).call(this);
|
|||
|
});
|
|||
|
register({
|
|||
|
"0": [ "./nodes" ]
|
|||
|
}, 0, function(global, module, exports, require, window) {
|
|||
|
(function() {
|
|||
|
var unique_id, _ref, _ref1, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) {
|
|||
|
for (var key in parent) {
|
|||
|
if (__hasProp.call(parent, key)) child[key] = parent[key];
|
|||
|
}
|
|||
|
function ctor() {
|
|||
|
this.constructor = child;
|
|||
|
}
|
|||
|
ctor.prototype = parent.prototype;
|
|||
|
child.prototype = new ctor;
|
|||
|
child.__super__ = parent.prototype;
|
|||
|
return child;
|
|||
|
};
|
|||
|
unique_id = 0;
|
|||
|
this.Node = function() {
|
|||
|
function Node(tag, value, start_mark, end_mark) {
|
|||
|
this.tag = tag;
|
|||
|
this.value = value;
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
this.unique_id = "node_" + unique_id++;
|
|||
|
}
|
|||
|
return Node;
|
|||
|
}();
|
|||
|
this.ScalarNode = function(_super) {
|
|||
|
__extends(ScalarNode, _super);
|
|||
|
ScalarNode.prototype.id = "scalar";
|
|||
|
function ScalarNode(tag, value, start_mark, end_mark, style) {
|
|||
|
this.tag = tag;
|
|||
|
this.value = value;
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
this.style = style;
|
|||
|
ScalarNode.__super__.constructor.apply(this, arguments);
|
|||
|
}
|
|||
|
return ScalarNode;
|
|||
|
}(this.Node);
|
|||
|
this.CollectionNode = function(_super) {
|
|||
|
__extends(CollectionNode, _super);
|
|||
|
function CollectionNode(tag, value, start_mark, end_mark, flow_style) {
|
|||
|
this.tag = tag;
|
|||
|
this.value = value;
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
this.flow_style = flow_style;
|
|||
|
CollectionNode.__super__.constructor.apply(this, arguments);
|
|||
|
}
|
|||
|
return CollectionNode;
|
|||
|
}(this.Node);
|
|||
|
this.SequenceNode = function(_super) {
|
|||
|
__extends(SequenceNode, _super);
|
|||
|
function SequenceNode() {
|
|||
|
_ref = SequenceNode.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref;
|
|||
|
}
|
|||
|
SequenceNode.prototype.id = "sequence";
|
|||
|
return SequenceNode;
|
|||
|
}(this.CollectionNode);
|
|||
|
this.MappingNode = function(_super) {
|
|||
|
__extends(MappingNode, _super);
|
|||
|
function MappingNode() {
|
|||
|
_ref1 = MappingNode.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref1;
|
|||
|
}
|
|||
|
MappingNode.prototype.id = "mapping";
|
|||
|
return MappingNode;
|
|||
|
}(this.CollectionNode);
|
|||
|
}).call(this);
|
|||
|
});
|
|||
|
register({
|
|||
|
"0": [ "./composer" ]
|
|||
|
}, 0, function(global, module, exports, require, window) {
|
|||
|
(function() {
|
|||
|
var MarkedYAMLError, events, nodes, _ref, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) {
|
|||
|
for (var key in parent) {
|
|||
|
if (__hasProp.call(parent, key)) child[key] = parent[key];
|
|||
|
}
|
|||
|
function ctor() {
|
|||
|
this.constructor = child;
|
|||
|
}
|
|||
|
ctor.prototype = parent.prototype;
|
|||
|
child.prototype = new ctor;
|
|||
|
child.__super__ = parent.prototype;
|
|||
|
return child;
|
|||
|
};
|
|||
|
events = require("./events");
|
|||
|
MarkedYAMLError = require("./errors").MarkedYAMLError;
|
|||
|
nodes = require("./nodes");
|
|||
|
this.ComposerError = function(_super) {
|
|||
|
__extends(ComposerError, _super);
|
|||
|
function ComposerError() {
|
|||
|
_ref = ComposerError.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref;
|
|||
|
}
|
|||
|
return ComposerError;
|
|||
|
}(MarkedYAMLError);
|
|||
|
this.Composer = function() {
|
|||
|
function Composer() {
|
|||
|
this.anchors = {};
|
|||
|
}
|
|||
|
Composer.prototype.check_node = function() {
|
|||
|
if (this.check_event(events.StreamStartEvent)) {
|
|||
|
this.get_event();
|
|||
|
}
|
|||
|
return !this.check_event(events.StreamEndEvent);
|
|||
|
};
|
|||
|
Composer.prototype.get_node = function() {
|
|||
|
if (!this.check_event(events.StreamEndEvent)) {
|
|||
|
return this.compose_document();
|
|||
|
}
|
|||
|
};
|
|||
|
Composer.prototype.get_single_node = function() {
|
|||
|
var document, event;
|
|||
|
this.get_event();
|
|||
|
document = null;
|
|||
|
if (!this.check_event(events.StreamEndEvent)) {
|
|||
|
document = this.compose_document();
|
|||
|
}
|
|||
|
if (!this.check_event(events.StreamEndEvent)) {
|
|||
|
event = this.get_event();
|
|||
|
throw new exports.ComposerError("expected a single document in the stream", document.start_mark, "but found another document", event.start_mark);
|
|||
|
}
|
|||
|
this.get_event();
|
|||
|
return document;
|
|||
|
};
|
|||
|
Composer.prototype.compose_document = function() {
|
|||
|
var node;
|
|||
|
this.get_event();
|
|||
|
node = this.compose_node();
|
|||
|
this.get_event();
|
|||
|
this.anchors = {};
|
|||
|
return node;
|
|||
|
};
|
|||
|
Composer.prototype.compose_node = function(parent, index) {
|
|||
|
var anchor, event, node;
|
|||
|
if (this.check_event(events.AliasEvent)) {
|
|||
|
event = this.get_event();
|
|||
|
anchor = event.anchor;
|
|||
|
if (!(anchor in this.anchors)) {
|
|||
|
throw new exports.ComposerError(null, null, "found undefined alias " + anchor, event.start_mark);
|
|||
|
}
|
|||
|
return this.anchors[anchor];
|
|||
|
}
|
|||
|
event = this.peek_event();
|
|||
|
anchor = event.anchor;
|
|||
|
if (anchor !== null && anchor in this.anchors) {
|
|||
|
throw new exports.ComposerError("found duplicate anchor " + anchor + "; first occurence", this.anchors[anchor].start_mark, "second occurrence", event.start_mark);
|
|||
|
}
|
|||
|
this.descend_resolver(parent, index);
|
|||
|
if (this.check_event(events.ScalarEvent)) {
|
|||
|
node = this.compose_scalar_node(anchor);
|
|||
|
} else if (this.check_event(events.SequenceStartEvent)) {
|
|||
|
node = this.compose_sequence_node(anchor);
|
|||
|
} else if (this.check_event(events.MappingStartEvent)) {
|
|||
|
node = this.compose_mapping_node(anchor);
|
|||
|
}
|
|||
|
this.ascend_resolver();
|
|||
|
return node;
|
|||
|
};
|
|||
|
Composer.prototype.compose_scalar_node = function(anchor) {
|
|||
|
var event, node, tag;
|
|||
|
event = this.get_event();
|
|||
|
tag = event.tag;
|
|||
|
if (tag === null || tag === "!") {
|
|||
|
tag = this.resolve(nodes.ScalarNode, event.value, event.implicit);
|
|||
|
}
|
|||
|
node = new nodes.ScalarNode(tag, event.value, event.start_mark, event.end_mark, event.style);
|
|||
|
if (anchor !== null) {
|
|||
|
this.anchors[anchor] = node;
|
|||
|
}
|
|||
|
return node;
|
|||
|
};
|
|||
|
Composer.prototype.compose_sequence_node = function(anchor) {
|
|||
|
var end_event, index, node, start_event, tag;
|
|||
|
start_event = this.get_event();
|
|||
|
tag = start_event.tag;
|
|||
|
if (tag === null || tag === "!") {
|
|||
|
tag = this.resolve(nodes.SequenceNode, null, start_event.implicit);
|
|||
|
}
|
|||
|
node = new nodes.SequenceNode(tag, [], start_event.start_mark, null, start_event.flow_style);
|
|||
|
if (anchor !== null) {
|
|||
|
this.anchors[anchor] = node;
|
|||
|
}
|
|||
|
index = 0;
|
|||
|
while (!this.check_event(events.SequenceEndEvent)) {
|
|||
|
node.value.push(this.compose_node(node, index));
|
|||
|
index++;
|
|||
|
}
|
|||
|
end_event = this.get_event();
|
|||
|
node.end_mark = end_event.end_mark;
|
|||
|
return node;
|
|||
|
};
|
|||
|
Composer.prototype.compose_mapping_node = function(anchor) {
|
|||
|
var end_event, item_key, item_value, node, start_event, tag;
|
|||
|
start_event = this.get_event();
|
|||
|
tag = start_event.tag;
|
|||
|
if (tag === null || tag === "!") {
|
|||
|
tag = this.resolve(nodes.MappingNode, null, start_event.implicit);
|
|||
|
}
|
|||
|
node = new nodes.MappingNode(tag, [], start_event.start_mark, null, start_event.flow_style);
|
|||
|
if (anchor !== null) {
|
|||
|
this.anchors[anchor] = node;
|
|||
|
}
|
|||
|
while (!this.check_event(events.MappingEndEvent)) {
|
|||
|
item_key = this.compose_node(node);
|
|||
|
item_value = this.compose_node(node, item_key);
|
|||
|
node.value.push([ item_key, item_value ]);
|
|||
|
}
|
|||
|
end_event = this.get_event();
|
|||
|
node.end_mark = end_event.end_mark;
|
|||
|
return node;
|
|||
|
};
|
|||
|
return Composer;
|
|||
|
}();
|
|||
|
}).call(this);
|
|||
|
});
|
|||
|
register({
|
|||
|
"0": [ "./util" ]
|
|||
|
}, 0, function(global, module, exports, require, window) {
|
|||
|
(function() {
|
|||
|
var __slice = [].slice, __hasProp = {}.hasOwnProperty;
|
|||
|
this.extend = function() {
|
|||
|
var destination, k, source, sources, v, _i, _len;
|
|||
|
destination = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
|||
|
for (_i = 0, _len = sources.length; _i < _len; _i++) {
|
|||
|
source = sources[_i];
|
|||
|
for (k in source) {
|
|||
|
v = source[k];
|
|||
|
destination[k] = v;
|
|||
|
}
|
|||
|
}
|
|||
|
return destination;
|
|||
|
};
|
|||
|
this.is_empty = function(obj) {
|
|||
|
var key;
|
|||
|
if (Array.isArray(obj) || typeof obj === "string") {
|
|||
|
return obj.length === 0;
|
|||
|
}
|
|||
|
for (key in obj) {
|
|||
|
if (!__hasProp.call(obj, key)) continue;
|
|||
|
return false;
|
|||
|
}
|
|||
|
return true;
|
|||
|
};
|
|||
|
}).call(this);
|
|||
|
});
|
|||
|
register({
|
|||
|
"0": [ "./constructor" ]
|
|||
|
}, 0, function(global, module, exports, require, window) {
|
|||
|
(function() {
|
|||
|
var MarkedYAMLError, nodes, util, _ref, _ref1, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) {
|
|||
|
for (var key in parent) {
|
|||
|
if (__hasProp.call(parent, key)) child[key] = parent[key];
|
|||
|
}
|
|||
|
function ctor() {
|
|||
|
this.constructor = child;
|
|||
|
}
|
|||
|
ctor.prototype = parent.prototype;
|
|||
|
child.prototype = new ctor;
|
|||
|
child.__super__ = parent.prototype;
|
|||
|
return child;
|
|||
|
}, __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;
|
|||
|
};
|
|||
|
MarkedYAMLError = require("./errors").MarkedYAMLError;
|
|||
|
nodes = require("./nodes");
|
|||
|
util = require("./util");
|
|||
|
this.ConstructorError = function(_super) {
|
|||
|
__extends(ConstructorError, _super);
|
|||
|
function ConstructorError() {
|
|||
|
_ref = ConstructorError.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref;
|
|||
|
}
|
|||
|
return ConstructorError;
|
|||
|
}(MarkedYAMLError);
|
|||
|
this.BaseConstructor = function() {
|
|||
|
BaseConstructor.prototype.yaml_constructors = {};
|
|||
|
BaseConstructor.prototype.yaml_multi_constructors = {};
|
|||
|
BaseConstructor.add_constructor = function(tag, constructor) {
|
|||
|
if (!this.prototype.hasOwnProperty("yaml_constructors")) {
|
|||
|
this.prototype.yaml_constructors = util.extend({}, this.prototype.yaml_constructors);
|
|||
|
}
|
|||
|
return this.prototype.yaml_constructors[tag] = constructor;
|
|||
|
};
|
|||
|
BaseConstructor.add_multi_constructor = function(tag_prefix, multi_constructor) {
|
|||
|
if (!this.prototype.hasOwnProperty("yaml_multi_constructors")) {
|
|||
|
this.prototype.yaml_multi_constructors = util.extend({}, this.prototype.yaml_multi_constructors);
|
|||
|
}
|
|||
|
return this.prototype.yaml_multi_constructors[tag_prefix] = multi_constructor;
|
|||
|
};
|
|||
|
function BaseConstructor() {
|
|||
|
this.constructed_objects = {};
|
|||
|
this.constructing_nodes = [];
|
|||
|
this.deferred_constructors = [];
|
|||
|
}
|
|||
|
BaseConstructor.prototype.check_data = function() {
|
|||
|
return this.check_node();
|
|||
|
};
|
|||
|
BaseConstructor.prototype.get_data = function() {
|
|||
|
if (this.check_node()) {
|
|||
|
return this.construct_document(this.get_node());
|
|||
|
}
|
|||
|
};
|
|||
|
BaseConstructor.prototype.get_single_data = function() {
|
|||
|
var node;
|
|||
|
node = this.get_single_node();
|
|||
|
if (node != null) {
|
|||
|
return this.construct_document(node);
|
|||
|
}
|
|||
|
return null;
|
|||
|
};
|
|||
|
BaseConstructor.prototype.construct_document = function(node) {
|
|||
|
var data;
|
|||
|
data = this.construct_object(node);
|
|||
|
while (!util.is_empty(this.deferred_constructors)) {
|
|||
|
this.deferred_constructors.pop()();
|
|||
|
}
|
|||
|
return data;
|
|||
|
};
|
|||
|
BaseConstructor.prototype.defer = function(f) {
|
|||
|
return this.deferred_constructors.push(f);
|
|||
|
};
|
|||
|
BaseConstructor.prototype.construct_object = function(node) {
|
|||
|
var constructor, object, tag_prefix, tag_suffix, _ref1;
|
|||
|
if (node.unique_id in this.constructed_objects) {
|
|||
|
return this.constructed_objects[node.unique_id];
|
|||
|
}
|
|||
|
if (_ref1 = node.unique_id, __indexOf.call(this.constructing_nodes, _ref1) >= 0) {
|
|||
|
throw new exports.ConstructorError(null, null, "found unconstructable recursive node", node.start_mark);
|
|||
|
}
|
|||
|
this.constructing_nodes.push(node.unique_id);
|
|||
|
constructor = null;
|
|||
|
tag_suffix = null;
|
|||
|
if (node.tag in this.yaml_constructors) {
|
|||
|
constructor = this.yaml_constructors[node.tag];
|
|||
|
} else {
|
|||
|
for (tag_prefix in this.yaml_multi_constructors) {
|
|||
|
if (node.tag.indexOf(tag_prefix === 0)) {
|
|||
|
tag_suffix = node.tag.slice(tag_prefix.length);
|
|||
|
constructor = this.yaml_multi_constructors[tag_prefix];
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
if (constructor == null) {
|
|||
|
if (null in this.yaml_multi_constructors) {
|
|||
|
tag_suffix = node.tag;
|
|||
|
constructor = this.yaml_multi_constructors[null];
|
|||
|
} else if (null in this.yaml_constructors) {
|
|||
|
constructor = this.yaml_constructors[null];
|
|||
|
} else if (node instanceof nodes.ScalarNode) {
|
|||
|
constructor = this.construct_scalar;
|
|||
|
} else if (node instanceof nodes.SequenceNode) {
|
|||
|
constructor = this.construct_sequence;
|
|||
|
} else if (node instanceof nodes.MappingNode) {
|
|||
|
constructor = this.construct_mapping;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
object = constructor.call(this, tag_suffix != null ? tag_suffix : node, node);
|
|||
|
this.constructed_objects[node.unique_id] = object;
|
|||
|
this.constructing_nodes.pop();
|
|||
|
return object;
|
|||
|
};
|
|||
|
BaseConstructor.prototype.construct_scalar = function(node) {
|
|||
|
if (!(node instanceof nodes.ScalarNode)) {
|
|||
|
throw new exports.ConstructorError(null, null, "expected a scalar node but found " + node.id, node.start_mark);
|
|||
|
}
|
|||
|
return node.value;
|
|||
|
};
|
|||
|
BaseConstructor.prototype.construct_sequence = function(node) {
|
|||
|
var child, _i, _len, _ref1, _results;
|
|||
|
if (!(node instanceof nodes.SequenceNode)) {
|
|||
|
throw new exports.ConstructorError(null, null, "expected a sequence node but found " + node.id, node.start_mark);
|
|||
|
}
|
|||
|
_ref1 = node.value;
|
|||
|
_results = [];
|
|||
|
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
|||
|
child = _ref1[_i];
|
|||
|
_results.push(this.construct_object(child));
|
|||
|
}
|
|||
|
return _results;
|
|||
|
};
|
|||
|
BaseConstructor.prototype.construct_mapping = function(node) {
|
|||
|
var key, key_node, mapping, value, value_node, _i, _len, _ref1, _ref2;
|
|||
|
if (!(node instanceof nodes.MappingNode)) {
|
|||
|
throw new ConstructorError(null, null, "expected a mapping node but found " + node.id, node.start_mark);
|
|||
|
}
|
|||
|
mapping = {};
|
|||
|
_ref1 = node.value;
|
|||
|
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
|||
|
_ref2 = _ref1[_i], key_node = _ref2[0], value_node = _ref2[1];
|
|||
|
key = this.construct_object(key_node);
|
|||
|
if (typeof key === "object") {
|
|||
|
throw new exports.ConstructorError("while constructing a mapping", node.start_mark, "found unhashable key", key_node.start_mark);
|
|||
|
}
|
|||
|
value = this.construct_object(value_node);
|
|||
|
mapping[key] = value;
|
|||
|
}
|
|||
|
return mapping;
|
|||
|
};
|
|||
|
BaseConstructor.prototype.construct_pairs = function(node) {
|
|||
|
var key, key_node, pairs, value, value_node, _i, _len, _ref1, _ref2;
|
|||
|
if (!(node instanceof nodes.MappingNode)) {
|
|||
|
throw new exports.ConstructorError(null, null, "expected a mapping node but found " + node.id, node.start_mark);
|
|||
|
}
|
|||
|
pairs = [];
|
|||
|
_ref1 = node.value;
|
|||
|
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
|||
|
_ref2 = _ref1[_i], key_node = _ref2[0], value_node = _ref2[1];
|
|||
|
key = this.construct_object(key_node);
|
|||
|
value = this.construct_object(value_node);
|
|||
|
pairs.push([ key, value ]);
|
|||
|
}
|
|||
|
return pairs;
|
|||
|
};
|
|||
|
return BaseConstructor;
|
|||
|
}();
|
|||
|
this.Constructor = function(_super) {
|
|||
|
var BOOL_VALUES, TIMESTAMP_PARTS, TIMESTAMP_REGEX;
|
|||
|
__extends(Constructor, _super);
|
|||
|
function Constructor() {
|
|||
|
_ref1 = Constructor.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref1;
|
|||
|
}
|
|||
|
BOOL_VALUES = {
|
|||
|
on: true,
|
|||
|
off: false,
|
|||
|
"true": true,
|
|||
|
"false": false,
|
|||
|
yes: true,
|
|||
|
no: false
|
|||
|
};
|
|||
|
TIMESTAMP_REGEX = /^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:(?:[Tt]|[\x20\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\.([0-9]*))?(?:[\x20\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?)?$/;
|
|||
|
TIMESTAMP_PARTS = {
|
|||
|
year: 1,
|
|||
|
month: 2,
|
|||
|
day: 3,
|
|||
|
hour: 4,
|
|||
|
minute: 5,
|
|||
|
second: 6,
|
|||
|
fraction: 7,
|
|||
|
tz: 8,
|
|||
|
tz_sign: 9,
|
|||
|
tz_hour: 10,
|
|||
|
tz_minute: 11
|
|||
|
};
|
|||
|
Constructor.prototype.yaml_constructors = {};
|
|||
|
Constructor.prototype.yaml_multi_constructors = {};
|
|||
|
Constructor.prototype.construct_scalar = function(node) {
|
|||
|
var key_node, value_node, _i, _len, _ref2, _ref3;
|
|||
|
if (node instanceof nodes.MappingNode) {
|
|||
|
_ref2 = node.value;
|
|||
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
|||
|
_ref3 = _ref2[_i], key_node = _ref3[0], value_node = _ref3[1];
|
|||
|
if (key_node.tag === "tag:yaml.org,2002:value") {
|
|||
|
return this.construct_scalar(value_node);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return Constructor.__super__.construct_scalar.call(this, node);
|
|||
|
};
|
|||
|
Constructor.prototype.flatten_mapping = function(node) {
|
|||
|
var index, key_node, merge, submerge, subnode, value, value_node, _i, _j, _len, _len1, _ref2, _ref3;
|
|||
|
merge = [];
|
|||
|
index = 0;
|
|||
|
while (index < node.value.length) {
|
|||
|
_ref2 = node.value[index], key_node = _ref2[0], value_node = _ref2[1];
|
|||
|
if (key_node.tag === "tag:yaml.org,2002:merge") {
|
|||
|
node.value.splice(index, 1);
|
|||
|
if (value_node instanceof nodes.MappingNode) {
|
|||
|
this.flatten_mapping(value_node);
|
|||
|
merge = merge.concat(value_node.value);
|
|||
|
} else if (value_node instanceof nodes.SequenceNode) {
|
|||
|
submerge = [];
|
|||
|
_ref3 = value_node.value;
|
|||
|
for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
|
|||
|
subnode = _ref3[_i];
|
|||
|
if (!(subnode instanceof nodes.MappingNode)) {
|
|||
|
throw new exports.ConstructorError("while constructing a mapping", node.start_mark, "expected a mapping for merging, but found " + subnode.id, subnode.start_mark);
|
|||
|
}
|
|||
|
this.flatten_mapping(subnode);
|
|||
|
submerge.push(subnode.value);
|
|||
|
}
|
|||
|
submerge.reverse();
|
|||
|
for (_j = 0, _len1 = submerge.length; _j < _len1; _j++) {
|
|||
|
value = submerge[_j];
|
|||
|
merge = merge.concat(value);
|
|||
|
}
|
|||
|
} else {
|
|||
|
throw new exports.ConstructorError("while constructing a mapping", node.start_mark, "expected a mapping or list of mappings for merging but found " + value_node.id, value_node.start_mark);
|
|||
|
}
|
|||
|
} else if (key_node.tag === "tag:yaml.org,2002:value") {
|
|||
|
key_node.tag = "tag:yaml.org,2002:str";
|
|||
|
index++;
|
|||
|
} else {
|
|||
|
index++;
|
|||
|
}
|
|||
|
}
|
|||
|
if (merge.length) {
|
|||
|
return node.value = merge.concat(node.value);
|
|||
|
}
|
|||
|
};
|
|||
|
Constructor.prototype.construct_mapping = function(node) {
|
|||
|
if (node instanceof nodes.MappingNode) {
|
|||
|
this.flatten_mapping(node);
|
|||
|
}
|
|||
|
return Constructor.__super__.construct_mapping.call(this, node);
|
|||
|
};
|
|||
|
Constructor.prototype.construct_yaml_null = function(node) {
|
|||
|
this.construct_scalar(node);
|
|||
|
return null;
|
|||
|
};
|
|||
|
Constructor.prototype.construct_yaml_bool = function(node) {
|
|||
|
var value;
|
|||
|
value = this.construct_scalar(node);
|
|||
|
return BOOL_VALUES[value.toLowerCase()];
|
|||
|
};
|
|||
|
Constructor.prototype.construct_yaml_int = function(node) {
|
|||
|
var base, digit, digits, part, sign, value, _i, _len, _ref2;
|
|||
|
value = this.construct_scalar(node);
|
|||
|
value = value.replace(/_/g, "");
|
|||
|
sign = value[0] === "-" ? -1 : 1;
|
|||
|
if (_ref2 = value[0], __indexOf.call("+-", _ref2) >= 0) {
|
|||
|
value = value.slice(1);
|
|||
|
}
|
|||
|
if (value === "0") {
|
|||
|
return 0;
|
|||
|
} else if (value.indexOf("0b") === 0) {
|
|||
|
return sign * parseInt(value.slice(2), 2);
|
|||
|
} else if (value.indexOf("0x") === 0) {
|
|||
|
return sign * parseInt(value.slice(2), 16);
|
|||
|
} else if (value.indexOf("0o") === 0) {
|
|||
|
return sign * parseInt(value.slice(2), 8);
|
|||
|
} else if (value[0] === "0") {
|
|||
|
return sign * parseInt(value, 8);
|
|||
|
} else if (__indexOf.call(value, ":") >= 0) {
|
|||
|
digits = function() {
|
|||
|
var _i, _len, _ref3, _results;
|
|||
|
_ref3 = value.split(/:/g);
|
|||
|
_results = [];
|
|||
|
for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
|
|||
|
part = _ref3[_i];
|
|||
|
_results.push(parseInt(part));
|
|||
|
}
|
|||
|
return _results;
|
|||
|
}();
|
|||
|
digits.reverse();
|
|||
|
base = 1;
|
|||
|
value = 0;
|
|||
|
for (_i = 0, _len = digits.length; _i < _len; _i++) {
|
|||
|
digit = digits[_i];
|
|||
|
value += digit * base;
|
|||
|
base *= 60;
|
|||
|
}
|
|||
|
return sign * value;
|
|||
|
} else {
|
|||
|
return sign * parseInt(value);
|
|||
|
}
|
|||
|
};
|
|||
|
Constructor.prototype.construct_yaml_float = function(node) {
|
|||
|
var base, digit, digits, part, sign, value, _i, _len, _ref2;
|
|||
|
value = this.construct_scalar(node);
|
|||
|
value = value.replace(/_/g, "").toLowerCase();
|
|||
|
sign = value[0] === "-" ? -1 : 1;
|
|||
|
if (_ref2 = value[0], __indexOf.call("+-", _ref2) >= 0) {
|
|||
|
value = value.slice(1);
|
|||
|
}
|
|||
|
if (value === ".inf") {
|
|||
|
return sign * Infinity;
|
|||
|
} else if (value === ".nan") {
|
|||
|
return NaN;
|
|||
|
} else if (__indexOf.call(value, ":") >= 0) {
|
|||
|
digits = function() {
|
|||
|
var _i, _len, _ref3, _results;
|
|||
|
_ref3 = value.split(/:/g);
|
|||
|
_results = [];
|
|||
|
for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
|
|||
|
part = _ref3[_i];
|
|||
|
_results.push(parseFloat(part));
|
|||
|
}
|
|||
|
return _results;
|
|||
|
}();
|
|||
|
digits.reverse();
|
|||
|
base = 1;
|
|||
|
value = 0;
|
|||
|
for (_i = 0, _len = digits.length; _i < _len; _i++) {
|
|||
|
digit = digits[_i];
|
|||
|
value += digit * base;
|
|||
|
base *= 60;
|
|||
|
}
|
|||
|
return sign * value;
|
|||
|
} else {
|
|||
|
return sign * parseFloat(value);
|
|||
|
}
|
|||
|
};
|
|||
|
Constructor.prototype.construct_yaml_binary = function(node) {
|
|||
|
var error, value;
|
|||
|
value = this.construct_scalar(node);
|
|||
|
try {
|
|||
|
if (typeof window !== "undefined" && window !== null) {
|
|||
|
return atob(value);
|
|||
|
}
|
|||
|
return (new Buffer(value, "base64")).toString("ascii");
|
|||
|
} catch (_error) {
|
|||
|
error = _error;
|
|||
|
throw new exports.ConstructorError(null, null, "failed to decode base64 data: " + error, node.start_mark);
|
|||
|
}
|
|||
|
};
|
|||
|
Constructor.prototype.construct_yaml_timestamp = function(node) {
|
|||
|
var date, day, fraction, hour, index, key, match, millisecond, minute, month, second, tz_hour, tz_minute, tz_sign, value, values, year;
|
|||
|
value = this.construct_scalar(node);
|
|||
|
match = node.value.match(TIMESTAMP_REGEX);
|
|||
|
values = {};
|
|||
|
for (key in TIMESTAMP_PARTS) {
|
|||
|
index = TIMESTAMP_PARTS[key];
|
|||
|
values[key] = match[index];
|
|||
|
}
|
|||
|
year = parseInt(values.year);
|
|||
|
month = parseInt(values.month) - 1;
|
|||
|
day = parseInt(values.day);
|
|||
|
if (!values.hour) {
|
|||
|
return new Date(Date.UTC(year, month, day));
|
|||
|
}
|
|||
|
hour = parseInt(values.hour);
|
|||
|
minute = parseInt(values.minute);
|
|||
|
second = parseInt(values.second);
|
|||
|
millisecond = 0;
|
|||
|
if (values.fraction) {
|
|||
|
fraction = values.fraction.slice(0, 6);
|
|||
|
while (fraction.length < 6) {
|
|||
|
fraction += "0";
|
|||
|
}
|
|||
|
fraction = parseInt(fraction);
|
|||
|
millisecond = Math.round(fraction / 1e3);
|
|||
|
}
|
|||
|
if (values.tz_sign) {
|
|||
|
tz_sign = values.tz_sign === "-" ? 1 : -1;
|
|||
|
if (tz_hour = parseInt(values.tz_hour)) {
|
|||
|
hour += tz_sign * tz_hour;
|
|||
|
}
|
|||
|
if (tz_minute = parseInt(values.tz_minute)) {
|
|||
|
minute += tz_sign * tz_minute;
|
|||
|
}
|
|||
|
}
|
|||
|
date = new Date(Date.UTC(year, month, day, hour, minute, second, millisecond));
|
|||
|
return date;
|
|||
|
};
|
|||
|
Constructor.prototype.construct_yaml_pair_list = function(type, node) {
|
|||
|
var list, _this = this;
|
|||
|
list = [];
|
|||
|
if (!(node instanceof nodes.SequenceNode)) {
|
|||
|
throw new exports.ConstructorError("while constructing " + type, node.start_mark, "expected a sequence but found " + node.id, node.start_mark);
|
|||
|
}
|
|||
|
this.defer(function() {
|
|||
|
var key, key_node, subnode, value, value_node, _i, _len, _ref2, _ref3, _results;
|
|||
|
_ref2 = node.value;
|
|||
|
_results = [];
|
|||
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
|||
|
subnode = _ref2[_i];
|
|||
|
if (!(subnode instanceof nodes.MappingNode)) {
|
|||
|
throw new exports.ConstructorError("while constructing " + type, node.start_mark, "expected a mapping of length 1 but found " + subnode.id, subnode.start_mark);
|
|||
|
}
|
|||
|
if (subnode.value.length !== 1) {
|
|||
|
throw new exports.ConstructorError("while constructing " + type, node.start_mark, "expected a mapping of length 1 but found " + subnode.id, subnode.start_mark);
|
|||
|
}
|
|||
|
_ref3 = subnode.value[0], key_node = _ref3[0], value_node = _ref3[1];
|
|||
|
key = _this.construct_object(key_node);
|
|||
|
value = _this.construct_object(value_node);
|
|||
|
_results.push(list.push([ key, value ]));
|
|||
|
}
|
|||
|
return _results;
|
|||
|
});
|
|||
|
return list;
|
|||
|
};
|
|||
|
Constructor.prototype.construct_yaml_omap = function(node) {
|
|||
|
return this.construct_yaml_pair_list("an ordered map", node);
|
|||
|
};
|
|||
|
Constructor.prototype.construct_yaml_pairs = function(node) {
|
|||
|
return this.construct_yaml_pair_list("pairs", node);
|
|||
|
};
|
|||
|
Constructor.prototype.construct_yaml_set = function(node) {
|
|||
|
var data, _this = this;
|
|||
|
data = [];
|
|||
|
this.defer(function() {
|
|||
|
var item, _results;
|
|||
|
_results = [];
|
|||
|
for (item in _this.construct_mapping(node)) {
|
|||
|
_results.push(data.push(item));
|
|||
|
}
|
|||
|
return _results;
|
|||
|
});
|
|||
|
return data;
|
|||
|
};
|
|||
|
Constructor.prototype.construct_yaml_str = function(node) {
|
|||
|
return this.construct_scalar(node);
|
|||
|
};
|
|||
|
Constructor.prototype.construct_yaml_seq = function(node) {
|
|||
|
var data, _this = this;
|
|||
|
data = [];
|
|||
|
this.defer(function() {
|
|||
|
var item, _i, _len, _ref2, _results;
|
|||
|
_ref2 = _this.construct_sequence(node);
|
|||
|
_results = [];
|
|||
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
|||
|
item = _ref2[_i];
|
|||
|
_results.push(data.push(item));
|
|||
|
}
|
|||
|
return _results;
|
|||
|
});
|
|||
|
return data;
|
|||
|
};
|
|||
|
Constructor.prototype.construct_yaml_map = function(node) {
|
|||
|
var data, _this = this;
|
|||
|
data = {};
|
|||
|
this.defer(function() {
|
|||
|
var key, value, _ref2, _results;
|
|||
|
_ref2 = _this.construct_mapping(node);
|
|||
|
_results = [];
|
|||
|
for (key in _ref2) {
|
|||
|
value = _ref2[key];
|
|||
|
_results.push(data[key] = value);
|
|||
|
}
|
|||
|
return _results;
|
|||
|
});
|
|||
|
return data;
|
|||
|
};
|
|||
|
Constructor.prototype.construct_yaml_object = function(node, klass) {
|
|||
|
var data, _this = this;
|
|||
|
data = new klass;
|
|||
|
this.defer(function() {
|
|||
|
var key, value, _ref2, _results;
|
|||
|
_ref2 = _this.construct_mapping(node, true);
|
|||
|
_results = [];
|
|||
|
for (key in _ref2) {
|
|||
|
value = _ref2[key];
|
|||
|
_results.push(data[key] = value);
|
|||
|
}
|
|||
|
return _results;
|
|||
|
});
|
|||
|
return data;
|
|||
|
};
|
|||
|
Constructor.prototype.construct_undefined = function(node) {
|
|||
|
throw new exports.ConstructorError(null, null, "could not determine a constructor for the tag " + node.tag, node.start_mark);
|
|||
|
};
|
|||
|
return Constructor;
|
|||
|
}(this.BaseConstructor);
|
|||
|
this.Constructor.add_constructor("tag:yaml.org,2002:null", this.Constructor.prototype.construct_yaml_null);
|
|||
|
this.Constructor.add_constructor("tag:yaml.org,2002:bool", this.Constructor.prototype.construct_yaml_bool);
|
|||
|
this.Constructor.add_constructor("tag:yaml.org,2002:int", this.Constructor.prototype.construct_yaml_int);
|
|||
|
this.Constructor.add_constructor("tag:yaml.org,2002:float", this.Constructor.prototype.construct_yaml_float);
|
|||
|
this.Constructor.add_constructor("tag:yaml.org,2002:binary", this.Constructor.prototype.construct_yaml_binary);
|
|||
|
this.Constructor.add_constructor("tag:yaml.org,2002:timestamp", this.Constructor.prototype.construct_yaml_timestamp);
|
|||
|
this.Constructor.add_constructor("tag:yaml.org,2002:omap", this.Constructor.prototype.construct_yaml_omap);
|
|||
|
this.Constructor.add_constructor("tag:yaml.org,2002:pairs", this.Constructor.prototype.construct_yaml_pairs);
|
|||
|
this.Constructor.add_constructor("tag:yaml.org,2002:set", this.Constructor.prototype.construct_yaml_set);
|
|||
|
this.Constructor.add_constructor("tag:yaml.org,2002:str", this.Constructor.prototype.construct_yaml_str);
|
|||
|
this.Constructor.add_constructor("tag:yaml.org,2002:seq", this.Constructor.prototype.construct_yaml_seq);
|
|||
|
this.Constructor.add_constructor("tag:yaml.org,2002:map", this.Constructor.prototype.construct_yaml_map);
|
|||
|
this.Constructor.add_constructor(null, this.Constructor.prototype.construct_undefined);
|
|||
|
}).call(this);
|
|||
|
});
|
|||
|
register({
|
|||
|
"0": [ "./reader" ]
|
|||
|
}, 0, function(global, module, exports, require, window) {
|
|||
|
(function() {
|
|||
|
var Mark, YAMLError, _ref, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) {
|
|||
|
for (var key in parent) {
|
|||
|
if (__hasProp.call(parent, key)) child[key] = parent[key];
|
|||
|
}
|
|||
|
function ctor() {
|
|||
|
this.constructor = child;
|
|||
|
}
|
|||
|
ctor.prototype = parent.prototype;
|
|||
|
child.prototype = new ctor;
|
|||
|
child.__super__ = parent.prototype;
|
|||
|
return child;
|
|||
|
}, __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;
|
|||
|
};
|
|||
|
_ref = require("./errors"), Mark = _ref.Mark, YAMLError = _ref.YAMLError;
|
|||
|
this.ReaderError = function(_super) {
|
|||
|
__extends(ReaderError, _super);
|
|||
|
function ReaderError(name, position, character, reason) {
|
|||
|
this.name = name;
|
|||
|
this.position = position;
|
|||
|
this.character = character;
|
|||
|
this.reason = reason;
|
|||
|
ReaderError.__super__.constructor.call(this);
|
|||
|
}
|
|||
|
ReaderError.prototype.toString = function() {
|
|||
|
return "unacceptable character " + this.character.charCodeAt() + ": " + this.reason + '\n in "' + this.name + '", position ' + this.position;
|
|||
|
};
|
|||
|
return ReaderError;
|
|||
|
}(YAMLError);
|
|||
|
this.Reader = function() {
|
|||
|
var NON_PRINTABLE;
|
|||
|
NON_PRINTABLE = /[^\x09\x0A\x0D\x20-\x7E\x85\xA0-\uD7FF\uE000-\uFFFD]/;
|
|||
|
function Reader(string) {
|
|||
|
this.string = string;
|
|||
|
this.line = 0;
|
|||
|
this.column = 0;
|
|||
|
this.index = 0;
|
|||
|
this.check_printable();
|
|||
|
this.string += "\0";
|
|||
|
}
|
|||
|
Reader.prototype.peek = function(index) {
|
|||
|
if (index == null) {
|
|||
|
index = 0;
|
|||
|
}
|
|||
|
return this.string[this.index + index];
|
|||
|
};
|
|||
|
Reader.prototype.prefix = function(length) {
|
|||
|
if (length == null) {
|
|||
|
length = 1;
|
|||
|
}
|
|||
|
return this.string.slice(this.index, this.index + length);
|
|||
|
};
|
|||
|
Reader.prototype.forward = function(length) {
|
|||
|
var char, _results;
|
|||
|
if (length == null) {
|
|||
|
length = 1;
|
|||
|
}
|
|||
|
_results = [];
|
|||
|
while (length) {
|
|||
|
char = this.string[this.index];
|
|||
|
this.index++;
|
|||
|
if (__indexOf.call("\n
₂\u2029", char) >= 0 || char === "\r" && this.string[this.index] !== "\n") {
|
|||
|
this.line++;
|
|||
|
this.column = 0;
|
|||
|
} else {
|
|||
|
this.column++;
|
|||
|
}
|
|||
|
_results.push(length--);
|
|||
|
}
|
|||
|
return _results;
|
|||
|
};
|
|||
|
Reader.prototype.get_mark = function() {
|
|||
|
return new Mark(this.name, this.line, this.column, this.string, this.index);
|
|||
|
};
|
|||
|
Reader.prototype.check_printable = function() {
|
|||
|
var character, match, position;
|
|||
|
match = NON_PRINTABLE.exec(this.string);
|
|||
|
if (match) {
|
|||
|
character = match[0];
|
|||
|
position = this.string.length - this.index + match.index;
|
|||
|
throw new exports.ReaderError(this.name, position, character.charCodeAt(), "special characters are not allowed");
|
|||
|
}
|
|||
|
};
|
|||
|
return Reader;
|
|||
|
}();
|
|||
|
}).call(this);
|
|||
|
});
|
|||
|
register({
|
|||
|
"0": [ "./tokens" ]
|
|||
|
}, 0, function(global, module, exports, require, window) {
|
|||
|
(function() {
|
|||
|
var _ref, _ref1, _ref10, _ref11, _ref12, _ref13, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) {
|
|||
|
for (var key in parent) {
|
|||
|
if (__hasProp.call(parent, key)) child[key] = parent[key];
|
|||
|
}
|
|||
|
function ctor() {
|
|||
|
this.constructor = child;
|
|||
|
}
|
|||
|
ctor.prototype = parent.prototype;
|
|||
|
child.prototype = new ctor;
|
|||
|
child.__super__ = parent.prototype;
|
|||
|
return child;
|
|||
|
};
|
|||
|
this.Token = function() {
|
|||
|
function Token(start_mark, end_mark) {
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
}
|
|||
|
return Token;
|
|||
|
}();
|
|||
|
this.DirectiveToken = function(_super) {
|
|||
|
__extends(DirectiveToken, _super);
|
|||
|
DirectiveToken.prototype.id = "<directive>";
|
|||
|
function DirectiveToken(name, value, start_mark, end_mark) {
|
|||
|
this.name = name;
|
|||
|
this.value = value;
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
}
|
|||
|
return DirectiveToken;
|
|||
|
}(this.Token);
|
|||
|
this.DocumentStartToken = function(_super) {
|
|||
|
__extends(DocumentStartToken, _super);
|
|||
|
function DocumentStartToken() {
|
|||
|
_ref = DocumentStartToken.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref;
|
|||
|
}
|
|||
|
DocumentStartToken.prototype.id = "<document start>";
|
|||
|
return DocumentStartToken;
|
|||
|
}(this.Token);
|
|||
|
this.DocumentEndToken = function(_super) {
|
|||
|
__extends(DocumentEndToken, _super);
|
|||
|
function DocumentEndToken() {
|
|||
|
_ref1 = DocumentEndToken.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref1;
|
|||
|
}
|
|||
|
DocumentEndToken.prototype.id = "<document end>";
|
|||
|
return DocumentEndToken;
|
|||
|
}(this.Token);
|
|||
|
this.StreamStartToken = function(_super) {
|
|||
|
__extends(StreamStartToken, _super);
|
|||
|
StreamStartToken.prototype.id = "<stream start>";
|
|||
|
function StreamStartToken(start_mark, end_mark, encoding) {
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
this.encoding = encoding;
|
|||
|
}
|
|||
|
return StreamStartToken;
|
|||
|
}(this.Token);
|
|||
|
this.StreamEndToken = function(_super) {
|
|||
|
__extends(StreamEndToken, _super);
|
|||
|
function StreamEndToken() {
|
|||
|
_ref2 = StreamEndToken.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref2;
|
|||
|
}
|
|||
|
StreamEndToken.prototype.id = "<stream end>";
|
|||
|
return StreamEndToken;
|
|||
|
}(this.Token);
|
|||
|
this.BlockSequenceStartToken = function(_super) {
|
|||
|
__extends(BlockSequenceStartToken, _super);
|
|||
|
function BlockSequenceStartToken() {
|
|||
|
_ref3 = BlockSequenceStartToken.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref3;
|
|||
|
}
|
|||
|
BlockSequenceStartToken.prototype.id = "<block sequence start>";
|
|||
|
return BlockSequenceStartToken;
|
|||
|
}(this.Token);
|
|||
|
this.BlockMappingStartToken = function(_super) {
|
|||
|
__extends(BlockMappingStartToken, _super);
|
|||
|
function BlockMappingStartToken() {
|
|||
|
_ref4 = BlockMappingStartToken.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref4;
|
|||
|
}
|
|||
|
BlockMappingStartToken.prototype.id = "<block mapping end>";
|
|||
|
return BlockMappingStartToken;
|
|||
|
}(this.Token);
|
|||
|
this.BlockEndToken = function(_super) {
|
|||
|
__extends(BlockEndToken, _super);
|
|||
|
function BlockEndToken() {
|
|||
|
_ref5 = BlockEndToken.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref5;
|
|||
|
}
|
|||
|
BlockEndToken.prototype.id = "<block end>";
|
|||
|
return BlockEndToken;
|
|||
|
}(this.Token);
|
|||
|
this.FlowSequenceStartToken = function(_super) {
|
|||
|
__extends(FlowSequenceStartToken, _super);
|
|||
|
function FlowSequenceStartToken() {
|
|||
|
_ref6 = FlowSequenceStartToken.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref6;
|
|||
|
}
|
|||
|
FlowSequenceStartToken.prototype.id = "[";
|
|||
|
return FlowSequenceStartToken;
|
|||
|
}(this.Token);
|
|||
|
this.FlowMappingStartToken = function(_super) {
|
|||
|
__extends(FlowMappingStartToken, _super);
|
|||
|
function FlowMappingStartToken() {
|
|||
|
_ref7 = FlowMappingStartToken.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref7;
|
|||
|
}
|
|||
|
FlowMappingStartToken.prototype.id = "{";
|
|||
|
return FlowMappingStartToken;
|
|||
|
}(this.Token);
|
|||
|
this.FlowSequenceEndToken = function(_super) {
|
|||
|
__extends(FlowSequenceEndToken, _super);
|
|||
|
function FlowSequenceEndToken() {
|
|||
|
_ref8 = FlowSequenceEndToken.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref8;
|
|||
|
}
|
|||
|
FlowSequenceEndToken.prototype.id = "]";
|
|||
|
return FlowSequenceEndToken;
|
|||
|
}(this.Token);
|
|||
|
this.FlowMappingEndToken = function(_super) {
|
|||
|
__extends(FlowMappingEndToken, _super);
|
|||
|
function FlowMappingEndToken() {
|
|||
|
_ref9 = FlowMappingEndToken.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref9;
|
|||
|
}
|
|||
|
FlowMappingEndToken.prototype.id = "}";
|
|||
|
return FlowMappingEndToken;
|
|||
|
}(this.Token);
|
|||
|
this.KeyToken = function(_super) {
|
|||
|
__extends(KeyToken, _super);
|
|||
|
function KeyToken() {
|
|||
|
_ref10 = KeyToken.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref10;
|
|||
|
}
|
|||
|
KeyToken.prototype.id = "?";
|
|||
|
return KeyToken;
|
|||
|
}(this.Token);
|
|||
|
this.ValueToken = function(_super) {
|
|||
|
__extends(ValueToken, _super);
|
|||
|
function ValueToken() {
|
|||
|
_ref11 = ValueToken.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref11;
|
|||
|
}
|
|||
|
ValueToken.prototype.id = ":";
|
|||
|
return ValueToken;
|
|||
|
}(this.Token);
|
|||
|
this.BlockEntryToken = function(_super) {
|
|||
|
__extends(BlockEntryToken, _super);
|
|||
|
function BlockEntryToken() {
|
|||
|
_ref12 = BlockEntryToken.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref12;
|
|||
|
}
|
|||
|
BlockEntryToken.prototype.id = "-";
|
|||
|
return BlockEntryToken;
|
|||
|
}(this.Token);
|
|||
|
this.FlowEntryToken = function(_super) {
|
|||
|
__extends(FlowEntryToken, _super);
|
|||
|
function FlowEntryToken() {
|
|||
|
_ref13 = FlowEntryToken.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref13;
|
|||
|
}
|
|||
|
FlowEntryToken.prototype.id = ",";
|
|||
|
return FlowEntryToken;
|
|||
|
}(this.Token);
|
|||
|
this.AliasToken = function(_super) {
|
|||
|
__extends(AliasToken, _super);
|
|||
|
AliasToken.prototype.id = "<alias>";
|
|||
|
function AliasToken(value, start_mark, end_mark) {
|
|||
|
this.value = value;
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
}
|
|||
|
return AliasToken;
|
|||
|
}(this.Token);
|
|||
|
this.AnchorToken = function(_super) {
|
|||
|
__extends(AnchorToken, _super);
|
|||
|
AnchorToken.prototype.id = "<anchor>";
|
|||
|
function AnchorToken(value, start_mark, end_mark) {
|
|||
|
this.value = value;
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
}
|
|||
|
return AnchorToken;
|
|||
|
}(this.Token);
|
|||
|
this.TagToken = function(_super) {
|
|||
|
__extends(TagToken, _super);
|
|||
|
TagToken.prototype.id = "<tag>";
|
|||
|
function TagToken(value, start_mark, end_mark) {
|
|||
|
this.value = value;
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
}
|
|||
|
return TagToken;
|
|||
|
}(this.Token);
|
|||
|
this.ScalarToken = function(_super) {
|
|||
|
__extends(ScalarToken, _super);
|
|||
|
ScalarToken.prototype.id = "<scalar>";
|
|||
|
function ScalarToken(value, plain, start_mark, end_mark, style) {
|
|||
|
this.value = value;
|
|||
|
this.plain = plain;
|
|||
|
this.start_mark = start_mark;
|
|||
|
this.end_mark = end_mark;
|
|||
|
this.style = style;
|
|||
|
}
|
|||
|
return ScalarToken;
|
|||
|
}(this.Token);
|
|||
|
}).call(this);
|
|||
|
});
|
|||
|
register({
|
|||
|
"0": [ "./scanner" ]
|
|||
|
}, 0, function(global, module, exports, require, window) {
|
|||
|
(function() {
|
|||
|
var MarkedYAMLError, SimpleKey, tokens, util, _ref, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) {
|
|||
|
for (var key in parent) {
|
|||
|
if (__hasProp.call(parent, key)) child[key] = parent[key];
|
|||
|
}
|
|||
|
function ctor() {
|
|||
|
this.constructor = child;
|
|||
|
}
|
|||
|
ctor.prototype = parent.prototype;
|
|||
|
child.prototype = new ctor;
|
|||
|
child.__super__ = parent.prototype;
|
|||
|
return child;
|
|||
|
}, __slice = [].slice, __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;
|
|||
|
};
|
|||
|
MarkedYAMLError = require("./errors").MarkedYAMLError;
|
|||
|
tokens = require("./tokens");
|
|||
|
util = require("./util");
|
|||
|
this.ScannerError = function(_super) {
|
|||
|
__extends(ScannerError, _super);
|
|||
|
function ScannerError() {
|
|||
|
_ref = ScannerError.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref;
|
|||
|
}
|
|||
|
return ScannerError;
|
|||
|
}(MarkedYAMLError);
|
|||
|
SimpleKey = function() {
|
|||
|
function SimpleKey(token_number, required, index, line, column, mark) {
|
|||
|
this.token_number = token_number;
|
|||
|
this.required = required;
|
|||
|
this.index = index;
|
|||
|
this.line = line;
|
|||
|
this.column = column;
|
|||
|
this.mark = mark;
|
|||
|
}
|
|||
|
return SimpleKey;
|
|||
|
}();
|
|||
|
this.Scanner = function() {
|
|||
|
var C_LB, C_NUMBERS, C_WS, ESCAPE_CODES, ESCAPE_REPLACEMENTS;
|
|||
|
C_LB = "\r\n
\u2028\u2029";
|
|||
|
C_WS = " ";
|
|||
|
C_NUMBERS = "0123456789";
|
|||
|
ESCAPE_REPLACEMENTS = {
|
|||
|
"0": "\0",
|
|||
|
a: "",
|
|||
|
b: "\b",
|
|||
|
t: " ",
|
|||
|
" ": " ",
|
|||
|
n: "\n",
|
|||
|
v: "",
|
|||
|
f: "\f",
|
|||
|
r: "\r",
|
|||
|
e: "",
|
|||
|
" ": " ",
|
|||
|
'"': '"',
|
|||
|
"\\": "\\",
|
|||
|
N: "
",
|
|||
|
_: " ",
|
|||
|
L: "\u2028",
|
|||
|
P: "\u2029"
|
|||
|
};
|
|||
|
ESCAPE_CODES = {
|
|||
|
x: 2,
|
|||
|
u: 4,
|
|||
|
U: 8
|
|||
|
};
|
|||
|
function Scanner() {
|
|||
|
this.done = false;
|
|||
|
this.flow_level = 0;
|
|||
|
this.tokens = [];
|
|||
|
this.fetch_stream_start();
|
|||
|
this.tokens_taken = 0;
|
|||
|
this.indent = -1;
|
|||
|
this.indents = [];
|
|||
|
this.allow_simple_key = true;
|
|||
|
this.possible_simple_keys = {};
|
|||
|
}
|
|||
|
Scanner.prototype.check_token = function() {
|
|||
|
var choice, choices, _i, _len;
|
|||
|
choices = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
|
|||
|
while (this.need_more_tokens()) {
|
|||
|
this.fetch_more_tokens();
|
|||
|
}
|
|||
|
if (this.tokens.length !== 0) {
|
|||
|
if (choices.length === 0) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
for (_i = 0, _len = choices.length; _i < _len; _i++) {
|
|||
|
choice = choices[_i];
|
|||
|
if (this.tokens[0] instanceof choice) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return false;
|
|||
|
};
|
|||
|
Scanner.prototype.peek_token = function() {
|
|||
|
while (this.need_more_tokens()) {
|
|||
|
this.fetch_more_tokens();
|
|||
|
}
|
|||
|
if (this.tokens.length !== 0) {
|
|||
|
return this.tokens[0];
|
|||
|
}
|
|||
|
};
|
|||
|
Scanner.prototype.get_token = function() {
|
|||
|
while (this.need_more_tokens()) {
|
|||
|
this.fetch_more_tokens();
|
|||
|
}
|
|||
|
if (this.tokens.length !== 0) {
|
|||
|
this.tokens_taken++;
|
|||
|
return this.tokens.shift();
|
|||
|
}
|
|||
|
};
|
|||
|
Scanner.prototype.need_more_tokens = function() {
|
|||
|
if (this.done) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
if (this.tokens.length === 0) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
this.stale_possible_simple_keys();
|
|||
|
if (this.next_possible_simple_key() === this.tokens_taken) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
return false;
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_more_tokens = function() {
|
|||
|
var char;
|
|||
|
this.scan_to_next_token();
|
|||
|
this.stale_possible_simple_keys();
|
|||
|
this.unwind_indent(this.column);
|
|||
|
char = this.peek();
|
|||
|
if (char === "\0") {
|
|||
|
return this.fetch_stream_end();
|
|||
|
}
|
|||
|
if (char === "%" && this.check_directive()) {
|
|||
|
return this.fetch_directive();
|
|||
|
}
|
|||
|
if (char === "-" && this.check_document_start()) {
|
|||
|
return this.fetch_document_start();
|
|||
|
}
|
|||
|
if (char === "." && this.check_document_end()) {
|
|||
|
return this.fetch_document_end();
|
|||
|
}
|
|||
|
if (char === "[") {
|
|||
|
return this.fetch_flow_sequence_start();
|
|||
|
}
|
|||
|
if (char === "{") {
|
|||
|
return this.fetch_flow_mapping_start();
|
|||
|
}
|
|||
|
if (char === "]") {
|
|||
|
return this.fetch_flow_sequence_end();
|
|||
|
}
|
|||
|
if (char === "}") {
|
|||
|
return this.fetch_flow_mapping_end();
|
|||
|
}
|
|||
|
if (char === ",") {
|
|||
|
return this.fetch_flow_entry();
|
|||
|
}
|
|||
|
if (char === "-" && this.check_block_entry()) {
|
|||
|
return this.fetch_block_entry();
|
|||
|
}
|
|||
|
if (char === "?" && this.check_key()) {
|
|||
|
return this.fetch_key();
|
|||
|
}
|
|||
|
if (char === ":" && this.check_value()) {
|
|||
|
return this.fetch_value();
|
|||
|
}
|
|||
|
if (char === "*") {
|
|||
|
return this.fetch_alias();
|
|||
|
}
|
|||
|
if (char === "&") {
|
|||
|
return this.fetch_anchor();
|
|||
|
}
|
|||
|
if (char === "!") {
|
|||
|
return this.fetch_tag();
|
|||
|
}
|
|||
|
if (char === "|" && this.flow_level === 0) {
|
|||
|
return this.fetch_literal();
|
|||
|
}
|
|||
|
if (char === ">" && this.flow_level === 0) {
|
|||
|
return this.fetch_folded();
|
|||
|
}
|
|||
|
if (char === "'") {
|
|||
|
return this.fetch_single();
|
|||
|
}
|
|||
|
if (char === '"') {
|
|||
|
return this.fetch_double();
|
|||
|
}
|
|||
|
if (this.check_plain()) {
|
|||
|
return this.fetch_plain();
|
|||
|
}
|
|||
|
throw new exports.ScannerError("while scanning for the next token", null, "found character " + char + " that cannot start any token", this.get_mark());
|
|||
|
};
|
|||
|
Scanner.prototype.next_possible_simple_key = function() {
|
|||
|
var key, level, min_token_number, _ref1;
|
|||
|
min_token_number = null;
|
|||
|
_ref1 = this.possible_simple_keys;
|
|||
|
for (level in _ref1) {
|
|||
|
if (!__hasProp.call(_ref1, level)) continue;
|
|||
|
key = _ref1[level];
|
|||
|
if (min_token_number === null || key.token_number < min_token_number) {
|
|||
|
min_token_number = key.token_number;
|
|||
|
}
|
|||
|
}
|
|||
|
return min_token_number;
|
|||
|
};
|
|||
|
Scanner.prototype.stale_possible_simple_keys = function() {
|
|||
|
var key, level, _ref1, _results;
|
|||
|
_ref1 = this.possible_simple_keys;
|
|||
|
_results = [];
|
|||
|
for (level in _ref1) {
|
|||
|
if (!__hasProp.call(_ref1, level)) continue;
|
|||
|
key = _ref1[level];
|
|||
|
if (key.line === this.line && this.index - key.index <= 1024) {
|
|||
|
continue;
|
|||
|
}
|
|||
|
if (!key.required) {
|
|||
|
_results.push(delete this.possible_simple_keys[level]);
|
|||
|
} else {
|
|||
|
throw new exports.ScannerError("while scanning a simple key", key.mark, "could not find expected ':'", this.get_mark());
|
|||
|
}
|
|||
|
}
|
|||
|
return _results;
|
|||
|
};
|
|||
|
Scanner.prototype.save_possible_simple_key = function() {
|
|||
|
var required, token_number;
|
|||
|
required = this.flow_level === 0 && this.indent === this.column;
|
|||
|
if (required && !this.allow_simple_key) {
|
|||
|
throw new Error("logic failure");
|
|||
|
}
|
|||
|
if (!this.allow_simple_key) {
|
|||
|
return;
|
|||
|
}
|
|||
|
this.remove_possible_simple_key();
|
|||
|
token_number = this.tokens_taken + this.tokens.length;
|
|||
|
return this.possible_simple_keys[this.flow_level] = new SimpleKey(token_number, required, this.index, this.line, this.column, this.get_mark());
|
|||
|
};
|
|||
|
Scanner.prototype.remove_possible_simple_key = function() {
|
|||
|
var key;
|
|||
|
if (!(key = this.possible_simple_keys[this.flow_level])) {
|
|||
|
return;
|
|||
|
}
|
|||
|
if (!key.required) {
|
|||
|
return delete this.possible_simple_keys[this.flow_level];
|
|||
|
} else {
|
|||
|
throw new exports.ScannerError("while scanning a simple key", key.mark, "could not find expected ':'", this.get_mark());
|
|||
|
}
|
|||
|
};
|
|||
|
Scanner.prototype.unwind_indent = function(column) {
|
|||
|
var mark, _results;
|
|||
|
if (this.flow_level !== 0) {
|
|||
|
return;
|
|||
|
}
|
|||
|
_results = [];
|
|||
|
while (this.indent > column) {
|
|||
|
mark = this.get_mark();
|
|||
|
this.indent = this.indents.pop();
|
|||
|
_results.push(this.tokens.push(new tokens.BlockEndToken(mark, mark)));
|
|||
|
}
|
|||
|
return _results;
|
|||
|
};
|
|||
|
Scanner.prototype.add_indent = function(column) {
|
|||
|
if (!(column > this.indent)) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
this.indents.push(this.indent);
|
|||
|
this.indent = column;
|
|||
|
return true;
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_stream_start = function() {
|
|||
|
var mark;
|
|||
|
mark = this.get_mark();
|
|||
|
return this.tokens.push(new tokens.StreamStartToken(mark, mark, this.encoding));
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_stream_end = function() {
|
|||
|
var mark;
|
|||
|
this.unwind_indent(-1);
|
|||
|
this.remove_possible_simple_key();
|
|||
|
this.allow_possible_simple_key = false;
|
|||
|
this.possible_simple_keys = {};
|
|||
|
mark = this.get_mark();
|
|||
|
this.tokens.push(new tokens.StreamEndToken(mark, mark));
|
|||
|
return this.done = true;
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_directive = function() {
|
|||
|
this.unwind_indent(-1);
|
|||
|
this.remove_possible_simple_key();
|
|||
|
this.allow_simple_key = false;
|
|||
|
return this.tokens.push(this.scan_directive());
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_document_start = function() {
|
|||
|
return this.fetch_document_indicator(tokens.DocumentStartToken);
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_document_end = function() {
|
|||
|
return this.fetch_document_indicator(tokens.DocumentEndToken);
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_document_indicator = function(TokenClass) {
|
|||
|
var start_mark;
|
|||
|
this.unwind_indent(-1);
|
|||
|
this.remove_possible_simple_key();
|
|||
|
this.allow_simple_key = false;
|
|||
|
start_mark = this.get_mark();
|
|||
|
this.forward(3);
|
|||
|
return this.tokens.push(new TokenClass(start_mark, this.get_mark()));
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_flow_sequence_start = function() {
|
|||
|
return this.fetch_flow_collection_start(tokens.FlowSequenceStartToken);
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_flow_mapping_start = function() {
|
|||
|
return this.fetch_flow_collection_start(tokens.FlowMappingStartToken);
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_flow_collection_start = function(TokenClass) {
|
|||
|
var start_mark;
|
|||
|
this.save_possible_simple_key();
|
|||
|
this.flow_level++;
|
|||
|
this.allow_simple_key = true;
|
|||
|
start_mark = this.get_mark();
|
|||
|
this.forward();
|
|||
|
return this.tokens.push(new TokenClass(start_mark, this.get_mark()));
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_flow_sequence_end = function() {
|
|||
|
return this.fetch_flow_collection_end(tokens.FlowSequenceEndToken);
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_flow_mapping_end = function() {
|
|||
|
return this.fetch_flow_collection_end(tokens.FlowMappingEndToken);
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_flow_collection_end = function(TokenClass) {
|
|||
|
var start_mark;
|
|||
|
this.remove_possible_simple_key();
|
|||
|
this.flow_level--;
|
|||
|
this.allow_simple_key = false;
|
|||
|
start_mark = this.get_mark();
|
|||
|
this.forward();
|
|||
|
return this.tokens.push(new TokenClass(start_mark, this.get_mark()));
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_flow_entry = function() {
|
|||
|
var start_mark;
|
|||
|
this.allow_simple_key = true;
|
|||
|
this.remove_possible_simple_key();
|
|||
|
start_mark = this.get_mark();
|
|||
|
this.forward();
|
|||
|
return this.tokens.push(new tokens.FlowEntryToken(start_mark, this.get_mark()));
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_block_entry = function() {
|
|||
|
var mark, start_mark;
|
|||
|
if (this.flow_level === 0) {
|
|||
|
if (!this.allow_simple_key) {
|
|||
|
throw new exports.ScannerError(null, null, "sequence entries are not allowed here", this.get_mark());
|
|||
|
}
|
|||
|
if (this.add_indent(this.column)) {
|
|||
|
mark = this.get_mark();
|
|||
|
this.tokens.push(new tokens.BlockSequenceStartToken(mark, mark));
|
|||
|
}
|
|||
|
}
|
|||
|
this.allow_simple_key = true;
|
|||
|
this.remove_possible_simple_key();
|
|||
|
start_mark = this.get_mark();
|
|||
|
this.forward();
|
|||
|
return this.tokens.push(new tokens.BlockEntryToken(start_mark, this.get_mark()));
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_key = function() {
|
|||
|
var mark, start_mark;
|
|||
|
if (this.flow_level === 0) {
|
|||
|
if (!this.allow_simple_key) {
|
|||
|
throw new exports.ScannerError(null, null, "mapping keys are not allowed here", this.get_mark());
|
|||
|
}
|
|||
|
if (this.add_indent(this.column)) {
|
|||
|
mark = this.get_mark();
|
|||
|
this.tokens.push(new tokens.BlockMappingStartToken(mark, mark));
|
|||
|
}
|
|||
|
}
|
|||
|
this.allow_simple_key = !this.flow_level;
|
|||
|
this.remove_possible_simple_key();
|
|||
|
start_mark = this.get_mark();
|
|||
|
this.forward();
|
|||
|
return this.tokens.push(new tokens.KeyToken(start_mark, this.get_mark()));
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_value = function() {
|
|||
|
var key, mark, start_mark;
|
|||
|
if (key = this.possible_simple_keys[this.flow_level]) {
|
|||
|
delete this.possible_simple_keys[this.flow_level];
|
|||
|
this.tokens.splice(key.token_number - this.tokens_taken, 0, new tokens.KeyToken(key.mark, key.mark));
|
|||
|
if (this.flow_level === 0) {
|
|||
|
if (this.add_indent(key.column)) {
|
|||
|
this.tokens.splice(key.token_number - this.tokens_taken, 0, new tokens.BlockMappingStartToken(key.mark, key.mark));
|
|||
|
}
|
|||
|
}
|
|||
|
this.allow_simple_key = false;
|
|||
|
} else {
|
|||
|
if (this.flow_level === 0) {
|
|||
|
if (!this.allow_simple_key) {
|
|||
|
throw new exports.ScannerError(null, null, "mapping values are not allowed here", this.get_mark());
|
|||
|
}
|
|||
|
if (this.add_indent(this.column)) {
|
|||
|
mark = this.get_mark();
|
|||
|
this.tokens.push(new tokens.BlockMappingStartToken(mark, mark));
|
|||
|
}
|
|||
|
}
|
|||
|
this.allow_simple_key = !this.flow_level;
|
|||
|
this.remove_possible_simple_key();
|
|||
|
}
|
|||
|
start_mark = this.get_mark();
|
|||
|
this.forward();
|
|||
|
return this.tokens.push(new tokens.ValueToken(start_mark, this.get_mark()));
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_alias = function() {
|
|||
|
this.save_possible_simple_key();
|
|||
|
this.allow_simple_key = false;
|
|||
|
return this.tokens.push(this.scan_anchor(tokens.AliasToken));
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_anchor = function() {
|
|||
|
this.save_possible_simple_key();
|
|||
|
this.allow_simple_key = false;
|
|||
|
return this.tokens.push(this.scan_anchor(tokens.AnchorToken));
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_tag = function() {
|
|||
|
this.save_possible_simple_key();
|
|||
|
this.allow_simple_key = false;
|
|||
|
return this.tokens.push(this.scan_tag());
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_literal = function() {
|
|||
|
return this.fetch_block_scalar("|");
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_folded = function() {
|
|||
|
return this.fetch_block_scalar(">");
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_block_scalar = function(style) {
|
|||
|
this.allow_simple_key = true;
|
|||
|
this.remove_possible_simple_key();
|
|||
|
return this.tokens.push(this.scan_block_scalar(style));
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_single = function() {
|
|||
|
return this.fetch_flow_scalar("'");
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_double = function() {
|
|||
|
return this.fetch_flow_scalar('"');
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_flow_scalar = function(style) {
|
|||
|
this.save_possible_simple_key();
|
|||
|
this.allow_simple_key = false;
|
|||
|
return this.tokens.push(this.scan_flow_scalar(style));
|
|||
|
};
|
|||
|
Scanner.prototype.fetch_plain = function() {
|
|||
|
this.save_possible_simple_key();
|
|||
|
this.allow_simple_key = false;
|
|||
|
return this.tokens.push(this.scan_plain());
|
|||
|
};
|
|||
|
Scanner.prototype.check_directive = function() {
|
|||
|
if (this.column === 0) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
return false;
|
|||
|
};
|
|||
|
Scanner.prototype.check_document_start = function() {
|
|||
|
var _ref1;
|
|||
|
if (this.column === 0 && this.prefix(3) === "---" && (_ref1 = this.peek(3), __indexOf.call(C_LB + C_WS + "\0", _ref1) >= 0)) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
return false;
|
|||
|
};
|
|||
|
Scanner.prototype.check_document_end = function() {
|
|||
|
var _ref1;
|
|||
|
if (this.column === 0 && this.prefix(3) === "..." && (_ref1 = this.peek(3), __indexOf.call(C_LB + C_WS + "\0", _ref1) >= 0)) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
return false;
|
|||
|
};
|
|||
|
Scanner.prototype.check_block_entry = function() {
|
|||
|
var _ref1;
|
|||
|
return _ref1 = this.peek(1), __indexOf.call(C_LB + C_WS + "\0", _ref1) >= 0;
|
|||
|
};
|
|||
|
Scanner.prototype.check_key = function() {
|
|||
|
var _ref1;
|
|||
|
if (this.flow_level !== 0) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
return _ref1 = this.peek(1), __indexOf.call(C_LB + C_WS + "\0", _ref1) >= 0;
|
|||
|
};
|
|||
|
Scanner.prototype.check_value = function() {
|
|||
|
var _ref1;
|
|||
|
if (this.flow_level !== 0) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
return _ref1 = this.peek(1), __indexOf.call(C_LB + C_WS + "\0", _ref1) >= 0;
|
|||
|
};
|
|||
|
Scanner.prototype.check_plain = function() {
|
|||
|
var char, _ref1;
|
|||
|
char = this.peek();
|
|||
|
return __indexOf.call(C_LB + C_WS + "\0-?:,[]{}#&*!|>'\"%@`", char) < 0 || (_ref1 = this.peek(1), __indexOf.call(C_LB + C_WS + "\0", _ref1) < 0) && (char === "-" || this.flow_level === 0 && __indexOf.call("?:", char) >= 0);
|
|||
|
};
|
|||
|
Scanner.prototype.scan_to_next_token = function() {
|
|||
|
var found, _ref1, _results;
|
|||
|
if (this.index === 0 && this.peek() === "") {
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
found = false;
|
|||
|
_results = [];
|
|||
|
while (!found) {
|
|||
|
while (this.peek() === " ") {
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
if (this.peek() === "#") {
|
|||
|
while (_ref1 = this.peek(), __indexOf.call(C_LB + "\0", _ref1) < 0) {
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
}
|
|||
|
if (this.scan_line_break()) {
|
|||
|
if (this.flow_level === 0) {
|
|||
|
_results.push(this.allow_simple_key = true);
|
|||
|
} else {
|
|||
|
_results.push(void 0);
|
|||
|
}
|
|||
|
} else {
|
|||
|
_results.push(found = true);
|
|||
|
}
|
|||
|
}
|
|||
|
return _results;
|
|||
|
};
|
|||
|
Scanner.prototype.scan_directive = function() {
|
|||
|
var end_mark, name, start_mark, value, _ref1;
|
|||
|
start_mark = this.get_mark();
|
|||
|
this.forward();
|
|||
|
name = this.scan_directive_name(start_mark);
|
|||
|
value = null;
|
|||
|
if (name === "YAML") {
|
|||
|
value = this.scan_yaml_directive_value(start_mark);
|
|||
|
end_mark = this.get_mark();
|
|||
|
} else if (name === "TAG") {
|
|||
|
value = this.scan_tag_directive_value(start_mark);
|
|||
|
end_mark = this.get_mark();
|
|||
|
} else {
|
|||
|
end_mark = this.get_mark();
|
|||
|
while (_ref1 = this.peek(), __indexOf.call(C_LB + "\0", _ref1) < 0) {
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
}
|
|||
|
this.scan_directive_ignored_line(start_mark);
|
|||
|
return new tokens.DirectiveToken(name, value, start_mark, end_mark);
|
|||
|
};
|
|||
|
Scanner.prototype.scan_directive_name = function(start_mark) {
|
|||
|
var char, length, value;
|
|||
|
length = 0;
|
|||
|
char = this.peek(length);
|
|||
|
while ("0" <= char && char <= "9" || "A" <= char && char <= "Z" || "a" <= char && char <= "z" || __indexOf.call("-_", char) >= 0) {
|
|||
|
length++;
|
|||
|
char = peek(length);
|
|||
|
}
|
|||
|
throw new exports.ScannerError("while scanning a directive", start_mark, "expected alphanumeric or numeric character but found " + char, length === 0 ? this.get_mark() : void 0);
|
|||
|
value = this.prefix(length);
|
|||
|
this.forward(length);
|
|||
|
char = this.peek();
|
|||
|
throw new exports.ScannerError("while scanning a directive", start_mark, "expected alphanumeric or numeric character but found " + char, __indexOf.call(C_LB + "\0 ", char) < 0 ? this.get_mark() : void 0);
|
|||
|
return value;
|
|||
|
};
|
|||
|
Scanner.prototype.scan_yaml_directive_value = function(start_mark) {
|
|||
|
var major, minor, _ref1;
|
|||
|
while (this.peek() === " ") {
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
major = this.scan_yaml_directive_number(start_mark);
|
|||
|
throw new exports.ScannerError("while scanning a directive", start_mark, "expected a digit or '.' but found " + this.peek(), this.peek() !== "." ? this.get_mark() : void 0);
|
|||
|
this.forward();
|
|||
|
minor = this.scan_yaml_directive_number(start_mark);
|
|||
|
throw new exports.ScannerError("while scanning a directive", start_mark, "expected a digit or ' ' but found " + this.peek(), (_ref1 = this.peek(), __indexOf.call(C_LB + "\0 ", _ref1) < 0) ? this.get_mark() : void 0);
|
|||
|
return [ major, minor ];
|
|||
|
};
|
|||
|
Scanner.prototype.scan_yaml_directive_number = function(start_mark) {
|
|||
|
var char, length, value, _ref1;
|
|||
|
char = this.peek();
|
|||
|
throw new exports.ScannerError("while scanning a directive", start_mark, "expected a digit but found " + char, !("0" <= char && char <= "9") ? this.get_mark() : void 0);
|
|||
|
length = 0;
|
|||
|
while ("0" <= (_ref1 = this.peek(length)) && _ref1 <= "9") {
|
|||
|
length++;
|
|||
|
}
|
|||
|
value = parseInt(this.prefix(length));
|
|||
|
this.forward(length);
|
|||
|
return value;
|
|||
|
};
|
|||
|
Scanner.prototype.scan_tag_directive_value = function(start_mark) {
|
|||
|
var handle, prefix;
|
|||
|
while (this.peek() === " ") {
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
handle = this.scan_tag_directive_handle(start_mark);
|
|||
|
while (this.peek() === " ") {
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
prefix = this.scan_tag_directive_prefix(start_mark);
|
|||
|
return [ handle, prefix ];
|
|||
|
};
|
|||
|
Scanner.prototype.scan_tag_directive_handle = function(start_mark) {
|
|||
|
var char, value;
|
|||
|
value = this.scan_tag_handle("directive", start_mark);
|
|||
|
char = this.peek();
|
|||
|
throw new exports.ScannerError("while scanning a directive", start_mark, "expected ' ' but found " + char, char !== " " ? this.get_mark() : void 0);
|
|||
|
return value;
|
|||
|
};
|
|||
|
Scanner.prototype.scan_tag_directive_prefix = function(start_mark) {
|
|||
|
var char, value;
|
|||
|
value = this.scan_tag_uri("directive", start_mark);
|
|||
|
char = this.peek();
|
|||
|
throw new exports.ScannerError("while scanning a directive", start_mark, "expected ' ' but found " + char, __indexOf.call(C_LB + "\0 ", char) < 0 ? this.get_mark() : void 0);
|
|||
|
return value;
|
|||
|
};
|
|||
|
Scanner.prototype.scan_directive_ignored_line = function(start_mark) {
|
|||
|
var char, _ref1;
|
|||
|
while (this.peek() === " ") {
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
if (this.peek() === "#") {
|
|||
|
while (_ref1 = this.peek(), __indexOf.call(C_LB + "\0", _ref1) < 0) {
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
}
|
|||
|
char = this.peek();
|
|||
|
throw new exports.ScannerError("while scanning a directive", start_mark, "expected a comment or a line break but found " + char, __indexOf.call(C_LB + "\0", char) < 0 ? this.get_mark() : void 0);
|
|||
|
return this.scan_line_break();
|
|||
|
};
|
|||
|
Scanner.prototype.scan_anchor = function(TokenClass) {
|
|||
|
var char, indicator, length, name, start_mark, value;
|
|||
|
start_mark = this.get_mark();
|
|||
|
indicator = this.peek();
|
|||
|
if (indicator === "*") {
|
|||
|
name = "alias";
|
|||
|
} else {
|
|||
|
name = "anchor";
|
|||
|
}
|
|||
|
this.forward();
|
|||
|
length = 0;
|
|||
|
char = this.peek(length);
|
|||
|
while ("0" <= char && char <= "9" || "A" <= char && char <= "Z" || "a" <= char && char <= "z" || __indexOf.call("-_", char) >= 0) {
|
|||
|
length++;
|
|||
|
char = this.peek(length);
|
|||
|
}
|
|||
|
if (length === 0) {
|
|||
|
throw new exports.ScannerError("while scanning an " + name, start_mark, "expected alphabetic or numeric character but found '" + char + "'", this.get_mark());
|
|||
|
}
|
|||
|
value = this.prefix(length);
|
|||
|
this.forward(length);
|
|||
|
char = this.peek();
|
|||
|
if (__indexOf.call(C_LB + C_WS + "\0" + "?:,]}%@`", char) < 0) {
|
|||
|
throw new exports.ScannerError("while scanning an " + name, start_mark, "expected alphabetic or numeric character but found '" + char + "'", this.get_mark());
|
|||
|
}
|
|||
|
return new TokenClass(value, start_mark, this.get_mark());
|
|||
|
};
|
|||
|
Scanner.prototype.scan_tag = function() {
|
|||
|
var char, handle, length, start_mark, suffix, use_handle;
|
|||
|
start_mark = this.get_mark();
|
|||
|
char = this.peek(1);
|
|||
|
if (char === "<") {
|
|||
|
handle = null;
|
|||
|
this.forward(2);
|
|||
|
suffix = this.scan_tag_uri("tag", start_mark);
|
|||
|
if (this.peek() !== ">") {
|
|||
|
throw new exports.ScannerError("while parsing a tag", start_mark, "expected '>' but found " + this.peek(), this.get_mark());
|
|||
|
}
|
|||
|
this.forward();
|
|||
|
} else if (__indexOf.call(C_LB + C_WS + "\0", char) >= 0) {
|
|||
|
handle = null;
|
|||
|
suffix = "!";
|
|||
|
this.forward();
|
|||
|
} else {
|
|||
|
length = 1;
|
|||
|
use_handle = false;
|
|||
|
while (__indexOf.call(C_LB + "\0 ", char) < 0) {
|
|||
|
if (char === "!") {
|
|||
|
use_handle = true;
|
|||
|
break;
|
|||
|
}
|
|||
|
length++;
|
|||
|
char = this.peek(length);
|
|||
|
}
|
|||
|
if (use_handle) {
|
|||
|
handle = this.scan_tag_handle("tag", start_mark);
|
|||
|
} else {
|
|||
|
handle = "!";
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
suffix = this.scan_tag_uri("tag", start_mark);
|
|||
|
}
|
|||
|
char = this.peek();
|
|||
|
if (__indexOf.call(C_LB + "\0 ", char) < 0) {
|
|||
|
throw new exports.ScannerError("while scanning a tag", start_mark, "expected ' ' but found " + char, this.get_mark());
|
|||
|
}
|
|||
|
return new tokens.TagToken([ handle, suffix ], start_mark, this.get_mark());
|
|||
|
};
|
|||
|
Scanner.prototype.scan_block_scalar = function(style) {
|
|||
|
var breaks, chomping, chunks, end_mark, folded, increment, indent, leading_non_space, length, line_break, max_indent, min_indent, start_mark, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;
|
|||
|
folded = style === ">";
|
|||
|
chunks = [];
|
|||
|
start_mark = this.get_mark();
|
|||
|
this.forward();
|
|||
|
_ref1 = this.scan_block_scalar_indicators(start_mark), chomping = _ref1[0], increment = _ref1[1];
|
|||
|
this.scan_block_scalar_ignored_line(start_mark);
|
|||
|
min_indent = this.indent + 1;
|
|||
|
if (min_indent < 1) {
|
|||
|
min_indent = 1;
|
|||
|
}
|
|||
|
if (increment == null) {
|
|||
|
_ref2 = this.scan_block_scalar_indentation(), breaks = _ref2[0], max_indent = _ref2[1], end_mark = _ref2[2];
|
|||
|
indent = Math.max(min_indent, max_indent);
|
|||
|
} else {
|
|||
|
indent = min_indent + increment - 1;
|
|||
|
_ref3 = this.scan_block_scalar_breaks(indent), breaks = _ref3[0], end_mark = _ref3[1];
|
|||
|
}
|
|||
|
line_break = "";
|
|||
|
while (this.column === indent && this.peek() !== "\0") {
|
|||
|
chunks = chunks.concat(breaks);
|
|||
|
leading_non_space = (_ref4 = this.peek(), __indexOf.call(" ", _ref4) < 0);
|
|||
|
length = 0;
|
|||
|
while (_ref5 = this.peek(length), __indexOf.call(C_LB + "\0", _ref5) < 0) {
|
|||
|
length++;
|
|||
|
}
|
|||
|
chunks.push(this.prefix(length));
|
|||
|
this.forward(length);
|
|||
|
line_break = this.scan_line_break();
|
|||
|
_ref6 = this.scan_block_scalar_breaks(indent), breaks = _ref6[0], end_mark = _ref6[1];
|
|||
|
if (this.column === indent && this.peek() !== "\0") {
|
|||
|
if (folded && line_break === "\n" && leading_non_space && (_ref7 = this.peek(), __indexOf.call(" ", _ref7) < 0)) {
|
|||
|
if (util.is_empty(breaks)) {
|
|||
|
chunks.push(" ");
|
|||
|
}
|
|||
|
} else {
|
|||
|
chunks.push(line_break);
|
|||
|
}
|
|||
|
} else {
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
if (chomping !== false) {
|
|||
|
chunks.push(line_break);
|
|||
|
}
|
|||
|
if (chomping === true) {
|
|||
|
chunks = chunks.concat(breaks);
|
|||
|
}
|
|||
|
return new tokens.ScalarToken(chunks.join(""), false, start_mark, end_mark, style);
|
|||
|
};
|
|||
|
Scanner.prototype.scan_block_scalar_indicators = function(start_mark) {
|
|||
|
var char, chomping, increment;
|
|||
|
chomping = null;
|
|||
|
increment = null;
|
|||
|
char = this.peek();
|
|||
|
if (__indexOf.call("+-", char) >= 0) {
|
|||
|
chomping = char === "+";
|
|||
|
this.forward();
|
|||
|
char = this.peek();
|
|||
|
if (__indexOf.call(C_NUMBERS, char) >= 0) {
|
|||
|
increment = parseInt(char);
|
|||
|
if (increment === 0) {
|
|||
|
throw new exports.ScannerError("while scanning a block scalar", start_mark, "expected indentation indicator in the range 1-9 but found 0", this.get_mark());
|
|||
|
}
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
} else if (__indexOf.call(C_NUMBERS, char) >= 0) {
|
|||
|
increment = parseInt(char);
|
|||
|
if (increment === 0) {
|
|||
|
throw new exports.ScannerError("while scanning a block scalar", start_mark, "expected indentation indicator in the range 1-9 but found 0", this.get_mark());
|
|||
|
}
|
|||
|
this.forward();
|
|||
|
char = this.peek();
|
|||
|
if (__indexOf.call("+-", char) >= 0) {
|
|||
|
chomping = char === "+";
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
}
|
|||
|
char = this.peek();
|
|||
|
if (__indexOf.call(C_LB + "\0 ", char) < 0) {
|
|||
|
throw new exports.ScannerError("while scanning a block scalar", start_mark, "expected chomping or indentation indicators, but found " + char, this.get_mark());
|
|||
|
}
|
|||
|
return [ chomping, increment ];
|
|||
|
};
|
|||
|
Scanner.prototype.scan_block_scalar_ignored_line = function(start_mark) {
|
|||
|
var char, _ref1;
|
|||
|
while (this.peek() === " ") {
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
if (this.peek() === "#") {
|
|||
|
while (_ref1 = this.peek(), __indexOf.call(C_LB + "\0", _ref1) < 0) {
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
}
|
|||
|
char = this.peek();
|
|||
|
if (__indexOf.call(C_LB + "\0", char) < 0) {
|
|||
|
throw new exports.ScannerError("while scanning a block scalar", start_mark, "expected a comment or a line break but found " + char, this.get_mark());
|
|||
|
}
|
|||
|
return this.scan_line_break();
|
|||
|
};
|
|||
|
Scanner.prototype.scan_block_scalar_indentation = function() {
|
|||
|
var chunks, end_mark, max_indent, _ref1;
|
|||
|
chunks = [];
|
|||
|
max_indent = 0;
|
|||
|
end_mark = this.get_mark();
|
|||
|
while (_ref1 = this.peek(), __indexOf.call(C_LB + " ", _ref1) >= 0) {
|
|||
|
if (this.peek() !== " ") {
|
|||
|
chunks.push(this.scan_line_break());
|
|||
|
end_mark = this.get_mark();
|
|||
|
} else {
|
|||
|
this.forward();
|
|||
|
if (this.column > max_indent) {
|
|||
|
max_indent = this.column;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return [ chunks, max_indent, end_mark ];
|
|||
|
};
|
|||
|
Scanner.prototype.scan_block_scalar_breaks = function(indent) {
|
|||
|
var chunks, end_mark, _ref1;
|
|||
|
chunks = [];
|
|||
|
end_mark = this.get_mark();
|
|||
|
while (this.column < indent && this.peek() === " ") {
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
while (_ref1 = this.peek(), __indexOf.call(C_LB, _ref1) >= 0) {
|
|||
|
chunks.push(this.scan_line_break());
|
|||
|
end_mark = this.get_mark();
|
|||
|
while (this.column < indent && this.peek() === " ") {
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
}
|
|||
|
return [ chunks, end_mark ];
|
|||
|
};
|
|||
|
Scanner.prototype.scan_flow_scalar = function(style) {
|
|||
|
var chunks, double, quote, start_mark;
|
|||
|
double = style === '"';
|
|||
|
chunks = [];
|
|||
|
start_mark = this.get_mark();
|
|||
|
quote = this.peek();
|
|||
|
this.forward();
|
|||
|
chunks = chunks.concat(this.scan_flow_scalar_non_spaces(double, start_mark));
|
|||
|
while (this.peek() !== quote) {
|
|||
|
chunks = chunks.concat(this.scan_flow_scalar_spaces(double, start_mark));
|
|||
|
chunks = chunks.concat(this.scan_flow_scalar_non_spaces(double, start_mark));
|
|||
|
}
|
|||
|
this.forward();
|
|||
|
return new tokens.ScalarToken(chunks.join(""), false, start_mark, this.get_mark(), style);
|
|||
|
};
|
|||
|
Scanner.prototype.scan_flow_scalar_non_spaces = function(double, start_mark) {
|
|||
|
var char, chunks, code, k, length, _i, _ref1, _ref2;
|
|||
|
chunks = [];
|
|||
|
while (true) {
|
|||
|
length = 0;
|
|||
|
while (_ref1 = this.peek(length), __indexOf.call(C_LB + C_WS + "'\"\\\0", _ref1) < 0) {
|
|||
|
length++;
|
|||
|
}
|
|||
|
if (length !== 0) {
|
|||
|
chunks.push(this.prefix(length));
|
|||
|
this.forward(length);
|
|||
|
}
|
|||
|
char = this.peek();
|
|||
|
if (!double && char === "'" && this.peek(1) === "'") {
|
|||
|
chunks.push("'");
|
|||
|
this.forward(2);
|
|||
|
} else if (double && char === "'" || !double && __indexOf.call('"\\', char) >= 0) {
|
|||
|
chunks.push(char);
|
|||
|
this.forward();
|
|||
|
} else if (double && char === "\\") {
|
|||
|
this.forward();
|
|||
|
char = this.peek();
|
|||
|
if (char in ESCAPE_REPLACEMENTS) {
|
|||
|
chunks.push(ESCAPE_REPLACEMENTS[char]);
|
|||
|
this.forward();
|
|||
|
} else if (char in ESCAPE_CODES) {
|
|||
|
length = ESCAPE_CODES[char];
|
|||
|
this.forward();
|
|||
|
for (k = _i = 0; 0 <= length ? _i < length : _i > length; k = 0 <= length ? ++_i : --_i) {
|
|||
|
if (_ref2 = this.peek(k), __indexOf.call(C_NUMBERS + "ABCDEFabcdef", _ref2) < 0) {
|
|||
|
throw new exports.ScannerError("while scanning a double-quoted scalar", start_mark, "expected escape sequence of " + length + " hexadecimal numbers, but " + "found " + this.peek(k), this.get_mark());
|
|||
|
}
|
|||
|
}
|
|||
|
code = parseInt(this.prefix(length), 16);
|
|||
|
chunks.push(String.fromCharCode(code));
|
|||
|
this.forward(length);
|
|||
|
} else if (__indexOf.call(C_LB, char) >= 0) {
|
|||
|
this.scan_line_break();
|
|||
|
chunks = chunks.concat(this.scan_flow_scalar_breaks(double, start_mark));
|
|||
|
} else {
|
|||
|
throw new exports.ScannerError("while scanning a double-quoted scalar", start_mark, "found unknown escape character " + char, this.get_mark());
|
|||
|
}
|
|||
|
} else {
|
|||
|
return chunks;
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
Scanner.prototype.scan_flow_scalar_spaces = function(double, start_mark) {
|
|||
|
var breaks, char, chunks, length, line_break, whitespaces, _ref1;
|
|||
|
chunks = [];
|
|||
|
length = 0;
|
|||
|
while (_ref1 = this.peek(length), __indexOf.call(C_WS, _ref1) >= 0) {
|
|||
|
length++;
|
|||
|
}
|
|||
|
whitespaces = this.prefix(length);
|
|||
|
this.forward(length);
|
|||
|
char = this.peek();
|
|||
|
if (char === "\0") {
|
|||
|
throw new exports.ScannerError("while scanning a quoted scalar", start_mark, "found unexpected end of stream", this.get_mark());
|
|||
|
}
|
|||
|
if (__indexOf.call(C_LB, char) >= 0) {
|
|||
|
line_break = this.scan_line_break();
|
|||
|
breaks = this.scan_flow_scalar_breaks(double, start_mark);
|
|||
|
if (line_break !== "\n") {
|
|||
|
chunks.push(line_break);
|
|||
|
} else if (!breaks) {
|
|||
|
chunks.push(" ");
|
|||
|
}
|
|||
|
chunks = chunks.concat(breaks);
|
|||
|
} else {
|
|||
|
chunks.push(whitespaces);
|
|||
|
}
|
|||
|
return chunks;
|
|||
|
};
|
|||
|
Scanner.prototype.scan_flow_scalar_breaks = function(double, start_mark) {
|
|||
|
var chunks, prefix, _ref1, _ref2, _ref3;
|
|||
|
chunks = [];
|
|||
|
while (true) {
|
|||
|
prefix = this.prefix(3);
|
|||
|
if (prefix === "---" || prefix === "..." && (_ref1 = this.peek(3), __indexOf.call(C_LB + C_WS + "\0", _ref1) >= 0)) {
|
|||
|
throw new exports.ScannerError("while scanning a quoted scalar", start_mark, "found unexpected document separator", this.get_mark());
|
|||
|
}
|
|||
|
while (_ref2 = this.peek(), __indexOf.call(C_WS, _ref2) >= 0) {
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
if (_ref3 = this.peek(), __indexOf.call(C_LB, _ref3) >= 0) {
|
|||
|
chunks.push(this.scan_line_break());
|
|||
|
} else {
|
|||
|
return chunks;
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
Scanner.prototype.scan_plain = function() {
|
|||
|
var char, chunks, end_mark, indent, length, spaces, start_mark, _ref1, _ref2;
|
|||
|
chunks = [];
|
|||
|
start_mark = end_mark = this.get_mark();
|
|||
|
indent = this.indent + 1;
|
|||
|
spaces = [];
|
|||
|
while (true) {
|
|||
|
length = 0;
|
|||
|
if (this.peek() === "#") {
|
|||
|
break;
|
|||
|
}
|
|||
|
while (true) {
|
|||
|
char = this.peek(length);
|
|||
|
if (__indexOf.call(C_LB + C_WS + "\0", char) >= 0 || this.flow_level === 0 && char === ":" && (_ref1 = this.peek(length + 1), __indexOf.call(C_LB + C_WS + "\0", _ref1) >= 0) || this.flow_level !== 0 && __indexOf.call(",:?[]{}", char) >= 0) {
|
|||
|
break;
|
|||
|
}
|
|||
|
length++;
|
|||
|
}
|
|||
|
if (this.flow_level !== 0 && char === ":" && (_ref2 = this.peek(length + 1), __indexOf.call(C_LB + C_WS + "\0,[]{}", _ref2) < 0)) {
|
|||
|
this.forward(length);
|
|||
|
throw new exports.ScannerError("while scanning a plain scalar", start_mark, "found unexpected ':'", this.get_mark(), "Please check http://pyyaml.org/wiki/YAMLColonInFlowContext");
|
|||
|
}
|
|||
|
if (length === 0) {
|
|||
|
break;
|
|||
|
}
|
|||
|
this.allow_simple_key = false;
|
|||
|
chunks = chunks.concat(spaces);
|
|||
|
chunks.push(this.prefix(length));
|
|||
|
this.forward(length);
|
|||
|
end_mark = this.get_mark();
|
|||
|
spaces = this.scan_plain_spaces(indent, start_mark);
|
|||
|
if (spaces == null || spaces.length === 0 || this.peek() === "#" || this.flow_level === 0 && this.column < indent) {
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
return new tokens.ScalarToken(chunks.join(""), true, start_mark, end_mark);
|
|||
|
};
|
|||
|
Scanner.prototype.scan_plain_spaces = function(indent, start_mark) {
|
|||
|
var breaks, char, chunks, length, line_break, prefix, whitespaces, _ref1, _ref2, _ref3, _ref4;
|
|||
|
chunks = [];
|
|||
|
length = 0;
|
|||
|
while (_ref1 = this.peek(length), __indexOf.call(" ", _ref1) >= 0) {
|
|||
|
length++;
|
|||
|
}
|
|||
|
whitespaces = this.prefix(length);
|
|||
|
this.forward(length);
|
|||
|
char = this.peek();
|
|||
|
if (__indexOf.call(C_LB, char) >= 0) {
|
|||
|
line_break = this.scan_line_break();
|
|||
|
this.allow_simple_key = true;
|
|||
|
prefix = this.prefix(3);
|
|||
|
if (prefix === "---" || prefix === "..." && (_ref2 = this.peek(3), __indexOf.call(C_LB + C_WS + "\0", _ref2) >= 0)) {
|
|||
|
return;
|
|||
|
}
|
|||
|
breaks = [];
|
|||
|
while (_ref4 = this.peek(), __indexOf.call(C_LB + " ", _ref4) >= 0) {
|
|||
|
if (this.peek() === " ") {
|
|||
|
this.forward();
|
|||
|
} else {
|
|||
|
breaks.push(this.scan_line_break());
|
|||
|
prefix = this.prefix(3);
|
|||
|
if (prefix === "---" || prefix === "..." && (_ref3 = this.peek(3), __indexOf.call(C_LB + C_WS + "\0", _ref3) >= 0)) {
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if (line_break !== "\n") {
|
|||
|
chunks.push(line_break);
|
|||
|
} else if (breaks.length === 0) {
|
|||
|
chunks.push(" ");
|
|||
|
}
|
|||
|
chunks = chunks.concat(breaks);
|
|||
|
} else if (whitespaces) {
|
|||
|
chunks.push(whitespaces);
|
|||
|
}
|
|||
|
return chunks;
|
|||
|
};
|
|||
|
Scanner.prototype.scan_tag_handle = function(name, start_mark) {
|
|||
|
var char, length, value;
|
|||
|
char = this.peek();
|
|||
|
if (char !== "!") {
|
|||
|
throw new exports.ScannerError("while scanning a " + name, start_mark, "expected '!' but found " + char, this.get_mark());
|
|||
|
}
|
|||
|
length = 1;
|
|||
|
char = this.peek(length);
|
|||
|
if (char !== " ") {
|
|||
|
while ("0" <= char && char <= "9" || "A" <= char && char <= "Z" || "a" <= char && char <= "z" || __indexOf.call("-_", char) >= 0) {
|
|||
|
length++;
|
|||
|
char = this.peek(length);
|
|||
|
}
|
|||
|
if (char !== "!") {
|
|||
|
this.forward(length);
|
|||
|
throw new exports.ScannerError("while scanning a " + name, start_mark, "expected '!' but found " + char, this.get_mark());
|
|||
|
}
|
|||
|
length++;
|
|||
|
}
|
|||
|
value = this.prefix(length);
|
|||
|
this.forward(length);
|
|||
|
return value;
|
|||
|
};
|
|||
|
Scanner.prototype.scan_tag_uri = function(name, start_mark) {
|
|||
|
var char, chunks, length;
|
|||
|
chunks = [];
|
|||
|
length = 0;
|
|||
|
char = this.peek(length);
|
|||
|
while ("0" <= char && char <= "9" || "A" <= char && char <= "Z" || "a" <= char && char <= "z" || __indexOf.call("-;/?:@&=+$,_.!~*'()[]%", char) >= 0) {
|
|||
|
if (char === "%") {
|
|||
|
chunks.push(this.prefix(length));
|
|||
|
this.forward(length);
|
|||
|
length = 0;
|
|||
|
chunks.push(this.scan_uri_escapes(name, start_mark));
|
|||
|
} else {
|
|||
|
length++;
|
|||
|
}
|
|||
|
char = this.peek(length);
|
|||
|
}
|
|||
|
if (length !== 0) {
|
|||
|
chunks.push(this.prefix(length));
|
|||
|
this.forward(length);
|
|||
|
length = 0;
|
|||
|
}
|
|||
|
if (chunks.length === 0) {
|
|||
|
throw new exports.ScannerError("while parsing a " + name, start_mark, "expected URI but found " + char, this.get_mark());
|
|||
|
}
|
|||
|
return chunks.join("");
|
|||
|
};
|
|||
|
Scanner.prototype.scan_uri_escapes = function(name, start_mark) {
|
|||
|
var bytes, k, mark, _i;
|
|||
|
bytes = [];
|
|||
|
mark = this.get_mark();
|
|||
|
while (this.peek() === "%") {
|
|||
|
this.forward();
|
|||
|
for (k = _i = 0; _i <= 2; k = ++_i) {
|
|||
|
throw new exports.ScannerError("while scanning a " + name, start_mark, "expected URI escape sequence of 2 hexadecimal numbers but found " + this.peek(k), this.get_mark());
|
|||
|
}
|
|||
|
bytes.push(String.fromCharCode(parseInt(this.prefix(2), 16)));
|
|||
|
this.forward(2);
|
|||
|
}
|
|||
|
return bytes.join("");
|
|||
|
};
|
|||
|
Scanner.prototype.scan_line_break = function() {
|
|||
|
var char;
|
|||
|
char = this.peek();
|
|||
|
if (__indexOf.call("\r\n
", char) >= 0) {
|
|||
|
if (this.prefix(2) === "\r\n") {
|
|||
|
this.forward(2);
|
|||
|
} else {
|
|||
|
this.forward();
|
|||
|
}
|
|||
|
return "\n";
|
|||
|
} else if (__indexOf.call("\u2028\u2029", char) >= 0) {
|
|||
|
this.forward();
|
|||
|
return char;
|
|||
|
}
|
|||
|
return "";
|
|||
|
};
|
|||
|
return Scanner;
|
|||
|
}();
|
|||
|
}).call(this);
|
|||
|
});
|
|||
|
register({
|
|||
|
"0": [ "./parser" ]
|
|||
|
}, 0, function(global, module, exports, require, window) {
|
|||
|
(function() {
|
|||
|
var MarkedYAMLError, events, tokens, _ref, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) {
|
|||
|
for (var key in parent) {
|
|||
|
if (__hasProp.call(parent, key)) child[key] = parent[key];
|
|||
|
}
|
|||
|
function ctor() {
|
|||
|
this.constructor = child;
|
|||
|
}
|
|||
|
ctor.prototype = parent.prototype;
|
|||
|
child.prototype = new ctor;
|
|||
|
child.__super__ = parent.prototype;
|
|||
|
return child;
|
|||
|
}, __slice = [].slice;
|
|||
|
events = require("./events");
|
|||
|
MarkedYAMLError = require("./errors").MarkedYAMLError;
|
|||
|
tokens = require("./tokens");
|
|||
|
this.ParserError = function(_super) {
|
|||
|
__extends(ParserError, _super);
|
|||
|
function ParserError() {
|
|||
|
_ref = ParserError.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref;
|
|||
|
}
|
|||
|
return ParserError;
|
|||
|
}(MarkedYAMLError);
|
|||
|
this.Parser = function() {
|
|||
|
var DEFAULT_TAGS;
|
|||
|
DEFAULT_TAGS = {
|
|||
|
"!": "!",
|
|||
|
"!!": "tag:yaml.org,2002:"
|
|||
|
};
|
|||
|
function Parser() {
|
|||
|
this.current_event = null;
|
|||
|
this.yaml_version = null;
|
|||
|
this.tag_handles = {};
|
|||
|
this.states = [];
|
|||
|
this.marks = [];
|
|||
|
this.state = "parse_stream_start";
|
|||
|
}
|
|||
|
Parser.prototype.dispose = function() {
|
|||
|
this.states = [];
|
|||
|
return this.state = null;
|
|||
|
};
|
|||
|
Parser.prototype.check_event = function() {
|
|||
|
var choice, choices, _i, _len;
|
|||
|
choices = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
|
|||
|
if (this.current_event === null) {
|
|||
|
if (this.state != null) {
|
|||
|
this.current_event = this[this.state]();
|
|||
|
}
|
|||
|
}
|
|||
|
if (this.current_event !== null) {
|
|||
|
if (choices.length === 0) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
for (_i = 0, _len = choices.length; _i < _len; _i++) {
|
|||
|
choice = choices[_i];
|
|||
|
if (this.current_event instanceof choice) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return false;
|
|||
|
};
|
|||
|
Parser.prototype.peek_event = function() {
|
|||
|
if (this.current_event === null && this.state != null) {
|
|||
|
this.current_event = this[this.state]();
|
|||
|
}
|
|||
|
return this.current_event;
|
|||
|
};
|
|||
|
Parser.prototype.get_event = function() {
|
|||
|
var event;
|
|||
|
if (this.current_event === null && this.state != null) {
|
|||
|
this.current_event = this[this.state]();
|
|||
|
}
|
|||
|
event = this.current_event;
|
|||
|
this.current_event = null;
|
|||
|
return event;
|
|||
|
};
|
|||
|
Parser.prototype.parse_stream_start = function() {
|
|||
|
var event, token;
|
|||
|
token = this.get_token();
|
|||
|
event = new events.StreamStartEvent(token.start_mark, token.end_mark);
|
|||
|
this.state = "parse_implicit_document_start";
|
|||
|
return event;
|
|||
|
};
|
|||
|
Parser.prototype.parse_implicit_document_start = function() {
|
|||
|
var end_mark, event, start_mark, token;
|
|||
|
if (!this.check_token(tokens.DirectiveToken, tokens.DocumentStartToken, tokens.StreamEndToken)) {
|
|||
|
this.tag_handles = DEFAULT_TAGS;
|
|||
|
token = this.peek_token();
|
|||
|
start_mark = end_mark = token.start_mark;
|
|||
|
event = new events.DocumentStartEvent(start_mark, end_mark, false);
|
|||
|
this.states.push("parse_document_end");
|
|||
|
this.state = "parse_block_node";
|
|||
|
return event;
|
|||
|
} else {
|
|||
|
return this.parse_document_start();
|
|||
|
}
|
|||
|
};
|
|||
|
Parser.prototype.parse_document_start = function() {
|
|||
|
var end_mark, event, start_mark, tags, token, version, _ref1;
|
|||
|
while (this.check_token(tokens.DocumentEndToken)) {
|
|||
|
this.get_token();
|
|||
|
}
|
|||
|
if (!this.check_token(tokens.StreamEndToken)) {
|
|||
|
start_mark = this.peek_token().start_mark;
|
|||
|
_ref1 = this.process_directives(), version = _ref1[0], tags = _ref1[1];
|
|||
|
if (!this.check_token(tokens.DocumentStartToken)) {
|
|||
|
throw new exports.ParserError("expected '<document start>', but found " + this.peek_token().id, this.peek_token().start_mark);
|
|||
|
}
|
|||
|
token = this.get_token();
|
|||
|
end_mark = token.end_mark;
|
|||
|
event = new events.DocumentStartEvent(start_mark, end_mark, true, version, tags);
|
|||
|
this.states.push("parse_document_end");
|
|||
|
this.state = "parse_document_content";
|
|||
|
} else {
|
|||
|
token = this.get_token();
|
|||
|
event = new events.StreamEndEvent(token.start_mark, token.end_mark);
|
|||
|
if (this.states.length !== 0) {
|
|||
|
throw new Error("assertion error, states should be empty");
|
|||
|
}
|
|||
|
if (this.marks.length !== 0) {
|
|||
|
throw new Error("assertion error, marks should be empty");
|
|||
|
}
|
|||
|
this.state = null;
|
|||
|
}
|
|||
|
return event;
|
|||
|
};
|
|||
|
Parser.prototype.parse_document_end = function() {
|
|||
|
var end_mark, event, explicit, start_mark, token;
|
|||
|
token = this.peek_token();
|
|||
|
start_mark = end_mark = token.start_mark;
|
|||
|
explicit = false;
|
|||
|
if (this.check_token(tokens.DocumentEndToken)) {
|
|||
|
token = this.get_token();
|
|||
|
end_mark = token.end_mark;
|
|||
|
explicit = true;
|
|||
|
}
|
|||
|
event = new events.DocumentEndEvent(start_mark, end_mark, explicit);
|
|||
|
this.state = "parse_document_start";
|
|||
|
return event;
|
|||
|
};
|
|||
|
Parser.prototype.parse_document_content = function() {
|
|||
|
var event;
|
|||
|
if (this.check_token(tokens.DirectiveToken, tokens.DocumentStartToken, tokens.DocumentEndToken, tokens.StreamEndToken)) {
|
|||
|
event = this.process_empty_scalar(this.peek_token().start_mark);
|
|||
|
this.state = this.states.pop();
|
|||
|
return event;
|
|||
|
} else {
|
|||
|
return this.parse_block_node();
|
|||
|
}
|
|||
|
};
|
|||
|
Parser.prototype.process_directives = function() {
|
|||
|
var handle, major, minor, prefix, tag_handles_copy, token, value, _ref1, _ref2, _ref3;
|
|||
|
this.yaml_version = null;
|
|||
|
this.tag_handles = {};
|
|||
|
while (this.check_token(tokens.DirectiveToken)) {
|
|||
|
token = this.get_token();
|
|||
|
if (token.name === "YAML") {
|
|||
|
if (this.yaml_version !== null) {
|
|||
|
throw new exports.ParserError(null, null, "found duplicate YAML directive", token.start_mark);
|
|||
|
}
|
|||
|
_ref1 = token.value, major = _ref1[0], minor = _ref1[1];
|
|||
|
if (major !== 1) {
|
|||
|
throw new exports.ParserError(null, null, "found incompatible YAML document (version 1.* is required)", token.start_mark);
|
|||
|
}
|
|||
|
this.yaml_version = token.value;
|
|||
|
} else if (token.name === "TAG") {
|
|||
|
_ref2 = this.tag_handles, handle = _ref2[0], prefix = _ref2[1];
|
|||
|
if (handle in this.tag_handles) {
|
|||
|
throw new exports.ParserError(null, null, "duplicate tag handle " + handle, token.start_mark);
|
|||
|
}
|
|||
|
this.tag_handles[handle] = prefix;
|
|||
|
}
|
|||
|
}
|
|||
|
tag_handles_copy = null;
|
|||
|
_ref3 = this.tag_handles;
|
|||
|
for (handle in _ref3) {
|
|||
|
if (!__hasProp.call(_ref3, handle)) continue;
|
|||
|
prefix = _ref3[handle];
|
|||
|
if (tag_handles_copy == null) {
|
|||
|
tag_handles_copy = {};
|
|||
|
}
|
|||
|
tag_handles_copy[handle] = prefix;
|
|||
|
}
|
|||
|
value = [ this.yaml_version, tag_handles_copy ];
|
|||
|
for (handle in DEFAULT_TAGS) {
|
|||
|
if (!__hasProp.call(DEFAULT_TAGS, handle)) continue;
|
|||
|
prefix = DEFAULT_TAGS[handle];
|
|||
|
if (!(prefix in this.tag_handles)) {
|
|||
|
this.tag_handles[handle] = prefix;
|
|||
|
}
|
|||
|
}
|
|||
|
return value;
|
|||
|
};
|
|||
|
Parser.prototype.parse_block_node = function() {
|
|||
|
return this.parse_node(true);
|
|||
|
};
|
|||
|
Parser.prototype.parse_flow_node = function() {
|
|||
|
return this.parse_node();
|
|||
|
};
|
|||
|
Parser.prototype.parse_block_node_or_indentless_sequence = function() {
|
|||
|
return this.parse_node(true, true);
|
|||
|
};
|
|||
|
Parser.prototype.parse_node = function(block, indentless_sequence) {
|
|||
|
var anchor, end_mark, event, handle, implicit, node, start_mark, suffix, tag, tag_mark, token;
|
|||
|
if (block == null) {
|
|||
|
block = false;
|
|||
|
}
|
|||
|
if (indentless_sequence == null) {
|
|||
|
indentless_sequence = false;
|
|||
|
}
|
|||
|
if (this.check_token(tokens.AliasToken)) {
|
|||
|
token = this.get_token();
|
|||
|
event = new events.AliasEvent(token.value, token.start_mark, token.end_mark);
|
|||
|
this.state = this.states.pop();
|
|||
|
} else {
|
|||
|
anchor = null;
|
|||
|
tag = null;
|
|||
|
start_mark = end_mark = tag_mark = null;
|
|||
|
if (this.check_token(tokens.AnchorToken)) {
|
|||
|
token = this.get_token();
|
|||
|
start_mark = token.start_mark;
|
|||
|
end_mark = token.end_mark;
|
|||
|
anchor = token.value;
|
|||
|
if (this.check_token(tokens.TagToken)) {
|
|||
|
token = this.get_token();
|
|||
|
tag_mark = token.start_mark;
|
|||
|
end_mark = token.end_mark;
|
|||
|
tag = token.value;
|
|||
|
}
|
|||
|
} else if (this.check_token(tokens.TagToken)) {
|
|||
|
token = this.get_token();
|
|||
|
start_mark = tag_mark = token.start_mark;
|
|||
|
end_mark = token.end_mark;
|
|||
|
tag = token.value;
|
|||
|
if (this.check_token(tokens.AnchorToken)) {
|
|||
|
token = this.get_token();
|
|||
|
end_mark = token.end_mark;
|
|||
|
anchor = token.value;
|
|||
|
}
|
|||
|
}
|
|||
|
if (tag !== null) {
|
|||
|
handle = tag[0], suffix = tag[1];
|
|||
|
if (handle !== null) {
|
|||
|
if (!(handle in this.tag_handles)) {
|
|||
|
throw new exports.ParserError("while parsing a node", start_mark, "found undefined tag handle " + handle, tag_mark);
|
|||
|
}
|
|||
|
tag = this.tag_handles[handle] + suffix;
|
|||
|
} else {
|
|||
|
tag = suffix;
|
|||
|
}
|
|||
|
}
|
|||
|
if (start_mark === null) {
|
|||
|
start_mark = end_mark = this.peek_token().start_mark;
|
|||
|
}
|
|||
|
event = null;
|
|||
|
implicit = tag === null || tag === "!";
|
|||
|
if (indentless_sequence && this.check_token(tokens.BlockEntryToken)) {
|
|||
|
end_mark = this.peek_token().end_mark;
|
|||
|
event = new events.SequenceStartEvent(anchor, tag, implicit, start_mark, end_mark);
|
|||
|
this.state = "parse_indentless_sequence_entry";
|
|||
|
} else {
|
|||
|
if (this.check_token(tokens.ScalarToken)) {
|
|||
|
token = this.get_token();
|
|||
|
end_mark = token.end_mark;
|
|||
|
if (token.plain && tag === null || tag === "!") {
|
|||
|
implicit = [ true, false ];
|
|||
|
} else if (tag === null) {
|
|||
|
implicit = [ false, true ];
|
|||
|
} else {
|
|||
|
implicit = [ false, false ];
|
|||
|
}
|
|||
|
event = new events.ScalarEvent(anchor, tag, implicit, token.value, start_mark, end_mark, token.style);
|
|||
|
this.state = this.states.pop();
|
|||
|
} else if (this.check_token(tokens.FlowSequenceStartToken)) {
|
|||
|
end_mark = this.peek_token().end_mark;
|
|||
|
event = new events.SequenceStartEvent(anchor, tag, implicit, start_mark, end_mark, true);
|
|||
|
this.state = "parse_flow_sequence_first_entry";
|
|||
|
} else if (this.check_token(tokens.FlowMappingStartToken)) {
|
|||
|
end_mark = this.peek_token().end_mark;
|
|||
|
event = new events.MappingStartEvent(anchor, tag, implicit, start_mark, end_mark, true);
|
|||
|
this.state = "parse_flow_mapping_first_key";
|
|||
|
} else if (block && this.check_token(tokens.BlockSequenceStartToken)) {
|
|||
|
end_mark = this.peek_token().end_mark;
|
|||
|
event = new events.SequenceStartEvent(anchor, tag, implicit, start_mark, end_mark, false);
|
|||
|
this.state = "parse_block_sequence_first_entry";
|
|||
|
} else if (block && this.check_token(tokens.BlockMappingStartToken)) {
|
|||
|
end_mark = this.peek_token().end_mark;
|
|||
|
event = new events.MappingStartEvent(anchor, tag, implicit, start_mark, end_mark, false);
|
|||
|
this.state = "parse_block_mapping_first_key";
|
|||
|
} else if (anchor !== null || tag !== null) {
|
|||
|
event = new events.ScalarEvent(anchor, tag, [ implicit, false ], "", start_mark, end_mark);
|
|||
|
this.state = this.states.pop();
|
|||
|
} else {
|
|||
|
if (block) {
|
|||
|
node = "block";
|
|||
|
} else {
|
|||
|
node = "flow";
|
|||
|
}
|
|||
|
token = this.peek_token();
|
|||
|
throw new exports.ParserError("while parsing a " + node + " node", start_mark, "expected the node content, but found " + token.id, token.start_mark);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return event;
|
|||
|
};
|
|||
|
Parser.prototype.parse_block_sequence_first_entry = function() {
|
|||
|
var token;
|
|||
|
token = this.get_token();
|
|||
|
this.marks.push(token.start_mark);
|
|||
|
return this.parse_block_sequence_entry();
|
|||
|
};
|
|||
|
Parser.prototype.parse_block_sequence_entry = function() {
|
|||
|
var event, token;
|
|||
|
if (this.check_token(tokens.BlockEntryToken)) {
|
|||
|
token = this.get_token();
|
|||
|
if (!this.check_token(tokens.BlockEntryToken, tokens.BlockEndToken)) {
|
|||
|
this.states.push("parse_block_sequence_entry");
|
|||
|
return this.parse_block_node();
|
|||
|
} else {
|
|||
|
this.state = "parse_block_sequence_entry";
|
|||
|
return this.process_empty_scalar(token.end_mark);
|
|||
|
}
|
|||
|
}
|
|||
|
if (!this.check_token(tokens.BlockEndToken)) {
|
|||
|
token = this.peek_token();
|
|||
|
throw new exports.ParserError("while parsing a block collection", this.marks.slice(-1)[0], "expected <block end>, but found " + token.id, token.start_mark);
|
|||
|
}
|
|||
|
token = this.get_token();
|
|||
|
event = new events.SequenceEndEvent(token.start_mark, token.end_mark);
|
|||
|
this.state = this.states.pop();
|
|||
|
this.marks.pop();
|
|||
|
return event;
|
|||
|
};
|
|||
|
Parser.prototype.parse_indentless_sequence_entry = function() {
|
|||
|
var event, token;
|
|||
|
if (this.check_token(tokens.BlockEntryToken)) {
|
|||
|
token = this.get_token();
|
|||
|
if (!this.check_token(tokens.BlockEntryToken, tokens.KeyToken, tokens.ValueToken, tokens.BlockEndToken)) {
|
|||
|
this.states.push("parse_indentless_sequence_entry");
|
|||
|
return this.parse_block_node();
|
|||
|
} else {
|
|||
|
this.state = "parse_indentless_sequence_entry";
|
|||
|
return this.process_empty_scalar(token.end_mark);
|
|||
|
}
|
|||
|
}
|
|||
|
token = this.peek_token();
|
|||
|
event = new events.SequenceEndEvent(token.start_mark, token.start_mark);
|
|||
|
this.state = this.states.pop();
|
|||
|
return event;
|
|||
|
};
|
|||
|
Parser.prototype.parse_block_mapping_first_key = function() {
|
|||
|
var token;
|
|||
|
token = this.get_token();
|
|||
|
this.marks.push(token.start_mark);
|
|||
|
return this.parse_block_mapping_key();
|
|||
|
};
|
|||
|
Parser.prototype.parse_block_mapping_key = function() {
|
|||
|
var event, token;
|
|||
|
if (this.check_token(tokens.KeyToken)) {
|
|||
|
token = this.get_token();
|
|||
|
if (!this.check_token(tokens.KeyToken, tokens.ValueToken, tokens.BlockEndToken)) {
|
|||
|
this.states.push("parse_block_mapping_value");
|
|||
|
return this.parse_block_node_or_indentless_sequence();
|
|||
|
} else {
|
|||
|
this.state = "parse_block_mapping_value";
|
|||
|
return this.process_empty_scalar(token.end_mark);
|
|||
|
}
|
|||
|
}
|
|||
|
if (!this.check_token(tokens.BlockEndToken)) {
|
|||
|
token = this.peek_token();
|
|||
|
throw new exports.ParserError("while parsing a block mapping", this.marks.slice(-1)[0], "expected <block end>, but found " + token.id, token.start_mark);
|
|||
|
}
|
|||
|
token = this.get_token();
|
|||
|
event = new events.MappingEndEvent(token.start_mark, token.end_mark);
|
|||
|
this.state = this.states.pop();
|
|||
|
this.marks.pop();
|
|||
|
return event;
|
|||
|
};
|
|||
|
Parser.prototype.parse_block_mapping_value = function() {
|
|||
|
var token;
|
|||
|
if (this.check_token(tokens.ValueToken)) {
|
|||
|
token = this.get_token();
|
|||
|
if (!this.check_token(tokens.KeyToken, tokens.ValueToken, tokens.BlockEndToken)) {
|
|||
|
this.states.push("parse_block_mapping_key");
|
|||
|
return this.parse_block_node_or_indentless_sequence();
|
|||
|
} else {
|
|||
|
this.state = "parse_block_mapping_key";
|
|||
|
return this.process_empty_scalar(token.end_mark);
|
|||
|
}
|
|||
|
} else {
|
|||
|
this.state = "parse_block_mapping_key";
|
|||
|
token = this.peek_token();
|
|||
|
return this.process_empty_scalar(token.start_mark);
|
|||
|
}
|
|||
|
};
|
|||
|
Parser.prototype.parse_flow_sequence_first_entry = function() {
|
|||
|
var token;
|
|||
|
token = this.get_token();
|
|||
|
this.marks.push(token.start_mark);
|
|||
|
return this.parse_flow_sequence_entry(true);
|
|||
|
};
|
|||
|
Parser.prototype.parse_flow_sequence_entry = function(first) {
|
|||
|
var event, token;
|
|||
|
if (first == null) {
|
|||
|
first = false;
|
|||
|
}
|
|||
|
if (!this.check_token(tokens.FlowSequenceEndToken)) {
|
|||
|
if (!first) {
|
|||
|
if (this.check_token(tokens.FlowEntryToken)) {
|
|||
|
this.get_token();
|
|||
|
} else {
|
|||
|
token = this.peek_token();
|
|||
|
throw new exports.ParserError("while parsing a flow sequence", this.marks.slice(-1)[0], "expected ',' or ']', but got " + token.id, token.start_mark);
|
|||
|
}
|
|||
|
}
|
|||
|
if (this.check_token(tokens.KeyToken)) {
|
|||
|
token = this.peek_token();
|
|||
|
event = new events.MappingStartEvent(null, null, true, token.start_mark, token.end_mark, true);
|
|||
|
this.state = "parse_flow_sequence_entry_mapping_key";
|
|||
|
return event;
|
|||
|
} else if (!this.check_token(tokens.FlowSequenceEndToken)) {
|
|||
|
this.states.push("parse_flow_sequence_entry");
|
|||
|
return this.parse_flow_node();
|
|||
|
}
|
|||
|
}
|
|||
|
token = this.get_token();
|
|||
|
event = new events.SequenceEndEvent(token.start_mark, token.end_mark);
|
|||
|
this.state = this.states.pop();
|
|||
|
this.marks.pop();
|
|||
|
return event;
|
|||
|
};
|
|||
|
Parser.prototype.parse_flow_sequence_entry_mapping_key = function() {
|
|||
|
var token;
|
|||
|
token = this.get_token();
|
|||
|
if (!this.check_token(tokens.ValueToken, tokens.FlowEntryToken, tokens.FlowSequenceEndToken)) {
|
|||
|
this.states.push("parse_flow_sequence_entry_mapping_value");
|
|||
|
return this.parse_flow_node();
|
|||
|
} else {
|
|||
|
this.state = "parse_flow_sequence_entry_mapping_value";
|
|||
|
return this.process_empty_scalar(token.end_mark);
|
|||
|
}
|
|||
|
};
|
|||
|
Parser.prototype.parse_flow_sequence_entry_mapping_value = function() {
|
|||
|
var token;
|
|||
|
if (this.check_token(tokens.ValueToken)) {
|
|||
|
token = this.get_token();
|
|||
|
if (!this.check_token(tokens.FlowEntryToken, tokens.FlowSequenceEndToken)) {
|
|||
|
this.states.push("parse_flow_sequence_entry_mapping_end");
|
|||
|
return this.parse_flow_node();
|
|||
|
} else {
|
|||
|
this.state = "parse_flow_sequence_entry_mapping_end";
|
|||
|
return this.process_empty_scalar(token.end_mark);
|
|||
|
}
|
|||
|
} else {
|
|||
|
this.state = "parse_flow_sequence_entry_mapping_end";
|
|||
|
token = this.peek_token();
|
|||
|
return this.process_empty_scalar(token.start_mark);
|
|||
|
}
|
|||
|
};
|
|||
|
Parser.prototype.parse_flow_sequence_entry_mapping_end = function() {
|
|||
|
var token;
|
|||
|
this.state = "parse_flow_sequence_entry";
|
|||
|
token = this.peek_token();
|
|||
|
return new events.MappingEndEvent(token.start_mark, token.start_mark);
|
|||
|
};
|
|||
|
Parser.prototype.parse_flow_mapping_first_key = function() {
|
|||
|
var token;
|
|||
|
token = this.get_token();
|
|||
|
this.marks.push(token.start_mark);
|
|||
|
return this.parse_flow_mapping_key(true);
|
|||
|
};
|
|||
|
Parser.prototype.parse_flow_mapping_key = function(first) {
|
|||
|
var event, token;
|
|||
|
if (first == null) {
|
|||
|
first = false;
|
|||
|
}
|
|||
|
if (!this.check_token(tokens.FlowMappingEndToken)) {
|
|||
|
if (!first) {
|
|||
|
if (this.check_token(tokens.FlowEntryToken)) {
|
|||
|
this.get_token();
|
|||
|
} else {
|
|||
|
token = this.peek_token();
|
|||
|
throw new exports.ParserError("while parsing a flow mapping", this.marks.slice(-1)[0], "expected ',' or '}', but got " + token.id, token.start_mark);
|
|||
|
}
|
|||
|
}
|
|||
|
if (this.check_token(tokens.KeyToken)) {
|
|||
|
token = this.get_token();
|
|||
|
if (!this.check_token(tokens.ValueToken, tokens.FlowEntryToken, tokens.FlowMappingEndToken)) {
|
|||
|
this.states.push("parse_flow_mapping_value");
|
|||
|
return this.parse_flow_node();
|
|||
|
} else {
|
|||
|
this.state = "parse_flow_mapping_value";
|
|||
|
return this.process_empty_scalar(token.end_mark);
|
|||
|
}
|
|||
|
} else if (!this.check_token(tokens.FlowMappingEndToken)) {
|
|||
|
this.states.push("parse_flow_mapping_empty_value");
|
|||
|
return this.parse_flow_node();
|
|||
|
}
|
|||
|
}
|
|||
|
token = this.get_token();
|
|||
|
event = new events.MappingEndEvent(token.start_mark, token.end_mark);
|
|||
|
this.state = this.states.pop();
|
|||
|
this.marks.pop();
|
|||
|
return event;
|
|||
|
};
|
|||
|
Parser.prototype.parse_flow_mapping_value = function() {
|
|||
|
var token;
|
|||
|
if (this.check_token(tokens.ValueToken)) {
|
|||
|
token = this.get_token();
|
|||
|
if (!this.check_token(tokens.FlowEntryToken, tokens.FlowMappingEndToken)) {
|
|||
|
this.states.push("parse_flow_mapping_key");
|
|||
|
return this.parse_flow_node();
|
|||
|
} else {
|
|||
|
this.state = "parse_flow_mapping_key";
|
|||
|
return this.process_empty_scalar(token.end_mark);
|
|||
|
}
|
|||
|
} else {
|
|||
|
this.state = "parse_flow_mapping_key";
|
|||
|
token = this.peek_token();
|
|||
|
return this.process_empty_scalar(token.start_mark);
|
|||
|
}
|
|||
|
};
|
|||
|
Parser.prototype.parse_flow_mapping_empty_value = function() {
|
|||
|
this.state = "parse_flow_mapping_key";
|
|||
|
return this.process_empty_scalar(this.peek_token().start_mark);
|
|||
|
};
|
|||
|
Parser.prototype.process_empty_scalar = function(mark) {
|
|||
|
return new events.ScalarEvent(null, null, [ true, false ], "", mark, mark);
|
|||
|
};
|
|||
|
return Parser;
|
|||
|
}();
|
|||
|
}).call(this);
|
|||
|
});
|
|||
|
register({
|
|||
|
"0": [ "./resolver" ]
|
|||
|
}, 0, function(global, module, exports, require, window) {
|
|||
|
(function() {
|
|||
|
var YAMLError, nodes, util, _ref, _ref1, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) {
|
|||
|
for (var key in parent) {
|
|||
|
if (__hasProp.call(parent, key)) child[key] = parent[key];
|
|||
|
}
|
|||
|
function ctor() {
|
|||
|
this.constructor = child;
|
|||
|
}
|
|||
|
ctor.prototype = parent.prototype;
|
|||
|
child.prototype = new ctor;
|
|||
|
child.__super__ = parent.prototype;
|
|||
|
return child;
|
|||
|
}, __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;
|
|||
|
};
|
|||
|
nodes = require("./nodes");
|
|||
|
util = require("./util");
|
|||
|
YAMLError = require("./errors").YAMLError;
|
|||
|
this.ResolverError = function(_super) {
|
|||
|
__extends(ResolverError, _super);
|
|||
|
function ResolverError() {
|
|||
|
_ref = ResolverError.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref;
|
|||
|
}
|
|||
|
return ResolverError;
|
|||
|
}(YAMLError);
|
|||
|
this.BaseResolver = function() {
|
|||
|
var DEFAULT_MAPPING_TAG, DEFAULT_SCALAR_TAG, DEFAULT_SEQUENCE_TAG;
|
|||
|
DEFAULT_SCALAR_TAG = "tag:yaml.org,2002:str";
|
|||
|
DEFAULT_SEQUENCE_TAG = "tag:yaml.org,2002:seq";
|
|||
|
DEFAULT_MAPPING_TAG = "tag:yaml.org,2002:map";
|
|||
|
BaseResolver.prototype.yaml_implicit_resolvers = {};
|
|||
|
BaseResolver.prototype.yaml_path_resolvers = {};
|
|||
|
BaseResolver.add_implicit_resolver = function(tag, regexp, first) {
|
|||
|
var char, _base, _i, _len, _ref1, _results;
|
|||
|
if (first == null) {
|
|||
|
first = [ null ];
|
|||
|
}
|
|||
|
if (!this.prototype.hasOwnProperty("yaml_implicit_resolvers")) {
|
|||
|
this.prototype.yaml_implicit_resolvers = util.extend({}, this.prototype.yaml_implicit_resolvers);
|
|||
|
}
|
|||
|
_results = [];
|
|||
|
for (_i = 0, _len = first.length; _i < _len; _i++) {
|
|||
|
char = first[_i];
|
|||
|
_results.push(((_ref1 = (_base = this.prototype.yaml_implicit_resolvers)[char]) != null ? _ref1 : _base[char] = []).push([ tag, regexp ]));
|
|||
|
}
|
|||
|
return _results;
|
|||
|
};
|
|||
|
function BaseResolver() {
|
|||
|
this.resolver_exact_paths = [];
|
|||
|
this.resolver_prefix_paths = [];
|
|||
|
}
|
|||
|
BaseResolver.prototype.descend_resolver = function(current_node, current_index) {
|
|||
|
var depth, exact_paths, kind, path, prefix_paths, _i, _j, _len, _len1, _ref1, _ref2, _ref3, _ref4;
|
|||
|
if (util.is_empty(this.yaml_path_resolvers)) {
|
|||
|
return;
|
|||
|
}
|
|||
|
exact_paths = {};
|
|||
|
prefix_paths = [];
|
|||
|
if (current_node) {
|
|||
|
depth = this.resolver_prefix_paths.length;
|
|||
|
_ref1 = this.resolver_prefix_paths.slice(-1)[0];
|
|||
|
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
|||
|
_ref2 = _ref1[_i], path = _ref2[0], kind = _ref2[1];
|
|||
|
if (this.check_resolver_prefix(depth, path, kind, current_node, current_index)) {
|
|||
|
if (path.length > depth) {
|
|||
|
prefix_paths.push([ path, kind ]);
|
|||
|
} else {
|
|||
|
exact_paths[kind] = this.yaml_path_resolvers[path][kind];
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
} else {
|
|||
|
_ref3 = this.yaml_path_resolvers;
|
|||
|
for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
|
|||
|
_ref4 = _ref3[_j], path = _ref4[0], kind = _ref4[1];
|
|||
|
if (!path) {
|
|||
|
exact_paths[kind] = this.yaml_path_resolvers[path][kind];
|
|||
|
} else {
|
|||
|
prefix_paths.push([ path, kind ]);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
this.resolver_exact_paths.push(exact_paths);
|
|||
|
return this.resolver_prefix_paths.push(prefix_paths);
|
|||
|
};
|
|||
|
BaseResolver.prototype.ascend_resolver = function() {
|
|||
|
if (util.is_empty(this.yaml_path_resolvers)) {
|
|||
|
return;
|
|||
|
}
|
|||
|
this.resolver_exact_paths.pop();
|
|||
|
return this.resolver_prefix_paths.pop();
|
|||
|
};
|
|||
|
BaseResolver.prototype.check_resolver_prefix = function(depth, path, kind, current_node, current_index) {
|
|||
|
var index_check, node_check, _ref1;
|
|||
|
_ref1 = path[depth - 1], node_check = _ref1[0], index_check = _ref1[1];
|
|||
|
if (typeof node_check === "string") {
|
|||
|
if (current_node.tag !== node_check) {
|
|||
|
return;
|
|||
|
}
|
|||
|
} else if (node_check !== null) {
|
|||
|
if (!(current_node instanceof node_check)) {
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
if (index_check === true && current_index !== null) {
|
|||
|
return;
|
|||
|
}
|
|||
|
if ((index_check === false || index_check === null) && current_index === null) {
|
|||
|
return;
|
|||
|
}
|
|||
|
if (typeof index_check === "string") {
|
|||
|
if (!(current_index instanceof nodes.ScalarNode) && index_check === current_index.value) {
|
|||
|
return;
|
|||
|
}
|
|||
|
} else if (typeof index_check === "number") {
|
|||
|
if (index_check !== current_index) {
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
return true;
|
|||
|
};
|
|||
|
BaseResolver.prototype.resolve = function(kind, value, implicit) {
|
|||
|
var empty, exact_paths, k, regexp, resolvers, tag, _i, _len, _ref1, _ref2, _ref3, _ref4;
|
|||
|
if (kind === nodes.ScalarNode && implicit[0]) {
|
|||
|
if (value === "") {
|
|||
|
resolvers = (_ref1 = this.yaml_implicit_resolvers[""]) != null ? _ref1 : [];
|
|||
|
} else {
|
|||
|
resolvers = (_ref2 = this.yaml_implicit_resolvers[value[0]]) != null ? _ref2 : [];
|
|||
|
}
|
|||
|
resolvers = resolvers.concat((_ref3 = this.yaml_implicit_resolvers[null]) != null ? _ref3 : []);
|
|||
|
for (_i = 0, _len = resolvers.length; _i < _len; _i++) {
|
|||
|
_ref4 = resolvers[_i], tag = _ref4[0], regexp = _ref4[1];
|
|||
|
if (value.match(regexp)) {
|
|||
|
return tag;
|
|||
|
}
|
|||
|
}
|
|||
|
implicit = implicit[1];
|
|||
|
}
|
|||
|
empty = true;
|
|||
|
for (k in this.yaml_path_resolvers) {
|
|||
|
if ({}[k] == null) {
|
|||
|
empty = false;
|
|||
|
}
|
|||
|
}
|
|||
|
if (!empty) {
|
|||
|
exact_paths = this.resolver_exact_paths.slice(-1)[0];
|
|||
|
if (__indexOf.call(exact_paths, kind) >= 0) {
|
|||
|
return exact_paths[kind];
|
|||
|
}
|
|||
|
if (__indexOf.call(exact_paths, null) >= 0) {
|
|||
|
return exact_paths[null];
|
|||
|
}
|
|||
|
}
|
|||
|
if (kind === nodes.ScalarNode) {
|
|||
|
return DEFAULT_SCALAR_TAG;
|
|||
|
}
|
|||
|
if (kind === nodes.SequenceNode) {
|
|||
|
return DEFAULT_SEQUENCE_TAG;
|
|||
|
}
|
|||
|
if (kind === nodes.MappingNode) {
|
|||
|
return DEFAULT_MAPPING_TAG;
|
|||
|
}
|
|||
|
};
|
|||
|
return BaseResolver;
|
|||
|
}();
|
|||
|
this.Resolver = function(_super) {
|
|||
|
__extends(Resolver, _super);
|
|||
|
function Resolver() {
|
|||
|
_ref1 = Resolver.__super__.constructor.apply(this, arguments);
|
|||
|
return _ref1;
|
|||
|
}
|
|||
|
return Resolver;
|
|||
|
}(this.BaseResolver);
|
|||
|
this.Resolver.add_implicit_resolver("tag:yaml.org,2002:bool", /^(?:yes|Yes|YES|true|True|TRUE|on|On|ON|no|No|NO|false|False|FALSE|off|Off|OFF)$/, "yYnNtTfFoO");
|
|||
|
this.Resolver.add_implicit_resolver("tag:yaml.org,2002:float", /^(?:[-+]?(?:[0-9][0-9_]*)\.[0-9_]*(?:[eE][-+][0-9]+)?|\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*|[-+]?\.(?:inf|Inf|INF)|\.(?:nan|NaN|NAN))$/, "-+0123456789.");
|
|||
|
this.Resolver.add_implicit_resolver("tag:yaml.org,2002:int", /^(?:[-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[0-9a-fA-F_]+|[-+]?0o[0-7_]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$/, "-+0123456789");
|
|||
|
this.Resolver.add_implicit_resolver("tag:yaml.org,2002:merge", /^(?:<<)$/, "<");
|
|||
|
this.Resolver.add_implicit_resolver("tag:yaml.org,2002:null", /^(?:~|null|Null|NULL|)$/, [ "~", "n", "N", "" ]);
|
|||
|
this.Resolver.add_implicit_resolver("tag:yaml.org,2002:timestamp", /^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]|[0-9][0-9][0-9][0-9]-[0-9][0-9]?-[0-9][0-9]?(?:[Tt]|[\x20\t]+)[0-9][0-9]?:[0-9][0-9]:[0-9][0-9](?:\.[0-9]*)?(?:[\x20\t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$/, "0123456789");
|
|||
|
this.Resolver.add_implicit_resolver("tag:yaml.org,2002:value", /^(?:=)$/, "=");
|
|||
|
this.Resolver.add_implicit_resolver("tag:yaml.org,2002:yaml", /^(?:!|&|\*)$/, "!&*");
|
|||
|
}).call(this);
|
|||
|
});
|
|||
|
register({
|
|||
|
"0": [ "./loader" ]
|
|||
|
}, 0, function(global, module, exports, require, window) {
|
|||
|
(function() {
|
|||
|
var composer, constructor, parser, reader, resolver, scanner, util;
|
|||
|
util = require("./util");
|
|||
|
reader = require("./reader");
|
|||
|
scanner = require("./scanner");
|
|||
|
parser = require("./parser");
|
|||
|
composer = require("./composer");
|
|||
|
resolver = require("./resolver");
|
|||
|
constructor = require("./constructor");
|
|||
|
this.make_loader = function(Reader, Scanner, Parser, Composer, Resolver, Constructor) {
|
|||
|
if (Reader == null) {
|
|||
|
Reader = reader.Reader;
|
|||
|
}
|
|||
|
if (Scanner == null) {
|
|||
|
Scanner = scanner.Scanner;
|
|||
|
}
|
|||
|
if (Parser == null) {
|
|||
|
Parser = parser.Parser;
|
|||
|
}
|
|||
|
if (Composer == null) {
|
|||
|
Composer = composer.Composer;
|
|||
|
}
|
|||
|
if (Resolver == null) {
|
|||
|
Resolver = resolver.Resolver;
|
|||
|
}
|
|||
|
if (Constructor == null) {
|
|||
|
Constructor = constructor.Constructor;
|
|||
|
}
|
|||
|
return function() {
|
|||
|
var component, components;
|
|||
|
components = [ Reader, Scanner, Parser, Composer, Resolver, Constructor ];
|
|||
|
util.extend.apply(util, [ _Class.prototype ].concat(function() {
|
|||
|
var _i, _len, _results;
|
|||
|
_results = [];
|
|||
|
for (_i = 0, _len = components.length; _i < _len; _i++) {
|
|||
|
component = components[_i];
|
|||
|
_results.push(component.prototype);
|
|||
|
}
|
|||
|
return _results;
|
|||
|
}()));
|
|||
|
function _Class(stream) {
|
|||
|
var _i, _len, _ref;
|
|||
|
components[0].call(this, stream);
|
|||
|
_ref = components.slice(1);
|
|||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|||
|
component = _ref[_i];
|
|||
|
component.call(this);
|
|||
|
}
|
|||
|
}
|
|||
|
return _Class;
|
|||
|
}();
|
|||
|
};
|
|||
|
this.Loader = this.make_loader();
|
|||
|
}).call(this);
|
|||
|
});
|
|||
|
register({
|
|||
|
"": [ "yaml" ]
|
|||
|
}, 0, function(global, module, exports, require, window) {
|
|||
|
(function() {
|
|||
|
var fs;
|
|||
|
this.composer = require("./composer");
|
|||
|
this.constructor = require("./constructor");
|
|||
|
this.errors = require("./errors");
|
|||
|
this.events = require("./events");
|
|||
|
this.loader = require("./loader");
|
|||
|
this.nodes = require("./nodes");
|
|||
|
this.parser = require("./parser");
|
|||
|
this.reader = require("./reader");
|
|||
|
this.resolver = require("./resolver");
|
|||
|
this.scanner = require("./scanner");
|
|||
|
this.tokens = require("./tokens");
|
|||
|
this.scan = function(stream, Loader) {
|
|||
|
var loader, _results;
|
|||
|
if (Loader == null) {
|
|||
|
Loader = exports.loader.Loader;
|
|||
|
}
|
|||
|
loader = new Loader(stream);
|
|||
|
_results = [];
|
|||
|
while (loader.check_token()) {
|
|||
|
_results.push(loader.get_token());
|
|||
|
}
|
|||
|
return _results;
|
|||
|
};
|
|||
|
this.parse = function(stream, Loader) {
|
|||
|
var loader, _results;
|
|||
|
if (Loader == null) {
|
|||
|
Loader = exports.loader.Loader;
|
|||
|
}
|
|||
|
loader = new Loader(stream);
|
|||
|
_results = [];
|
|||
|
while (loader.check_event()) {
|
|||
|
_results.push(loader.get_event());
|
|||
|
}
|
|||
|
return _results;
|
|||
|
};
|
|||
|
this.compose = function(stream, Loader) {
|
|||
|
var loader;
|
|||
|
if (Loader == null) {
|
|||
|
Loader = exports.loader.Loader;
|
|||
|
}
|
|||
|
loader = new Loader(stream);
|
|||
|
return loader.get_single_node();
|
|||
|
};
|
|||
|
this.compose_all = function(stream, Loader) {
|
|||
|
var loader, _results;
|
|||
|
if (Loader == null) {
|
|||
|
Loader = exports.loader.Loader;
|
|||
|
}
|
|||
|
loader = new Loader(stream);
|
|||
|
_results = [];
|
|||
|
while (loader.check_node()) {
|
|||
|
_results.push(loader.get_node());
|
|||
|
}
|
|||
|
return _results;
|
|||
|
};
|
|||
|
this.load = function(stream, Loader) {
|
|||
|
var loader;
|
|||
|
if (Loader == null) {
|
|||
|
Loader = exports.loader.Loader;
|
|||
|
}
|
|||
|
loader = new Loader(stream);
|
|||
|
return loader.get_single_data();
|
|||
|
};
|
|||
|
this.load_all = function(stream, Loader) {
|
|||
|
var loader, _results;
|
|||
|
if (Loader == null) {
|
|||
|
Loader = exports.loader.Loader;
|
|||
|
}
|
|||
|
loader = new Loader(stream);
|
|||
|
_results = [];
|
|||
|
while (loader.check_data()) {
|
|||
|
_results.push(loader.get_data());
|
|||
|
}
|
|||
|
return _results;
|
|||
|
};
|
|||
|
if (typeof require !== "undefined" && require !== null && require.extensions) {
|
|||
|
fs = require("fs");
|
|||
|
require.extensions[".yml"] = require.extensions[".yaml"] = function(module, filename) {
|
|||
|
return module.exports = exports.load_all(fs.readFileSync(filename, "utf8"));
|
|||
|
};
|
|||
|
}
|
|||
|
}).call(this);
|
|||
|
});
|
|||
|
root["yaml"] = require_from(null, "")("yaml");
|
|||
|
}).call(this);
|