~halega/+junk/sharpdevelop

« back to all changes in this revision

Viewing changes to src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Src/RubyLineIndenter.cs

  • Committer: sk
  • Date: 2011-09-10 05:17:57 UTC
  • Revision ID: halega@halega.com-20110910051757-qfouz1llya9m6boy
4.1.0.7915 Release Candidate 1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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)
 
3
 
 
4
using System;
 
5
using System.Collections.Generic;
 
6
using ICSharpCode.Scripting;
 
7
using ICSharpCode.SharpDevelop.Editor;
 
8
 
 
9
namespace ICSharpCode.RubyBinding
 
10
{
 
11
        public class RubyLineIndenter : LineIndenter
 
12
        {
 
13
                List<string> decreaseLineIndentStatements = new List<string>();
 
14
                List<string> decreaseLineIndentStartsWithStatements = new List<string>();
 
15
 
 
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>();
 
20
 
 
21
                public RubyLineIndenter(ITextEditor editor, IDocumentLine line)
 
22
                        : base(editor, line)
 
23
                {
 
24
                        CreateDecreaseLineIndentStatements();
 
25
                        CreateDecreaseLineIndentStartsWithStatements();
 
26
                        CreateIncreaseLineIndentStatements();
 
27
                        CreateIncreaseLineIndentStartsWithStatements();
 
28
                        CreateIncreaseLineIndentEndsWithStatements();
 
29
                        CreateIncreaseLineIndentContainsStatements();
 
30
                }
 
31
                
 
32
                void CreateDecreaseLineIndentStatements()
 
33
                {
 
34
                        decreaseLineIndentStatements.Add("break");
 
35
                        decreaseLineIndentStatements.Add("return");
 
36
                        decreaseLineIndentStatements.Add("raise");
 
37
                }
 
38
                
 
39
                void CreateDecreaseLineIndentStartsWithStatements()
 
40
                {
 
41
                        decreaseLineIndentStartsWithStatements.Add("return ");
 
42
                        decreaseLineIndentStartsWithStatements.Add("raise ");
 
43
                }
 
44
                
 
45
                void CreateIncreaseLineIndentStatements()
 
46
                {
 
47
                        increaseLineIndentStatements.Add("else");
 
48
                        increaseLineIndentStatements.Add("begin");
 
49
                        increaseLineIndentStatements.Add("rescue");
 
50
                        increaseLineIndentStatements.Add("ensure");
 
51
                }
 
52
                
 
53
                void CreateIncreaseLineIndentStartsWithStatements()
 
54
                {
 
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 ");
 
68
                }
 
69
                
 
70
                void CreateIncreaseLineIndentEndsWithStatements()
 
71
                {
 
72
                        increaseLineIndentEndsWithStatements.Add(" then");
 
73
                        increaseLineIndentEndsWithStatements.Add(" do");
 
74
                        increaseLineIndentEndsWithStatements.Add(" {");
 
75
                }
 
76
                
 
77
                void CreateIncreaseLineIndentContainsStatements()
 
78
                {
 
79
                        increaseLineIndentContainsStatements.Add(" case ");
 
80
                }
 
81
                
 
82
                protected override bool ShouldIncreaseLineIndent()
 
83
                {
 
84
                        if (increaseLineIndentStatements.Contains(PreviousLine)) {
 
85
                                return true;
 
86
                        }
 
87
                        if (PreviousLineStartsWith(increaseLineIndentStartsWithStatements)) {
 
88
                                return true;
 
89
                        }
 
90
                        if (PreviousLineContains(increaseLineIndentContainsStatements)) {
 
91
                                return true;
 
92
                        }
 
93
                        return PreviousLineEndsWith(increaseLineIndentEndsWithStatements);
 
94
                }
 
95
                
 
96
                protected override bool ShouldDecreaseLineIndent()
 
97
                {
 
98
                        if (decreaseLineIndentStatements.Contains(PreviousLine)) {
 
99
                                return true;
 
100
                        }
 
101
                        return PreviousLineStartsWith(decreaseLineIndentStartsWithStatements);
 
102
                }
 
103
                
 
104
                bool PreviousLineStartsWith(List<string> items)
 
105
                {
 
106
                        foreach (string item in items) {
 
107
                                if (PreviousLine.StartsWith(item)) {
 
108
                                        return true;
 
109
                                }
 
110
                        }
 
111
                        return false;
 
112
                }
 
113
                
 
114
                bool PreviousLineEndsWith(List<string> items)
 
115
                {
 
116
                        foreach (string item in items) {
 
117
                                if (PreviousLine.EndsWith(item)) {
 
118
                                        return true;
 
119
                                }
 
120
                        }
 
121
                        return false;
 
122
                }
 
123
                
 
124
                bool PreviousLineContains(List<string> items)
 
125
                {
 
126
                        foreach (string item in items) {
 
127
                                if (PreviousLine.Contains(item)) {
 
128
                                        return true;
 
129
                                }
 
130
                        }
 
131
                        return false;
 
132
                }
 
133
        }
 
134
}