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.
		
		
		
		
		
			
		
			
				
					
					
						
							287 lines
						
					
					
						
							10 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							287 lines
						
					
					
						
							10 KiB
						
					
					
				| // Generated by CoffeeScript 1.12.7 | |
| (function() { | |
|   var XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStreamWriter, XMLText, XMLWriterBase, | |
|     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; | |
| 
 | |
|   XMLDeclaration = require('./XMLDeclaration'); | |
| 
 | |
|   XMLDocType = require('./XMLDocType'); | |
| 
 | |
|   XMLCData = require('./XMLCData'); | |
| 
 | |
|   XMLComment = require('./XMLComment'); | |
| 
 | |
|   XMLElement = require('./XMLElement'); | |
| 
 | |
|   XMLRaw = require('./XMLRaw'); | |
| 
 | |
|   XMLText = require('./XMLText'); | |
| 
 | |
|   XMLProcessingInstruction = require('./XMLProcessingInstruction'); | |
| 
 | |
|   XMLDummy = require('./XMLDummy'); | |
| 
 | |
|   XMLDTDAttList = require('./XMLDTDAttList'); | |
| 
 | |
|   XMLDTDElement = require('./XMLDTDElement'); | |
| 
 | |
|   XMLDTDEntity = require('./XMLDTDEntity'); | |
| 
 | |
|   XMLDTDNotation = require('./XMLDTDNotation'); | |
| 
 | |
|   XMLWriterBase = require('./XMLWriterBase'); | |
| 
 | |
|   module.exports = XMLStreamWriter = (function(superClass) { | |
|     extend(XMLStreamWriter, superClass); | |
| 
 | |
|     function XMLStreamWriter(stream, options) { | |
|       XMLStreamWriter.__super__.constructor.call(this, options); | |
|       this.stream = stream; | |
|     } | |
| 
 | |
|     XMLStreamWriter.prototype.document = function(doc) { | |
|       var child, i, j, len, len1, ref, ref1, results; | |
|       ref = doc.children; | |
|       for (i = 0, len = ref.length; i < len; i++) { | |
|         child = ref[i]; | |
|         child.isLastRootNode = false; | |
|       } | |
|       doc.children[doc.children.length - 1].isLastRootNode = true; | |
|       ref1 = doc.children; | |
|       results = []; | |
|       for (j = 0, len1 = ref1.length; j < len1; j++) { | |
|         child = ref1[j]; | |
|         if (child instanceof XMLDummy) { | |
|           continue; | |
|         } | |
|         switch (false) { | |
|           case !(child instanceof XMLDeclaration): | |
|             results.push(this.declaration(child)); | |
|             break; | |
|           case !(child instanceof XMLDocType): | |
|             results.push(this.docType(child)); | |
|             break; | |
|           case !(child instanceof XMLComment): | |
|             results.push(this.comment(child)); | |
|             break; | |
|           case !(child instanceof XMLProcessingInstruction): | |
|             results.push(this.processingInstruction(child)); | |
|             break; | |
|           default: | |
|             results.push(this.element(child)); | |
|         } | |
|       } | |
|       return results; | |
|     }; | |
| 
 | |
|     XMLStreamWriter.prototype.attribute = function(att) { | |
|       return this.stream.write(' ' + att.name + '="' + att.value + '"'); | |
|     }; | |
| 
 | |
|     XMLStreamWriter.prototype.cdata = function(node, level) { | |
|       return this.stream.write(this.space(level) + '<![CDATA[' + node.text + ']]>' + this.endline(node)); | |
|     }; | |
| 
 | |
|     XMLStreamWriter.prototype.comment = function(node, level) { | |
|       return this.stream.write(this.space(level) + '<!-- ' + node.text + ' -->' + this.endline(node)); | |
|     }; | |
| 
 | |
|     XMLStreamWriter.prototype.declaration = function(node, level) { | |
|       this.stream.write(this.space(level)); | |
|       this.stream.write('<?xml version="' + node.version + '"'); | |
|       if (node.encoding != null) { | |
|         this.stream.write(' encoding="' + node.encoding + '"'); | |
|       } | |
|       if (node.standalone != null) { | |
|         this.stream.write(' standalone="' + node.standalone + '"'); | |
|       } | |
|       this.stream.write(this.spacebeforeslash + '?>'); | |
|       return this.stream.write(this.endline(node)); | |
|     }; | |
| 
 | |
|     XMLStreamWriter.prototype.docType = function(node, level) { | |
|       var child, i, len, ref; | |
|       level || (level = 0); | |
|       this.stream.write(this.space(level)); | |
|       this.stream.write('<!DOCTYPE ' + node.root().name); | |
|       if (node.pubID && node.sysID) { | |
|         this.stream.write(' PUBLIC "' + node.pubID + '" "' + node.sysID + '"'); | |
|       } else if (node.sysID) { | |
|         this.stream.write(' SYSTEM "' + node.sysID + '"'); | |
|       } | |
|       if (node.children.length > 0) { | |
|         this.stream.write(' ['); | |
|         this.stream.write(this.endline(node)); | |
|         ref = node.children; | |
|         for (i = 0, len = ref.length; i < len; i++) { | |
|           child = ref[i]; | |
|           switch (false) { | |
|             case !(child instanceof XMLDTDAttList): | |
|               this.dtdAttList(child, level + 1); | |
|               break; | |
|             case !(child instanceof XMLDTDElement): | |
|               this.dtdElement(child, level + 1); | |
|               break; | |
|             case !(child instanceof XMLDTDEntity): | |
|               this.dtdEntity(child, level + 1); | |
|               break; | |
|             case !(child instanceof XMLDTDNotation): | |
|               this.dtdNotation(child, level + 1); | |
|               break; | |
|             case !(child instanceof XMLCData): | |
|               this.cdata(child, level + 1); | |
|               break; | |
|             case !(child instanceof XMLComment): | |
|               this.comment(child, level + 1); | |
|               break; | |
|             case !(child instanceof XMLProcessingInstruction): | |
|               this.processingInstruction(child, level + 1); | |
|               break; | |
|             default: | |
|               throw new Error("Unknown DTD node type: " + child.constructor.name); | |
|           } | |
|         } | |
|         this.stream.write(']'); | |
|       } | |
|       this.stream.write(this.spacebeforeslash + '>'); | |
|       return this.stream.write(this.endline(node)); | |
|     }; | |
| 
 | |
|     XMLStreamWriter.prototype.element = function(node, level) { | |
|       var att, child, i, len, name, ref, ref1, space; | |
|       level || (level = 0); | |
|       space = this.space(level); | |
|       this.stream.write(space + '<' + node.name); | |
|       ref = node.attributes; | |
|       for (name in ref) { | |
|         if (!hasProp.call(ref, name)) continue; | |
|         att = ref[name]; | |
|         this.attribute(att); | |
|       } | |
|       if (node.children.length === 0 || node.children.every(function(e) { | |
|         return e.value === ''; | |
|       })) { | |
|         if (this.allowEmpty) { | |
|           this.stream.write('></' + node.name + '>'); | |
|         } else { | |
|           this.stream.write(this.spacebeforeslash + '/>'); | |
|         } | |
|       } else if (this.pretty && node.children.length === 1 && (node.children[0].value != null)) { | |
|         this.stream.write('>'); | |
|         this.stream.write(node.children[0].value); | |
|         this.stream.write('</' + node.name + '>'); | |
|       } else { | |
|         this.stream.write('>' + this.newline); | |
|         ref1 = node.children; | |
|         for (i = 0, len = ref1.length; i < len; i++) { | |
|           child = ref1[i]; | |
|           switch (false) { | |
|             case !(child instanceof XMLCData): | |
|               this.cdata(child, level + 1); | |
|               break; | |
|             case !(child instanceof XMLComment): | |
|               this.comment(child, level + 1); | |
|               break; | |
|             case !(child instanceof XMLElement): | |
|               this.element(child, level + 1); | |
|               break; | |
|             case !(child instanceof XMLRaw): | |
|               this.raw(child, level + 1); | |
|               break; | |
|             case !(child instanceof XMLText): | |
|               this.text(child, level + 1); | |
|               break; | |
|             case !(child instanceof XMLProcessingInstruction): | |
|               this.processingInstruction(child, level + 1); | |
|               break; | |
|             case !(child instanceof XMLDummy): | |
|               ''; | |
|               break; | |
|             default: | |
|               throw new Error("Unknown XML node type: " + child.constructor.name); | |
|           } | |
|         } | |
|         this.stream.write(space + '</' + node.name + '>'); | |
|       } | |
|       return this.stream.write(this.endline(node)); | |
|     }; | |
| 
 | |
|     XMLStreamWriter.prototype.processingInstruction = function(node, level) { | |
|       this.stream.write(this.space(level) + '<?' + node.target); | |
|       if (node.value) { | |
|         this.stream.write(' ' + node.value); | |
|       } | |
|       return this.stream.write(this.spacebeforeslash + '?>' + this.endline(node)); | |
|     }; | |
| 
 | |
|     XMLStreamWriter.prototype.raw = function(node, level) { | |
|       return this.stream.write(this.space(level) + node.value + this.endline(node)); | |
|     }; | |
| 
 | |
|     XMLStreamWriter.prototype.text = function(node, level) { | |
|       return this.stream.write(this.space(level) + node.value + this.endline(node)); | |
|     }; | |
| 
 | |
|     XMLStreamWriter.prototype.dtdAttList = function(node, level) { | |
|       this.stream.write(this.space(level) + '<!ATTLIST ' + node.elementName + ' ' + node.attributeName + ' ' + node.attributeType); | |
|       if (node.defaultValueType !== '#DEFAULT') { | |
|         this.stream.write(' ' + node.defaultValueType); | |
|       } | |
|       if (node.defaultValue) { | |
|         this.stream.write(' "' + node.defaultValue + '"'); | |
|       } | |
|       return this.stream.write(this.spacebeforeslash + '>' + this.endline(node)); | |
|     }; | |
| 
 | |
|     XMLStreamWriter.prototype.dtdElement = function(node, level) { | |
|       this.stream.write(this.space(level) + '<!ELEMENT ' + node.name + ' ' + node.value); | |
|       return this.stream.write(this.spacebeforeslash + '>' + this.endline(node)); | |
|     }; | |
| 
 | |
|     XMLStreamWriter.prototype.dtdEntity = function(node, level) { | |
|       this.stream.write(this.space(level) + '<!ENTITY'); | |
|       if (node.pe) { | |
|         this.stream.write(' %'); | |
|       } | |
|       this.stream.write(' ' + node.name); | |
|       if (node.value) { | |
|         this.stream.write(' "' + node.value + '"'); | |
|       } else { | |
|         if (node.pubID && node.sysID) { | |
|           this.stream.write(' PUBLIC "' + node.pubID + '" "' + node.sysID + '"'); | |
|         } else if (node.sysID) { | |
|           this.stream.write(' SYSTEM "' + node.sysID + '"'); | |
|         } | |
|         if (node.nData) { | |
|           this.stream.write(' NDATA ' + node.nData); | |
|         } | |
|       } | |
|       return this.stream.write(this.spacebeforeslash + '>' + this.endline(node)); | |
|     }; | |
| 
 | |
|     XMLStreamWriter.prototype.dtdNotation = function(node, level) { | |
|       this.stream.write(this.space(level) + '<!NOTATION ' + node.name); | |
|       if (node.pubID && node.sysID) { | |
|         this.stream.write(' PUBLIC "' + node.pubID + '" "' + node.sysID + '"'); | |
|       } else if (node.pubID) { | |
|         this.stream.write(' PUBLIC "' + node.pubID + '"'); | |
|       } else if (node.sysID) { | |
|         this.stream.write(' SYSTEM "' + node.sysID + '"'); | |
|       } | |
|       return this.stream.write(this.spacebeforeslash + '>' + this.endline(node)); | |
|     }; | |
| 
 | |
|     XMLStreamWriter.prototype.endline = function(node) { | |
|       if (!node.isLastRootNode) { | |
|         return this.newline; | |
|       } else { | |
|         return ''; | |
|       } | |
|     }; | |
| 
 | |
|     return XMLStreamWriter; | |
| 
 | |
|   })(XMLWriterBase); | |
| 
 | |
| }).call(this);
 | |
| 
 |