You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					241 lines
				
				7.1 KiB
			
		
		
			
		
	
	
					241 lines
				
				7.1 KiB
			| 
											3 years ago
										 | // Generated by CoffeeScript 1.12.7
 | ||
|  | (function() { | ||
|  |   var XMLStringifier, | ||
|  |     bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, | ||
|  |     hasProp = {}.hasOwnProperty; | ||
|  | 
 | ||
|  |   module.exports = XMLStringifier = (function() { | ||
|  |     function XMLStringifier(options) { | ||
|  |       this.assertLegalName = bind(this.assertLegalName, this); | ||
|  |       this.assertLegalChar = bind(this.assertLegalChar, this); | ||
|  |       var key, ref, value; | ||
|  |       options || (options = {}); | ||
|  |       this.options = options; | ||
|  |       if (!this.options.version) { | ||
|  |         this.options.version = '1.0'; | ||
|  |       } | ||
|  |       ref = options.stringify || {}; | ||
|  |       for (key in ref) { | ||
|  |         if (!hasProp.call(ref, key)) continue; | ||
|  |         value = ref[key]; | ||
|  |         this[key] = value; | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.name = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       return this.assertLegalName('' + val || ''); | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.text = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       return this.assertLegalChar(this.textEscape('' + val || '')); | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.cdata = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       val = '' + val || ''; | ||
|  |       val = val.replace(']]>', ']]]]><![CDATA[>'); | ||
|  |       return this.assertLegalChar(val); | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.comment = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       val = '' + val || ''; | ||
|  |       if (val.match(/--/)) { | ||
|  |         throw new Error("Comment text cannot contain double-hypen: " + val); | ||
|  |       } | ||
|  |       return this.assertLegalChar(val); | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.raw = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       return '' + val || ''; | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.attValue = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       return this.assertLegalChar(this.attEscape(val = '' + val || '')); | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.insTarget = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       return this.assertLegalChar('' + val || ''); | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.insValue = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       val = '' + val || ''; | ||
|  |       if (val.match(/\?>/)) { | ||
|  |         throw new Error("Invalid processing instruction value: " + val); | ||
|  |       } | ||
|  |       return this.assertLegalChar(val); | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.xmlVersion = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       val = '' + val || ''; | ||
|  |       if (!val.match(/1\.[0-9]+/)) { | ||
|  |         throw new Error("Invalid version number: " + val); | ||
|  |       } | ||
|  |       return val; | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.xmlEncoding = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       val = '' + val || ''; | ||
|  |       if (!val.match(/^[A-Za-z](?:[A-Za-z0-9._-])*$/)) { | ||
|  |         throw new Error("Invalid encoding: " + val); | ||
|  |       } | ||
|  |       return this.assertLegalChar(val); | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.xmlStandalone = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       if (val) { | ||
|  |         return "yes"; | ||
|  |       } else { | ||
|  |         return "no"; | ||
|  |       } | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.dtdPubID = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       return this.assertLegalChar('' + val || ''); | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.dtdSysID = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       return this.assertLegalChar('' + val || ''); | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.dtdElementValue = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       return this.assertLegalChar('' + val || ''); | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.dtdAttType = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       return this.assertLegalChar('' + val || ''); | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.dtdAttDefault = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       return this.assertLegalChar('' + val || ''); | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.dtdEntityValue = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       return this.assertLegalChar('' + val || ''); | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.dtdNData = function(val) { | ||
|  |       if (this.options.noValidation) { | ||
|  |         return val; | ||
|  |       } | ||
|  |       return this.assertLegalChar('' + val || ''); | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.convertAttKey = '@'; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.convertPIKey = '?'; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.convertTextKey = '#text'; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.convertCDataKey = '#cdata'; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.convertCommentKey = '#comment'; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.convertRawKey = '#raw'; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.assertLegalChar = function(str) { | ||
|  |       var regex, res; | ||
|  |       if (this.options.noValidation) { | ||
|  |         return str; | ||
|  |       } | ||
|  |       regex = ''; | ||
|  |       if (this.options.version === '1.0') { | ||
|  |         regex = /[\0-\x08\x0B\f\x0E-\x1F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; | ||
|  |         if (res = str.match(regex)) { | ||
|  |           throw new Error("Invalid character in string: " + str + " at index " + res.index); | ||
|  |         } | ||
|  |       } else if (this.options.version === '1.1') { | ||
|  |         regex = /[\0\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; | ||
|  |         if (res = str.match(regex)) { | ||
|  |           throw new Error("Invalid character in string: " + str + " at index " + res.index); | ||
|  |         } | ||
|  |       } | ||
|  |       return str; | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.assertLegalName = function(str) { | ||
|  |       var regex; | ||
|  |       if (this.options.noValidation) { | ||
|  |         return str; | ||
|  |       } | ||
|  |       this.assertLegalChar(str); | ||
|  |       regex = /^([:A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF])([\x2D\.0-:A-Z_a-z\xB7\xC0-\xD6\xD8-\xF6\xF8-\u037D\u037F-\u1FFF\u200C\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF])*$/; | ||
|  |       if (!str.match(regex)) { | ||
|  |         throw new Error("Invalid character in name"); | ||
|  |       } | ||
|  |       return str; | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.textEscape = function(str) { | ||
|  |       var ampregex; | ||
|  |       if (this.options.noValidation) { | ||
|  |         return str; | ||
|  |       } | ||
|  |       ampregex = this.options.noDoubleEncoding ? /(?!&\S+;)&/g : /&/g; | ||
|  |       return str.replace(ampregex, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\r/g, '
'); | ||
|  |     }; | ||
|  | 
 | ||
|  |     XMLStringifier.prototype.attEscape = function(str) { | ||
|  |       var ampregex; | ||
|  |       if (this.options.noValidation) { | ||
|  |         return str; | ||
|  |       } | ||
|  |       ampregex = this.options.noDoubleEncoding ? /(?!&\S+;)&/g : /&/g; | ||
|  |       return str.replace(ampregex, '&').replace(/</g, '<').replace(/"/g, '"').replace(/\t/g, '	').replace(/\n/g, '
').replace(/\r/g, '
'); | ||
|  |     }; | ||
|  | 
 | ||
|  |     return XMLStringifier; | ||
|  | 
 | ||
|  |   })(); | ||
|  | 
 | ||
|  | }).call(this); |