UNPKG

compound-ex4

Version:

Compound-ex4 - MVC framework for NodeJS (ExpressJs 4 version), fork compoundjs(https://github.com/1602/compound)

158 lines (136 loc) 5.22 kB
(function() { var MarkedYAMLError, events, nodes, extend = 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; }, hasProp = {}.hasOwnProperty; events = require('./events'); MarkedYAMLError = require('./errors').MarkedYAMLError; nodes = require('./nodes'); this.ComposerError = (function(superClass) { extend(ComposerError, superClass); function ComposerError() { return ComposerError.__super__.constructor.apply(this, arguments); } 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);