Module: Manipulation
Instance Method Summary
collapse
-
#add(word, color = "no color") ⇒ Object
-
#add_text(text_for_indentation_and_syntax_highlight) ⇒ Object
-
#analyze(word, i) ⇒ Object
-
#are_not_empty? ⇒ Boolean
-
#clear_array ⇒ Object
-
#comments(word, i, ind) ⇒ Object
-
#comments_multiline(word, i, ind) ⇒ Object
-
#convert ⇒ Object
-
#delete(num1, num2) ⇒ Object
-
#delimiter_multi_arr(word, i, ind) ⇒ Object
-
#delimiter_multi_str(word, i, ind) ⇒ Object
-
#double_quote(word, i, ind) ⇒ Object
-
#empty_array ⇒ Object
-
#empty_list? ⇒ Boolean
-
#end_method(word, i, ind) ⇒ Object
-
#highlight ⇒ Object
-
#include_word_for_indentation_and_optional_do(word, i, ind) ⇒ Object
-
#indent ⇒ Object
-
#instances_for_different_color ⇒ Object
-
#interpolate(word) ⇒ Object
-
#method_missing(method, *args) ⇒ Object
-
#multiline_str(word, i, ind) ⇒ Object
-
#new_line ⇒ Object
-
#optional_do?(word, i, ind) ⇒ Boolean
-
#other_word(word, i) ⇒ Object
-
#punctuation?(word) ⇒ Boolean
-
#regex(word, i, ind) ⇒ Object
-
#set_number(i) ⇒ Object
-
#single_quote(word, i, ind) ⇒ Object
-
#start_indentation_and_number(i) ⇒ Object
-
#str(word, i, ind = 0) ⇒ Object
-
#total_delete ⇒ Object
-
#word_to_indent?(word) ⇒ Boolean
-
#words_related_to_end?(word, i, ind) ⇒ Boolean
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args) ⇒ Object
21
22
23
24
25
26
27
28
29
|
# File 'lib/twirb/manipulation.rb', line 21
def method_missing(method, *args)
end_array = {"literal_array" => "}", "literal_array_square" => "]", "literal_array_parenthesis" => ")"}
if args[0] == end_array[method.to_s] && @interpolation.empty?
@keywords[args[0]].call(args[0], args[1], args[2])
else
add(args[0], 'violet') {@literal_array_parenthesis << args[0] if args[0] == "(" and @interpolation.empty? and method.to_s == "literal_array_parenthesis"}
interpolate(args[0])
end
end
|
Instance Method Details
#add(word, color = "no color") ⇒ Object
3
4
5
6
|
# File 'lib/twirb/manipulation.rb', line 3
def add(word, color = "no color")
@entry.send("insert", 'end', word, color)
yield if block_given?
end
|
#add_text(text_for_indentation_and_syntax_highlight) ⇒ Object
216
217
218
219
220
221
222
223
224
225
226
227
|
# File 'lib/twirb/manipulation.rb', line 216
def add_text(text_for_indentation_and_syntax_highlight)
@text = text_for_indentation_and_syntax_highlight
@num_lin = @text.split(/\n/).length
total_delete
@text.gsub(/^\d*\)/, "").each_line.with_index(1) do |line, i|
add("\n") unless i == 1
start_indentation_and_number(i)
line.sub(/^\s+/, "").gsub(/\n/, "").split(/(\s+)/).each_with_index do |word, i|
other_word(word, i)
end
end
end
|
#analyze(word, i) ⇒ Object
161
162
163
164
165
166
|
# File 'lib/twirb/manipulation.rb', line 161
def analyze(word, i)
words = word.split(/(\\[\'\"\/\#{\\]|%[wWqQr]?[|\=\^!\"\$-]|\$[\']*|\^|\=begin|\=end|\||\<\<\-?["\']?\w+["\']?|\.|!|\?[\"\'\/]?|%[wWqQr]?[\{\[\(]|\/|{|}|"|\'|\+|\-|\=|\~|\*|\\|\<|\>|\[|\]|\#{|\#|\d|\:\:|\)|\;|\,|&&|\()/)
words.each_with_index do |w, ind|
str(w, i, ind)
end
end
|
#are_not_empty? ⇒ Boolean
111
112
113
|
# File 'lib/twirb/manipulation.rb', line 111
def are_not_empty?
instances_for_different_color.any? {|kw| !instance_variable_get(kw).empty?}
end
|
#clear_array ⇒ Object
198
199
200
201
|
# File 'lib/twirb/manipulation.rb', line 198
def clear_array
[@comments, @def_name, @div, @reference_word, @optional_do].each {|n| n.clear}
@multiline_str << @start_multiline_str[0] unless @start_multiline_str.empty?
end
|
72
73
74
|
# File 'lib/twirb/manipulation.rb', line 72
def (word, i, ind)
@keywords["#"].call(word, i, ind)
end
|
31
32
33
34
35
36
37
|
# File 'lib/twirb/manipulation.rb', line 31
def (word, i, ind)
if word != "=end"
@keywords["=begin"].call(word, i, ind)
else
@keywords["=end"].call(word, i, ind)
end
end
|
#convert ⇒ Object
153
154
155
156
157
158
159
|
# File 'lib/twirb/manipulation.rb', line 153
def convert
@auto_highlight = false
@a = @entry.value
@a.gsub!(/^\d*\)/, "")
@entry.delete(1.0, 'end')
add(@a)
end
|
#delete(num1, num2) ⇒ Object
8
9
10
|
# File 'lib/twirb/manipulation.rb', line 8
def delete(num1, num2)
@entry.send("delete", "end -1 lines + #{num1} chars", "end -1 lines + #{num2} chars")
end
|
#delimiter_multi_arr(word, i, ind) ⇒ Object
97
98
99
100
101
102
103
104
105
|
# File 'lib/twirb/manipulation.rb', line 97
def delimiter_multi_arr(word, i, ind)
@end_multi_arr = @delimiter_multi_arr[0][2]
if word == @end_multi_arr
add(word, 'violet')
@delimiter_multi_arr.clear
else
add(word, 'violet')
end
end
|
#delimiter_multi_str(word, i, ind) ⇒ Object
87
88
89
90
91
92
93
94
95
|
# File 'lib/twirb/manipulation.rb', line 87
def delimiter_multi_str(word, i, ind)
@end_multi_str = @delimiter_multi_str[0][@delimiter_multi_str[0].length - 1]
if word == @end_multi_str
add(word, 'violet')
@delimiter_multi_str.clear
else
add(word, 'violet')
end
end
|
#double_quote(word, i, ind) ⇒ Object
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/twirb/manipulation.rb', line 60
def double_quote(word, i, ind)
if word == '"' || word == '%"' || word == '?"' and @interpolation.empty?
@double_quote.clear
add(word, 'violet')
else
add(word, "violet")
interpolate(word)
end
end
|
#empty_array ⇒ Object
193
194
195
196
|
# File 'lib/twirb/manipulation.rb', line 193
def empty_array
(%w{@list_end_words @def_name @reference_word @interpolation @optional_do @start_multiline_str} +
instances_for_different_color).each {|inst| instance_variable_set(inst, [])}
end
|
#empty_list? ⇒ Boolean
185
186
187
|
# File 'lib/twirb/manipulation.rb', line 185
def empty_list?
instances_for_different_color.all? {|inst| instance_variable_get(inst).empty?}
end
|
#end_method(word, i, ind) ⇒ Object
139
140
141
142
143
144
145
146
|
# File 'lib/twirb/manipulation.rb', line 139
def end_method(word, i, ind)
if @list_end_words.empty? || ind != 0
add(word)
else
@keywords[@list_end_words.last].call(word, i, ind)
@list_end_words.pop
end
end
|
#highlight ⇒ Object
229
230
231
232
233
234
235
236
|
# File 'lib/twirb/manipulation.rb', line 229
def highlight
if @auto_highlight
empty_array
add_text(@entry.value)
else
add(' ')
end
end
|
#include_word_for_indentation_and_optional_do(word, i, ind) ⇒ Object
125
126
127
128
|
# File 'lib/twirb/manipulation.rb', line 125
def include_word_for_indentation_and_optional_do(word, i, ind)
@list_end_words << word if words_related_to_end?(word, i, ind) && empty_list?
@optional_do << word if optional_do?(word, i, ind)
end
|
#indent ⇒ Object
189
190
191
|
# File 'lib/twirb/manipulation.rb', line 189
def indent
%w{module class def if case while do begin unless until for}.each {|n| add(" " * @list_end_words.count(n))}
end
|
#instances_for_different_color ⇒ Object
107
108
109
|
# File 'lib/twirb/manipulation.rb', line 107
def instances_for_different_color
%w{@literal_array @double_quote @single_quote @regex @comments @multiline_str @comments_multiline @delimiter_multi_str @delimiter_multi_arr @literal_array_square @literal_array_parenthesis}
end
|
#interpolate(word) ⇒ Object
16
17
18
19
|
# File 'lib/twirb/manipulation.rb', line 16
def interpolate(word)
@interpolation << word if word == '#{'
@interpolation.pop if word == '}'
end
|
#multiline_str(word, i, ind) ⇒ Object
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/twirb/manipulation.rb', line 76
def multiline_str(word, i, ind)
@multiline_str[0][2] != "-" ? @end_str = @multiline_str[0][2..@multiline_str[0].length] : @end_str = @multiline_str[0][3..@multiline_str[0].length]
if word == @end_str.gsub(/["\']/, "") && i == 0 && ind == 0
add(word, 'violet')
@multiline_str.clear
@start_multiline_str.shift
else
add(word, 'violet')
end
end
|
#new_line ⇒ Object
148
149
150
151
|
# File 'lib/twirb/manipulation.rb', line 148
def new_line
highlight
add("\n")
end
|
#optional_do?(word, i, ind) ⇒ Boolean
134
135
136
|
# File 'lib/twirb/manipulation.rb', line 134
def optional_do?(word, i, ind)
%w{if while until}.any? {|kw| kw == word && i == 0 && ind == 0}
end
|
#other_word(word, i) ⇒ Object
177
178
179
180
181
182
183
|
# File 'lib/twirb/manipulation.rb', line 177
def other_word(word, i)
if punctuation?(word)
analyze(word, i)
else
str(word, i)
end
end
|
#punctuation?(word) ⇒ Boolean
168
169
170
171
|
# File 'lib/twirb/manipulation.rb', line 168
def punctuation?(word)
view = word.scan(/\\[\'\"\/\#{\\]|%[wWqQr]?[|\=\^!\"\$-]|\$[\']*|\^|\=begin|\=end|\||\<\<\-?["\']?\w+["\']?|\.|!|\?[\"\'\/]?|%[wWqQr]?[\{\[\(]|\/|\(|\)|{|}|"|\'|\[|\]|\+|\*|\\|\=|\~|\-|\<|\>|\d|\:\:|\#{|\#|\;|\,|&&/)
return true if view.length != 0
end
|
#regex(word, i, ind) ⇒ Object
49
50
51
52
53
54
55
56
57
|
# File 'lib/twirb/manipulation.rb', line 49
def regex(word, i, ind)
if word == '/' || word == "?/" and @interpolation.empty?
@regex.clear
add(word, 'violet')
else
add(word, 'violet')
interpolate(word)
end
end
|
#set_number(i) ⇒ Object
203
204
205
206
207
208
|
# File 'lib/twirb/manipulation.rb', line 203
def set_number(i)
num = "%03d" % i if @num_lin >= 100
num = "%02d" % i if @num_lin <= 99
add("#{num})", 'grey')
add(" ")
end
|
#single_quote(word, i, ind) ⇒ Object
39
40
41
42
43
44
45
46
47
|
# File 'lib/twirb/manipulation.rb', line 39
def single_quote(word, i, ind)
if word == "'" || word == "$'" || word == "?'"
@single_quote.clear
add(word, 'violet')
else
@keywords["'"].call(word, i, ind)
end
end
|
#start_indentation_and_number(i) ⇒ Object
210
211
212
213
214
|
# File 'lib/twirb/manipulation.rb', line 210
def start_indentation_and_number(i)
clear_array
set_number(i)
indent
end
|
#str(word, i, ind = 0) ⇒ Object
115
116
117
118
119
120
121
122
123
|
# File 'lib/twirb/manipulation.rb', line 115
def str(word, i, ind = 0)
if are_not_empty?
instances_for_different_color.each {|instance| send("#{instance.sub("@", "")}", word, i, ind) unless instance_variable_get(instance).empty?}
else
@reference_word.clear if !word_to_indent?(word) && word !~ /\s+/
@keywords[word].call(word, i, ind)
end
include_word_for_indentation_and_optional_do(word, i, ind)
end
|
#total_delete ⇒ Object
12
13
14
|
# File 'lib/twirb/manipulation.rb', line 12
def total_delete
@entry.send("delete", "1.0", "end")
end
|
#word_to_indent?(word) ⇒ Boolean
130
131
132
|
# File 'lib/twirb/manipulation.rb', line 130
def word_to_indent?(word)
%w{if unless until for def class module case while begin}.any? {|kw| kw == word}
end
|
173
174
175
|
# File 'lib/twirb/manipulation.rb', line 173
def words_related_to_end?(word, i, ind)
(((i == 0 && ind == 0) || !@reference_word.empty?) && (word_to_indent?(word))) || (word == "do" && @optional_do.empty?)
end
|