diff options
author | Mike Krüger <mkrueger@novell.com> | 2009-07-17 21:09:29 +0400 |
---|---|---|
committer | Mike Krüger <mkrueger@novell.com> | 2009-07-17 21:09:29 +0400 |
commit | 098a6e5338d637743a14522cf07d15d920b5f995 (patch) | |
tree | 41be30cf01dd4753003b541e75d261c942e7fe2b /main/contrib | |
parent | 1dac076d5ed2cef5b83786d9bc77c79b89f2a028 (diff) |
* Src/PrettyPrinter/CSharp/OutputFormatter.cs:
* Src/PrettyPrinter/AbstractOutputFormatter.cs: Comments that start
line are no longer indented when outputting them.
svn path=/trunk/monodevelop/; revision=138135
Diffstat (limited to 'main/contrib')
3 files changed, 242 insertions, 226 deletions
diff --git a/main/contrib/NRefactory/Project/ChangeLog b/main/contrib/NRefactory/Project/ChangeLog index 21d22a9497..5b6ebdacb3 100644 --- a/main/contrib/NRefactory/Project/ChangeLog +++ b/main/contrib/NRefactory/Project/ChangeLog @@ -1,5 +1,11 @@ 2009-07-17 Mike Krüger <mkrueger@novell.com> + * Src/PrettyPrinter/CSharp/OutputFormatter.cs: + * Src/PrettyPrinter/AbstractOutputFormatter.cs: Comments that + start line are no longer indented when outputting them. + +2009-07-17 Mike Krüger <mkrueger@novell.com> + * Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs: Fixed place else in new line. diff --git a/main/contrib/NRefactory/Project/Src/PrettyPrinter/AbstractOutputFormatter.cs b/main/contrib/NRefactory/Project/Src/PrettyPrinter/AbstractOutputFormatter.cs index 30c750242a..eab0e42302 100644 --- a/main/contrib/NRefactory/Project/Src/PrettyPrinter/AbstractOutputFormatter.cs +++ b/main/contrib/NRefactory/Project/Src/PrettyPrinter/AbstractOutputFormatter.cs @@ -1,224 +1,233 @@ -// <file>
-// <copyright see="prj:///doc/copyright.txt"/>
-// <license see="prj:///doc/license.txt"/>
-// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
-// <version>$Revision: 2972M $</version>
-// </file>
-
-using System;
-using System.Collections;
-using System.Text;
-
-namespace ICSharpCode.NRefactory.PrettyPrinter
-{
- /// <summary>
- /// Base class of output formatters.
- /// </summary>
- public abstract class AbstractOutputFormatter : IOutputFormatter
- {
- StringBuilder text = new StringBuilder();
-
- int indentationLevel = 0;
- bool indent = true;
- bool doNewLine = true;
- AbstractPrettyPrintOptions prettyPrintOptions;
-
- public bool IsInMemberBody { get; set; }
-
- public int IndentationLevel {
- get {
- return indentationLevel;
- }
- set {
- indentationLevel = value;
- }
- }
-
- public string Text {
- get {
- return text.ToString();
- }
- }
-
- public int TextLength {
- get {
- return text.Length;
- }
- }
-
-
- public bool DoIndent {
- get {
- return indent;
- }
- set {
- indent = value;
- }
- }
-
- public bool DoNewLine {
- get {
- return doNewLine;
- }
- set {
- doNewLine = value;
- }
- }
-
- protected AbstractOutputFormatter(AbstractPrettyPrintOptions prettyPrintOptions)
- {
- this.prettyPrintOptions = prettyPrintOptions;
- }
-
- internal bool isIndented = false;
- public void Indent()
- {
- if (DoIndent) {
- int indent = 0;
- while (indent < prettyPrintOptions.IndentSize * indentationLevel) {
- char ch = prettyPrintOptions.IndentationChar;
- if (ch == '\t' && indent + prettyPrintOptions.TabSize > prettyPrintOptions.IndentSize * indentationLevel) {
- ch = ' ';
- }
- text.Append(ch);
- if (ch == '\t') {
- indent += prettyPrintOptions.TabSize;
- } else {
- ++indent;
- }
- }
- isIndented = true;
- }
- }
-
- public void Reset ()
- {
- text.Length = 0;
- isIndented = false;
- }
-
- public void Space()
- {
- text.Append(' ');
- isIndented = false;
- }
-
- internal int lastLineStart = 0;
- internal int lineBeforeLastStart = 0;
-
- public bool LastCharacterIsNewLine {
- get {
- return text.Length == lastLineStart;
- }
- }
-
- public bool LastCharacterIsWhiteSpace {
- get {
- return text.Length == 0 || char.IsWhiteSpace(text[text.Length - 1]);
- }
- }
-
- public virtual void NewLine()
- {
- if (DoNewLine) {
- if (!LastCharacterIsNewLine) {
- lineBeforeLastStart = lastLineStart;
- }
- text.AppendLine();
- lastLineStart = text.Length;
- isIndented = false;
- }
- }
-
- public virtual void EndFile()
- {
- }
-
- protected void WriteLineInPreviousLine(string txt, bool forceWriteInPreviousBlock)
- {
- WriteInPreviousLine(txt + Environment.NewLine, forceWriteInPreviousBlock);
- }
-
- protected void WriteInPreviousLine(string txt, bool forceWriteInPreviousBlock)
- {
- if (txt.Length == 0) return;
-
- bool lastCharacterWasNewLine = LastCharacterIsNewLine;
- if (lastCharacterWasNewLine) {
- if (forceWriteInPreviousBlock == false) {
- if (txt != Environment.NewLine) Indent();
- text.Append(txt);
- lineBeforeLastStart = lastLineStart;
- lastLineStart = text.Length;
- return;
- }
- lastLineStart = lineBeforeLastStart;
- }
- string lastLine = text.ToString(lastLineStart, text.Length - lastLineStart);
- text.Remove(lastLineStart, text.Length - lastLineStart);
- if (txt != Environment.NewLine) {
- if (forceWriteInPreviousBlock) ++indentationLevel;
- Indent();
- if (forceWriteInPreviousBlock) --indentationLevel;
- }
- text.Append(txt);
- lineBeforeLastStart = lastLineStart;
- lastLineStart = text.Length;
- text.Append(lastLine);
- if (lastCharacterWasNewLine) {
- lineBeforeLastStart = lastLineStart;
- lastLineStart = text.Length;
- }
- isIndented = false;
- }
-
- /// <summary>
- /// Prints a text that cannot be inserted before using WriteInPreviousLine
- /// into the current line
- /// </summary>
- protected void PrintSpecialText(string specialText)
- {
- lineBeforeLastStart = text.Length;
- text.Append(specialText);
- lastLineStart = text.Length;
- isIndented = false;
- }
-
- public void PrintTokenList(ArrayList tokenList)
- {
- foreach (int token in tokenList) {
- PrintToken(token);
- Space();
- }
- }
-
- public abstract void PrintComment(Comment comment, bool forceWriteInPreviousBlock);
-
- public virtual void PrintPreprocessingDirective(PreprocessingDirective directive, bool forceWriteInPreviousBlock)
- {
- if (!directive.Expression.IsNull) {
- CSharpOutputVisitor visitor = new CSharpOutputVisitor();
- directive.Expression.AcceptVisitor(visitor, null);
- WriteLineInPreviousLine(directive.Cmd + " " + visitor.Text, forceWriteInPreviousBlock);
- } else if (string.IsNullOrEmpty(directive.Arg))
- WriteLineInPreviousLine(directive.Cmd, forceWriteInPreviousBlock);
- else
- WriteLineInPreviousLine(directive.Cmd + " " + directive.Arg, forceWriteInPreviousBlock);
- }
-
- public void PrintBlankLine(bool forceWriteInPreviousBlock)
- {
- WriteInPreviousLine(Environment.NewLine, forceWriteInPreviousBlock);
- }
-
- public abstract void PrintToken(int token);
-
- public void PrintText(string text)
- {
- this.text.Append(text);
- isIndented = false;
- }
-
- public abstract void PrintIdentifier(string identifier);
- }
-}
+// <file> +// <copyright see="prj:///doc/copyright.txt"/> +// <license see="prj:///doc/license.txt"/> +// <owner name="Mike Krüger" email="mike@icsharpcode.net"/> +// <version>$Revision: 4324 $</version> +// </file> + +using System; +using System.Collections; +using System.Text; + +namespace ICSharpCode.NRefactory.PrettyPrinter +{ + /// <summary> + /// Base class of output formatters. + /// </summary> + public abstract class AbstractOutputFormatter : IOutputFormatter + { + StringBuilder text = new StringBuilder(); + + int indentationLevel = 0; + bool indent = true; + bool doNewLine = true; + AbstractPrettyPrintOptions prettyPrintOptions; + + public bool IsInMemberBody { get; set; } + + public int IndentationLevel { + get { + return indentationLevel; + } + set { + indentationLevel = value; + } + } + + public string Text { + get { + return text.ToString(); + } + } + + public int TextLength { + get { + return text.Length; + } + } + + + public bool DoIndent { + get { + return indent; + } + set { + indent = value; + } + } + + public bool DoNewLine { + get { + return doNewLine; + } + set { + doNewLine = value; + } + } + + protected AbstractOutputFormatter(AbstractPrettyPrintOptions prettyPrintOptions) + { + this.prettyPrintOptions = prettyPrintOptions; + } + + internal bool isIndented = false; + public void Indent() + { + if (DoIndent) { + int indent = 0; + while (indent < prettyPrintOptions.IndentSize * indentationLevel) { + char ch = prettyPrintOptions.IndentationChar; + if (ch == '\t' && indent + prettyPrintOptions.TabSize > prettyPrintOptions.IndentSize * indentationLevel) { + ch = ' '; + } + text.Append(ch); + if (ch == '\t') { + indent += prettyPrintOptions.TabSize; + } else { + ++indent; + } + } + isIndented = true; + } + } + + public void Reset () + { + text.Length = 0; + isIndented = false; + } + + public void Space() + { + text.Append(' '); + isIndented = false; + } + + internal int lastLineStart = 0; + internal int lineBeforeLastStart = 0; + + public bool LastCharacterIsNewLine { + get { + return text.Length == lastLineStart; + } + } + + public bool LastCharacterIsWhiteSpace { + get { + return text.Length == 0 || char.IsWhiteSpace(text[text.Length - 1]); + } + } + + public virtual void NewLine() + { + if (DoNewLine) { + if (!LastCharacterIsNewLine) { + lineBeforeLastStart = lastLineStart; + } + text.AppendLine(); + lastLineStart = text.Length; + isIndented = false; + } + } + + public virtual void EndFile() + { + } + + protected void WriteLineInPreviousLine(string txt, bool forceWriteInPreviousBlock) + { + WriteInPreviousLine(txt + Environment.NewLine, forceWriteInPreviousBlock); + } + protected void WriteLineInPreviousLine(string txt, bool forceWriteInPreviousBlock, bool indent) + { + WriteInPreviousLine(txt + Environment.NewLine, forceWriteInPreviousBlock, indent); + } + + protected void WriteInPreviousLine(string txt, bool forceWriteInPreviousBlock) + { + WriteInPreviousLine(txt, forceWriteInPreviousBlock, true); + } + + protected void WriteInPreviousLine(string txt, bool forceWriteInPreviousBlock, bool indent) + { + if (txt.Length == 0) return; + + bool lastCharacterWasNewLine = LastCharacterIsNewLine; + if (lastCharacterWasNewLine) { + if (forceWriteInPreviousBlock == false) { + if (indent && txt != Environment.NewLine) Indent(); + text.Append(txt); + lineBeforeLastStart = lastLineStart; + lastLineStart = text.Length; + return; + } + lastLineStart = lineBeforeLastStart; + } + string lastLine = text.ToString(lastLineStart, text.Length - lastLineStart); + text.Remove(lastLineStart, text.Length - lastLineStart); + if (indent && txt != Environment.NewLine) { + if (forceWriteInPreviousBlock) ++indentationLevel; + Indent(); + if (forceWriteInPreviousBlock) --indentationLevel; + } + text.Append(txt); + lineBeforeLastStart = lastLineStart; + lastLineStart = text.Length; + text.Append(lastLine); + if (lastCharacterWasNewLine) { + lineBeforeLastStart = lastLineStart; + lastLineStart = text.Length; + } + isIndented = false; + } + + /// <summary> + /// Prints a text that cannot be inserted before using WriteInPreviousLine + /// into the current line + /// </summary> + protected void PrintSpecialText(string specialText) + { + lineBeforeLastStart = text.Length; + text.Append(specialText); + lastLineStart = text.Length; + isIndented = false; + } + + public void PrintTokenList(ArrayList tokenList) + { + foreach (int token in tokenList) { + PrintToken(token); + Space(); + } + } + + public abstract void PrintComment(Comment comment, bool forceWriteInPreviousBlock); + + public virtual void PrintPreprocessingDirective(PreprocessingDirective directive, bool forceWriteInPreviousBlock) + { + if (!directive.Expression.IsNull) { + CSharpOutputVisitor visitor = new CSharpOutputVisitor(); + directive.Expression.AcceptVisitor(visitor, null); + WriteLineInPreviousLine(directive.Cmd + " " + visitor.Text, forceWriteInPreviousBlock); + } else if (string.IsNullOrEmpty(directive.Arg)) + WriteLineInPreviousLine(directive.Cmd, forceWriteInPreviousBlock); + else + WriteLineInPreviousLine(directive.Cmd + " " + directive.Arg, forceWriteInPreviousBlock); + } + + public void PrintBlankLine(bool forceWriteInPreviousBlock) + { + WriteInPreviousLine(Environment.NewLine, forceWriteInPreviousBlock); + } + + public abstract void PrintToken(int token); + + public void PrintText(string text) + { + this.text.Append(text); + isIndented = false; + } + + public abstract void PrintIdentifier(string identifier); + } +} diff --git a/main/contrib/NRefactory/Project/Src/PrettyPrinter/CSharp/OutputFormatter.cs b/main/contrib/NRefactory/Project/Src/PrettyPrinter/CSharp/OutputFormatter.cs index a0b99024e9..d0b0e466d7 100644 --- a/main/contrib/NRefactory/Project/Src/PrettyPrinter/CSharp/OutputFormatter.cs +++ b/main/contrib/NRefactory/Project/Src/PrettyPrinter/CSharp/OutputFormatter.cs @@ -2,7 +2,7 @@ // <copyright see="prj:///doc/copyright.txt"/> // <license see="prj:///doc/license.txt"/> // <owner name="Mike Krüger" email="mike@icsharpcode.net"/> -// <version>$Revision: 3856 $</version> +// <version>$Revision: 4324 $</version> // </file> using System.Collections; @@ -154,7 +154,8 @@ namespace ICSharpCode.NRefactory.PrettyPrinter WriteLineInPreviousLine("///" + comment.CommentText, forceWriteInPreviousBlock); break; default: - WriteLineInPreviousLine("//" + comment.CommentText, forceWriteInPreviousBlock); + // 3 because startposition is start of the text (after the tag) + WriteLineInPreviousLine("//" + comment.CommentText, forceWriteInPreviousBlock, comment.StartPosition.Column != 3); break; } } |