5 // Oleg Tkachenko (oleg@tkachenko.com)
6 // Atsushi Enomoto (atsushi@ximian.com)
8 // (C) 2003 Oleg Tkachenko
9 // (C) 2004 Atsushi Enomoto
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
37 namespace Mono.Xml.Xsl
40 /// Emitter, which emits result tree to a XmlWriter.
42 internal class XmlWriterEmitter : Emitter
46 public XmlWriterEmitter (XmlWriter writer) {
50 #region # Emitter's methods implementaion
52 public override void WriteStartDocument (Encoding encoding, StandaloneType standalone)
55 if (standalone == StandaloneType.NONE)
56 writer.WriteStartDocument ();
58 writer.WriteStartDocument (standalone == StandaloneType.YES);
60 string standaloneStr = "";
62 case StandaloneType.YES:
63 standaloneStr = " standalone=\"yes\"";
65 case StandaloneType.NO:
66 standaloneStr = " standalone=\"no\"";
71 writer.WriteProcessingInstruction ("xml", "version=\"1.0\"" + standaloneStr);
73 writer.WriteProcessingInstruction ("xml",
74 "version=\"1.0\" encoding=\""
75 + encoding.WebName + "\""
80 public override void WriteEndDocument ()
83 writer.WriteEndDocument ();
87 public override void WriteDocType (string type, string publicId, string systemId)
89 if (systemId == null) {
92 writer.WriteDocType (type, publicId, systemId, null);
95 public override void WriteStartElement (string prefix, string localName, string nsURI)
97 writer.WriteStartElement (prefix, localName, nsURI);
100 public override void WriteEndElement ()
102 writer.WriteEndElement ();
105 public override void WriteFullEndElement ()
107 writer.WriteFullEndElement ();
110 public override void WriteAttributeString (string prefix, string localName, string nsURI, string value)
112 writer.WriteAttributeString (prefix, localName, nsURI, value);
115 public override void WriteComment (string text) {
116 //FIXME: horrible performance!!!
117 while (text.IndexOf ("--")>=0)
118 text = text.Replace ("--", "- -");
120 if ((text.EndsWith("-")))
123 writer.WriteComment (text);
126 public override void WriteProcessingInstruction (string name, string text)
128 while (text.IndexOf ("?>") >= 0)
129 text = text.Replace ("?>", "? >");
130 writer.WriteProcessingInstruction (name, text);
133 public override void WriteString (string text)
135 writer.WriteString (text);
138 public override void WriteRaw (string data)
140 writer.WriteRaw (data);
143 public override void WriteCDataSection (string text)
145 int index = text.IndexOf ("]]>");
147 writer.WriteCData (text.Substring (0, index + 2));
148 WriteCDataSection (text.Substring (index + 2));
150 writer.WriteCData (text);
153 public override void WriteWhitespace (string value)
155 writer.WriteWhitespace (value);
158 public override void Done ()