Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Krüger <mkrueger@novell.com>2009-09-10 11:53:36 +0400
committerMike Krüger <mkrueger@novell.com>2009-09-10 11:53:36 +0400
commit57181ea0d5db246f7a24c9f71a3245608e572b64 (patch)
tree5b671418107a4372962f2d5a251cee106c8bc526 /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates
parentedab04e25e69a540fdcc2140f4d570783bcec133 (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/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/CodeTemplate.cs26
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/ExpansionObject.cs5
2 files changed, 25 insertions, 6 deletions
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;