Brian Picciano
ec3218e2d0
Allow for traversing OpenEdges
...
Three new methods, EdgeValue, FromValue, and FromTuple, have been added
to OpenEdge in order to allow future users of the gg package to traverse
the graph.
2021-12-28 10:05:40 -07:00
Brian Picciano
c5aa582226
Improve semantics of tokens and values obtained from them.
...
Now gg.Values can carry the token used to parse them, which will be
useful later when generating errors.
2021-12-28 09:49:02 -07:00
Brian Picciano
33e59a3836
Implement Decoder
...
The decoder basically works, though there's some quirks in the design
I'll need to marinate one. For example, you can't have a tuple as an
edge value. This is probably fine?
Stringification of Graphs was added to aid in debugging the decoder, the
format it outputs is not the final one. Most likely the (future) encoder
will be used for that purpose.
The decoder is not implemented in the nicest way; it fully reads in the
LexerTokens first, and then processes. This made trying to wrap my head
around the problem a lot easier because it left fewer failure cases, but
it's not the most efficient thing to do.
Now that v0 is done it's pretty plain to see that the decoder could work
by only reading in the next N tokens that it needs at a time. But that
will be left for a future version.
2021-12-27 15:45:18 -07:00
Brian Picciano
82e74cb55f
Improvements to gg.Graph
...
An empty `Value` is now valid.
It is now possibly to change the edgeVal of an OpenEdge. It feels like
this shouldn't be necessary, but it greatly simplifies the decoding
logic to have this.
A tuple which is created with just one input edge, and with no edge
value of its own, is now automatically simplified to just that input
edge.
2021-12-27 14:22:56 -07:00
Brian Picciano
e2ffc37ddc
Don't treat newlines specially
...
For MVP newlines aren't going to be used as a syntax terminator, they're
just going to be whitespace. Otherwise the decoding logic gets way more
complicated.
2021-12-27 14:22:56 -07:00
Brian Picciano
1e30ad6959
Strip out most of the functionality of gg.Graph
...
`gg.Graph` has been reworked in its internal functionality, to more
closely match the capability of a purely stack-based implementation. The
current implementation is _very_ inefficient, however. Tests have been
deliberately left pretty sparse, as I expect the internals to continue
to change significantly.
2021-12-27 10:11:07 -07:00
Brian Picciano
e4bdeb8797
Implement lexer for new syntax
2021-12-26 14:49:43 -07:00
Brian Picciano
b1831a670f
End comments with periods
2021-12-26 14:49:22 -07:00
Brian Picciano
066d5a8319
make into a module
2021-08-26 21:27:47 -06:00
Brian Picciano
f530cb481a
rename Junction to Tuple, update syntax, rename Null to ZeroGraph
2021-08-26 21:26:24 -06:00
Brian Picciano
3f28c60ab8
Remove a bunch of old code, update the README
2021-08-26 21:25:39 -06:00
Brian Picciano
fed2c35868
back from the dead, some syntax thoughts
2020-10-05 21:17:12 -06:00
Brian Picciano
ad1e99585b
graph: refactor Graph into being an interface
2018-10-04 17:33:19 -04:00
Brian Picciano
16f2b1bbde
graph: make Edge into an interface
2018-10-04 15:24:17 -04:00
Brian Picciano
a5b3b7acd0
graph: fix TestVisitBreadth test to ensure edge is to a brand new value during a newRank action
2018-10-04 15:02:12 -04:00
Brian Picciano
0fe15409a8
graph: implement VisitBreadth/VisitDepth
2018-09-25 17:26:11 -04:00
Brian Picciano
b51935fcd1
graph: implement Join/Disjoin
2018-09-25 13:58:50 -04:00
Brian Picciano
20b2a80a3c
graph: refactor to use Node type
2018-08-21 14:46:17 -04:00
Brian Picciano
9534ff5c13
graph: don't give values to edges, that can be accomplished by a transformation layer later
2018-08-18 14:06:43 -04:00
Brian Picciano
c1bdb46623
graph: implement SubGraph and Equal
2018-08-18 13:51:38 -04:00
Brian Picciano
91c0629377
graph: add edgeIndex's to Graph to speed up EdgeValues call
2018-08-17 11:08:26 -06:00
Brian Picciano
132a50039b
graph: implemented smaller and simpler version of gg, which gg can then be built on top of
2018-08-14 16:28:11 -04:00
Brian Picciano
c277bab368
gim: move view code into its own package
2018-06-08 02:04:27 +00:00
Brian Picciano
0a6526d2c3
gim: add terminal.Buffer.DrawBufferCentered
2018-06-08 00:17:49 +00:00
Brian Picciano
0b36e4ec37
gim: make rounder a global in geo, kinda gross but simplifies a lot of things
2018-06-07 22:50:01 +00:00
Brian Picciano
ef48a2d708
gim: move line drawing code into terminal. drawing the line body is kind of busted, but whatever
2018-06-07 22:35:18 +00:00
Brian Picciano
a6d540f1fb
gim: refactor positioning and drawing code to take advantage of terminal buffers more
2018-06-07 03:25:40 +00:00
Brian Picciano
b906697151
gg: rename Walk to Iter, and implement Disjoin
2018-06-07 02:21:44 +00:00
Brian Picciano
efa7319555
gim: give terminal.LineStyle Perp and Arrow fields
2018-06-06 06:30:39 +00:00
Brian Picciano
97be10b03e
gim: modify terminal to use a buffer, which will allow for much more complex behavior later
2018-06-05 07:56:50 +00:00
Brian Picciano
018e84575f
more notes for gim
2018-06-03 04:25:32 +00:00
Brian Picciano
c16fc00bf7
notes for gim on graph drawing algo, and some TODOs
2018-06-02 08:45:03 +00:00
Brian Picciano
1dc53518af
gim: draw the text of the edge
2018-06-02 06:52:57 +00:00
Brian Picciano
65933a004d
gim: properly sort outgoing edges along the from box
2018-06-02 06:52:42 +00:00
Brian Picciano
faf41c7386
gim: make outgoing edges also be split along the rectangle
2018-06-02 06:52:24 +00:00
Brian Picciano
905b182467
gim: make incoming edges separate along the drawn rectangle edge, instead of all overlapping onto the same point
2018-06-02 06:51:53 +00:00
Brian Picciano
ed8fa31104
more notes
2018-03-03 16:15:13 +00:00
Brian Picciano
58c053782e
took notes on how compilers compile basic c programs, and how they get run via libc
2018-01-29 14:44:34 +00:00
Brian Picciano
bd650dfc08
implement json marshaling and unmarshaling (TODO needs tests)
2018-01-23 13:32:22 +00:00
Brian Picciano
e52befb7ed
refacctor gg to use Value instead of Identifier, which will make serializing more straightforward, and reduces some complexity of the code besides
2018-01-21 15:39:25 +00:00
Brian Picciano
754b75407a
integrate constraint engine into determining box positioning
2017-12-03 12:38:53 -07:00
Brian Picciano
79a171323d
implement basic constraint engine in gim, which will be used to determine positioning of vertices
2017-11-25 14:33:00 -07:00
Brian Picciano
286c2fbb35
use gg.Str instead of gim.str
2017-11-24 11:05:58 -07:00
Brian Picciano
7c7502b42f
move a bunch of code into view, which holds onto a bunch of the drawing logic and settings now
2017-11-23 12:19:32 -07:00
Brian Picciano
f68bb4d8a2
do a lot of work on gim to get it sort of rendering gg.Graphs
2017-11-19 14:39:56 -07:00
Brian Picciano
5ab1d4c7f0
implement gg.Graph.Walk
2017-11-05 09:57:57 -07:00
Brian Picciano
cae3116424
rename gg.HalfEdge to gg.OpenEdge
2017-11-05 09:11:05 -07:00
Brian Picciano
11328fa76c
drawing edges in gim, and split out some parts into their own packages
2017-11-04 15:29:15 -06:00
Brian Picciano
b4bf8f6c5a
basic box drawing and moving in gim
2017-11-02 16:45:10 -06:00
Brian Picciano
d700390b54
move gg into root, it's not really subject to the lang
2017-11-02 14:59:31 -06:00