1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using ICSharpCode.NRefactory.VB.Ast;
namespace ICSharpCode.NRefactory.VB.PrettyPrinter
{
// public class SpecialOutputVisitor : ISpecialVisitor
// {
// readonly IOutputFormatter formatter;
//
// public SpecialOutputVisitor(IOutputFormatter formatter)
// {
// this.formatter = formatter;
// }
//
// public bool ForceWriteInPreviousLine;
//
// public object Visit(ISpecial special, object data)
// {
// Console.WriteLine("Warning: SpecialOutputVisitor.Visit(ISpecial) called with " + special);
// return data;
// }
//
// public object Visit(BlankLine special, object data)
// {
// formatter.PrintBlankLine(ForceWriteInPreviousLine);
// return data;
// }
//
// public object Visit(Comment special, object data)
// {
// formatter.PrintComment(special, ForceWriteInPreviousLine);
// return data;
// }
//
// public object Visit(PreprocessingDirective special, object data)
// {
// formatter.PrintPreprocessingDirective(special, ForceWriteInPreviousLine);
// return data;
// }
// }
//
// /// <summary>
// /// This class inserts specials between INodes.
// /// </summary>
// public sealed class SpecialNodesInserter : IDisposable
// {
// IEnumerator<ISpecial> enumerator;
// SpecialOutputVisitor visitor;
// bool available; // true when more specials are available
//
// public SpecialNodesInserter(IEnumerable<ISpecial> specials, SpecialOutputVisitor visitor)
// {
// if (specials == null) throw new ArgumentNullException("specials");
// if (visitor == null) throw new ArgumentNullException("visitor");
// enumerator = specials.GetEnumerator();
// this.visitor = visitor;
// available = enumerator.MoveNext();
// }
//
// void WriteCurrent()
// {
// enumerator.Current.AcceptVisitor(visitor, null);
// available = enumerator.MoveNext();
// }
//
// AttributedNode currentAttributedNode;
//
// /// <summary>
// /// Writes all specials up to the start position of the node.
// /// </summary>
// public void AcceptNodeStart(INode node)
// {
// if (node is AttributedNode) {
// currentAttributedNode = node as AttributedNode;
// if (currentAttributedNode.Attributes.Count == 0) {
// AcceptPoint(node.StartLocation);
// currentAttributedNode = null;
// }
// } else {
// AcceptPoint(node.StartLocation);
// }
// }
//
// /// <summary>
// /// Writes all specials up to the end position of the node.
// /// </summary>
// public void AcceptNodeEnd(INode node)
// {
// visitor.ForceWriteInPreviousLine = true;
// AcceptPoint(node.EndLocation);
// visitor.ForceWriteInPreviousLine = false;
// if (currentAttributedNode != null) {
// if (node == currentAttributedNode.Attributes[currentAttributedNode.Attributes.Count - 1]) {
// AcceptPoint(currentAttributedNode.StartLocation);
// currentAttributedNode = null;
// }
// }
// }
//
// /// <summary>
// /// Writes all specials up to the specified location.
// /// </summary>
// public void AcceptPoint(Location loc)
// {
// while (available && enumerator.Current.StartPosition <= loc) {
// WriteCurrent();
// }
// }
//
// /// <summary>
// /// Outputs all missing specials to the writer.
// /// </summary>
// public void Finish()
// {
// while (available) {
// WriteCurrent();
// }
// }
//
// void IDisposable.Dispose()
// {
// Finish();
// }
//
// /// <summary>
// /// Registers a new SpecialNodesInserter with the output visitor.
// /// Make sure to call Finish() (or Dispose()) on the returned SpecialNodesInserter
// /// when the output is finished.
// /// </summary>
// public static SpecialNodesInserter Install(IEnumerable<ISpecial> specials, IOutputDomVisitor outputVisitor)
// {
// SpecialNodesInserter sni = new SpecialNodesInserter(specials, new SpecialOutputVisitor(outputVisitor.OutputFormatter));
// outputVisitor.BeforeNodeVisit += sni.AcceptNodeStart;
// outputVisitor.AfterNodeVisit += sni.AcceptNodeEnd;
// return sni;
// }
// }
}
|