255 lines
6.3 KiB
C#
255 lines
6.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Xml;
|
|
|
|
namespace ANX.Framework.Content.Pipeline.Serialization.Intermediate
|
|
{
|
|
public class IntermediateXmlWriter : XmlWriter
|
|
{
|
|
XmlWriter internalWriter;
|
|
bool firstPart = true;
|
|
|
|
public IntermediateXmlWriter(XmlWriter internalWriter)
|
|
{
|
|
if (internalWriter == null)
|
|
throw new ArgumentNullException("internalWriter");
|
|
|
|
this.internalWriter = internalWriter;
|
|
}
|
|
|
|
public override void Close()
|
|
{
|
|
this.internalWriter.Close();
|
|
}
|
|
|
|
public override void Flush()
|
|
{
|
|
this.internalWriter.Flush();
|
|
}
|
|
|
|
public override string LookupPrefix(string ns)
|
|
{
|
|
return this.internalWriter.LookupPrefix(ns);
|
|
}
|
|
|
|
public override void WriteBase64(byte[] buffer, int index, int count)
|
|
{
|
|
this.internalWriter.WriteBase64(buffer, index, count);
|
|
|
|
StopPartWriting();
|
|
}
|
|
|
|
public override void WriteCData(string text)
|
|
{
|
|
this.internalWriter.WriteCData(text);
|
|
|
|
StopPartWriting();
|
|
}
|
|
|
|
public override void WriteCharEntity(char ch)
|
|
{
|
|
this.internalWriter.WriteCharEntity(ch);
|
|
}
|
|
|
|
public override void WriteChars(char[] buffer, int index, int count)
|
|
{
|
|
this.internalWriter.WriteChars(buffer, index, count);
|
|
}
|
|
|
|
public override void WriteComment(string text)
|
|
{
|
|
this.internalWriter.WriteComment(text);
|
|
|
|
StopPartWriting();
|
|
}
|
|
|
|
public override void WriteDocType(string name, string pubid, string sysid, string subset)
|
|
{
|
|
internalWriter.WriteDocType(name, pubid, sysid, subset);
|
|
|
|
StopPartWriting();
|
|
}
|
|
|
|
public override void WriteEndAttribute()
|
|
{
|
|
internalWriter.WriteEndAttribute();
|
|
|
|
StopPartWriting();
|
|
}
|
|
|
|
public override void WriteEndDocument()
|
|
{
|
|
internalWriter.WriteEndDocument();
|
|
|
|
StopPartWriting();
|
|
}
|
|
|
|
public override void WriteEndElement()
|
|
{
|
|
internalWriter.WriteEndElement();
|
|
|
|
StopPartWriting();
|
|
}
|
|
|
|
public override void WriteEntityRef(string name)
|
|
{
|
|
internalWriter.WriteEntityRef(name);
|
|
}
|
|
|
|
public override void WriteFullEndElement()
|
|
{
|
|
internalWriter.WriteFullEndElement();
|
|
|
|
StopPartWriting();
|
|
}
|
|
|
|
public override void WriteProcessingInstruction(string name, string text)
|
|
{
|
|
internalWriter.WriteProcessingInstruction(name, text);
|
|
}
|
|
|
|
public override void WriteRaw(string data)
|
|
{
|
|
internalWriter.WriteRaw(data);
|
|
|
|
StopPartWriting();
|
|
}
|
|
|
|
public override void WriteRaw(char[] buffer, int index, int count)
|
|
{
|
|
internalWriter.WriteRaw(buffer, index, count);
|
|
|
|
StopPartWriting();
|
|
}
|
|
|
|
public override void WriteStartAttribute(string prefix, string localName, string ns)
|
|
{
|
|
internalWriter.WriteStartAttribute(prefix, localName, ns);
|
|
}
|
|
|
|
public override void WriteStartDocument(bool standalone)
|
|
{
|
|
internalWriter.WriteStartDocument(standalone);
|
|
|
|
StopPartWriting();
|
|
}
|
|
|
|
public override void WriteStartDocument()
|
|
{
|
|
internalWriter.WriteStartDocument();
|
|
|
|
StopPartWriting();
|
|
}
|
|
|
|
public override void WriteStartElement(string prefix, string localName, string ns)
|
|
{
|
|
internalWriter.WriteStartElement(prefix, localName, ns);
|
|
|
|
StopPartWriting();
|
|
}
|
|
|
|
public override WriteState WriteState
|
|
{
|
|
get { return internalWriter.WriteState; }
|
|
}
|
|
|
|
public override void WriteString(string text)
|
|
{
|
|
internalWriter.WriteString(text);
|
|
}
|
|
|
|
public override void WriteSurrogateCharEntity(char lowChar, char highChar)
|
|
{
|
|
this.internalWriter.WriteSurrogateCharEntity(lowChar, highChar);
|
|
}
|
|
|
|
public override void WriteWhitespace(string ws)
|
|
{
|
|
this.internalWriter.WriteWhitespace(ws);
|
|
}
|
|
|
|
private void StopPartWriting()
|
|
{
|
|
firstPart = true;
|
|
}
|
|
|
|
public void WriteStringPart(string text)
|
|
{
|
|
foreach (var c in IntermediateXmlReader.listSeparators)
|
|
{
|
|
if (text.Contains(c))
|
|
throw new ArgumentException("text must not contain a whitespace or linebreak.");
|
|
}
|
|
|
|
if (firstPart)
|
|
firstPart = false;
|
|
else
|
|
this.internalWriter.WriteWhitespace(" ");
|
|
|
|
this.internalWriter.WriteString(text);
|
|
}
|
|
|
|
public void WritePart(int value)
|
|
{
|
|
WriteStringPart(XmlConvert.ToString(value));
|
|
}
|
|
|
|
public void WritePart(uint value)
|
|
{
|
|
WriteStringPart(XmlConvert.ToString(value));
|
|
}
|
|
|
|
public void WritePart(float value)
|
|
{
|
|
WriteStringPart(XmlConvert.ToString(value));
|
|
}
|
|
|
|
public void WritePart(bool value)
|
|
{
|
|
WriteStringPart(XmlConvert.ToString(value));
|
|
}
|
|
|
|
public void WritePart(byte value)
|
|
{
|
|
WriteStringPart(XmlConvert.ToString(value));
|
|
}
|
|
|
|
public void WritePart(sbyte value)
|
|
{
|
|
WriteStringPart(XmlConvert.ToString(value));
|
|
}
|
|
|
|
public void WritePart(double value)
|
|
{
|
|
WriteStringPart(XmlConvert.ToString(value));
|
|
}
|
|
|
|
public void WritePart(char value)
|
|
{
|
|
WriteStringPart(XmlConvert.ToString(value));
|
|
}
|
|
|
|
public void WritePart(short value)
|
|
{
|
|
WriteStringPart(XmlConvert.ToString(value));
|
|
}
|
|
|
|
public void WritePart(ushort value)
|
|
{
|
|
WriteStringPart(XmlConvert.ToString(value));
|
|
}
|
|
|
|
public void WritePart(long value)
|
|
{
|
|
WriteStringPart(XmlConvert.ToString(value));
|
|
}
|
|
|
|
public void WritePart(ulong value)
|
|
{
|
|
WriteStringPart(XmlConvert.ToString(value));
|
|
}
|
|
}
|
|
}
|