1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
5
using System.Collections.Generic;
6
using ICSharpCode.Scripting;
7
using ICSharpCode.SharpDevelop.Editor;
9
namespace ICSharpCode.RubyBinding
11
public class RubyLineIndenter : LineIndenter
13
List<string> decreaseLineIndentStatements = new List<string>();
14
List<string> decreaseLineIndentStartsWithStatements = new List<string>();
16
List<string> increaseLineIndentStatements = new List<string>();
17
List<string> increaseLineIndentStartsWithStatements = new List<string>();
18
List<string> increaseLineIndentEndsWithStatements = new List<string>();
19
List<string> increaseLineIndentContainsStatements = new List<string>();
21
public RubyLineIndenter(ITextEditor editor, IDocumentLine line)
24
CreateDecreaseLineIndentStatements();
25
CreateDecreaseLineIndentStartsWithStatements();
26
CreateIncreaseLineIndentStatements();
27
CreateIncreaseLineIndentStartsWithStatements();
28
CreateIncreaseLineIndentEndsWithStatements();
29
CreateIncreaseLineIndentContainsStatements();
32
void CreateDecreaseLineIndentStatements()
34
decreaseLineIndentStatements.Add("break");
35
decreaseLineIndentStatements.Add("return");
36
decreaseLineIndentStatements.Add("raise");
39
void CreateDecreaseLineIndentStartsWithStatements()
41
decreaseLineIndentStartsWithStatements.Add("return ");
42
decreaseLineIndentStartsWithStatements.Add("raise ");
45
void CreateIncreaseLineIndentStatements()
47
increaseLineIndentStatements.Add("else");
48
increaseLineIndentStatements.Add("begin");
49
increaseLineIndentStatements.Add("rescue");
50
increaseLineIndentStatements.Add("ensure");
53
void CreateIncreaseLineIndentStartsWithStatements()
55
increaseLineIndentStartsWithStatements.Add("if ");
56
increaseLineIndentStartsWithStatements.Add("def ");
57
increaseLineIndentStartsWithStatements.Add("class ");
58
increaseLineIndentStartsWithStatements.Add("while ");
59
increaseLineIndentStartsWithStatements.Add("elsif ");
60
increaseLineIndentStartsWithStatements.Add("loop ");
61
increaseLineIndentStartsWithStatements.Add("unless ");
62
increaseLineIndentStartsWithStatements.Add("until ");
63
increaseLineIndentStartsWithStatements.Add("for ");
64
increaseLineIndentStartsWithStatements.Add("rescue ");
65
increaseLineIndentStartsWithStatements.Add("module ");
66
increaseLineIndentStartsWithStatements.Add("when ");
67
increaseLineIndentStartsWithStatements.Add("case ");
70
void CreateIncreaseLineIndentEndsWithStatements()
72
increaseLineIndentEndsWithStatements.Add(" then");
73
increaseLineIndentEndsWithStatements.Add(" do");
74
increaseLineIndentEndsWithStatements.Add(" {");
77
void CreateIncreaseLineIndentContainsStatements()
79
increaseLineIndentContainsStatements.Add(" case ");
82
protected override bool ShouldIncreaseLineIndent()
84
if (increaseLineIndentStatements.Contains(PreviousLine)) {
87
if (PreviousLineStartsWith(increaseLineIndentStartsWithStatements)) {
90
if (PreviousLineContains(increaseLineIndentContainsStatements)) {
93
return PreviousLineEndsWith(increaseLineIndentEndsWithStatements);
96
protected override bool ShouldDecreaseLineIndent()
98
if (decreaseLineIndentStatements.Contains(PreviousLine)) {
101
return PreviousLineStartsWith(decreaseLineIndentStartsWithStatements);
104
bool PreviousLineStartsWith(List<string> items)
106
foreach (string item in items) {
107
if (PreviousLine.StartsWith(item)) {
114
bool PreviousLineEndsWith(List<string> items)
116
foreach (string item in items) {
117
if (PreviousLine.EndsWith(item)) {
124
bool PreviousLineContains(List<string> items)
126
foreach (string item in items) {
127
if (PreviousLine.Contains(item)) {