public Processor.OutputResult RecordDone(RecordBuilder record) {
BuilderInfo mainNode = record.MainNode;
switch (mainNode.NodeType) {
case XmlNodeType.Element:
this.writer.WriteStartElement(mainNode.Prefix, mainNode.LocalName, mainNode.NamespaceURI);
WriteAttributes(record.AttributeList, record.AttributeCount);
if (mainNode.IsEmptyTag) {
this.writer.WriteEndElement();
}
break;
case XmlNodeType.Text:
case XmlNodeType.Whitespace:
case XmlNodeType.SignificantWhitespace:
this.writer.WriteString(mainNode.Value);
break;
case XmlNodeType.CDATA:
Debug.Assert(false, "XSLT never gives us CDATA");
this.writer.WriteCData(mainNode.Value);
break;
case XmlNodeType.EntityReference:
this.writer.WriteEntityRef(mainNode.LocalName);
break;
case XmlNodeType.ProcessingInstruction:
this.writer.WriteProcessingInstruction(mainNode.LocalName, mainNode.Value);
break;
case XmlNodeType.Comment:
this.writer.WriteComment(mainNode.Value);
break;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
this.writer.WriteRaw(mainNode.Value);
break;
case XmlNodeType.EndElement:
this.writer.WriteFullEndElement();
break;
case XmlNodeType.None:
case XmlNodeType.Attribute:
case XmlNodeType.Entity:
case XmlNodeType.Notation:
case XmlNodeType.DocumentFragment:
case XmlNodeType.EndEntity:
break;
default:
Debug.Fail("Invalid NodeType on output: " + mainNode.NodeType);
break;
}
record.Reset();
return Processor.OutputResult.Continue;
}