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.
- data/examples/example.rb +1 -1
- data/lib/ratex.rb +112 -93
- data/lib/ratex/version.rb +1 -1
- metadata +15 -9
- checksums.yaml +0 -7
data/examples/example.rb
CHANGED
@@ -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)) }
|
data/lib/ratex.rb
CHANGED
@@ -3,150 +3,169 @@ require "ratex/version"
|
|
3
3
|
module Ratex
|
4
4
|
extend self
|
5
5
|
|
6
|
-
|
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
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
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
|
-
|
23
|
-
|
24
|
-
|
27
|
+
[:+, :-, :<, :>].each do |ope|
|
28
|
+
define_method(ope) do |other|
|
29
|
+
"#{self} #{ope} #{other}"
|
30
|
+
end
|
25
31
|
end
|
26
|
-
end
|
27
32
|
|
28
|
-
|
29
|
-
|
30
|
-
|
33
|
+
def **(other)
|
34
|
+
"#{self} ^{#{other}}"
|
35
|
+
end
|
31
36
|
|
32
|
-
|
33
|
-
|
34
|
-
|
37
|
+
def *(other)
|
38
|
+
"#{self} #{other}"
|
39
|
+
end
|
35
40
|
|
36
|
-
|
37
|
-
|
38
|
-
|
41
|
+
def /(other)
|
42
|
+
"\\frac{#{self}}{#{other}}"
|
43
|
+
end
|
39
44
|
|
40
|
-
|
41
|
-
|
42
|
-
|
45
|
+
def +@
|
46
|
+
"+#{self}"
|
47
|
+
end
|
43
48
|
|
44
|
-
|
45
|
-
|
46
|
-
|
49
|
+
def -@
|
50
|
+
"-#{self}"
|
51
|
+
end
|
47
52
|
|
48
|
-
|
49
|
-
|
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
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
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
|
-
|
76
|
+
@generate_ready = false
|
77
|
+
end
|
69
78
|
|
70
|
-
def
|
71
|
-
|
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
|
-
|
78
|
-
|
79
|
-
|
86
|
+
class Context
|
87
|
+
|
88
|
+
def initialize(gen)
|
89
|
+
@gen = gen
|
80
90
|
end
|
81
|
-
end
|
82
91
|
|
83
|
-
|
84
|
-
|
85
|
-
|
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
|
-
|
90
|
-
|
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
|
-
|
96
|
-
|
97
|
-
|
109
|
+
def fact(expr)
|
110
|
+
"(#{expr})!"
|
111
|
+
end
|
98
112
|
|
99
|
-
|
100
|
-
|
101
|
-
|
113
|
+
def b1(expr)
|
114
|
+
"(#{expr})"
|
115
|
+
end
|
102
116
|
|
103
|
-
|
104
|
-
|
105
|
-
|
117
|
+
def b2(expr)
|
118
|
+
"{#{expr}}"
|
119
|
+
end
|
106
120
|
|
107
|
-
|
108
|
-
|
109
|
-
|
121
|
+
def b3(expr)
|
122
|
+
"[#{expr}]"
|
123
|
+
end
|
110
124
|
|
111
|
-
|
112
|
-
|
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
|
-
|
120
|
-
|
121
|
-
|
131
|
+
def [](expr)
|
132
|
+
"[#{expr}]"
|
133
|
+
end
|
122
134
|
|
123
|
-
|
124
|
-
|
125
|
-
|
135
|
+
def method_missing(name, *args)
|
136
|
+
@gen.out_of_generate do
|
137
|
+
ret = name.to_s
|
126
138
|
|
127
|
-
|
128
|
-
|
129
|
-
|
139
|
+
if args.size != 0
|
140
|
+
ret << "(#{args.join(', ')})"
|
141
|
+
end
|
130
142
|
|
131
|
-
|
132
|
-
|
133
|
-
|
143
|
+
ret.instance_eval do
|
144
|
+
def [](index)
|
145
|
+
"#{self}_{#{index}}"
|
146
|
+
end
|
134
147
|
end
|
135
|
-
end
|
136
148
|
|
137
|
-
|
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
|
-
|
144
|
-
|
145
|
-
|
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
|
data/lib/ratex/version.rb
CHANGED
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.
|
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-
|
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:
|
86
|
+
rubygems_version: 1.8.23
|
81
87
|
signing_key:
|
82
|
-
specification_version:
|
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
|