GraphParser a parser which translate a simple scripting language in SC for GeoGraphy
Inherits from: Object
The GraphParser is a parser for the GeoGraphy scripting grammar, Ixno. The basic idea was to have a control over GeoGraphy in the middle between code and buttons & sliders for live control. So the grammar has been conceived to be fast to type in a text field then to be evaluated and translated into the opportune SC commands.
Even if its origin lies in RT control from GUI element, it can be used with profit in "code" programming, by generating the opportune command strings. Command string are much more compressed than code, indeed.
See also: GeoGraphyGrammar
About vertex positioning
Actually when creating a new vertex with Ixno you get a random position, so that you have only to worry about the label. The idea is that while working in RT you're mainly interested in topology and you use the labels as a meaningful way to cope with vertices. The underlying positioning mechanism is based on the Layout class, which should be responsible for the position algorithms, so that you could be able to choose a specific algorithm for automatic x,y assignment. Now Layout implement only a uniform distribution in the 1200x800 space.
Creation / Class Methods
*new (graph, runner)
GraphParser.
graph - a graph. Default value is nil. .
runner - a runner. Default value is nil..
g = Graph.new ;
r = Runner.new(g).gui ;
p = GraphParser(g, r).gui ; // the gui method
Accessing Instance and Class Variables
iopath_(arg1)
iopath
A path where to save file. It is set while opening/saving a file the first time.
graph
The graph.
runner
The runner.
Functionality
The useful methods are substantially two.
parse (aString)
Parse the string and translate it into SC code.
aString - a string containing valid Ixno commands. Default value is nil. Other information.
(
var actual, previous ;
g = Graph.new ;
r = Runner.new(g) ;
q = GraphParser(g, r) ; // no GUI here
Squarer(r) ;
actual = "q"++(39).asString ;
q.parse("e+"+actual+1.asString+actual) ;
Routine.new({
var j, k ;
30.do({ arg i ;
j = i*[0.5, 1.5, 2.5].choose ; // n/4 tone scale
k = i+1 ;
previous = actual ;
actual = "q"++(40+j).asString ;
q.parse("e+"+actual+(1/k).asString+actual) ;
q.parse("e+"+actual+(1/k).asString+previous) ;
q.parse("e+"+previous+(1/k).asString+actual) ;
q.parse("p+"+actual) ;
rrand(0.2, 1.0).wait ;
}) ;
}).play(AppClock);
)
// to see the topology
p = Painter.new(g, r) ;
r.gui(step:27)
gui (step)
Create a GUI which can be used as a RT controller of different aspects.
The method also resizes the post window, renames it with a homage to Nim Chimpsky, changes the colors. It put together some functionalities of GeoDocument and GeoClock.
The top row contains:
server window: mirrors the server window:
chronometer: records the total timing since the GraphParser has been instantiated
tempo slider: allowing tempo setting (0-1000). If you want more use "t+" and the tempo as commands
At the bottom there is the
tex window: where you cain enter commands bith in SC and in iXno. Ctrl+P parse current line as iXno, Ctrl+Return evaluates current line as normal SC.
step - a multiplier fo GUI construction. Default value is 18. Better leave it so.
g = Graph.new ;
r = Runner.new(g).gui ;
p = GraphParser(g, r).gui(10) ; // smaller step
Examples
See before