twirb 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzU4NjI3NDc1ODBjNDBkNDhhYjc5ZTFiNjNlYjY3OWNmNmQ3NWExOA==
4
+ OGMzMjU0MzZkYjRhZDY5NzVkZTg0ZjJkOTMxMmUzYTJkYzI1ZWFjNA==
5
5
  data.tar.gz: !binary |-
6
- Yzk1NmI0ODkzM2VhY2I0YTlkMjIzYWFlN2RkN2JlOTNkMmY2NzE3Zg==
6
+ ZjhhMTBlMDUwNmYwY2JkYzU4N2RmZTgzNzRlODdkNDVlNzkyMjAwNg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MmQ2YjcwNjMxZTUwYTYzZjhiZTI3MjFlY2E0NDQ3NzViMWMxZDExNGMwZWVk
10
- ZWQyMzMzN2ZjZjg1ODNmMGViODMyMGRiN2QzNzY2ODMxMGNmMWQ4M2Q4MzY0
11
- ZDc0ZjQwNTNjMTM2M2MyZjJlOWNhNDUzOTc2YTBlZDgzYWY2NDk=
9
+ ZjIyODUxOWY4MmI4NjA5ZGFlZDRiNGQwMWNhNDEzYzZjZjI5MWM3Mzg5M2Ey
10
+ YTY4OGUzNTVkMjc4NDQ0ZjFkZTk1ZmVkODc5OGQwZTgwNzczNzY3N2Y5M2Zi
11
+ NjhjOGJiMTg0YjVjMzZlM2ZjODE5NWM2OTY5M2Y5ODA3ZWIzOTk=
12
12
  data.tar.gz: !binary |-
13
- YjgwZjU4OTg2YjExMDlmNDRkMmFkNTVkMzMyNzc2MGRhMjJhNWZjNTFmZGEy
14
- MjkxNzU3MDE5Zjg5MmNjOTY1NzRjODA4MTU3ZTY3OWVmODZlYjEzNmJiMzlh
15
- YWZiM2E2NTMxMzg4MjNiOWE5N2I3MzdhYjEyN2M2ZWE0MDExOGY=
13
+ MzdmZDVkYjExNzc3NjE4NjRjMzg1MDUzZmNhMTU2YTQxNGFkYmE3MzcwMzJj
14
+ MmRhYTFmNmM5ZTEwMmU4MDJlYzc0NDZkYTBkOTNkZWU4NTNmOTZkNDcyYjUy
15
+ ODQ1YmJkNDQyOGY0ZDg4Mjc0ZDg4NmJjMzFlMmYyOGMzMWMwOWQ=
@@ -1,9 +1,9 @@
1
1
  require "tk"
2
- require "tkextlib/tile"
3
- $LOAD_PATH << './lib'
4
- require 'keywords'
5
- require 'manipulation'
6
- require 'textgui'
2
+ #require "tkextlib/tile"
3
+ #$LOAD_PATH << './lib'
4
+ require 'twirb/keywords'
5
+ require 'twirb/manipulation'
6
+ require 'twirb/textgui'
7
7
  require 'twirb/version'
8
8
 
9
9
 
