ratex 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,4 +7,4 @@ puts generate{ f(x, y, t) == 2 * sin(pi / 4 * sqrt(x ** 2 + y ** 2) - pi / 2 * t
7
7
  puts generate{ n! == n * fact(n - 1) }
8
8
  puts generate{ f[n] == f[n - 2] + f[n - 1] }
9
9
  puts generate{ e ** (i * theta) == cos(theta) + i * sin(theta) }
10
- puts generate{ F(x, y) == sum(i == -1, h, A_i(x, y) * G_i(x, y)) }
10
+ puts generate{ F(x, y) == sum(i == -1, h, A_i(x, y) * G_i(x, y)) }
@@ -3,150 +3,169 @@ require "ratex/version"
3
3
  module Ratex
4
4
  extend self
5
5
 
6
- OPERATORS = [:+, :-, :*, :/, :**, :==, :+@, :-@, :<, :>]
7
- KLASSES = [Fixnum, String, Symbol]
8
-
6
+ #one character constant
9
7
  ('A'..'Z').each do |c|
10
8
  const_set(c, c)
11
9
  end
12
10
 
13
- def begin_generate
14
- KLASSES.each do |klass|
15
- klass.class_eval do
16
- OPERATORS.each do |ope|
17
- if method_defined? ope
18
- alias_method "#{ope}_", ope
11
+ class Generator
12
+
13
+ OPERATORS = [:+, :-, :*, :/, :**, :==, :+@, :-@, :<, :>]
14
+ KLASSES = [Fixnum, String, Symbol]
15
+
16
+ def begin_generate
17
+ return if @generate_ready
18
+
19
+ KLASSES.each do |klass|
20
+ klass.class_eval do
21
+ OPERATORS.each do |ope|
22
+ if method_defined? ope
23
+ alias_method "#{ope}_", ope
24
+ end
19
25
  end
20
- end
21
26
 
22
- [:+, :-, :<, :>].each do |ope|
23
- define_method(ope) do |other|
24
- "#{self} #{ope} #{other}"
27
+ [:+, :-, :<, :>].each do |ope|
28
+ define_method(ope) do |other|
29
+ "#{self} #{ope} #{other}"
30
+ end
25
31
  end
26
- end
27
32
 
28
- def **(other)
29
- "#{self} ^{#{other}}"
30
- end
33
+ def **(other)
34
+ "#{self} ^{#{other}}"
35
+ end
31
36
 
32
- def *(other)
33
- "#{self} #{other}"
34
- end
37
+ def *(other)
38
+ "#{self} #{other}"
39
+ end
35
40
 
36
- def /(other)
37
- "\\frac{#{self}}{#{other}}"
38
- end
41
+ def /(other)
42
+ "\\frac{#{self}}{#{other}}"
43
+ end
39
44
 
40
- def +@
41
- "+#{self}"
42
- end
45
+ def +@
46
+ "+#{self}"
47
+ end
43
48
 
44
- def -@
45
- "-#{self}"
46
- end
49
+ def -@
50
+ "-#{self}"
51
+ end
47
52
 
48
- def ==(other)
49
- "#{self} = #{other}"
53
+ def ==(other)
54
+ "#{self} = #{other}"
55
+ end
50
56
  end
51
57
  end
58
+
59
+ @generate_ready = true
52
60
  end
53
- end
54
61
 
55
- def end_generate
56
- KLASSES.each do |klass|
57
- klass.class_eval do
58
- OPERATORS.each do |ope|
59
- remove_method ope
60
- if method_defined? "#{ope}_"
61
- alias_method ope, "#{ope}_"
62
+ def finish_generate
63
+ return unless @generate_ready
64
+
65
+ KLASSES.each do |klass|
66
+ klass.class_eval do
67
+ OPERATORS.each do |ope|
68
+ remove_method ope
69
+ if method_defined? "#{ope}_"
70
+ alias_method ope, "#{ope}_"
71
+ end
62
72
  end
63
73
  end
64
74
  end
65
- end
66
- end
67
75
 
68
- class Context
76
+ @generate_ready = false
77
+ end
69
78
 
70
- def out_of_calc
71
- end_generate
79
+ def out_of_generate
80
+ finish_generate
72
81
  ret = yield
73
82
  begin_generate
74
83
  ret
75
84
  end
76
85
 
77
- [:pi, :theta].each do |keyword|
78
- define_method(keyword) do
79
- "\\#{keyword}"
86
+ class Context
87
+
88
+ def initialize(gen)
89
+ @gen = gen
80
90
  end
81
- end
82
91
 
83
- def sqrt(expr, n = 2)
84
- out_of_calc do
85
- "\\sqrt" + ((n != 2)? "[#{n}]" : "") + "{#{expr.to_s}}"
92
+ #keywords
93
+ [:pi, :theta].each do |keyword|
94
+ define_method(keyword) do
95
+ "\\#{keyword}"
96
+ end
86
97
  end
87
- end
88
98
 
89
- def sum(init, max, expr)
90
- out_of_calc do
99
+ def sqrt(expr, n = 2)
100
+ @gen.out_of_generate do
101
+ "\\sqrt" + ((n != 2)? "[#{n}]" : "") + "{#{expr.to_s}}"
102
+ end
103
+ end
104
+
105
+ def sum(init, max, expr)
91
106
  "\\sum^{#{max}}_{#{init}} #{expr}"
92
107
  end
93
- end
94
108
 
95
- def fact(expr)
96
- "(#{expr})!"
97
- end
109
+ def fact(expr)
110
+ "(#{expr})!"
111
+ end
98
112
 
99
- def b1(expr)
100
- "(#{expr})"
101
- end
113
+ def b1(expr)
114
+ "(#{expr})"
115
+ end
102
116
 
103
- def b2(expr)
104
- "{#{expr}}"
105
- end
117
+ def b2(expr)
118
+ "{#{expr}}"
119
+ end
106
120
 
107
- def b3(expr)
108
- "[#{expr}]"
109
- end
121
+ def b3(expr)
122
+ "[#{expr}]"
123
+ end
110
124
 
111
- [:sin, :cos, :tan].each do |func|
112
- define_method(func) do |expr|
113
- out_of_calc do
125
+ [:sin, :cos, :tan].each do |func|
126
+ define_method(func) do |expr|
114
127
  "\\#{func}(#{expr})"
115
128
  end
116
129
  end
117
- end
118
130
 
119
- def [](expr)
120
- "aaa[#{expr}]"
121
- end
131
+ def [](expr)
132
+ "[#{expr}]"
133
+ end
122
134
 
123
- def method_missing(name, *args)
124
- out_of_calc do
125
- ret = name.to_s
135
+ def method_missing(name, *args)
136
+ @gen.out_of_generate do
137
+ ret = name.to_s
126
138
 
127
- if args.size != 0
128
- ret << "(#{args.join(', ')})"
129
- end
139
+ if args.size != 0
140
+ ret << "(#{args.join(', ')})"
141
+ end
130
142
 
131
- ret.instance_eval do
132
- def [](index)
133
- "#{self}_{#{index}}"
143
+ ret.instance_eval do
144
+ def [](index)
145
+ "#{self}_{#{index}}"
146
+ end
134
147
  end
135
- end
136
148
 
137
- ret
149
+ ret
150
+ end
138
151
  end
139
152
  end
153
+
154
+ def generate(&block)
155
+ begin_generate
156
+
157
+ context = Context.new(self)
158
+ ret = context.instance_eval(&block).to_s
159
+
160
+ finish_generate
161
+
162
+ ret
163
+ end
140
164
  end
141
165
 
142
166
  def generate(&block)
143
- begin_generate
144
-
145
- context = Context.new
146
- ret = context.instance_eval(&block).to_s
147
-
148
- end_generate
149
-
150
- "$$" + ret + "$$"
167
+ gen = Generator.new
168
+
169
+ "$$#{gen.generate(&block)}$$"
151
170
  end
152
171
  end
@@ -1,3 +1,3 @@
1
1
  module Ratex
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ratex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - long-long-float
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-11-15 00:00:00.000000000 Z
12
+ date: 2013-12-12 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bundler
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ~>
18
20
  - !ruby/object:Gem::Version
@@ -20,6 +22,7 @@ dependencies:
20
22
  type: :development
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - ~>
25
28
  - !ruby/object:Gem::Version
@@ -27,15 +30,17 @@ dependencies:
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: rake
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - '>='
35
+ - - ! '>='
32
36
  - !ruby/object:Gem::Version
33
37
  version: '0'
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - '>='
43
+ - - ! '>='
39
44
  - !ruby/object:Gem::Version
40
45
  version: '0'
41
46
  description: You can write TeX in Ruby!
@@ -60,25 +65,26 @@ files:
60
65
  homepage: ''
61
66
  licenses:
62
67
  - MIT
63
- metadata: {}
64
68
  post_install_message:
65
69
  rdoc_options: []
66
70
  require_paths:
67
71
  - lib
68
72
  required_ruby_version: !ruby/object:Gem::Requirement
73
+ none: false
69
74
  requirements:
70
- - - '>='
75
+ - - ! '>='
71
76
  - !ruby/object:Gem::Version
72
77
  version: '0'
73
78
  required_rubygems_version: !ruby/object:Gem::Requirement
79
+ none: false
74
80
  requirements:
75
- - - '>='
81
+ - - ! '>='
76
82
  - !ruby/object:Gem::Version
77
83
  version: '0'
78
84
  requirements: []
79
85
  rubyforge_project:
80
- rubygems_version: 2.0.3
86
+ rubygems_version: 1.8.23
81
87
  signing_key:
82
- specification_version: 4
88
+ specification_version: 3
83
89
  summary: ''
84
90
  test_files: []
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 7f95dd94612880110256b762bb42dbf5a51b3f45
4
- data.tar.gz: 6aadb8e921f6775fd557c0312b8c97573708e547
5
- SHA512:
6
- metadata.gz: 02d5d3776f78729ce8a7cb205ce8459fa66c1ccbf0ece13666876d1018cae591e11f9adf2226e5dde4b10b5850c93c5db9b9fbf35b355181a161a2e4d7568240
7
- data.tar.gz: 47f82ee3af14db551d28990defd11a242b6e038ee6552c09bf35f419ca0ddfc7459c3554cfb8885472c15b9b1163e362fe740e10e0d582ea05c854fcbdee7c8b