From 57181ea0d5db246f7a24c9f71a3245608e572b64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Thu, 10 Sep 2009 07:53:36 +0000 Subject: * MonoDevelop.Ide.CodeTemplates/CodeTemplate.cs: * MonoDevelop.Ide.CodeTemplates/ExpansionObject.cs: Worked on template formatting. svn path=/trunk/monodevelop/; revision=141668 --- .../MonoDevelop.Ide.CodeTemplates/CodeTemplate.cs | 26 +++++++++++++++++----- .../ExpansionObject.cs | 5 +++++ 2 files changed, 25 insertions(+), 6 deletions(-) (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates') diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/CodeTemplate.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/CodeTemplate.cs index 1708fef308..846579285b 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/CodeTemplate.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/CodeTemplate.cs @@ -214,7 +214,8 @@ namespace MonoDevelop.Ide.CodeTemplates } else if (name == "selected") { if (!string.IsNullOrEmpty (context.SelectedText)) { string indent = GetIndent (sb); - sb.Append (Reindent (context.SelectedText, indent)); + string selection = Reindent (context.SelectedText, indent); + sb.Append (selection); } } if (!variableDecarations.ContainsKey (name)) @@ -302,16 +303,28 @@ namespace MonoDevelop.Ide.CodeTemplates return indent.ToString (); } + string RemoveIndent (string text, string indent) + { + Document doc = new Document (); + doc.Text = text; + StringBuilder result = new StringBuilder (); + foreach (LineSegment line in doc.Lines) { + string curLineIndent = line.GetIndentation (doc); + int offset = Math.Min (curLineIndent.Length, indent.Length); + result.Append (doc.GetTextBetween (line.Offset + offset, line.EndOffset)); + } + return result.ToString (); + } + string Reindent (string text, string indent) { Document doc = new Document (); doc.Text = text; - StringBuilder result = new StringBuilder (); foreach (LineSegment line in doc.Lines) { if (result.Length > 0) result.Append (indent); - result.Append (doc.GetTextAt (line).TrimStart (' ', '\t')); + result.Append (doc.GetTextAt (line)); } return result.ToString (); } @@ -329,13 +342,14 @@ namespace MonoDevelop.Ide.CodeTemplates int line, col; editor.GetLineColumnFromPosition (offset, out line, out col); // string leadingWhiteSpace = GetLeadingWhiteSpace (editor, editor.CursorLine); - + TemplateContext context = new TemplateContext { Template = this, Document = document, ProjectDom = dom, ParsedDocument = doc, InsertPosition = new DomLocation (line, col), + LineIndent = GetIndent (editor, line, 0), TemplateCode = IndentCode (Code, GetIndent (editor, line, 0)) }; @@ -348,8 +362,8 @@ namespace MonoDevelop.Ide.CodeTemplates while (Char.IsWhiteSpace (data.Document.GetCharAt (end - 1))) { end--; } - context.SelectedText = data.Document.GetTextBetween (start, end); - + context.LineIndent = GetIndent (editor, data.Document.OffsetToLineNumber (start) + 1, 0); + context.SelectedText = RemoveIndent (data.Document.GetTextBetween (start, end), context.LineIndent); data.Remove (start, end - start); offset = start; } else { diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/ExpansionObject.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/ExpansionObject.cs index ab5db78ff7..de711e8c81 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/ExpansionObject.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/ExpansionObject.cs @@ -68,6 +68,11 @@ namespace MonoDevelop.Ide.CodeTemplates set; } + public string LineIndent { + get; + set; + } + public MonoDevelop.Ide.Gui.Document Document { get; set; -- cgit v1.2.3