@@ -0,0 +1,214 @@
1
+ module Keywords
2
+ attr_reader :keywords
3
+ def setup
4
+ @keywords = Hash.new do |h, k|
5
+ m = /^(?<constant>[A-Z])|(?<symbol>:)|(?<inst_var>@)|(?<double_arr><<)|(?<percent>%)|(?<semi_col>;)|(?<dot_com>\.|\,)|/.match(k)
6
+ if m[0] != ""
7
+ h[k] = lambda do |k, i, ind|
8
+ m.names.each {|name| send(name, k) if m[name] != nil}
9
+ end
10
+ else
11
+ h[k] = lambda do |n, i, ind|
12
+ if !@def_name.empty?
13
+ @def_name.clear
14
+ add("#{n}", 'red')
15
+ else
16
+ @div << n
17
+ add("#{n}")
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ @keywords[" "] = lambda do |n, i, ind|
24
+ add("#{n}")
25
+ end
26
+
27
+ %w{self true false nil return super}.each do |w|
28
+ @keywords[w] = lambda do |n, i, ind|
29
+ add("#{n}", 'DarkOrange')
30
+ end
31
+ end
32
+
33
+ %w{class def module alias}.each do |w|
34
+ @keywords[w] = lambda do |n, i, ind|
35
+ @def_name << n if w == "def"
36
+ add("#{n}", 'blue')
37
+ end
38
+ end
39
+
40
+ (0..9).to_a.map {|n| n.to_s}.each do |w|
41
+ @keywords[w] = lambda do |n, i, ind|
42
+ @div << n
43
+ add("#{n}", 'brown')
44
+ end
45
+ end
46
+
47
+ ["if",
48
+ "while",
49
+ "do",
50
+ "{", "}",
51
+ "case",
52
+ "require", "include", "require_relative",
53
+ "lambda", "proc", "yield",
54
+ "begin",
55
+ "unless",
56
+ "then", "and", "or", "not", "|", "&&",
57
+ "until", "for", "in",
58
+ "retry", "redo",
59
+ "next", "break",
60
+ "attr_accessor", "attr_reader", "attr_writer"].each do |w|
61
+ if w == "}"
62
+ @keywords[w] = lambda do |n, i, ind|
63
+ @div.clear
64
+ if !@literal_array.empty?
65
+ @literal_array.clear
66
+ add("#{n}", 'violet')
67
+ else
68
+ add("#{n}", 'red')
69
+ end
70
+ end
71
+ else
72
+ @keywords[w] = lambda do |n, i, ind|
73
+ @div.clear #if w == "{"
74
+ add("#{n}", 'red') {@reference_word << n if n == "require"}
75
+ end
76
+ end
77
+ end
78
+
79
+ ["elsif", "rescue", "else", "when"].each do |w|
80
+ @keywords[w] = lambda do |n, i, ind|
81
+ @div.clear
82
+ num1 = 4 if @num_lin <= 99
83
+ num1 = 5 if @num_lin >= 100
84
+ num2 = num1 + 2
85
+ if !@list_end_words.empty? && i == 0 #@mod.empty?
86
+ delete(num1, num2)
87
+ end
88
+ add("#{n}", 'red')
89
+ end
90
+ end
91
+
92
+
93
+ @keywords["end"] = lambda do |n, i, ind|
94
+ num1 = 4 if @num_lin <= 99
95
+ num1 = 5 if @num_lin >= 100
96
+ num2 = num1 + 2
97
+ if !@list_end_words.empty? && i == 0 && ind == 0
98
+ delete(num1, num2)
99
+ end
100
+ end_method(n, i, ind)
101
+ end
102
+
103
+ @keywords["\\"] = lambda do |n, i, ind|
104
+ @div.clear
105
+ add("#{n}", 'violet')
106
+ end
107
+
108
+ ["%q{", "%Q{", "%r{", "%{", "%w{", "%W{"].each do |w|
109
+ @keywords[w] = lambda do |n, i, ind|
110
+ @literal_array << n
111
+ add("#{n}", 'violet')
112
+ end
113
+ end
114
+
115
+ ["%q[", "%Q[", "%r[", "%[", "%w[", "%W["].each do |w|
116
+ @keywords[w] = lambda do |n, i, ind|
117
+ @literal_array_square << n
118
+ add("#{n}", 'violet')
119
+ end
120
+ end
121
+
122
+ ["%q(", "%Q(", "%r(", "%(", "%w(", "%W("].each do |w|
123
+ @keywords[w] = lambda do |n, i, ind|
124
+ @literal_array_parenthesis << n
125
+ add("#{n}", 'violet')
126
+ end
127
+ end
128
+
129
+
130
+ @keywords["=begin"] = lambda do |n, i, ind|
131
+ @comments_multiline << n
132
+ add("#{n}", 'grey90')
133
+ end
134
+
135
+ @keywords["=end"] = lambda do |n, i, ind|
136
+ @comments_multiline.clear
137
+ add("#{n}", 'grey90')
138
+ end
139
+
140
+ @keywords["#"] = lambda do |n, i, ind|
141
+ @comments << n
142
+ add("#{n}", 'grey90')
143
+ end
144
+
145
+ @keywords['"'] = lambda do |n, i, ind|
146
+ @double_quote << n
147
+ add("#{n}", 'violet')
148
+ end
149
+
150
+ @keywords["'"] = lambda do |n, i, ind|
151
+ @single_quote << n
152
+ add("#{n}", 'violet')
153
+ end
154
+
155
+ @keywords["/"] = lambda do |n, i, ind|
156
+ @regex << n if @div.length == 1 || @div.empty?
157
+ add("#{n}", 'violet')
158
+ end
159
+
160
+ %w{+ - * = < > ! ~ ?}.each do |w|
161
+ @keywords[w] = lambda do |n, i, ind|
162
+ @div.clear
163
+ @reference_word << n if n == "=" || n == "<" || n == ">"
164
+ add("#{n}", 'red')
165
+ end
166
+ end
167
+
168
+ @keywords["]"] = lambda do |n, i, ind|
169
+ @div << n
170
+ if !@literal_array_square.empty?
171
+ @literal_array_square.clear
172
+ add("#{n}", 'violet')
173
+ else
174
+ add("#{n}")
175
+ end
176
+ end
177
+
178
+ @keywords[")"] = lambda do |n, i, ind|
179
+ if !@literal_array_parenthesis.empty?
180
+ @literal_array_parenthesis.pop
181
+ add("#{n}", 'violet')
182
+ else
183
+ add("#{n}", 'not_imp')
184
+ end
185
+ end
186
+
187
+ %w{ ( [ }.each do |w|
188
+ @keywords[w] = lambda do |n, i, ind|
189
+ @div.clear
190
+ @reference_word << n if n == "("
191
+ add("#{n}")
192
+ end
193
+ end
194
+ end
195
+
196
+
197
+ %w{constant symbol inst_var double_arr percent semi_col dot_com}.each do |m|
198
+ define_method(m) do |k|
199
+ @div << k if m == "constant" || m == "inst_var"
200
+ @div.clear if m == "symbol" || m == "double_arr" || m == "semi_col" || m == "dot_com" || m == "percent"
201
+ #@multiline_str << k if m == "double_arr"
202
+ @start_multiline_str << k if m == "double_arr" and !("0".."9").include?(k[2])
203
+ @delimiter_multi_str << k if m == "percent" and %w{| ! " $ = - ^}.include?(k[k.length - 1])
204
+ #@mod << k if m == "semi_col"
205
+ @def_name.clear if m == "semi_col"
206
+ @reference_word << k if m == "semi_col"
207
+ add(k, 'green') if m == "constant"
208
+ add(k, 'yellow') if m == "symbol"
209
+ add(k, 'brown') if m == "inst_var"
210
+ add(k, 'violet') if m == "double_arr" || m == "percent"
211
+ add(k) if m == "semi_col" || m == "dot_com"
212
+ end
213
+ end
214
+ end
@@ -0,0 +1,238 @@
1
+ module Manipulation
2
+
3
+ def add(word, color = "no color")
4
+ @entry.send("insert", 'end', word, color)
5
+ yield if block_given?
6
+ end
7
+
8
+ def delete(num1, num2)
9
+ @entry.send("delete", "end -1 lines + #{num1} chars", "end -1 lines + #{num2} chars")
10
+ end
11
+
12
+ def total_delete
13
+ @entry.send("delete", "1.0", "end")
14
+ end
15
+
16
+ def interpolate(word)
17
+ @interpolation << word if word == '#{'
18
+ @interpolation.pop if word == '}'
19
+ end
20
+
21
+ def method_missing(method, *args)
22
+ end_array = {"literal_array" => "}", "literal_array_square" => "]", "literal_array_parenthesis" => ")"}
23
+ if args[0] == end_array[method.to_s] && @interpolation.empty?
24
+ @keywords[args[0]].call(args[0], args[1], args[2])
25
+ else
26
+ add(args[0], 'violet') {@literal_array_parenthesis << args[0] if args[0] == "(" and @interpolation.empty? and method.to_s == "literal_array_parenthesis"}
27
+ interpolate(args[0])
28
+ end
29
+ end
30
+
31
+ def comments_multiline(word, i, ind)
32
+ if word != "=end"
33
+ @keywords["=begin"].call(word, i, ind)
34
+ else
35
+ @keywords["=end"].call(word, i, ind)
36
+ end
37
+ end
38
+
39
+ def single_quote(word, i, ind)
40
+ #if /\$*\'/.eql?(word)
41
+ if word == "'" || word == "$'" || word == "?'"
42
+ @single_quote.clear
43
+ add(word, 'violet')
44
+ else
45
+ @keywords["'"].call(word, i, ind)
46
+ end
47
+ end
48
+
49
+ def regex(word, i, ind)
50
+ if word == '/' || word == "?/" and @interpolation.empty?
51
+ @regex.clear
52
+ add(word, 'violet')
53
+ else
54
+ add(word, 'violet')
55
+ interpolate(word)
56
+ end
57
+ end
58
+
59
+
60
+ def double_quote(word, i, ind)
61
+ #if /%*"/.eql?(word) and @interpolation.empty?
62
+ if word == '"' || word == '%"' || word == '?"' and @interpolation.empty?
63
+ @double_quote.clear
64
+ add(word, 'violet')
65
+ else
66
+ #@keywords['"'].call(word, i, ind)
67
+ add(word, "violet")
68
+ interpolate(word)
69
+ end
70
+ end
71
+
72
+ def comments(word, i, ind)
73
+ @keywords["#"].call(word, i, ind)
74
+ end
75
+
76
+ def multiline_str(word, i, ind)
77
+ @multiline_str[0][2] != "-" ? @end_str = @multiline_str[0][2..@multiline_str[0].length] : @end_str = @multiline_str[0][3..@multiline_str[0].length]
78
+ if word == @end_str.gsub(/["\']/, "") && i == 0 && ind == 0
79
+ add(word, 'violet')
80
+ @multiline_str.clear
81
+ @start_multiline_str.shift
82
+ else
83
+ add(word, 'violet')
84
+ end
85
+ end
86
+
87
+ def delimiter_multi_str(word, i, ind)
88
+ @end_multi_str = @delimiter_multi_str[0][@delimiter_multi_str[0].length - 1]
89
+ if word == @end_multi_str
90
+ add(word, 'violet')
91
+ @delimiter_multi_str.clear
92
+ else
93
+ add(word, 'violet')
94
+ end
95
+ end
96
+
97
+ def delimiter_multi_arr(word, i, ind)
98
+ @end_multi_arr = @delimiter_multi_arr[0][2]
99
+ if word == @end_multi_arr
100
+ add(word, 'violet')
101
+ @delimiter_multi_arr.clear
102
+ else
103
+ add(word, 'violet')
104
+ end
105
+ end
106
+
107
+ def instances_for_different_color
108
+ %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}
109
+ end
110
+
111
+ def are_not_empty?
112
+ instances_for_different_color.any? {|kw| !instance_variable_get(kw).empty?}
113
+ end
114
+
115
+ def str(word, i, ind = 0)
116
+ if are_not_empty?
117
+ instances_for_different_color.each {|instance| send("#{instance.sub("@", "")}", word, i, ind) unless instance_variable_get(instance).empty?}
118
+ else
119
+ @reference_word.clear if !word_to_indent?(word) && word !~ /\s+/
120
+ @keywords[word].call(word, i, ind)
121
+ end
122
+ include_word_for_indentation_and_optional_do(word, i, ind)
123
+ end
124
+
125
+ def include_word_for_indentation_and_optional_do(word, i, ind)
126
+ @list_end_words << word if words_related_to_end?(word, i, ind) && empty_list?
127
+ @optional_do << word if optional_do?(word, i, ind)
128
+ end
129
+
130
+ def word_to_indent?(word)
131
+ %w{if unless until for def class module case while begin}.any? {|kw| kw == word}
132
+ end
133
+
134
+ def optional_do?(word, i, ind)
135
+ %w{if while until}.any? {|kw| kw == word && i == 0 && ind == 0}
136
+ end
137
+
138
+
139
+ def end_method(word, i, ind)
140
+ if @list_end_words.empty? || ind != 0
141
+ add(word)
142
+ else
143
+ @keywords[@list_end_words.last].call(word, i, ind)
144
+ @list_end_words.pop
145
+ end
146
+ end
147
+
148
+ def new_line
149
+ highlight
150
+ add("\n")
151
+ end
152
+
153
+ def convert
154
+ @auto_highlight = false
155
+ @a = @entry.value
156
+ @a.gsub!(/^\d*\)/, "")
157
+ @entry.delete(1.0, 'end')
158
+ add(@a)
159
+ end
160
+
161
+ def analyze(word, i)
162
+ words = word.split(/(\\[\'\"\/\#{\\]|%[wWqQr]?[|\=\^!\"\$-]|\$[\']*|\^|\=begin|\=end|\||\<\<\-?["\']?\w+["\']?|\.|!|\?[\"\'\/]?|%[wWqQr]?[\{\[\(]|\/|{|}|"|\'|\+|\-|\=|\~|\*|\\|\<|\>|\[|\]|\#{|\#|\d|\:\:|\)|\;|\,|&&|\()/)
163
+ words.each_with_index do |w, ind|
164
+ str(w, i, ind)
165
+ end
166
+ end
167
+
168
+ def punctuation?(word)
169
+ view = word.scan(/\\[\'\"\/\#{\\]|%[wWqQr]?[|\=\^!\"\$-]|\$[\']*|\^|\=begin|\=end|\||\<\<\-?["\']?\w+["\']?|\.|!|\?[\"\'\/]?|%[wWqQr]?[\{\[\(]|\/|\(|\)|{|}|"|\'|\[|\]|\+|\*|\\|\=|\~|\-|\<|\>|\d|\:\:|\#{|\#|\;|\,|&&/)
170
+ return true if view.length != 0
171
+ end
172
+
173
+ def words_related_to_end?(word, i, ind)
174
+ (((i == 0 && ind == 0) || !@reference_word.empty?) && (word_to_indent?(word))) || (word == "do" && @optional_do.empty?)
175
+ end
176
+
177
+ def other_word(word, i)
178
+ if punctuation?(word)
179
+ analyze(word, i)
180
+ else
181
+ str(word, i)
182
+ end
183
+ end
184
+
185
+ def empty_list?
186
+ instances_for_different_color.all? {|inst| instance_variable_get(inst).empty?}
187
+ end
188
+
189
+ def indent
190
+ %w{module class def if case while do begin unless until for}.each {|n| add(" " * @list_end_words.count(n))}
191
+ end
192
+
193
+ def empty_array
194
+ (%w{@list_end_words @def_name @reference_word @interpolation @optional_do @start_multiline_str} +
195
+ instances_for_different_color).each {|inst| instance_variable_set(inst, [])}
196
+ end
197
+
198
+ def clear_array
199
+ [@comments, @def_name, @div, @reference_word, @optional_do].each {|n| n.clear}
200
+ @multiline_str << @start_multiline_str[0] unless @start_multiline_str.empty?
201
+ end
202
+
203
+ def set_number(i)
204
+ num = "%03d" % i if @num_lin >= 100
205
+ num = "%02d" % i if @num_lin <= 99
206
+ add("#{num})", 'grey')
207
+ add(" ")
208
+ end
209
+
210
+ def start_indentation_and_number(i)
211
+ clear_array
212
+ set_number(i)
213
+ indent
214
+ end
215
+
216
+ def add_text(text_for_indentation_and_syntax_highlight)
217
+ @text = text_for_indentation_and_syntax_highlight
218
+ @num_lin = @text.split(/\n/).length
219
+ total_delete
220
+ @text.gsub(/^\d*\)/, "").each_line.with_index(1) do |line, i|
221
+ add("\n") unless i == 1
222
+ start_indentation_and_number(i)
223
+ line.sub(/^\s+/, "").gsub(/\n/, "").split(/(\s+)/).each_with_index do |word, i|
224
+ other_word(word, i)
225
+ end
226
+ end
227
+ end
228
+
229
+ def highlight
230
+ if @auto_highlight
231
+ empty_array
232
+ add_text(@entry.value)
233
+ else
234
+ add(' ')
235
+ end
236
+ end
237
+
238
+ end
@@ -0,0 +1,117 @@
1
+ #require "./keywords"
2
+
3
+ class TextGui
4
+ include Keywords
5
+ def initialize
6
+ setup
7
+ @auto_highlight = true
8
+ #@mod = []
9
+ #@list = []
10
+ @div = []
11
+ @style_font = TkFont.new('helvetica 14')
12
+ var = TkVariable.new
13
+ status = TkVariable.new
14
+ root = TkRoot.new
15
+ root.title = "new file"
16
+ $scroll = Tk::Tile::Scrollbar.new(root) {orient 'vertical';
17
+ command proc {|*args|
18
+ $entr.yview(*args)}}.grid :column => 2, :row => 0, :sticky => 'ns'
19
+ $entr = @entry = TkText.new(root) {undo true;width 80;height 14;wrap 'none';
20
+ yscrollcommand(proc{|first, last| $scroll.set(first, last)}) }.grid :column => 0, :row => 0, :columnspan => 2, :sticky => 'nwes'
21
+ @lbl = Tk::Tile::Label.new(root) {textvariable;
22
+ anchor 'w'}.grid :column => 0, :row => 1, :sticky => 'we'
23
+ @lbl['textvariable'] = var
24
+ #@lbl.grid('row' => 1, 'column' => 1)
25
+ @lbl_sin = Tk::Tile::Label.new(root) {textvariable;
26
+ anchor 'w'}.grid :column => 1, :row => 1, :sticky => 'we'
27
+
28
+ sz = Tk::Tile::SizeGrip.new(root).grid :column => 2, :row => 1, :sticky => 'se'
29
+ TkGrid.columnconfigure root, 0, :weight => 1
30
+ TkGrid.rowconfigure root, 0, :weight => 1
31
+
32
+ ###########
33
+ @lbl_sin['textvariable'] = status
34
+ m = TkTextMark.new(@entry, '1.0')
35
+ @entry.font = @style_font
36
+ configure_text
37
+ @edit_mode = true
38
+ command_keyboard(var, status, m)
39
+ root.bind("Control-Key-o", proc {open_file(root)})
40
+ root.bind("Control-Key-s", proc {save_file(root, status)})
41
+ end
42
+
43
+ def execute_code
44
+ @t = @entry.value
45
+ @t.gsub!(/^\d*\)/, "")
46
+ begin
47
+ print " => ", eval(@t).inspect, "\n"
48
+ rescue Exception => e
49
+ print e.inspect, "\n"
50
+ end
51
+ end
52
+
53
+ def open_file(root)
54
+ @file = Tk.getOpenFile
55
+ begin
56
+ a = File.read(@file)
57
+ root.title = @file
58
+ rescue
59
+ a = ""
60
+ @file = nil
61
+ end
62
+ @entry.delete('1.0', 'end') if @file
63
+ @entry.insert('end', "#{a}") if @file
64
+ end
65
+
66
+ def command_keyboard(var, status, m)
67
+ @entry.bind("Key", proc do
68
+ var.value = @entry.index(m)
69
+ status.value = "auto mode" if @edit_mode and @auto_highlight
70
+ end)
71
+ @entry.bind("Double-Key-Escape", proc {@edit_mode = true})
72
+ @entry.bind("Escape", proc {status.value = "edit mode"; @edit_mode = false})
73
+ @entry.bind("Double-Key-Return", proc {new_line})
74
+ @entry.bind("Key-Return", proc do |e|
75
+ e.widget.callback_continue unless @edit_mode
76
+ highlight
77
+ end)
78
+ @entry.bind("Control-Key-q", proc {convert;status.value = "text mode" unless @auto_highlight})
79
+ @entry.bind("Control-Key-w", proc {@auto_highlight = true})
80
+ @entry.bind("Control-Key-e", proc {execute_code})
81
+ @entry.bind("space", proc do |e|
82
+ #e.widget.callback_break if @auto_highlight
83
+ e.widget.callback_continue unless @edit_mode
84
+ highlight
85
+ end)
86
+ end
87
+
88
+ def configure_text
89
+ %w{blue yellow brown red green violet grey90 DarkOrange}.each do |color|
90
+ @entry.tag_configure(color, :foreground => color)
91
+ end
92
+ @entry.tag_configure('grey', :background => 'grey', :relief => 'raised')
93
+ @entry.tag_configure('black', :background => 'white', :relief => 'raised')
94
+ end
95
+
96
+ def save_file(root, status)
97
+ @txtt = @entry.value
98
+ @txtt.gsub!(/^\d*\)/, "")
99
+ if @file
100
+ File.open(@file, "w") do |f|
101
+ f.puts @txtt
102
+ end
103
+ status.value = "saved"
104
+ else
105
+ @file = Tk.getSaveFile
106
+ begin
107
+ File.open(@file, "w") do |f|
108
+ f.puts @txtt
109
+ end
110
+ root.title = @file
111
+ rescue
112
+ root.title = "new file"
113
+ @file = nil
114
+ end
115
+ end
116
+ end
117
+ end
@@ -1,3 +1,3 @@
1
1
  module Twirb
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twirb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Antonio
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-20 00:00:00.000000000 Z
11
+ date: 2013-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -47,14 +47,11 @@ executables:
47
47
  extensions: []
48
48
  extra_rdoc_files: []
49
49
  files:
50
- - .gitignore
51
- - Gemfile
52
- - LICENSE.txt
53
- - README.md
54
- - Rakefile
55
- - lib/twirb.rb
50
+ - lib/twirb/keywords.rb
51
+ - lib/twirb/manipulation.rb
52
+ - lib/twirb/textgui.rb
56
53
  - lib/twirb/version.rb
57
- - twirb.gemspec
54
+ - lib/twirb.rb
58
55
  - bin/twirb
59
56
  homepage: http://www.twirb.org
60
57
  licenses:
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
data/Gemfile DELETED
@@ -1,8 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rake'
4
- gem 'rdoc'
5
- gem "minitest"
6
- gem 'guard'
7
- gem 'guard-minitest'
8
- gemspec
@@ -1,22 +0,0 @@
1
- Copyright (c) 2013 Antonio
2
-
3
- MIT License
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md DELETED
@@ -1,48 +0,0 @@
1
- # Twirb
2
-
3
- Simple Ruby text editor as a ruby gem
4
- ==============================================
5
-
6
- This is a little tool with syntax highlighting and indentation for writing ruby code and execute it directly in your terminal thanks to some useful command listed below: It can be used in three different ways:
7
- auto mode(default option): automatic syntax highlighting and indentation and numerated lines while writing your code.
8
- edit mode: if you want to add some thing to the code written so far you can activate the edit mode hitting Escape-key: in this way automatic indentation and highlight will be deactivated in order to allow changes.
9
- After that you can reactivat auto mode hitting double-key-Escape and then space key: in this way the code that you added will be automatic formatted and you can continue writing in auto mode.
10
- text mode: pressing control-q the code will be converted as if in a text file making all the changes you want. You can reactivate auto mode every time you want just hitting control-w and then space key. the code will be automatic formatted.
11
- You can execute the code you have written so far just pressing control-e: in this way the code will be executed on your terminal as if in irb.
12
- For other commands and instructions visit http://www.twirb.org
13
-
14
- ## Installation
15
-
16
- Twirb needs "tk" that is the standard graphical user interface for Ruby.
17
- The Ruby Tk bindings are distributed with Ruby but Tk is a separate installation. Windows users can download a single click Tk installation from ActiveState's ActiveTcl(http://www.activestate.com/activetcl/downloads)
18
-
19
- Mac and Linux users may not need to install it because there is a great chance that its already installed along with OS but if not, you can download prebuilt packages or get the source from the Tcl Developer Xchange(http://www.tcl.tk/software/tcltk/downloadnow84.tml).
20
- For more details you can visit Tkdocs(http://www.tkdocs.com/tutorial/install.html)
21
-
22
- Add this line to your application's Gemfile:
23
-
24
- gem 'twirb'
25
-
26
- And then execute:
27
-
28
- $ bundle
29
-
30
- Or install it yourself as:
31
-
32
- $ gem install twirb
33
-
34
- ## Usage
35
-
36
- you can use it simply typing
37
-
38
- $ twirb
39
-
40
- in the command line.
41
-
42
- ## Contributing
43
-
44
- 1. Fork it
45
- 2. Create your feature branch (`git checkout -b my-new-feature`)
46
- 3. Commit your changes (`git commit -am 'Add some feature'`)
47
- 4. Push to the branch (`git push origin my-new-feature`)
48
- 5. Create new Pull Request
data/Rakefile DELETED
@@ -1,17 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require 'rdoc/task'
3
-
4
- task :default => [:test]
5
-
6
- desc %Q|Run test(s) in project 'test' folder|
7
- task :test do
8
- tests = Dir.glob("test/*_{spec,test}.rb").join(' ')
9
- ruby tests
10
- end
11
-
12
- desc %Q|Generates documentation|
13
- RDoc::Task.new do |rdoc|
14
- rdoc.main = "README.md"
15
- rdoc.rdoc_files.include("README.md", "lib/*.rb", 'bin/*.rb')
16
- end
17
-
@@ -1,24 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'twirb/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "twirb"
8
- spec.version = Twirb::VERSION
9
- spec.authors = ["Antonio"]
10
- spec.email = ["antalby@hotmail.com"]
11
- spec.description = %q{Twirb is a Ruby text-editor and an alternative to irb, with syntax highlighting and indentation for writing ruby code and executing it directly in your terminal}
12
- spec.summary = %q{twirb is a ruby text editor}
13
- spec.homepage = "http://www.twirb.org"
14
- spec.license = "MIT"
15
- spec.executables << 'twirb'
16
-
17
- spec.files = `git ls-files`.split($/)
18
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
- spec.require_paths = ["lib"]
21
-
22
- spec.add_development_dependency "bundler", "~> 1.3"
23
- spec.add_development_dependency "rake"
24
- end