5 // Oleg Tkachenko (oleg@tkachenko.com)
6 // Atsushi Enomoto (atsushi@ximian.com)
8 // (C) 2003 Oleg Tkachenko
9 // (C) 2004 Atsushi Enomoto
16 namespace Mono.Xml.Xsl
19 /// Emitter, which emits result tree to a XmlWriter.
21 internal class XmlWriterEmitter : Emitter
25 public XmlWriterEmitter (XmlWriter writer) {
29 #region # Emitter's methods implementaion
31 public override void WriteStartDocument (Encoding encoding, StandaloneType standalone)
34 if (standalone == StandaloneType.NONE)
35 writer.WriteStartDocument ();
37 writer.WriteStartDocument (standalone == StandaloneType.YES);
39 string standaloneStr = "";
41 case StandaloneType.YES:
42 standaloneStr = " standalone=\"yes\"";
44 case StandaloneType.NO:
45 standaloneStr = " standalone=\"no\"";
50 writer.WriteProcessingInstruction ("xml", "version=\"1.0\"" + standaloneStr);
52 writer.WriteProcessingInstruction ("xml",
53 "version=\"1.0\" encoding=\""
54 + encoding.WebName + "\""
59 public override void WriteEndDocument ()
62 writer.WriteEndDocument ();
66 public override void WriteDocType (string type, string publicId, string systemId)
68 if (publicId != null && publicId != String.Empty &&
69 (systemId == null || systemId == String.Empty))
71 // when PUBLIC id exists, SYSTEM id is required.
73 writer.WriteDocType (type, publicId, systemId, null);
76 public override void WriteStartElement (string prefix, string localName, string nsURI)
78 writer.WriteStartElement (prefix, localName, nsURI);
81 public override void WriteEndElement ()
83 writer.WriteEndElement ();
86 public override void WriteFullEndElement ()
88 writer.WriteFullEndElement ();
91 public override void WriteAttributeString (string prefix, string localName, string nsURI, string value)
93 writer.WriteAttributeString (prefix, localName, nsURI, value);
96 public override void WriteComment (string text) {
97 if (text.IndexOf ("--") >= 0)
98 text = text.Replace ("--", "- -");
100 if (text.EndsWith ("-"))
101 writer.WriteComment (text + ' ');
103 writer.WriteComment (text);
106 public override void WriteProcessingInstruction (string name, string text)
108 writer.WriteProcessingInstruction (name, text);
111 public override void WriteString (string text)
113 writer.WriteString (text);
116 public override void WriteRaw (string data)
118 writer.WriteRaw (data);
121 public override void WriteCDataSection (string text)
123 int index = text.IndexOf ("]]>");
125 writer.WriteCData (text.Substring (0, index + 2));
126 WriteCDataSection (text.Substring (index + 2));
128 writer.WriteCData (text);
131 public override void WriteWhitespace (string value)
133 writer.WriteWhitespace (value);
136 public override void Done ()