ratex 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.
@@ -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