diff options
author | Mike Krüger <mkrueger@novell.com> | 2009-09-10 11:53:36 +0400 |
---|---|---|
committer | Mike Krüger <mkrueger@novell.com> | 2009-09-10 11:53:36 +0400 |
commit | 57181ea0d5db246f7a24c9f71a3245608e572b64 (patch) | |
tree | 5b671418107a4372962f2d5a251cee106c8bc526 /main | |
parent | edab04e25e69a540fdcc2140f4d570783bcec133 (diff) |
* MonoDevelop.Ide.CodeTemplates/CodeTemplate.cs:
* MonoDevelop.Ide.CodeTemplates/ExpansionObject.cs: Worked on template
formatting.
svn path=/trunk/monodevelop/; revision=141668
Diffstat (limited to 'main')
3 files changed, 31 insertions, 6 deletions
diff --git a/main/src/core/MonoDevelop.Ide/ChangeLog b/main/src/core/MonoDevelop.Ide/ChangeLog index f9be7ca003..a216397b6e 100644 --- a/main/src/core/MonoDevelop.Ide/ChangeLog +++ b/main/src/core/MonoDevelop.Ide/ChangeLog @@ -1,3 +1,9 @@ +2009-09-10 Mike Krüger <mkrueger@novell.com> + + * MonoDevelop.Ide.CodeTemplates/CodeTemplate.cs: + * MonoDevelop.Ide.CodeTemplates/ExpansionObject.cs: Worked on + template formatting. + 2009-09-09 Mike Krüger <mkrueger@novell.com> * MonoDevelop.Ide.Execution/MonoExecutionParameters.cs: Added 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; |