5 // Atsushi Enomoto <atsushi@ximian.com>
7 // Copyright (C) 2006 Novell, Inc. http://www.novell.com
10 using System.Globalization;
11 using System.Collections;
15 internal class DefaultXmlWriter : XmlWriter
18 WriteState state = WriteState.Start;
19 bool delegate_write_state;
21 public DefaultXmlWriter (XmlWriter writer)
26 public DefaultXmlWriter (XmlWriter writer, bool delegateWriteState)
29 delegate_write_state = delegateWriteState;
32 protected XmlWriter Writer {
33 get { return writer; }
36 private void CloseStartElement ()
38 state = WriteState.Content;
41 public override void Close ()
43 if (state != WriteState.Closed)
45 state = WriteState.Closed;
48 public override void Flush ()
53 public override string LookupPrefix (string ns)
55 return writer.LookupPrefix (ns);
58 public override void WriteBase64 (byte [] buffer, int index, int count)
60 writer.WriteBase64 (buffer, index, count);
61 state = WriteState.Content;
64 public override void WriteBinHex (byte [] buffer, int index, int count)
66 writer.WriteBinHex (buffer, index, count);
67 state = WriteState.Content;
70 public override void WriteCData (string text)
72 writer.WriteCData (text);
73 state = WriteState.Content;
76 public override void WriteCharEntity (char ch)
78 writer.WriteCharEntity (ch);
79 state = WriteState.Content;
82 public override void WriteChars (char [] buffer, int index, int count)
84 writer.WriteChars (buffer, index, count);
85 state = WriteState.Content;
88 public override void WriteComment (string text)
90 writer.WriteComment (text);
91 if (state == WriteState.Start)
92 state = WriteState.Prolog;
94 state = WriteState.Content;
97 public override void WriteDocType (string name, string pubid, string sysid, string subset)
99 writer.WriteDocType (name, pubid, sysid, subset);
100 state = WriteState.Prolog;
103 public override void WriteEndAttribute ()
105 writer.WriteEndAttribute ();
106 state = WriteState.Element;
109 public override void WriteEndDocument ()
111 writer.WriteEndDocument ();
112 state = WriteState.Start;
115 public override void WriteEndElement ()
117 writer.WriteEndElement ();
118 state = WriteState.Content;
121 public override void WriteEntityRef (string name)
123 writer.WriteEntityRef (name);
124 state = WriteState.Content;
127 public override void WriteFullEndElement ()
129 writer.WriteFullEndElement ();
130 state = WriteState.Content;
133 public override void WriteName (string name)
135 writer.WriteName (name);
136 state = WriteState.Content;
139 public override void WriteNmToken (string name)
141 writer.WriteNmToken (name);
142 state = WriteState.Content;
145 public override void WriteNode (XmlReader reader, bool defattr)
147 writer.WriteNode (reader, defattr);
150 public override void WriteProcessingInstruction (string name, string text)
152 writer.WriteProcessingInstruction (name, text);
153 if (state == WriteState.Start)
154 state = WriteState.Prolog;
156 state = WriteState.Content;
159 public override void WriteQualifiedName (string localName, string ns)
161 writer.WriteQualifiedName (localName, ns);
162 state = WriteState.Content;
165 public override void WriteRaw (string data)
167 writer.WriteRaw (data);
168 if (state == WriteState.Start)
169 state = WriteState.Prolog;
171 state = WriteState.Content;
174 public override void WriteRaw (char [] buffer, int index, int count)
176 writer.WriteRaw (buffer, index, count);
177 if (state == WriteState.Start)
178 state = WriteState.Prolog;
180 state = WriteState.Content;
183 public override void WriteStartAttribute (string prefix, string localName, string ns)
185 writer.WriteStartAttribute (prefix, localName, ns);
186 state = WriteState.Attribute;
189 public override void WriteStartDocument (bool standalone)
191 writer.WriteStartDocument (standalone);
192 state = WriteState.Prolog;
195 public override void WriteStartDocument ()
197 writer.WriteStartDocument ();
198 state = WriteState.Prolog;
201 public override void WriteStartElement (string prefix, string localName, string ns)
203 writer.WriteStartElement (prefix, localName, ns);
204 state = WriteState.Element;
207 public override void WriteString (string text)
209 writer.WriteString (text);
210 state = WriteState.Content;
213 public override void WriteSurrogateCharEntity (char lowChar, char highChar)
215 writer.WriteSurrogateCharEntity (lowChar, highChar);
216 state = WriteState.Content;
219 public override void WriteWhitespace (string ws)
221 writer.WriteWhitespace (ws);
222 if (state == WriteState.Start)
223 state = WriteState.Prolog;
225 state = WriteState.Content;
228 public override WriteState WriteState {
230 if (delegate_write_state)
231 return writer.WriteState;
237 public override string XmlLang {
239 return writer.XmlLang;
243 public override XmlSpace XmlSpace {
245 return writer.XmlSpace;