| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385 | 
							- // Generated by CoffeeScript 1.12.7
 
- (function() {
 
-   "use strict";
 
-   var bom, defaults, events, isEmpty, processItem, processors, sax, setImmediate,
 
-     bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
 
-     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;
 
-   sax = require('sax');
 
-   events = require('events');
 
-   bom = require('./bom');
 
-   processors = require('./processors');
 
-   setImmediate = require('timers').setImmediate;
 
-   defaults = require('./defaults').defaults;
 
-   isEmpty = function(thing) {
 
-     return typeof thing === "object" && (thing != null) && Object.keys(thing).length === 0;
 
-   };
 
-   processItem = function(processors, item, key) {
 
-     var i, len, process;
 
-     for (i = 0, len = processors.length; i < len; i++) {
 
-       process = processors[i];
 
-       item = process(item, key);
 
-     }
 
-     return item;
 
-   };
 
-   exports.Parser = (function(superClass) {
 
-     extend(Parser, superClass);
 
-     function Parser(opts) {
 
-       this.parseStringPromise = bind(this.parseStringPromise, this);
 
-       this.parseString = bind(this.parseString, this);
 
-       this.reset = bind(this.reset, this);
 
-       this.assignOrPush = bind(this.assignOrPush, this);
 
-       this.processAsync = bind(this.processAsync, this);
 
-       var key, ref, value;
 
-       if (!(this instanceof exports.Parser)) {
 
-         return new exports.Parser(opts);
 
-       }
 
-       this.options = {};
 
-       ref = defaults["0.2"];
 
-       for (key in ref) {
 
-         if (!hasProp.call(ref, key)) continue;
 
-         value = ref[key];
 
-         this.options[key] = value;
 
-       }
 
-       for (key in opts) {
 
-         if (!hasProp.call(opts, key)) continue;
 
-         value = opts[key];
 
-         this.options[key] = value;
 
-       }
 
-       if (this.options.xmlns) {
 
-         this.options.xmlnskey = this.options.attrkey + "ns";
 
-       }
 
-       if (this.options.normalizeTags) {
 
-         if (!this.options.tagNameProcessors) {
 
-           this.options.tagNameProcessors = [];
 
-         }
 
-         this.options.tagNameProcessors.unshift(processors.normalize);
 
-       }
 
-       this.reset();
 
-     }
 
-     Parser.prototype.processAsync = function() {
 
-       var chunk, err;
 
-       try {
 
-         if (this.remaining.length <= this.options.chunkSize) {
 
-           chunk = this.remaining;
 
-           this.remaining = '';
 
-           this.saxParser = this.saxParser.write(chunk);
 
-           return this.saxParser.close();
 
-         } else {
 
-           chunk = this.remaining.substr(0, this.options.chunkSize);
 
-           this.remaining = this.remaining.substr(this.options.chunkSize, this.remaining.length);
 
-           this.saxParser = this.saxParser.write(chunk);
 
-           return setImmediate(this.processAsync);
 
-         }
 
-       } catch (error1) {
 
-         err = error1;
 
-         if (!this.saxParser.errThrown) {
 
-           this.saxParser.errThrown = true;
 
-           return this.emit(err);
 
-         }
 
-       }
 
-     };
 
-     Parser.prototype.assignOrPush = function(obj, key, newValue) {
 
-       if (!(key in obj)) {
 
-         if (!this.options.explicitArray) {
 
-           return obj[key] = newValue;
 
-         } else {
 
-           return obj[key] = [newValue];
 
-         }
 
-       } else {
 
-         if (!(obj[key] instanceof Array)) {
 
-           obj[key] = [obj[key]];
 
-         }
 
-         return obj[key].push(newValue);
 
-       }
 
-     };
 
-     Parser.prototype.reset = function() {
 
-       var attrkey, charkey, ontext, stack;
 
-       this.removeAllListeners();
 
-       this.saxParser = sax.parser(this.options.strict, {
 
-         trim: false,
 
-         normalize: false,
 
-         xmlns: this.options.xmlns
 
-       });
 
-       this.saxParser.errThrown = false;
 
-       this.saxParser.onerror = (function(_this) {
 
-         return function(error) {
 
-           _this.saxParser.resume();
 
-           if (!_this.saxParser.errThrown) {
 
-             _this.saxParser.errThrown = true;
 
-             return _this.emit("error", error);
 
-           }
 
-         };
 
-       })(this);
 
-       this.saxParser.onend = (function(_this) {
 
-         return function() {
 
-           if (!_this.saxParser.ended) {
 
-             _this.saxParser.ended = true;
 
-             return _this.emit("end", _this.resultObject);
 
-           }
 
-         };
 
-       })(this);
 
-       this.saxParser.ended = false;
 
-       this.EXPLICIT_CHARKEY = this.options.explicitCharkey;
 
-       this.resultObject = null;
 
-       stack = [];
 
-       attrkey = this.options.attrkey;
 
-       charkey = this.options.charkey;
 
-       this.saxParser.onopentag = (function(_this) {
 
-         return function(node) {
 
-           var key, newValue, obj, processedKey, ref;
 
-           obj = Object.create(null);
 
-           obj[charkey] = "";
 
-           if (!_this.options.ignoreAttrs) {
 
-             ref = node.attributes;
 
-             for (key in ref) {
 
-               if (!hasProp.call(ref, key)) continue;
 
-               if (!(attrkey in obj) && !_this.options.mergeAttrs) {
 
-                 obj[attrkey] = Object.create(null);
 
-               }
 
-               newValue = _this.options.attrValueProcessors ? processItem(_this.options.attrValueProcessors, node.attributes[key], key) : node.attributes[key];
 
-               processedKey = _this.options.attrNameProcessors ? processItem(_this.options.attrNameProcessors, key) : key;
 
-               if (_this.options.mergeAttrs) {
 
-                 _this.assignOrPush(obj, processedKey, newValue);
 
-               } else {
 
-                 obj[attrkey][processedKey] = newValue;
 
-               }
 
-             }
 
-           }
 
-           obj["#name"] = _this.options.tagNameProcessors ? processItem(_this.options.tagNameProcessors, node.name) : node.name;
 
-           if (_this.options.xmlns) {
 
-             obj[_this.options.xmlnskey] = {
 
-               uri: node.uri,
 
-               local: node.local
 
-             };
 
-           }
 
-           return stack.push(obj);
 
-         };
 
-       })(this);
 
-       this.saxParser.onclosetag = (function(_this) {
 
-         return function() {
 
-           var cdata, emptyStr, key, node, nodeName, obj, objClone, old, s, xpath;
 
-           obj = stack.pop();
 
-           nodeName = obj["#name"];
 
-           if (!_this.options.explicitChildren || !_this.options.preserveChildrenOrder) {
 
-             delete obj["#name"];
 
-           }
 
-           if (obj.cdata === true) {
 
-             cdata = obj.cdata;
 
-             delete obj.cdata;
 
-           }
 
-           s = stack[stack.length - 1];
 
-           if (obj[charkey].match(/^\s*$/) && !cdata) {
 
-             emptyStr = obj[charkey];
 
-             delete obj[charkey];
 
-           } else {
 
-             if (_this.options.trim) {
 
-               obj[charkey] = obj[charkey].trim();
 
-             }
 
-             if (_this.options.normalize) {
 
-               obj[charkey] = obj[charkey].replace(/\s{2,}/g, " ").trim();
 
-             }
 
-             obj[charkey] = _this.options.valueProcessors ? processItem(_this.options.valueProcessors, obj[charkey], nodeName) : obj[charkey];
 
-             if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) {
 
-               obj = obj[charkey];
 
-             }
 
-           }
 
-           if (isEmpty(obj)) {
 
-             if (typeof _this.options.emptyTag === 'function') {
 
-               obj = _this.options.emptyTag();
 
-             } else {
 
-               obj = _this.options.emptyTag !== '' ? _this.options.emptyTag : emptyStr;
 
-             }
 
-           }
 
-           if (_this.options.validator != null) {
 
-             xpath = "/" + ((function() {
 
-               var i, len, results;
 
-               results = [];
 
-               for (i = 0, len = stack.length; i < len; i++) {
 
-                 node = stack[i];
 
-                 results.push(node["#name"]);
 
-               }
 
-               return results;
 
-             })()).concat(nodeName).join("/");
 
-             (function() {
 
-               var err;
 
-               try {
 
-                 return obj = _this.options.validator(xpath, s && s[nodeName], obj);
 
-               } catch (error1) {
 
-                 err = error1;
 
-                 return _this.emit("error", err);
 
-               }
 
-             })();
 
-           }
 
-           if (_this.options.explicitChildren && !_this.options.mergeAttrs && typeof obj === 'object') {
 
-             if (!_this.options.preserveChildrenOrder) {
 
-               node = Object.create(null);
 
-               if (_this.options.attrkey in obj) {
 
-                 node[_this.options.attrkey] = obj[_this.options.attrkey];
 
-                 delete obj[_this.options.attrkey];
 
-               }
 
-               if (!_this.options.charsAsChildren && _this.options.charkey in obj) {
 
-                 node[_this.options.charkey] = obj[_this.options.charkey];
 
-                 delete obj[_this.options.charkey];
 
-               }
 
-               if (Object.getOwnPropertyNames(obj).length > 0) {
 
-                 node[_this.options.childkey] = obj;
 
-               }
 
-               obj = node;
 
-             } else if (s) {
 
-               s[_this.options.childkey] = s[_this.options.childkey] || [];
 
-               objClone = Object.create(null);
 
-               for (key in obj) {
 
-                 if (!hasProp.call(obj, key)) continue;
 
-                 objClone[key] = obj[key];
 
-               }
 
-               s[_this.options.childkey].push(objClone);
 
-               delete obj["#name"];
 
-               if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) {
 
-                 obj = obj[charkey];
 
-               }
 
-             }
 
-           }
 
-           if (stack.length > 0) {
 
-             return _this.assignOrPush(s, nodeName, obj);
 
-           } else {
 
-             if (_this.options.explicitRoot) {
 
-               old = obj;
 
-               obj = Object.create(null);
 
-               obj[nodeName] = old;
 
-             }
 
-             _this.resultObject = obj;
 
-             _this.saxParser.ended = true;
 
-             return _this.emit("end", _this.resultObject);
 
-           }
 
-         };
 
-       })(this);
 
-       ontext = (function(_this) {
 
-         return function(text) {
 
-           var charChild, s;
 
-           s = stack[stack.length - 1];
 
-           if (s) {
 
-             s[charkey] += text;
 
-             if (_this.options.explicitChildren && _this.options.preserveChildrenOrder && _this.options.charsAsChildren && (_this.options.includeWhiteChars || text.replace(/\\n/g, '').trim() !== '')) {
 
-               s[_this.options.childkey] = s[_this.options.childkey] || [];
 
-               charChild = {
 
-                 '#name': '__text__'
 
-               };
 
-               charChild[charkey] = text;
 
-               if (_this.options.normalize) {
 
-                 charChild[charkey] = charChild[charkey].replace(/\s{2,}/g, " ").trim();
 
-               }
 
-               s[_this.options.childkey].push(charChild);
 
-             }
 
-             return s;
 
-           }
 
-         };
 
-       })(this);
 
-       this.saxParser.ontext = ontext;
 
-       return this.saxParser.oncdata = (function(_this) {
 
-         return function(text) {
 
-           var s;
 
-           s = ontext(text);
 
-           if (s) {
 
-             return s.cdata = true;
 
-           }
 
-         };
 
-       })(this);
 
-     };
 
-     Parser.prototype.parseString = function(str, cb) {
 
-       var err;
 
-       if ((cb != null) && typeof cb === "function") {
 
-         this.on("end", function(result) {
 
-           this.reset();
 
-           return cb(null, result);
 
-         });
 
-         this.on("error", function(err) {
 
-           this.reset();
 
-           return cb(err);
 
-         });
 
-       }
 
-       try {
 
-         str = str.toString();
 
-         if (str.trim() === '') {
 
-           this.emit("end", null);
 
-           return true;
 
-         }
 
-         str = bom.stripBOM(str);
 
-         if (this.options.async) {
 
-           this.remaining = str;
 
-           setImmediate(this.processAsync);
 
-           return this.saxParser;
 
-         }
 
-         return this.saxParser.write(str).close();
 
-       } catch (error1) {
 
-         err = error1;
 
-         if (!(this.saxParser.errThrown || this.saxParser.ended)) {
 
-           this.emit('error', err);
 
-           return this.saxParser.errThrown = true;
 
-         } else if (this.saxParser.ended) {
 
-           throw err;
 
-         }
 
-       }
 
-     };
 
-     Parser.prototype.parseStringPromise = function(str) {
 
-       return new Promise((function(_this) {
 
-         return function(resolve, reject) {
 
-           return _this.parseString(str, function(err, value) {
 
-             if (err) {
 
-               return reject(err);
 
-             } else {
 
-               return resolve(value);
 
-             }
 
-           });
 
-         };
 
-       })(this));
 
-     };
 
-     return Parser;
 
-   })(events);
 
-   exports.parseString = function(str, a, b) {
 
-     var cb, options, parser;
 
-     if (b != null) {
 
-       if (typeof b === 'function') {
 
-         cb = b;
 
-       }
 
-       if (typeof a === 'object') {
 
-         options = a;
 
-       }
 
-     } else {
 
-       if (typeof a === 'function') {
 
-         cb = a;
 
-       }
 
-       options = {};
 
-     }
 
-     parser = new exports.Parser(options);
 
-     return parser.parseString(str, cb);
 
-   };
 
-   exports.parseStringPromise = function(str, a) {
 
-     var options, parser;
 
-     if (typeof a === 'object') {
 
-       options = a;
 
-     }
 
-     parser = new exports.Parser(options);
 
-     return parser.parseStringPromise(str);
 
-   };
 
- }).call(this);
 
 
  |