Browse Source

Fixed Forum-4946: error indenting single-line If-statements.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1112 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
318c6aa34f
  1. 15
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs

15
src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs

@ -39,7 +39,7 @@ namespace VBNetBinding.FormattingStrategy
{ {
statements = new ArrayList(); statements = new ArrayList();
statements.Add(new VBStatement("^if.*?(then)?$", "^end ?if$", "End If", 1)); statements.Add(new VBStatement("^if.*?(then| _)$", "^end ?if$", "End If", 1));
statements.Add(new VBStatement("\\bclass \\w+$", "^end class$", "End Class", 1)); statements.Add(new VBStatement("\\bclass \\w+$", "^end class$", "End Class", 1));
statements.Add(new VBStatement("\\bnamespace \\w+$", "^end namespace$", "End Namespace", 1)); statements.Add(new VBStatement("\\bnamespace \\w+$", "^end namespace$", "End Namespace", 1));
statements.Add(new VBStatement("\\bmodule \\w+$", "^end module$", "End Module", 1)); statements.Add(new VBStatement("\\bmodule \\w+$", "^end module$", "End Module", 1));
@ -321,13 +321,13 @@ namespace VBNetBinding.FormattingStrategy
if (doCasing) if (doCasing)
{ {
foreach (string keyword in keywords) { foreach (string keyword in keywords) {
string regex = "(?:\\W|^)(" + keyword + ")(?:\\W|$)"; string regex = "\\b" + keyword + "\\b"; // \b = word border
MatchCollection matches = Regex.Matches(texttoreplace, regex, RegexOptions.IgnoreCase | RegexOptions.Singleline); MatchCollection matches = Regex.Matches(texttoreplace, regex, RegexOptions.IgnoreCase | RegexOptions.Singleline);
foreach (Match match in matches) { foreach (Match match in matches) {
if (keyword == "EndIf") // special case if (keyword == "EndIf") // special case
textArea.Document.Replace(lineAbove.Offset + match.Groups[1].Index, match.Groups[1].Length, "End If"); textArea.Document.Replace(lineAbove.Offset + match.Index, match.Length, "End If");
else else
textArea.Document.Replace(lineAbove.Offset + match.Groups[1].Index, match.Groups[1].Length, keyword); textArea.Document.Replace(lineAbove.Offset + match.Index, match.Length, keyword);
++undoCount; ++undoCount;
} }
} }
@ -335,6 +335,13 @@ namespace VBNetBinding.FormattingStrategy
if (doInsertion) if (doInsertion)
{ {
if (Regex.IsMatch(texttoreplace.Trim(), @"^If .*[^_]$", RegexOptions.IgnoreCase)) {
if (false == Regex.IsMatch(texttoreplace, @"\bthen\b", RegexOptions.IgnoreCase)) {
textArea.Document.Insert(lineAbove.Offset + lineAbove.Length, " Then");
++undoCount;
texttoreplace += " Then";
}
}
foreach (VBStatement statement in statements) { foreach (VBStatement statement in statements) {
if (Regex.IsMatch(texttoreplace.Trim(), statement.StartRegex, RegexOptions.IgnoreCase)) { if (Regex.IsMatch(texttoreplace.Trim(), statement.StartRegex, RegexOptions.IgnoreCase)) {
string indentation = GetIndentation(textArea, lineNr - 1); string indentation = GetIndentation(textArea, lineNr - 1);

Loading…
Cancel
Save