// // TextOutputter.cs // // Authors: // Oleg Tkachenko (oleg@tkachenko.com) // // (C) 2003 Oleg Tkachenko // using System; using System.Xml; using System.IO; namespace Mono.Xml.Xsl { /// /// Outputter implementation for text output method /// public class TextOutputter : Outputter { private TextWriter _writer; //Current output depth private int _depth; //Ignore nested text nodes private bool _ignoreNestedText; //Attribute value is being outputted flag private bool _inAttribute; public TextOutputter(TextWriter w, bool ignoreNestedText) { _writer = w; _ignoreNestedText = ignoreNestedText; } public override void WriteStartDocument() {} public override void WriteEndDocument() {} public override void WriteStartElement(string prefix, string localName, string nsURI) { if (_ignoreNestedText) _depth++; } public override void WriteEndElement() { if (_ignoreNestedText) _depth--; } public override void WriteAttributeString(string prefix, string localName, string nsURI, string value) {} public override void WriteStartAttribute(string prefix, string localName, string nsURI) { _inAttribute = true; } public override void WriteEndAttribute() { _inAttribute = false; } public override void WriteComment(string text) {} public override void WriteProcessingInstruction(string name, string text) {} public override void WriteString(string text) { WriteImpl(text); } public override void WriteRaw(string data) { WriteImpl(data); } private void WriteImpl(string text) { if ((!_ignoreNestedText || _depth==0) && !_inAttribute) _writer.Write(text); } public override void Done () { _writer.Flush (); } } }