Website/node_modules/yaml-js/lib/composer.js

165 lines
5.1 KiB
JavaScript

(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);
};
/*
Get the root node of the next document.
*/
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);