lazibi 0.1.4 → 0.1.5
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.
- data/History.txt +5 -0
- data/Manifest.txt +10 -0
- data/README.txt +9 -10
- data/bin/lazibi +1 -1
- data/lib/helper/parser_helper.rb +46 -0
- data/lib/helper/task_helper.rb +43 -0
- data/lib/lazibi/version.rb +1 -1
- data/lib/lazibi.rb +21 -267
- data/lib/parser.rb +93 -0
- data/lib/task.rb +97 -0
- data/lib/vendor/beautifier.rb +135 -0
- data/scripts/rdoc2html +74 -0
- data/test/fixtures/meta/case.txt +7 -0
- data/test/fixtures/meta/inline_end.txt +3 -0
- data/test/fixtures/real/case.txt +8 -0
- data/test/fixtures/real/inline_end.txt +3 -0
- data/test/test_unit.rb +37 -39
- data/website/index.html +15 -13
- data/website/index.txt +9 -10
- data/website/stylesheets/screen.css +15 -13
- metadata +16 -2
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -4,19 +4,29 @@ Manifest.txt
|
|
4
4
|
README.txt
|
5
5
|
Rakefile
|
6
6
|
bin/lazibi
|
7
|
+
lib/helper/parser_helper.rb
|
8
|
+
lib/helper/task_helper.rb
|
7
9
|
lib/lazibi.rb
|
8
10
|
lib/lazibi/version.rb
|
11
|
+
lib/parser.rb
|
12
|
+
lib/task.rb
|
13
|
+
lib/vendor/beautifier.rb
|
14
|
+
scripts/rdoc2html
|
9
15
|
scripts/txt2html
|
10
16
|
test/fixtures/meta/basic_class.txt
|
17
|
+
test/fixtures/meta/case.txt
|
11
18
|
test/fixtures/meta/class_with_def.txt
|
12
19
|
test/fixtures/meta/comment.txt
|
20
|
+
test/fixtures/meta/inline_end.txt
|
13
21
|
test/fixtures/meta/middle.txt
|
14
22
|
test/fixtures/meta/nested_comment.txt
|
15
23
|
test/fixtures/meta/partial_method.txt
|
16
24
|
test/fixtures/meta/two_methods.txt
|
17
25
|
test/fixtures/real/basic_class.txt
|
26
|
+
test/fixtures/real/case.txt
|
18
27
|
test/fixtures/real/class_with_def.txt
|
19
28
|
test/fixtures/real/comment.txt
|
29
|
+
test/fixtures/real/inline_end.txt
|
20
30
|
test/fixtures/real/middle.txt
|
21
31
|
test/fixtures/real/nested_comment.txt
|
22
32
|
test/fixtures/real/partial_method.txt
|
data/README.txt
CHANGED
@@ -63,22 +63,13 @@ Make sure everything still works
|
|
63
63
|
cd shiny_project/real
|
64
64
|
rake test / autotest
|
65
65
|
|
66
|
-
Start hacking ruby/python :/
|
66
|
+
Start hacking ruby/python in meta :/
|
67
67
|
|
68
68
|
cd shiny_project
|
69
69
|
$your_editor meta
|
70
70
|
|
71
71
|
== Tips
|
72
72
|
|
73
|
-
=== Rails fix
|
74
|
-
|
75
|
-
After bootstrap, edit config/boot.py.rb in meta
|
76
|
-
|
77
|
-
STDERR.puts %(Cannot find gem for Rails ~>#{version}.0:
|
78
|
-
Install the missing gem with 'gem install -v=#{version} rails', or
|
79
|
-
change environment.rb to define RAILS_GEM_VERSION with your desired version.
|
80
|
-
)
|
81
|
-
|
82
73
|
=== Manually create meta files
|
83
74
|
|
84
75
|
* Bootstrap your project as usual, just don't run lazibi
|
@@ -92,6 +83,14 @@ After bootstrap, edit config/boot.py.rb in meta
|
|
92
83
|
|
93
84
|
* create .py.rb files in corresponding directories inside 'meta', .rb files will be created and updated in 'real' as usual
|
94
85
|
|
86
|
+
=== Prevent certain directories from being parsed during bootstrap ( default is ^vendor )
|
87
|
+
|
88
|
+
* Create .lazibi in project/real path
|
89
|
+
|
90
|
+
exclude:
|
91
|
+
- pattern_1
|
92
|
+
- pattern_2
|
93
|
+
- for_example_^vendor
|
95
94
|
|
96
95
|
== Known issues
|
97
96
|
|
data/bin/lazibi
CHANGED
@@ -0,0 +1,46 @@
|
|
1
|
+
module Lazibi
|
2
|
+
module ParserHelper
|
3
|
+
|
4
|
+
def get_indent( line )
|
5
|
+
line =~ /( *)/
|
6
|
+
$1.size
|
7
|
+
end
|
8
|
+
|
9
|
+
def get_rest( line )
|
10
|
+
line =~/( *)/
|
11
|
+
$'
|
12
|
+
end
|
13
|
+
|
14
|
+
def begin_keys
|
15
|
+
s = %w( module def class if begin for while unless do case )
|
16
|
+
m = ['\sdo\s*$|\sdo\s+(\|[^|]+\|)']
|
17
|
+
s.map!{|key| "^#{key}\\b"}
|
18
|
+
|
19
|
+
Regexp.new(s.concat(m).join('|'))
|
20
|
+
end
|
21
|
+
|
22
|
+
def middle_keys
|
23
|
+
s = %w( rescue else ensure elsif when )
|
24
|
+
s.map!{|key| "^#{key}\\b"}
|
25
|
+
Regexp.new(s.join('|'))
|
26
|
+
end
|
27
|
+
|
28
|
+
def end_keys
|
29
|
+
/^end\b/
|
30
|
+
end
|
31
|
+
|
32
|
+
def start_anchor?( str )
|
33
|
+
str.gsub! /"[^"]+"|'[^']+'/, ''
|
34
|
+
return false if str =~ /^#/
|
35
|
+
return true if str =~ begin_keys
|
36
|
+
end
|
37
|
+
|
38
|
+
def middle_anchor?( str )
|
39
|
+
str =~ middle_keys
|
40
|
+
end
|
41
|
+
|
42
|
+
def end_anchor?(str)
|
43
|
+
str =~ end_keys
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Lazibi
|
2
|
+
module TaskHelper
|
3
|
+
|
4
|
+
def skip_path?(path)
|
5
|
+
return false if @config[:exclude].nil?
|
6
|
+
@config[:exclude].each do |f|
|
7
|
+
offset = 'meta'.size + 1
|
8
|
+
return true if path[offset..-1] =~ Regexp.new(f)
|
9
|
+
end
|
10
|
+
false
|
11
|
+
end
|
12
|
+
|
13
|
+
def convert_path( path )
|
14
|
+
if path =~ /.*[.]py[.]rb/
|
15
|
+
from = 'meta'
|
16
|
+
to = 'real'
|
17
|
+
old_ext = '.py.rb'
|
18
|
+
new_ext = '.rb'
|
19
|
+
else
|
20
|
+
from = 'real'
|
21
|
+
to = 'meta'
|
22
|
+
old_ext = '.rb'
|
23
|
+
new_ext = '.py.rb'
|
24
|
+
end
|
25
|
+
|
26
|
+
dir_name = File.dirname path
|
27
|
+
base_name = File.basename path, old_ext
|
28
|
+
|
29
|
+
new_dir_name = to + dir_name[from.size..-1]
|
30
|
+
new_path = File.join new_dir_name, base_name + new_ext
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def get_metas
|
35
|
+
meta_files = File.join('meta', "**", "*.py.rb")
|
36
|
+
metas = {}
|
37
|
+
Dir.glob(meta_files).each do |t|
|
38
|
+
metas[t] = File.mtime t
|
39
|
+
end
|
40
|
+
metas
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/lazibi/version.rb
CHANGED
data/lib/lazibi.rb
CHANGED
@@ -1,276 +1,30 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'find'
|
3
3
|
require 'yaml'
|
4
|
+
require 'parser'
|
5
|
+
require 'task'
|
6
|
+
require 'lazibi/version'
|
4
7
|
|
5
8
|
module Lazibi
|
6
|
-
class
|
7
|
-
|
8
|
-
|
9
|
-
def load_config
|
10
|
-
@config = {}
|
11
|
-
default = {:exclude => ['^vendor']}
|
12
|
-
if File.exists? '.lazibi'
|
13
|
-
f = open '.lazibi'
|
14
|
-
h = YAML.load(f)
|
15
|
-
for k in h.keys
|
16
|
-
begin
|
17
|
-
@config[k.to_sym] = h[k]
|
18
|
-
rescue
|
19
|
-
raise "wrong pattern #{h[k]}"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
@config = default
|
24
|
-
end
|
25
|
-
|
26
|
-
|
27
|
-
def init_meta
|
28
|
-
# backup real
|
29
|
-
real_dir = 'real'
|
30
|
-
if File.directory? real_dir
|
31
|
-
backup_dir = '.backup'
|
32
|
-
unless File.exists? backup_dir
|
33
|
-
FileUtils.cp_r real_dir, backup_dir
|
34
|
-
end
|
35
|
-
else
|
36
|
-
raise 'No directory named "real"'
|
37
|
-
end
|
38
|
-
|
39
|
-
# generate meta
|
40
|
-
meta_dir = 'meta'
|
41
|
-
if File.exists? meta_dir
|
42
|
-
if File.directory? meta_dir
|
43
|
-
FileUtils.rm_rf meta_dir
|
44
|
-
else
|
45
|
-
raise 'meta directory is reserved for instiki'
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
|
50
|
-
puts "Generating meta files:"
|
51
|
-
puts "-" * 40
|
52
|
-
Dir.glob(File.join('real', '**', '*.rb')) do |f|
|
53
|
-
if skip_path? f
|
54
|
-
puts "- #{f}"
|
55
|
-
next
|
56
|
-
end
|
57
|
-
|
58
|
-
next unless File.file? f
|
59
|
-
next if f =~ /.*[.]py[.]rb$/
|
60
|
-
py_path = convert_path f
|
61
|
-
dir_name = File.dirname py_path
|
62
|
-
|
63
|
-
puts ' ' + py_path
|
64
|
-
FileUtils.mkdir_p dir_name
|
65
|
-
make_py f, py_path
|
66
|
-
end
|
67
|
-
|
68
|
-
puts "-" * 40
|
69
|
-
end
|
70
|
-
|
71
|
-
|
72
|
-
def skip_path?(path)
|
73
|
-
return false if @config[:exclude].nil?
|
74
|
-
@config[:exclude].each do |f|
|
75
|
-
offset = 'meta'.size + 1
|
76
|
-
return true if path[offset..-1] =~ Regexp.new(f)
|
77
|
-
end
|
78
|
-
false
|
79
|
-
end
|
80
|
-
|
81
|
-
def convert_path( path )
|
82
|
-
if path =~ /.*[.]py[.]rb/
|
83
|
-
from = 'meta'
|
84
|
-
to = 'real'
|
85
|
-
old_ext = '.py.rb'
|
86
|
-
new_ext = '.rb'
|
87
|
-
else
|
88
|
-
from = 'real'
|
89
|
-
to = 'meta'
|
90
|
-
old_ext = '.rb'
|
91
|
-
new_ext = '.py.rb'
|
92
|
-
end
|
93
|
-
|
94
|
-
dir_name = File.dirname path
|
95
|
-
base_name = File.basename path, old_ext
|
9
|
+
class Runner
|
10
|
+
include Parser
|
11
|
+
include Task
|
96
12
|
|
97
|
-
new_dir_name = to + dir_name[from.size..-1]
|
98
|
-
new_path = File.join new_dir_name, base_name + new_ext
|
99
|
-
end
|
100
|
-
|
101
|
-
def make_py( rb_path, py_path )
|
102
|
-
rb = open(rb_path).read
|
103
|
-
|
104
|
-
py_file = open(py_path, 'w')
|
105
|
-
py_file.write(to_py(rb))
|
106
|
-
py_file.close
|
107
|
-
end
|
108
|
-
|
109
|
-
def to_py( rb )
|
110
|
-
py = []
|
111
|
-
rb.split("\n").each do |l|
|
112
|
-
if l.strip =~ /^end$/
|
113
|
-
next
|
114
|
-
end
|
115
|
-
s = l
|
116
|
-
if l.rstrip[-4..-1] == ' end'
|
117
|
-
s = l.rstrip[0...-3].rstrip
|
118
|
-
end
|
119
|
-
|
120
|
-
py << s
|
121
|
-
end
|
122
|
-
|
123
|
-
py.join("\n")
|
124
|
-
end
|
125
|
-
|
126
|
-
|
127
13
|
def run
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
end
|
143
|
-
|
144
|
-
def get_metas
|
145
|
-
meta_files = File.join('meta', "**", "*.py.rb")
|
146
|
-
metas = {}
|
147
|
-
Dir.glob(meta_files).each do |t|
|
148
|
-
metas[t] = File.mtime t
|
149
|
-
end
|
150
|
-
metas
|
151
|
-
end
|
152
|
-
|
153
|
-
def update_rb( meta_name )
|
154
|
-
meta = open(meta_name)
|
155
|
-
real_name = convert_path meta_name
|
156
|
-
begin
|
157
|
-
real_rb = open( real_name, 'w' )
|
158
|
-
real_rb.write(to_rb(meta.read))
|
159
|
-
rescue Exception => e
|
160
|
-
puts e
|
161
|
-
ensure
|
162
|
-
real_rb.close unless real_rb.nil?
|
163
|
-
end
|
164
|
-
meta.close
|
165
|
-
end
|
166
|
-
|
167
|
-
def to_rb( content )
|
168
|
-
insert_end content
|
169
|
-
end
|
170
|
-
|
171
|
-
def insert_end( content )
|
172
|
-
@lines = content.split("\n")
|
173
|
-
progress = 0
|
174
|
-
while progress < @lines.size
|
175
|
-
lines = @lines[progress..-1]
|
176
|
-
lines.each_index do |index|
|
177
|
-
l = lines[index]
|
178
|
-
if start_anchor?(get_rest(l))
|
179
|
-
relative_index_for_end = find_end( lines[index..-1], get_indent(l))
|
180
|
-
unless relative_index_for_end
|
181
|
-
progress += 1
|
182
|
-
break
|
183
|
-
end
|
184
|
-
index_for_end = relative_index_for_end + index
|
185
|
-
lines[index_for_end] = lines[index_for_end] + "\n" + ' ' * get_indent(l) + "end"
|
186
|
-
head = @lines[0...progress]
|
187
|
-
tail = lines[index..-1].join("\n").split("\n")
|
188
|
-
@lines = head + tail
|
189
|
-
progress += 1
|
190
|
-
break
|
191
|
-
end
|
192
|
-
progress += 1
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
result = @lines.join("\n")
|
197
|
-
end
|
198
|
-
|
199
|
-
def find_end( lines, indent )
|
200
|
-
return 0 if lines.size == 1
|
201
|
-
|
202
|
-
anchor = 0
|
203
|
-
|
204
|
-
lines = lines[1..-1]
|
205
|
-
lines.each_index do |i|
|
206
|
-
l = lines[i]
|
207
|
-
next if l.strip == ''
|
208
|
-
if l.strip =~ /^#/
|
209
|
-
if get_indent(l) > indent
|
210
|
-
anchor = i + 1
|
211
|
-
end
|
212
|
-
next
|
213
|
-
end
|
214
|
-
return anchor if get_indent(l) < indent
|
215
|
-
if get_indent(l) == indent
|
216
|
-
rest = get_rest l
|
217
|
-
if middle_anchor? rest
|
218
|
-
anchor = i + 1
|
219
|
-
next
|
220
|
-
elsif end_anchor? rest
|
221
|
-
return false
|
222
|
-
else
|
223
|
-
return anchor
|
224
|
-
end
|
225
|
-
end
|
226
|
-
anchor = i + 1
|
227
|
-
end
|
228
|
-
return anchor
|
229
|
-
end
|
230
|
-
|
231
|
-
def get_indent( line )
|
232
|
-
line =~ /( *)/
|
233
|
-
$1.size
|
234
|
-
end
|
235
|
-
|
236
|
-
def get_rest( line )
|
237
|
-
line =~/( *)/
|
238
|
-
$'
|
239
|
-
end
|
240
|
-
|
241
|
-
def begin_keys
|
242
|
-
s = %w( module def class if begin for while unless do case )
|
243
|
-
m = ['\sdo\s*$|\sdo\s+(\|[^|]+\|)']
|
244
|
-
s.map!{|key| "^#{key}\\b"}
|
245
|
-
|
246
|
-
Regexp.new(s.concat(m).join('|'))
|
247
|
-
end
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
def middle_keys
|
252
|
-
s = %w( rescue else ensure elsif when )
|
253
|
-
s.map!{|key| "^#{key}\\b"}
|
254
|
-
Regexp.new(s.join('|'))
|
255
|
-
end
|
256
|
-
|
257
|
-
def end_keys
|
258
|
-
/^end\b/
|
259
|
-
end
|
260
|
-
|
261
|
-
def start_anchor?( str )
|
262
|
-
str.gsub! /"[^"]+"|'[^']+'/, ''
|
263
|
-
return false if str =~ /^#/
|
264
|
-
return true if str =~ begin_keys
|
265
|
-
end
|
266
|
-
|
267
|
-
def middle_anchor?( str )
|
268
|
-
str =~ middle_keys
|
269
|
-
end
|
270
|
-
|
271
|
-
def end_anchor?(str)
|
272
|
-
str =~ end_keys
|
14
|
+
load_config
|
15
|
+
init_meta unless File.exists? '.backup'
|
16
|
+
@metas = {}
|
17
|
+
while true
|
18
|
+
current_metas = get_metas
|
19
|
+
current_metas.each_pair do |meta, m_time|
|
20
|
+
if @metas[meta] != m_time
|
21
|
+
update_rb meta
|
22
|
+
puts "+ #{meta}..."
|
23
|
+
end
|
24
|
+
end
|
25
|
+
@metas = current_metas
|
26
|
+
sleep 1
|
27
|
+
end
|
273
28
|
end
|
274
29
|
end
|
275
|
-
end
|
276
|
-
require 'lazibi/version'
|
30
|
+
end
|
data/lib/parser.rb
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__) + '/helper')
|
2
|
+
|
3
|
+
require 'parser_helper'
|
4
|
+
|
5
|
+
module Lazibi
|
6
|
+
module Parser
|
7
|
+
include ParserHelper
|
8
|
+
|
9
|
+
def to_py( rb )
|
10
|
+
py = []
|
11
|
+
rb.split("\n").each do |l|
|
12
|
+
if l.strip =~ /^end$/
|
13
|
+
next
|
14
|
+
end
|
15
|
+
s = l
|
16
|
+
if l.rstrip[-4..-1] == ' end'
|
17
|
+
s = l.rstrip[0...-3].rstrip
|
18
|
+
end
|
19
|
+
|
20
|
+
py << s
|
21
|
+
end
|
22
|
+
|
23
|
+
py.join("\n")
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_rb( content )
|
27
|
+
insert_end content
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
# private
|
32
|
+
|
33
|
+
def insert_end( content )
|
34
|
+
@lines = content.split("\n")
|
35
|
+
progress = 0
|
36
|
+
while progress < @lines.size
|
37
|
+
lines = @lines[progress..-1]
|
38
|
+
lines.each_index do |index|
|
39
|
+
l = lines[index]
|
40
|
+
if start_anchor?(get_rest(l))
|
41
|
+
relative_index_for_end = find_end( lines[index..-1], get_indent(l))
|
42
|
+
unless relative_index_for_end
|
43
|
+
progress += 1
|
44
|
+
break
|
45
|
+
end
|
46
|
+
index_for_end = relative_index_for_end + index
|
47
|
+
lines[index_for_end] = lines[index_for_end] + "\n" + ' ' * get_indent(l) + "end"
|
48
|
+
head = @lines[0...progress]
|
49
|
+
tail = lines[index..-1].join("\n").split("\n")
|
50
|
+
@lines = head + tail
|
51
|
+
progress += 1
|
52
|
+
break
|
53
|
+
end
|
54
|
+
progress += 1
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
result = @lines.join("\n")
|
59
|
+
end
|
60
|
+
|
61
|
+
def find_end( lines, indent )
|
62
|
+
return 0 if lines.size == 1
|
63
|
+
|
64
|
+
anchor = 0
|
65
|
+
|
66
|
+
lines = lines[1..-1]
|
67
|
+
lines.each_index do |i|
|
68
|
+
l = lines[i]
|
69
|
+
next if l.strip == ''
|
70
|
+
if l.strip =~ /^#/
|
71
|
+
if get_indent(l) > indent
|
72
|
+
anchor = i + 1
|
73
|
+
end
|
74
|
+
next
|
75
|
+
end
|
76
|
+
return anchor if get_indent(l) < indent
|
77
|
+
if get_indent(l) == indent
|
78
|
+
rest = get_rest l
|
79
|
+
if middle_anchor? rest
|
80
|
+
anchor = i + 1
|
81
|
+
next
|
82
|
+
elsif end_anchor? rest
|
83
|
+
return false
|
84
|
+
else
|
85
|
+
return anchor
|
86
|
+
end
|
87
|
+
end
|
88
|
+
anchor = i + 1
|
89
|
+
end
|
90
|
+
return anchor
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
data/lib/task.rb
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__) + '/helper')
|
2
|
+
$:.unshift(File.dirname(__FILE__) + '/vendor')
|
3
|
+
|
4
|
+
require 'task_helper'
|
5
|
+
require 'beautifier'
|
6
|
+
|
7
|
+
module Lazibi
|
8
|
+
module Task
|
9
|
+
include TaskHelper
|
10
|
+
|
11
|
+
def load_config
|
12
|
+
@config = {}
|
13
|
+
default = {:exclude => ['^vendor']}
|
14
|
+
if File.exists? '.lazibi'
|
15
|
+
f = open '.lazibi'
|
16
|
+
h = YAML.load(f)
|
17
|
+
for k in h.keys
|
18
|
+
begin
|
19
|
+
@config[k.to_sym] = h[k]
|
20
|
+
rescue
|
21
|
+
raise "wrong pattern #{h[k]}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
@config = default
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def init_meta
|
30
|
+
# backup real
|
31
|
+
real_dir = 'real'
|
32
|
+
if File.directory? real_dir
|
33
|
+
backup_dir = '.backup'
|
34
|
+
unless File.exists? backup_dir
|
35
|
+
FileUtils.cp_r real_dir, backup_dir
|
36
|
+
end
|
37
|
+
else
|
38
|
+
raise 'No directory named "real"'
|
39
|
+
end
|
40
|
+
|
41
|
+
# generate meta
|
42
|
+
meta_dir = 'meta'
|
43
|
+
if File.exists? meta_dir
|
44
|
+
if File.directory? meta_dir
|
45
|
+
FileUtils.rm_rf meta_dir
|
46
|
+
else
|
47
|
+
raise 'meta directory is reserved for instiki'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
puts "Generating meta files:"
|
53
|
+
puts "-" * 40
|
54
|
+
Dir.glob(File.join('real', '**', '*.rb')) do |f|
|
55
|
+
if skip_path? f
|
56
|
+
puts "- #{f}"
|
57
|
+
next
|
58
|
+
end
|
59
|
+
|
60
|
+
next unless File.file? f
|
61
|
+
next if f =~ /.*[.]py[.]rb$/
|
62
|
+
py_path = convert_path f
|
63
|
+
dir_name = File.dirname py_path
|
64
|
+
|
65
|
+
puts ' ' + py_path
|
66
|
+
FileUtils.mkdir_p dir_name
|
67
|
+
make_py f, py_path, beautify = true
|
68
|
+
end
|
69
|
+
|
70
|
+
puts "-" * 40
|
71
|
+
end
|
72
|
+
|
73
|
+
def make_py( rb_path, py_path, beautify = false )
|
74
|
+
rb = open(rb_path).read
|
75
|
+
|
76
|
+
py_file = open(py_path, 'w')
|
77
|
+
rb = Beautifier::ruby rb if beautify
|
78
|
+
py_file.write(to_py(rb))
|
79
|
+
py_file.close
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
def update_rb( meta_name )
|
84
|
+
meta = open(meta_name)
|
85
|
+
real_name = convert_path meta_name
|
86
|
+
begin
|
87
|
+
real_rb = open( real_name, 'w' )
|
88
|
+
real_rb.write(to_rb(meta.read))
|
89
|
+
rescue Exception => e
|
90
|
+
puts e
|
91
|
+
ensure
|
92
|
+
real_rb.close unless real_rb.nil?
|
93
|
+
end
|
94
|
+
meta.close
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
# Ruby beautifier, version 1.3, 04/03/2006
|
2
|
+
# Copyright (c) 2006, P. Lutus
|
3
|
+
# TextMate modifications by T. Burks
|
4
|
+
# Released under the GPL
|
5
|
+
# Modified for lazibi by Jinjing
|
6
|
+
|
7
|
+
module Beautifier
|
8
|
+
|
9
|
+
$tabSize = 2
|
10
|
+
$tabStr = " "
|
11
|
+
|
12
|
+
# indent regexp tests
|
13
|
+
|
14
|
+
$indentExp = [
|
15
|
+
/^module\b/,
|
16
|
+
/(=\s*|^)if\b/,
|
17
|
+
/(=\s*|^)until\b/,
|
18
|
+
/(=\s*|^)for\b/,
|
19
|
+
/(=\s*|^)unless\b/,
|
20
|
+
/(=\s*|^)while\b/,
|
21
|
+
/(=\s*|^)begin\b/,
|
22
|
+
/(=\s*|^)case\b/,
|
23
|
+
/\bthen\b/,
|
24
|
+
/^class\b/,
|
25
|
+
/^rescue\b/,
|
26
|
+
/^def\b/,
|
27
|
+
/\bdo\b/,
|
28
|
+
/^else\b/,
|
29
|
+
/^elsif\b/,
|
30
|
+
/^ensure\b/,
|
31
|
+
/\bwhen\b/,
|
32
|
+
/\{[^\}]*$/,
|
33
|
+
/\[[^\]]*$/
|
34
|
+
]
|
35
|
+
|
36
|
+
# outdent regexp tests
|
37
|
+
|
38
|
+
$outdentExp = [
|
39
|
+
/^rescue\b/,
|
40
|
+
/^ensure\b/,
|
41
|
+
/^elsif\b/,
|
42
|
+
/^end\b/,
|
43
|
+
/^else\b/,
|
44
|
+
/\bwhen\b/,
|
45
|
+
/^[^\{]*\}/,
|
46
|
+
/^[^\[]*\]/
|
47
|
+
]
|
48
|
+
|
49
|
+
def self.makeTab(tab)
|
50
|
+
return (tab < 0) ? "":$tabStr * $tabSize * tab
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.addLine(line,tab)
|
54
|
+
line.strip!
|
55
|
+
line = makeTab(tab)+line if line.length > 0
|
56
|
+
return line + "\n"
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.ruby( source )
|
60
|
+
commentBlock = false
|
61
|
+
multiLineArray = Array.new
|
62
|
+
multiLineStr = ""
|
63
|
+
tab = 0
|
64
|
+
dest = ""
|
65
|
+
source.split("\n").each do |line|
|
66
|
+
# combine continuing lines
|
67
|
+
if(!(line =~ /^\s*#/) && line =~ /[^\\]\\\s*$/)
|
68
|
+
multiLineArray.push line
|
69
|
+
multiLineStr += line.sub(/^(.*)\\\s*$/,"\\1")
|
70
|
+
next
|
71
|
+
end
|
72
|
+
|
73
|
+
# add final line
|
74
|
+
if(multiLineStr.length > 0)
|
75
|
+
multiLineArray.push line
|
76
|
+
multiLineStr += line.sub(/^(.*)\\\s*$/,"\\1")
|
77
|
+
end
|
78
|
+
|
79
|
+
tline = ((multiLineStr.length > 0)?multiLineStr:line).strip
|
80
|
+
if(tline =~ /^=begin/)
|
81
|
+
commentBlock = true
|
82
|
+
end
|
83
|
+
if(commentBlock)
|
84
|
+
# add the line unchanged
|
85
|
+
dest += line + "\n"
|
86
|
+
else
|
87
|
+
commentLine = (tline =~ /^#/)
|
88
|
+
if(!commentLine)
|
89
|
+
# throw out sequences that will
|
90
|
+
# only sow confusion
|
91
|
+
tline.gsub!(/\/.*?\//,"")
|
92
|
+
tline.gsub!(/%r\{.*?\}/,"")
|
93
|
+
tline.gsub!(/%r(.).*?\1/,"")
|
94
|
+
tline.gsub!(/\\\"/,"'")
|
95
|
+
tline.gsub!(/".*?"/,"\"\"")
|
96
|
+
tline.gsub!(/'.*?'/,"''")
|
97
|
+
tline.gsub!(/#\{.*?\}/,"")
|
98
|
+
$outdentExp.each do |re|
|
99
|
+
if(tline =~ re)
|
100
|
+
tab -= 1
|
101
|
+
break
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
if (multiLineArray.length > 0)
|
106
|
+
multiLineArray.each do |ml|
|
107
|
+
dest += addLine(ml,tab)
|
108
|
+
end
|
109
|
+
multiLineArray.clear
|
110
|
+
multiLineStr = ""
|
111
|
+
else
|
112
|
+
dest += addLine(line,tab)
|
113
|
+
end
|
114
|
+
if(!commentLine)
|
115
|
+
$indentExp.each do |re|
|
116
|
+
if(tline =~ re && !(tline =~ /\s+end\s*$/))
|
117
|
+
tab += 1
|
118
|
+
break
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
if(tline =~ /^=end/)
|
124
|
+
commentBlock = false
|
125
|
+
end
|
126
|
+
end
|
127
|
+
# STDOUT.write(dest)
|
128
|
+
# uncomment this to complain about mismatched blocks
|
129
|
+
# if(tab != 0)
|
130
|
+
# STDERR.puts "Indentation error: #{tab}"
|
131
|
+
#
|
132
|
+
|
133
|
+
dest
|
134
|
+
end
|
135
|
+
end
|
data/scripts/rdoc2html
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'syntax/convertors/html'
|
6
|
+
require 'erb'
|
7
|
+
require 'rdoc/markup/simple_markup'
|
8
|
+
require 'rdoc/markup/simple_markup/to_html'
|
9
|
+
|
10
|
+
require File.dirname(__FILE__) + '/../lib/lazibi/version.rb'
|
11
|
+
|
12
|
+
version = Lazibi::VERSION::STRING
|
13
|
+
download = 'http://rubyforge.org/projects/lazibi'
|
14
|
+
|
15
|
+
class Fixnum
|
16
|
+
def ordinal
|
17
|
+
# teens
|
18
|
+
return 'th' if (10..19).include?(self % 100)
|
19
|
+
# others
|
20
|
+
case self % 10
|
21
|
+
when 1: return 'st'
|
22
|
+
when 2: return 'nd'
|
23
|
+
when 3: return 'rd'
|
24
|
+
else return 'th'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class Time
|
30
|
+
def pretty
|
31
|
+
return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def convert_syntax(syntax, source)
|
36
|
+
return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
|
37
|
+
end
|
38
|
+
|
39
|
+
if ARGV.length >= 1
|
40
|
+
src, template = ARGV
|
41
|
+
template ||= File.dirname(__FILE__) + '/../website/template.rhtml'
|
42
|
+
|
43
|
+
else
|
44
|
+
puts("Usage: #{File.split($0).last} source.txt [template.rhtml] > output.html")
|
45
|
+
exit!
|
46
|
+
end
|
47
|
+
|
48
|
+
template = ERB.new(File.open(template).read)
|
49
|
+
|
50
|
+
title = nil
|
51
|
+
body = nil
|
52
|
+
p = SM::SimpleMarkup.new
|
53
|
+
h = SM::ToHtml.new
|
54
|
+
File.open(src) do |fsrc|
|
55
|
+
title_text = fsrc.readline
|
56
|
+
body_text = fsrc.read
|
57
|
+
syntax_items = []
|
58
|
+
body_text.gsub!(%r!<(pre|code)[^>]*?syntax=['"]([^'"]+)[^>]*>(.*?)</>!m){
|
59
|
+
ident = syntax_items.length
|
60
|
+
element, syntax, source = $1, $2, $3
|
61
|
+
syntax_items << "<#{element} class='syntax'>#{convert_syntax(syntax, source)}</#{element}>"
|
62
|
+
"syntax-temp-#{ident}"
|
63
|
+
}
|
64
|
+
title = p.convert(title_text, h).gsub(%r!<.*?>!,'').strip
|
65
|
+
body = p.convert(body_text, h)
|
66
|
+
body.gsub!(%r!(?:<pre><code>)?syntax-temp-(d+)(?:</code></pre>)?!){ syntax_items[$1.to_i] }
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
stat = File.stat(src)
|
71
|
+
created = stat.ctime
|
72
|
+
modified = stat.mtime
|
73
|
+
|
74
|
+
$stdout << template.result(binding)
|
data/test/test_unit.rb
CHANGED
@@ -4,31 +4,29 @@ require 'pp'
|
|
4
4
|
class TestLazibi < Test::Unit::TestCase
|
5
5
|
attr :fixtures, :expected
|
6
6
|
|
7
|
-
include Lazibi
|
8
|
-
|
9
7
|
def setup
|
10
|
-
|
8
|
+
|
11
9
|
# load fixtures
|
12
10
|
@meta = {}
|
13
11
|
@real = {}
|
14
12
|
|
15
13
|
fixture_dir = File.dirname(__FILE__) + '/fixtures/meta'
|
16
|
-
|
14
|
+
|
17
15
|
Dir.open(fixture_dir).each do |fn|
|
18
16
|
next unless fn =~ /[.]txt$/
|
19
17
|
@meta[fn.scan(/(.*)[.]/).to_s.to_sym] = File.read(fixture_dir + "/#{fn}")
|
20
18
|
end
|
21
|
-
|
19
|
+
|
22
20
|
expected_dir = File.dirname(__FILE__) + '/fixtures/real'
|
23
21
|
Dir.open(expected_dir).each do |fn|
|
24
22
|
next unless fn =~ /[.]txt$/
|
25
23
|
@real[fn.scan(/(.*)[.]/).to_s.to_sym] = File.read(expected_dir + "/#{fn}")
|
26
24
|
end
|
27
|
-
|
28
|
-
@r = Lazibi.new
|
25
|
+
|
26
|
+
@r = Lazibi::Runner.new
|
29
27
|
end
|
30
|
-
|
31
|
-
|
28
|
+
|
29
|
+
|
32
30
|
def test_start_anchor?
|
33
31
|
assert @r.start_anchor?( 'class' )
|
34
32
|
assert @r.start_anchor?( 'do |abc| ')
|
@@ -36,13 +34,13 @@ class TestLazibi < Test::Unit::TestCase
|
|
36
34
|
assert !@r.start_anchor?( '"abc do "')
|
37
35
|
assert !@r.start_anchor?( '"abc do |"')
|
38
36
|
end
|
39
|
-
|
37
|
+
|
40
38
|
def test_middle_anchor?
|
41
39
|
assert !@r.middle_anchor?( '' )
|
42
40
|
assert @r.middle_anchor?( 'rescue' )
|
43
41
|
end
|
44
|
-
|
45
|
-
def
|
42
|
+
|
43
|
+
def test_find_end
|
46
44
|
assert_find :basic_class, 0, 0
|
47
45
|
assert_find :class_with_def, 0, 1
|
48
46
|
assert_find :class_with_def, 0, 1
|
@@ -52,47 +50,47 @@ class TestLazibi < Test::Unit::TestCase
|
|
52
50
|
assert_find :partial_method, 2, 0
|
53
51
|
assert_find :middle, 0, 1
|
54
52
|
end
|
55
|
-
|
53
|
+
|
56
54
|
def test_convert_path
|
57
55
|
assert @r.convert_path( 'meta/abc.py.rb' ) == 'real/abc.rb', @r.convert_path('meta/abc.rb')
|
58
56
|
assert @r.convert_path( 'real/abc.rb' ) == 'meta/abc.py.rb'
|
59
57
|
assert @r.convert_path( 'meta/lib/abc.py.rb' ) == 'real/lib/abc.rb'
|
60
58
|
end
|
61
|
-
|
59
|
+
|
62
60
|
def test_convert_content
|
63
61
|
@meta.keys.reject{|k| ['partial_method', 'inline_end'].include? k.to_s }.each do |k|
|
64
62
|
assert_convert k
|
65
63
|
end
|
66
64
|
end
|
67
|
-
|
65
|
+
|
68
66
|
def test_to_rb
|
69
67
|
assert_to_rb :partial_method
|
70
68
|
end
|
71
|
-
|
72
|
-
def test_to_py
|
69
|
+
|
70
|
+
def test_to_py
|
73
71
|
assert_to_py :inline_end
|
74
72
|
end
|
75
|
-
|
76
|
-
|
73
|
+
|
74
|
+
|
77
75
|
private
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
76
|
+
def assert_find( name, indent, end_i )
|
77
|
+
assert_equal @r.find_end(@meta[name].split("\n"), indent), end_i
|
78
|
+
end
|
79
|
+
|
80
|
+
def assert_to_rb( name )
|
81
|
+
assert_equal @r.to_rb( @meta[name]), @real[name], name
|
82
|
+
end
|
83
|
+
|
84
|
+
def assert_to_py( name )
|
85
|
+
assert_equal @r.to_py( @real[name]), @meta[name], name
|
86
|
+
end
|
87
|
+
|
88
|
+
def assert_convert( name )
|
89
|
+
assert_to_rb(name)
|
90
|
+
assert_to_py(name)
|
91
|
+
end
|
92
|
+
|
93
|
+
def assert_identity( s )
|
94
|
+
assert_equal @r.to_rb( @r.to_py( s ) ), s
|
95
|
+
end
|
98
96
|
end
|
data/website/index.html
CHANGED
@@ -33,7 +33,7 @@
|
|
33
33
|
<h1>Welcome to Lazibi</h1>
|
34
34
|
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/lazibi"; return false'>
|
35
35
|
<p>Get Version</p>
|
36
|
-
<a href="http://rubyforge.org/projects/lazibi" class="numbers">0.1.
|
36
|
+
<a href="http://rubyforge.org/projects/lazibi" class="numbers">0.1.5</a>
|
37
37
|
</div>
|
38
38
|
<p>
|
39
39
|
Lazibi is a meta language which allows you to use Python like syntax (
|
@@ -109,23 +109,13 @@ Make sure everything still works
|
|
109
109
|
rake test / autotest
|
110
110
|
</pre>
|
111
111
|
<p>
|
112
|
-
Start hacking ruby/python :/
|
112
|
+
Start hacking ruby/python in meta :/
|
113
113
|
</p>
|
114
114
|
<pre>
|
115
115
|
cd shiny_project
|
116
116
|
$your_editor meta
|
117
117
|
</pre>
|
118
118
|
<h2>Tips</h2>
|
119
|
-
<h3>Rails fix</h3>
|
120
|
-
<p>
|
121
|
-
After bootstrap, edit config/boot.py.rb in meta
|
122
|
-
</p>
|
123
|
-
<pre>
|
124
|
-
STDERR.puts %(Cannot find gem for Rails ~>#{version}.0:
|
125
|
-
Install the missing gem with 'gem install -v=#{version} rails', or
|
126
|
-
change environment.rb to define RAILS_GEM_VERSION with your desired version.
|
127
|
-
)
|
128
|
-
</pre>
|
129
119
|
<h3>Manually create meta files</h3>
|
130
120
|
<ul>
|
131
121
|
<li>Bootstrap your project as usual, just don’t run lazibi
|
@@ -144,6 +134,18 @@ After bootstrap, edit config/boot.py.rb in meta
|
|
144
134
|
<li>create .py.rb files in corresponding directories inside ‘meta’,
|
145
135
|
.rb files will be created and updated in ‘real’ as usual
|
146
136
|
|
137
|
+
</li>
|
138
|
+
</ul>
|
139
|
+
<h3>Prevent certain directories from being parsed during bootstrap ( default is ^vendor )</h3>
|
140
|
+
<ul>
|
141
|
+
<li>Create .lazibi in project/real path
|
142
|
+
|
143
|
+
<pre>
|
144
|
+
exclude:
|
145
|
+
- pattern_1
|
146
|
+
- pattern_2
|
147
|
+
- for_example_^vendor
|
148
|
+
</pre>
|
147
149
|
</li>
|
148
150
|
</ul>
|
149
151
|
<h2>Known issues</h2>
|
@@ -174,7 +176,7 @@ Released under the MIT license (included)
|
|
174
176
|
</p>
|
175
177
|
|
176
178
|
<p class="coda">
|
177
|
-
<a href="mailto:nfjinjing@gmail.com">Jinjing</a>,
|
179
|
+
<a href="mailto:nfjinjing@gmail.com">Jinjing</a>, 16th June 2007<br>
|
178
180
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
179
181
|
</p>
|
180
182
|
</div>
|
data/website/index.txt
CHANGED
@@ -63,22 +63,13 @@ Make sure everything still works
|
|
63
63
|
cd shiny_project/real
|
64
64
|
rake test / autotest
|
65
65
|
|
66
|
-
Start hacking ruby/python :/
|
66
|
+
Start hacking ruby/python in meta :/
|
67
67
|
|
68
68
|
cd shiny_project
|
69
69
|
$your_editor meta
|
70
70
|
|
71
71
|
== Tips
|
72
72
|
|
73
|
-
=== Rails fix
|
74
|
-
|
75
|
-
After bootstrap, edit config/boot.py.rb in meta
|
76
|
-
|
77
|
-
STDERR.puts %(Cannot find gem for Rails ~>#{version}.0:
|
78
|
-
Install the missing gem with 'gem install -v=#{version} rails', or
|
79
|
-
change environment.rb to define RAILS_GEM_VERSION with your desired version.
|
80
|
-
)
|
81
|
-
|
82
73
|
=== Manually create meta files
|
83
74
|
|
84
75
|
* Bootstrap your project as usual, just don't run lazibi
|
@@ -92,6 +83,14 @@ After bootstrap, edit config/boot.py.rb in meta
|
|
92
83
|
|
93
84
|
* create .py.rb files in corresponding directories inside 'meta', .rb files will be created and updated in 'real' as usual
|
94
85
|
|
86
|
+
=== Prevent certain directories from being parsed during bootstrap ( default is ^vendor )
|
87
|
+
|
88
|
+
* Create .lazibi in project/real path
|
89
|
+
|
90
|
+
exclude:
|
91
|
+
- pattern_1
|
92
|
+
- pattern_2
|
93
|
+
- for_example_^vendor
|
95
94
|
|
96
95
|
== Known issues
|
97
96
|
|
@@ -1,21 +1,22 @@
|
|
1
1
|
body {
|
2
|
-
|
2
|
+
background-color: #fff; color: #333;
|
3
3
|
font-family: "Georgia", sans-serif;
|
4
4
|
font-size: 16px;
|
5
5
|
line-height: 1.6em;
|
6
6
|
padding: 1.6em 0 0 0;
|
7
|
-
color: #333;
|
8
7
|
}
|
9
8
|
h1, h2, h3, h4, h5, h6 {
|
10
|
-
color: #444;
|
11
9
|
}
|
10
|
+
|
12
11
|
h1 {
|
12
|
+
background: #eef;
|
13
13
|
font-family: sans-serif;
|
14
14
|
font-weight: normal;
|
15
15
|
font-size: 4em;
|
16
16
|
line-height: 0.8em;
|
17
17
|
letter-spacing: -0.1ex;
|
18
18
|
margin: 5px;
|
19
|
+
padding: 20px 20px 10px 20px;
|
19
20
|
}
|
20
21
|
li {
|
21
22
|
padding: 0;
|
@@ -23,11 +24,12 @@ li {
|
|
23
24
|
list-style-type: square;
|
24
25
|
}
|
25
26
|
a {
|
26
|
-
color: #5E5AFF;
|
27
|
-
background-color: #DAC;
|
28
27
|
font-weight: normal;
|
29
28
|
text-decoration: underline;
|
30
29
|
}
|
30
|
+
|
31
|
+
a { color: #000; }
|
32
|
+
|
31
33
|
blockquote {
|
32
34
|
font-size: 90%;
|
33
35
|
font-style: italic;
|
@@ -79,11 +81,11 @@ td {
|
|
79
81
|
}
|
80
82
|
pre, code {
|
81
83
|
font-family: monospace;
|
84
|
+
background: #eee;
|
82
85
|
font-size: 90%;
|
83
86
|
line-height: 1.4em;
|
84
|
-
color: #ff8;
|
85
|
-
background-color: #111;
|
86
87
|
padding: 2px 10px 2px 10px;
|
88
|
+
# border: 1px solid;
|
87
89
|
}
|
88
90
|
.comment { color: #aaa; font-style: italic; }
|
89
91
|
.keyword { color: #eff; font-weight: bold; }
|
@@ -101,8 +103,8 @@ pre, code {
|
|
101
103
|
text-align: right;
|
102
104
|
font-family: sans-serif;
|
103
105
|
font-weight: normal;
|
104
|
-
background-color: #B3ABFF;
|
105
|
-
color: #141331;
|
106
|
+
# background-color: #B3ABFF;
|
107
|
+
# color: #141331;
|
106
108
|
padding: 15px 20px 10px 20px;
|
107
109
|
margin: 0 auto;
|
108
110
|
margin-top: 15px;
|
@@ -119,16 +121,16 @@ pre, code {
|
|
119
121
|
|
120
122
|
#version p {
|
121
123
|
text-decoration: none;
|
122
|
-
color: #141331;
|
123
|
-
background-color: #B3ABFF;
|
124
|
+
# color: #141331;
|
125
|
+
# background-color: #B3ABFF;
|
124
126
|
margin: 0;
|
125
127
|
padding: 0;
|
126
128
|
}
|
127
129
|
|
128
130
|
#version a {
|
129
131
|
text-decoration: none;
|
130
|
-
color: #141331;
|
131
|
-
background-color: #B3ABFF;
|
132
|
+
# color: #141331;
|
133
|
+
# background-color: #B3ABFF;
|
132
134
|
}
|
133
135
|
|
134
136
|
.clickable {
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.3
|
|
3
3
|
specification_version: 1
|
4
4
|
name: lazibi
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
7
|
-
date: 2007-06-
|
6
|
+
version: 0.1.5
|
7
|
+
date: 2007-06-16 00:00:00 +08:00
|
8
8
|
summary: Python like syntax for Ruby
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -35,19 +35,29 @@ files:
|
|
35
35
|
- README.txt
|
36
36
|
- Rakefile
|
37
37
|
- bin/lazibi
|
38
|
+
- lib/helper/parser_helper.rb
|
39
|
+
- lib/helper/task_helper.rb
|
38
40
|
- lib/lazibi.rb
|
39
41
|
- lib/lazibi/version.rb
|
42
|
+
- lib/parser.rb
|
43
|
+
- lib/task.rb
|
44
|
+
- lib/vendor/beautifier.rb
|
45
|
+
- scripts/rdoc2html
|
40
46
|
- scripts/txt2html
|
41
47
|
- test/fixtures/meta/basic_class.txt
|
48
|
+
- test/fixtures/meta/case.txt
|
42
49
|
- test/fixtures/meta/class_with_def.txt
|
43
50
|
- test/fixtures/meta/comment.txt
|
51
|
+
- test/fixtures/meta/inline_end.txt
|
44
52
|
- test/fixtures/meta/middle.txt
|
45
53
|
- test/fixtures/meta/nested_comment.txt
|
46
54
|
- test/fixtures/meta/partial_method.txt
|
47
55
|
- test/fixtures/meta/two_methods.txt
|
48
56
|
- test/fixtures/real/basic_class.txt
|
57
|
+
- test/fixtures/real/case.txt
|
49
58
|
- test/fixtures/real/class_with_def.txt
|
50
59
|
- test/fixtures/real/comment.txt
|
60
|
+
- test/fixtures/real/inline_end.txt
|
51
61
|
- test/fixtures/real/middle.txt
|
52
62
|
- test/fixtures/real/nested_comment.txt
|
53
63
|
- test/fixtures/real/partial_method.txt
|
@@ -71,15 +81,19 @@ extra_rdoc_files:
|
|
71
81
|
- Manifest.txt
|
72
82
|
- README.txt
|
73
83
|
- test/fixtures/meta/basic_class.txt
|
84
|
+
- test/fixtures/meta/case.txt
|
74
85
|
- test/fixtures/meta/class_with_def.txt
|
75
86
|
- test/fixtures/meta/comment.txt
|
87
|
+
- test/fixtures/meta/inline_end.txt
|
76
88
|
- test/fixtures/meta/middle.txt
|
77
89
|
- test/fixtures/meta/nested_comment.txt
|
78
90
|
- test/fixtures/meta/partial_method.txt
|
79
91
|
- test/fixtures/meta/two_methods.txt
|
80
92
|
- test/fixtures/real/basic_class.txt
|
93
|
+
- test/fixtures/real/case.txt
|
81
94
|
- test/fixtures/real/class_with_def.txt
|
82
95
|
- test/fixtures/real/comment.txt
|
96
|
+
- test/fixtures/real/inline_end.txt
|
83
97
|
- test/fixtures/real/middle.txt
|
84
98
|
- test/fixtures/real/nested_comment.txt
|
85
99
|
- test/fixtures/real/partial_method.txt
|