termular 0.1.2 → 0.1.4
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/lib/termular/graph.rb +41 -0
- data/lib/termular/parser.rb +34 -7
- data/lib/termular/ui.rb +6 -0
- metadata +6 -6
data/lib/termular/graph.rb
CHANGED
@@ -126,6 +126,26 @@ module Termular
|
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
|
+
class ImplicitCartesian < Graph
|
130
|
+
def render
|
131
|
+
@needs_redraw = false
|
132
|
+
Console.buffered_print do |buff|
|
133
|
+
buff << render_axes
|
134
|
+
ctx = Context.new Context.global
|
135
|
+
ctx["time"] = Time.now.to_f - @start_time
|
136
|
+
buff << Console.color(:green)
|
137
|
+
1.upto(Console.rows - 1) do |sy|
|
138
|
+
1.upto(Console.cols) do |sx|
|
139
|
+
ctx["x"], ctx["y"] = screen_to_point sx, sy
|
140
|
+
if expression.eval ctx
|
141
|
+
buff << Console.move(sx, Console.rows - sy) << "+"
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
129
149
|
class Polar < Graph
|
130
150
|
def render
|
131
151
|
@needs_redraw = false
|
@@ -150,5 +170,26 @@ module Termular
|
|
150
170
|
end
|
151
171
|
end
|
152
172
|
end
|
173
|
+
|
174
|
+
class ImplicitPolar < Graph
|
175
|
+
def render
|
176
|
+
@needs_redraw = false
|
177
|
+
Console.buffered_print do |buff|
|
178
|
+
buff << render_axes
|
179
|
+
ctx = Context.new Context.global
|
180
|
+
ctx["time"] = Time.now.to_f - @start_time
|
181
|
+
buff << Console.color(:green)
|
182
|
+
1.upto(Console.rows - 1) do |sy|
|
183
|
+
1.upto(Console.cols) do |sx|
|
184
|
+
x, y = screen_to_point sx, sy
|
185
|
+
ctx["r"], ctx["t"] = Math.sqrt(x**2 + y**2), Math.atan2(y, x)
|
186
|
+
if expression.eval ctx
|
187
|
+
buff << Console.move(sx, Console.rows - sy) << "+"
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
153
194
|
end
|
154
195
|
end
|
data/lib/termular/parser.rb
CHANGED
@@ -12,11 +12,15 @@ module Termular
|
|
12
12
|
attr_accessor :left, :right
|
13
13
|
end
|
14
14
|
|
15
|
-
class Add < Binary;
|
16
|
-
class Subtract < Binary;
|
17
|
-
class Multiply < Binary;
|
18
|
-
class Divide < Binary;
|
19
|
-
class Power < Binary;
|
15
|
+
class Add < Binary; def eval(ctx) left.eval(ctx) + right.eval(ctx) end end
|
16
|
+
class Subtract < Binary; def eval(ctx) left.eval(ctx) - right.eval(ctx) end end
|
17
|
+
class Multiply < Binary; def eval(ctx) left.eval(ctx) * right.eval(ctx) end end
|
18
|
+
class Divide < Binary; def eval(ctx) left.eval(ctx) / right.eval(ctx) end end
|
19
|
+
class Power < Binary; def eval(ctx) left.eval(ctx) ** right.eval(ctx) end end
|
20
|
+
class LessThan < Binary; def eval(ctx) left.eval(ctx) < right.eval(ctx) end end
|
21
|
+
class LessThanEqual < Binary; def eval(ctx) left.eval(ctx) <= right.eval(ctx) end end
|
22
|
+
class GreaterThan < Binary; def eval(ctx) left.eval(ctx) > right.eval(ctx) end end
|
23
|
+
class GreaterThanEqual < Binary; def eval(ctx) left.eval(ctx) >= right.eval(ctx) end end
|
20
24
|
|
21
25
|
class Negate < Base
|
22
26
|
attr_accessor :expression
|
@@ -51,10 +55,18 @@ module Termular
|
|
51
55
|
attr_accessor :expression
|
52
56
|
end
|
53
57
|
|
58
|
+
class ImplicitCartesianCommand < Base
|
59
|
+
attr_accessor :relation
|
60
|
+
end
|
61
|
+
|
54
62
|
class PolarCommand < Base
|
55
63
|
attr_accessor :expression
|
56
64
|
end
|
57
65
|
|
66
|
+
class ImplicitPolarCommand < Base
|
67
|
+
attr_accessor :relation
|
68
|
+
end
|
69
|
+
|
58
70
|
class OptionCommand < Base
|
59
71
|
attr_accessor :option, :expression
|
60
72
|
end
|
@@ -78,7 +90,11 @@ module Termular
|
|
78
90
|
[ :OPEN_BRACKET, /\[/ ],
|
79
91
|
[ :CLOSE_BRACKET, /\]/ ],
|
80
92
|
[ :COMMA, /\,/ ],
|
81
|
-
[ :COMMAND, /:([a-z][a-z0-9]*)/, ->m { m[1] } ]
|
93
|
+
[ :COMMAND, /:([a-z][a-z0-9]*)/, ->m { m[1] } ],
|
94
|
+
[ :LTE, /<=/ ],
|
95
|
+
[ :LT, /</ ],
|
96
|
+
[ :GTE, />=/ ],
|
97
|
+
[ :GT, />/ ]
|
82
98
|
].map { |a| [a[0], Regexp.new("\\A#{a[1].source}", Regexp::MULTILINE), a[2]] }
|
83
99
|
|
84
100
|
def self.lex!(original_src)
|
@@ -139,18 +155,29 @@ module Termular
|
|
139
155
|
assert_type next_token, :COMMAND
|
140
156
|
case token[1]
|
141
157
|
when "q"; AST::QuitCommand.new
|
158
|
+
when "ic"; AST::ImplicitCartesianCommand.new relation: relation
|
142
159
|
when "c"; AST::CartesianCommand.new expression: expression
|
160
|
+
when "ip"; AST::ImplicitPolarCommand.new relation: relation
|
143
161
|
when "p"; AST::PolarCommand.new expression: expression
|
144
162
|
when "opt"; option_command
|
145
163
|
end
|
146
164
|
end
|
147
165
|
|
166
|
+
def relation
|
167
|
+
left = expression
|
168
|
+
assert_type next_token, :LT, :LTE, :GT, :GTE
|
169
|
+
op = token[0]
|
170
|
+
right = expression
|
171
|
+
{ LT: AST::LessThan, LTE: AST::LessThanEqual, GT: AST::GreaterThan,
|
172
|
+
GTE: AST::GreaterThanEqual }[op].new left: left, right: right
|
173
|
+
end
|
174
|
+
|
148
175
|
def option_command
|
149
176
|
assert_type next_token, :BAREWORD
|
150
177
|
opt = token[1]
|
151
178
|
AST::OptionCommand.new option: opt, expression: expression
|
152
179
|
end
|
153
|
-
|
180
|
+
|
154
181
|
def expression
|
155
182
|
additive_expression
|
156
183
|
end
|
data/lib/termular/ui.rb
CHANGED
@@ -84,9 +84,15 @@ module Termular
|
|
84
84
|
if current_command.is_a? AST::CartesianCommand
|
85
85
|
@current_graph = Graph::Cartesian.new current_command.expression
|
86
86
|
@needs_tick = expression =~ /time/
|
87
|
+
elsif current_command.is_a? AST::ImplicitCartesianCommand
|
88
|
+
@current_graph = Graph::ImplicitCartesian.new current_command.relation
|
89
|
+
@needs_tick = expression =~ /time/
|
87
90
|
elsif current_command.is_a? AST::PolarCommand
|
88
91
|
@current_graph = Graph::Polar.new current_command.expression
|
89
92
|
@needs_tick = expression =~ /time/
|
93
|
+
elsif current_command.is_a? AST::ImplicitPolarCommand
|
94
|
+
@current_graph = Graph::ImplicitPolar.new current_command.relation
|
95
|
+
@needs_tick = expression =~ /time/
|
90
96
|
elsif current_command.is_a? AST::OptionCommand
|
91
97
|
if current_graph
|
92
98
|
current_graph.options[current_command.option] = current_command.expression.eval(Context.global)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: termular
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
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: 2012-01-
|
12
|
+
date: 2012-01-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ncurses-ruby
|
16
|
-
requirement: &
|
16
|
+
requirement: &2169471840 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2169471840
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: paint
|
27
|
-
requirement: &
|
27
|
+
requirement: &2169471380 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2169471380
|
36
36
|
description: Termular Grapher is a simple graphing program that's capable of cartesian
|
37
37
|
and polar graphs
|
38
38
|
email:
|