rubypp 0.0.1 → 0.0.2

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.
Files changed (4) hide show
  1. data/lib/rubypp.rb +102 -0
  2. metadata +31 -46
  3. data.tar.gz.sum +0 -1
  4. metadata.gz.sum +0 -1
@@ -0,0 +1,102 @@
1
+ class RubyPP
2
+ class Environment
3
+ def initialize(preprocessor)
4
+ @preprocessor = preprocessor
5
+ end
6
+
7
+ def puts(*lines)
8
+ @preprocessor.output.puts(*lines)
9
+ end
10
+
11
+ def binding
12
+ return super
13
+ end
14
+ end
15
+
16
+ attr_reader :input
17
+ attr_reader :output
18
+ attr_reader :filename
19
+
20
+ def initialize(input, output, filename)
21
+ @input = input
22
+ @output = output
23
+ @filename = filename
24
+ @linenum = 1
25
+ @environment = Environment.new(self)
26
+ @binding = @environment.binding
27
+ end
28
+
29
+ def getline
30
+ line = @input.gets
31
+ @linenum += 1 if not line.nil?
32
+ return line
33
+ end
34
+
35
+ def preprocess
36
+ success = false
37
+ begin
38
+ loop do
39
+ line = getline
40
+ break if line.nil?
41
+ case line
42
+ when /(.*[^\\]|^)\#\{(.*?)\}(.*)/
43
+ @output.puts "#{$1}#{evaluate($2, @linenum)}#{$3}"
44
+ when /^\#ruby\s+<<(.*)/
45
+ marker = $1
46
+ str = ''
47
+ evalstart = @linenum
48
+ loop do
49
+ line = getline
50
+ if line.nil? then
51
+ raise "End of input without #{marker}"
52
+ end
53
+ break if line.chomp == marker
54
+ str << line
55
+ end
56
+ result = evaluate(str, evalstart)
57
+ @output.puts result if not result.nil?
58
+ when /^\#ruby\s+(.*)/
59
+ str = line = $1
60
+ while line[-1] == ?\\
61
+ str.chop!
62
+ line = getline
63
+ break if line.nil?
64
+ line.chomp!
65
+ str << line
66
+ end
67
+ result = evaluate(str, @linenum)
68
+ @output.puts result if not result.nil?
69
+ else
70
+ @output.puts line
71
+ end
72
+ end
73
+ success = true
74
+ ensure
75
+ if not success then
76
+ $stderr.puts "Error on line #{@linenum}:"
77
+ end
78
+ end
79
+ end
80
+
81
+ def evaluate(str, linenum)
82
+ result = eval(str, @binding, @filename, linenum)
83
+ return result
84
+ end
85
+ end
86
+
87
+ def rubypp(input_file, output_file)
88
+ input = input_file ? File.open(input_file) : $stdin
89
+ output = output_file ? File.open(output_file, 'w') : $stdout
90
+
91
+ success = false
92
+ begin
93
+ preprocessor = RubyPP.new(input, output, input_file || "(stdin)")
94
+ preprocessor.preprocess()
95
+ success = true
96
+ ensure
97
+ if not success then
98
+ File.unlink(output_file) rescue Errno::ENOENT
99
+ end
100
+ end
101
+ end
102
+
metadata CHANGED
@@ -1,69 +1,54 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rubypp
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
5
6
  platform: ruby
6
- authors:
7
+ authors:
7
8
  - Paul Brannan
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
-
12
- date: 2012-05-03 00:00:00 Z
12
+ date: 2012-05-03 00:00:00.000000000 Z
13
13
  dependencies: []
14
-
15
- description: |
16
- Rubypp is a preprocessor that uses ruby to transform text. Syntax is
17
- similar to the C preprocessor, e.g.:
18
-
19
- #include <stdio.h>
20
-
21
- #ruby <<END
22
- a = 42
23
- nil # the last value of the block gets inserted into the output stream
24
- END
25
-
26
- int main()
27
- {
28
- printf("The answer is: #{a}\n");
29
- }
30
-
14
+ description: ! "Rubypp is a preprocessor that uses ruby to transform text. Syntax
15
+ is\nsimilar to the C preprocessor, e.g.:\n\n#include <stdio.h>\n\n#ruby <<END\n
16
+ \ a = 42\n nil # the last value of the block gets inserted into the output stream\nEND\n\nint
17
+ main()\n{\n printf(\"The answer is: #{a}\\n\");\n}\n"
31
18
  email: curlypaul924@gmail.com
32
- executables:
19
+ executables:
33
20
  - rubypp
34
21
  extensions: []
35
-
36
- extra_rdoc_files:
22
+ extra_rdoc_files:
37
23
  - README.markdown
38
- files:
24
+ files:
25
+ - lib/rubypp.rb
26
+ - bin/rubypp
39
27
  - README.markdown
40
28
  - test/test_rubypp.rb
41
- - bin/rubypp
42
29
  homepage: http://github.com/cout/rubypp/
43
30
  licenses: []
44
-
45
- metadata: {}
46
-
47
31
  post_install_message:
48
32
  rdoc_options: []
49
-
50
- require_paths:
33
+ require_paths:
51
34
  - lib
52
- required_ruby_version: !ruby/object:Gem::Requirement
53
- requirements:
54
- - &id001
55
- - ">="
56
- - !ruby/object:Gem::Version
57
- version: "0"
58
- required_rubygems_version: !ruby/object:Gem::Requirement
59
- requirements:
60
- - *id001
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
61
47
  requirements: []
62
-
63
48
  rubyforge_project:
64
- rubygems_version: 2.0.a
49
+ rubygems_version: 1.8.21
65
50
  signing_key:
66
- specification_version: 4
51
+ specification_version: 3
67
52
  summary: A preprocessor that uses ruby to transform text
68
- test_files:
53
+ test_files:
69
54
  - test/test_rubypp.rb
data.tar.gz.sum DELETED
@@ -1 +0,0 @@
1
- SHA1 b9d6fb9613127054a91fb221fd4815fa08ca1880
metadata.gz.sum DELETED
@@ -1 +0,0 @@
1
- SHA1 7758beb87d47c9c5c133d9cb0dfb90bd7f09744f