File: SpecialNodesInserter.cs

package info (click to toggle)
monodevelop 4.0.12%2Bdfsg-6
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 219,596 kB
  • ctags: 253,200
  • sloc: cs: 1,486,058; xml: 952,347; java: 60,981; makefile: 4,213; sh: 1,727; ansic: 867; objc: 302; sql: 111
file content (142 lines) | stat: -rw-r--r-- 4,221 bytes parent folder | download | duplicates (4)
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;
//		}
//	}
}