twirb 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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