%PDF- %PDF-
Direktori : /home/opti/workflow/node_modules/xml2js/lib/ |
Current File : /home/opti/workflow/node_modules/xml2js/lib/xml2js.js |
// Generated by CoffeeScript 1.5.0 (function() { var events, isEmpty, sax, __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; }, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; sax = require('sax'); events = require('events'); isEmpty = function(thing) { return typeof thing === "object" && (thing != null) && Object.keys(thing).length === 0; }; exports.defaults = { "0.1": { explicitCharkey: false, trim: true, normalize: true, normalizeTags: false, attrkey: "@", charkey: "#", explicitArray: false, ignoreAttrs: false, mergeAttrs: false, explicitRoot: false, validator: null, xmlns: false, explicitChildren: false, childkey: '@@', charsAsChildren: false, async: false }, "0.2": { explicitCharkey: false, trim: false, normalize: false, normalizeTags: false, attrkey: "$", charkey: "_", explicitArray: true, ignoreAttrs: false, mergeAttrs: false, explicitRoot: true, validator: null, xmlns: false, explicitChildren: false, childkey: '$$', charsAsChildren: false, async: false } }; exports.ValidationError = (function(_super) { __extends(ValidationError, _super); function ValidationError(message) { this.message = message; } return ValidationError; })(Error); exports.Parser = (function(_super) { __extends(Parser, _super); function Parser(opts) { this.parseString = __bind(this.parseString, this); this.reset = __bind(this.reset, this); var key, value, _ref; this.options = {}; _ref = exports.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"; } this.reset(); } Parser.prototype.reset = function() { var attrkey, charkey, err, stack, _this = this; this.removeAllListeners(); this.saxParser = sax.parser(true, { trim: false, normalize: false, xmlns: this.options.xmlns }); err = false; this.saxParser.onerror = function(error) { if (!err) { err = true; return _this.emit("error", error); } }; this.EXPLICIT_CHARKEY = this.options.explicitCharkey; this.resultObject = null; stack = []; attrkey = this.options.attrkey; charkey = this.options.charkey; this.saxParser.onopentag = function(node) { var key, obj, _ref; obj = {}; 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] = {}; } if (_this.options.mergeAttrs) { obj[key] = node.attributes[key]; } else { obj[attrkey][key] = node.attributes[key]; } } } obj["#name"] = _this.options.normalizeTags ? node.name.toLowerCase() : node.name; if (_this.options.xmlns) { obj[_this.options.xmlnskey] = { uri: node.uri, local: node.local }; } return stack.push(obj); }; this.saxParser.onclosetag = function() { var node, nodeName, obj, old, s, xpath; obj = stack.pop(); nodeName = obj["#name"]; delete obj["#name"]; s = stack[stack.length - 1]; if (obj[charkey].match(/^\s*$/)) { 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(); } if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) { obj = obj[charkey]; } } if (_this.options.emptyTag !== void 0 && isEmpty(obj)) { obj = _this.options.emptyTag; } 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("/"); try { obj = _this.options.validator(xpath, s && s[nodeName], obj); } catch (err) { _this.emit("error", err); } } if (_this.options.explicitChildren && !_this.options.mergeAttrs && typeof obj === 'object') { node = {}; 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; } if (stack.length > 0) { if (!_this.options.explicitArray) { if (!(nodeName in s)) { return s[nodeName] = obj; } else if (s[nodeName] instanceof Array) { return s[nodeName].push(obj); } else { old = s[nodeName]; s[nodeName] = [old]; return s[nodeName].push(obj); } } else { if (!(s[nodeName] instanceof Array)) { s[nodeName] = []; } return s[nodeName].push(obj); } } else { if (_this.options.explicitRoot) { old = obj; obj = {}; obj[nodeName] = old; } _this.resultObject = obj; return _this.emit("end", _this.resultObject); } }; return this.saxParser.ontext = this.saxParser.oncdata = function(text) { var s; s = stack[stack.length - 1]; if (s) { return s[charkey] += text; } }; }; Parser.prototype.parseString = function(str, cb) { if ((cb != null) && typeof cb === "function") { this.on("end", function(result) { this.reset(); if (this.options.async) { return process.nextTick(function() { return cb(null, result); }); } else { return cb(null, result); } }); this.on("error", function(err) { this.reset(); if (this.options.async) { return process.nextTick(function() { return cb(err); }); } else { return cb(err); } }); } if (str.toString().trim() === '') { this.emit("end", null); return true; } return this.saxParser.write(str.toString()); }; return Parser; })(events.EventEmitter); 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); }; }).call(this);