endlessruby 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +1 -0
- data/Manifest.txt +3 -2
- data/README.rdoc +28 -5
- data/bin/endlessruby +1 -1
- data/lib/endlessruby.rb +221 -159
- data/lib/endlessruby/{extensions.rb → custom_require.rb} +28 -41
- data/lib/endlessruby/main.rb +9 -15
- data/spec/build_self_spec.rb +2 -2
- data/spec/endlessruby_spec.rb +2 -0
- data/spec/require_spec.rb +8 -0
- data/spec/semicolon_spec.rb +11 -2
- data/spec/simply_spec.rb +16 -0
- data/spec/use_end_case_spec.rb +27 -0
- data/src/endlessruby.er +213 -147
- data/src/endlessruby/{extensions.er → custom_require.er} +27 -37
- data/src/endlessruby/main.er +9 -11
- metadata +12 -45
@@ -13,50 +13,40 @@ module Kernel
|
|
13
13
|
# pathが./または/で以外で始まる場合は$LOAD_PATHと$:をそれぞれ参照してpathを探します。
|
14
14
|
# もしpathがそれらで始まる場合はそれぞれ参照しません。(つまり通常のrequireの動作と同じです)
|
15
15
|
def require path
|
16
|
-
at = caller
|
17
16
|
endlessruby_original_require path
|
18
17
|
rescue SyntaxError, LoadError
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
|
19
|
+
load = lambda do |path, abspath|
|
20
|
+
|
21
|
+
if !File.exist?(abspath) || File.directory?(abspath)
|
22
|
+
if File.exist? "#{abspath}.er"
|
23
|
+
abspath = "#{abspath}.er"
|
24
24
|
else
|
25
|
-
$@ = at
|
26
25
|
raise LoadError, "no such file to load -- #{path}"
|
27
26
|
|
28
|
-
if
|
29
|
-
|
27
|
+
return false if $".include? abspath
|
28
|
+
|
29
|
+
if File.directory? abspath
|
30
30
|
raise LoadError, "Is a directory - #{path}"
|
31
31
|
|
32
|
-
open(
|
33
|
-
|
34
|
-
|
35
|
-
rescue Exception => e
|
36
|
-
$@ = at
|
37
|
-
raise e
|
32
|
+
open(abspath) do |file|
|
33
|
+
EndlessRuby.ereval file.read, TOPLEVEL_BINDING, abspath
|
34
|
+
$" << abspath
|
38
35
|
return true
|
36
|
+
|
37
|
+
case path
|
38
|
+
when /^\~(.*?)$/
|
39
|
+
load.call path, File.join(ENV['HOME'], $1)
|
40
|
+
when /^\.\/.*?$/, /^\/.*?$/
|
41
|
+
load.call path, path
|
39
42
|
else
|
40
43
|
is_that_dir = false
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
open(real_path) do |file|
|
51
|
-
begin
|
52
|
-
EndlessRuby.ereval file.read, TOPLEVEL_BINDING, real_path
|
53
|
-
rescue Exception => e
|
54
|
-
$@ = at
|
55
|
-
raise e
|
56
|
-
return true
|
57
|
-
$@ = at
|
58
|
-
if is_that_dir
|
59
|
-
raise LoadError, "Is a directory - #{path}"
|
60
|
-
else
|
61
|
-
raise LoadError, "no such file to load -- #{path}"
|
62
|
-
|
44
|
+
$:.each do |load_path|
|
45
|
+
abspath = File.join load_path, path
|
46
|
+
begin
|
47
|
+
return load.call path, abspath
|
48
|
+
rescue SyntaxError => e
|
49
|
+
$stderr.puts "*ENDLESSRUBY BUG*"
|
50
|
+
raise e
|
51
|
+
rescue LoadError => e
|
52
|
+
raise e if load_path == $:.last
|
data/src/endlessruby/main.er
CHANGED
@@ -9,16 +9,11 @@ module EndlessRuby::Main
|
|
9
9
|
|
10
10
|
# er ファイルから読み込みそれをピュアなRubyにコンパイルしてrbに書き出します
|
11
11
|
def compile er, rb
|
12
|
-
|
13
|
-
open(rb, "w") do |rbfile|
|
14
|
-
rbfile.write ER2PR(erfile.read)
|
12
|
+
ER2PR({ :in => { :any => er }, :out => { :any => rb } })
|
15
13
|
|
16
14
|
# rbファイルを読み込みそれからすべてのendを取り除きます。
|
17
15
|
def decompile rb, er
|
18
|
-
|
19
|
-
open(er, "w") do |erfile|
|
20
|
-
erfile.write PR2ER(rbfile.read)
|
21
|
-
|
16
|
+
PR2ER({ :in => { :any => rb }, :out => { :any => er } })
|
22
17
|
|
23
18
|
# EndlessRuby::Main.main と同じ動作をします。このモジュールをincludeした場合に使用します。
|
24
19
|
def endlessruby argv
|
@@ -39,16 +34,19 @@ module EndlessRuby::Main
|
|
39
34
|
}
|
40
35
|
|
41
36
|
parser = OptionParser.new do |opts|
|
42
|
-
|
37
|
+
|
38
|
+
opts.version = EndlessRuby::VERSION
|
39
|
+
|
40
|
+
opts.on '-o OUT', 'appoint output directory.' do |out|
|
43
41
|
options[:out] = out
|
44
42
|
|
45
|
-
opts.on '-c', '--compile' do |c|
|
43
|
+
opts.on '-c', '--compile', 'compile endlessruby source code to pure ruby' do |c|
|
46
44
|
options[:compile] = true
|
47
45
|
|
48
|
-
opts.on '-d', '--decompile' do |d|
|
46
|
+
opts.on '-d', '--decompile', 'decompile pure ruby source code to endless ruby' do |d|
|
49
47
|
options[:decompile] = true
|
50
48
|
|
51
|
-
opts.on '-r' do |r|
|
49
|
+
opts.on '-r', 'unimplemented' do |r|
|
52
50
|
options[:recursive] = true
|
53
51
|
|
54
52
|
parser.parse! argv
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: endlessruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-11-
|
12
|
+
date: 2011-11-23 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: hoe
|
16
|
-
requirement: &
|
16
|
+
requirement: &70121416164700 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,8 +21,8 @@ dependencies:
|
|
21
21
|
version: '2.12'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
25
|
-
description: ! 'EndlessRuby は Ruby を end
|
24
|
+
version_requirements: *70121416164700
|
25
|
+
description: ! 'EndlessRuby は Ruby を end なしで代わりにインデントで書けるプリプロセッサまたはコンパイラです。
|
26
26
|
|
27
27
|
* EndlessRuby で書かれたソースコードを Ruby プログラムから require
|
28
28
|
|
@@ -35,38 +35,7 @@ description: ! 'EndlessRuby は Ruby を end なしで書けるプリプロセ
|
|
35
35
|
|
36
36
|
EndlessRubyの独自な拡張的な構文はありません。
|
37
37
|
|
38
|
-
ただ行単位で処理しているので def method; a; end みたいな書式できません。
|
39
|
-
|
40
|
-
|
41
|
-
コンパイルする場合は
|
42
|
-
|
43
|
-
$ endlessruby -c src/example.er src/more.er -o lib
|
44
|
-
|
45
|
-
とします。
|
46
|
-
|
47
|
-
この場合、
|
48
|
-
|
49
|
-
src/example.er => lib/example.rb
|
50
|
-
|
51
|
-
src/more.er => lib/more.rb
|
52
|
-
|
53
|
-
として書き出されます。
|
54
|
-
|
55
|
-
|
56
|
-
実行する場合は
|
57
|
-
|
58
|
-
$ endlessruby src/example.er
|
59
|
-
|
60
|
-
|
61
|
-
コンパイルされていないEndlessRubyのファイルをrequire する場合は
|
62
|
-
|
63
|
-
|
64
|
-
require ''endlessruby''
|
65
|
-
|
66
|
-
require ''example.er''
|
67
|
-
|
68
|
-
|
69
|
-
たぶんバグだらけです'
|
38
|
+
ただ行単位で処理しているので def method; a; end みたいな書式できません。'
|
70
39
|
email:
|
71
40
|
- pasberth@gmail.com
|
72
41
|
executables:
|
@@ -82,10 +51,10 @@ files:
|
|
82
51
|
- Rakefile
|
83
52
|
- bin/endlessruby
|
84
53
|
- lib/endlessruby.rb
|
85
|
-
- lib/endlessruby/
|
54
|
+
- lib/endlessruby/custom_require.rb
|
86
55
|
- lib/endlessruby/main.rb
|
87
56
|
- src/endlessruby.er
|
88
|
-
- src/endlessruby/
|
57
|
+
- src/endlessruby/custom_require.er
|
89
58
|
- src/endlessruby/main.er
|
90
59
|
- src/er.er
|
91
60
|
- spec/blank_line_spec.rb
|
@@ -101,6 +70,7 @@ files:
|
|
101
70
|
- spec/simply_spec.rb
|
102
71
|
- spec/spec.opts
|
103
72
|
- spec/spec_helper.rb
|
73
|
+
- spec/use_end_case_spec.rb
|
104
74
|
- spec/test_data/er_omission.er
|
105
75
|
- spec/test_data/file.er
|
106
76
|
- spec/test_data/rb_omission.rb
|
@@ -136,12 +106,9 @@ rubyforge_project: endlessruby
|
|
136
106
|
rubygems_version: 1.8.10
|
137
107
|
signing_key:
|
138
108
|
specification_version: 3
|
139
|
-
summary: EndlessRuby は Ruby を end
|
140
|
-
Ruby プログラムから require * EndlessRuby で書かれたソースコードを ピュア Ruby にコンパイル ができます。 基本的にRubyの構文からendを取り除いただけで書けます。endを取り除かなくても実行可能です。
|
141
|
-
EndlessRubyの独自な拡張的な構文はありません。 ただ行単位で処理しているので def method; a; end みたいな書式できません。
|
142
|
-
$ endlessruby -c src/example.er src/more.er -o lib とします。 この場合、 src/example.er =>
|
143
|
-
lib/example.rb src/more.er => lib/more.rb として書き出されます。 実行する場合は $ endlessruby src/example.er コンパイルされていないEndlessRubyのファイルをrequire
|
144
|
-
する場合は require 'endlessruby' require 'example.er' たぶんバグだらけです
|
109
|
+
summary: EndlessRuby は Ruby を end なしで代わりにインデントで書けるプリプロセッサまたはコンパイラです。 * EndlessRuby
|
110
|
+
で書かれたソースコードを Ruby プログラムから require * EndlessRuby で書かれたソースコードを ピュア Ruby にコンパイル ができます。 基本的にRubyの構文からendを取り除いただけで書けます。endを取り除かなくても実行可能です。
|
111
|
+
EndlessRubyの独自な拡張的な構文はありません。 ただ行単位で処理しているので def method; a; end みたいな書式できません。
|
145
112
|
test_files:
|
146
113
|
- test/test_helpers.rb
|
147
114
|
- test/test_require.rb
|