// // // // // $Revision$ // using System; using System.Text; namespace ICSharpCode.AvalonEdit.XmlParser { /// /// Visitor for the XML tree /// public interface IXmlVisitor { /// Visit RawDocument void VisitDocument(RawDocument document); /// Visit RawElement void VisitElement(RawElement element); /// Visit RawTag void VisitTag(RawTag tag); /// Visit RawAttribute void VisitAttribute(RawAttribute attribute); /// Visit RawText void VisitText(RawText text); } /// /// Derive from this class to create visitor for the XML tree /// public abstract class AbstractXmlVisitor : IXmlVisitor { /// Visit RawDocument public virtual void VisitDocument(RawDocument document) { foreach(RawObject child in document.Children) child.AcceptVisitor(this); } /// Visit RawElement public virtual void VisitElement(RawElement element) { foreach(RawObject child in element.Children) child.AcceptVisitor(this); } /// Visit RawTag public virtual void VisitTag(RawTag tag) { foreach(RawObject child in tag.Children) child.AcceptVisitor(this); } /// Visit RawAttribute public virtual void VisitAttribute(RawAttribute attribute) { } /// Visit RawText public virtual void VisitText(RawText text) { } } /// /// Converts the XML tree back to text. /// The text should exactly match the original. /// public class PrettyPrintXmlVisitor: AbstractXmlVisitor { StringBuilder sb = new StringBuilder(); /// /// Gets the pretty printed text /// public string Output { get { return sb.ToString(); } } /// Visit RawDocument public override void VisitDocument(RawDocument document) { base.VisitDocument(document); } /// Visit RawElement public override void VisitElement(RawElement element) { base.VisitElement(element); } /// Visit RawTag public override void VisitTag(RawTag tag) { sb.Append(tag.OpeningBracket); sb.Append(tag.Name); base.VisitTag(tag); sb.Append(tag.ClosingBracket); } /// Visit RawAttribute public override void VisitAttribute(RawAttribute attribute) { sb.Append(attribute.Name); sb.Append(attribute.EqualsSign); sb.Append(attribute.QuotedValue); } /// Visit RawText public override void VisitText(RawText text) { sb.Append(text.Value); } } }