// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; using System.Collections.Generic; using System.Text; namespace ICSharpCode.NRefactory.VB.Parser { public class SpecialTracker { List currentSpecials = new List(); CommentType currentCommentType; StringBuilder sb = new StringBuilder(); Location startPosition; bool commentStartsLine; public List CurrentSpecials { get { return currentSpecials; } } /// /// Gets the specials from the SpecialTracker and resets the lists. /// public List RetrieveSpecials() { List tmp = currentSpecials; currentSpecials = new List(); return tmp; } public void AddEndOfLine(Location point) { currentSpecials.Add(new BlankLine(point)); } public void AddPreprocessingDirective(PreprocessingDirective directive) { if (directive == null) throw new ArgumentNullException("directive"); currentSpecials.Add(directive); } // used for comment tracking public void StartComment(CommentType commentType, bool commentStartsLine, Location startPosition) { this.currentCommentType = commentType; this.startPosition = startPosition; this.sb.Length = 0; this.commentStartsLine = commentStartsLine; } public void AddChar(char c) { sb.Append(c); } public void AddString(string s) { sb.Append(s); } public void FinishComment(Location endPosition) { currentSpecials.Add(new Comment(currentCommentType, sb.ToString(), commentStartsLine, startPosition, endPosition)); } } }