# GoAT: Go ASCII Tool This is a Go implementation of [markdeep.mini.js]'s ASCII diagram generation. ## Usage ```bash $ go get github.com/bep/goat $ goat my-cool-diagram.txt > my-cool-diagram.svg ``` ## TODO - Dashed lines signaled by `:` or `=`. - Bold lines signaled by ???. ## Examples Here are some SVGs and the ASCII input they were generated from: ### Trees ![Trees Example](https://cdn.rawgit.com/blampe/goat/master/examples/trees.svg) ``` . . . .--- 1 .-- 1 / 1 / \ | | .---+ .-+ + / \ .---+---. .--+--. | '--- 2 | '-- 2 / \ 2 + + | | | | ---+ ---+ + / \ / \ .-+-. .-+-. .+. .+. | .--- 3 | .-- 3 \ / 3 / \ / \ | | | | | | | | '---+ '-+ + 1 2 3 4 1 2 3 4 1 2 3 4 '--- 4 '-- 4 \ 4 ``` ### Overlaps ![Overlaps Example](https://cdn.rawgit.com/blampe/goat/master/examples/overlaps.svg) ``` .-. .-. .-. .-. .-. .-. | | | | | | | | | | | | .---------. .--+---+--. .--+---+--. .--| |--. .--+ +--. .------|--. | | | | | | | | | | | | | | | | | | '---------' '--+---+--' '--+---+--' '--| |--' '--+ +--' '--|------' | | | | | | | | | | | | '-' '-' '-' '-' '-' '-' ``` ### Line Decorations ![Line Decorations Example](https://cdn.rawgit.com/blampe/goat/master/examples/line-decorations.svg) ``` ________ o * * .--------------. *---+--. | | o o | ^ \ / | .----------. | | | '--* -+- | | v / \ / | | <------. | | | '-----> .---(---' --->*<--- / .+->*<--o----' | | | | | <--' ^ ^ | | | | | ^ \ | '--------' | | \/ *-----' o |<----->| '-----' |__| v '------------' | /\ *---------------' ``` ### Line Ends ![Line Ends Example](https://cdn.rawgit.com/blampe/goat/master/examples/line-ends.svg) ``` o--o *--o / / * o o o o o * * * * o o o o * * * * o o o o * * * * o--* *--* v v ^ ^ | | | | | | | | \ \ \ \ \ \ \ \ / / / / / / / / o--> *--> * o / / o * v ' o * v ' o * v \ o * v \ o * v / o * v / o--- *--- ^ ^ ^ ^ . . . . ^ ^ ^ ^ \ \ \ \ ^ ^ ^ ^ / / / / | | * o \ \ * o | | | | | | | | \ \ \ \ \ \ \ \ / / / / / / / / v v ^ ^ v v ^ ^ o * v ' o * v ' o * v \ o * v \ o * v / o * v / * o | | * o \ \ <--o <--* <--> <--- ---o ---* ---> ---- *<-- o<-- -->o -->* ``` ### Dot Grids ![Dot Grids Example](https://cdn.rawgit.com/blampe/goat/master/examples/dot-grids.svg) ``` o o o o o * * * * * * * o o * o o o * * * o o o · * · · · · · · o o o o o * * * * * o o o o * o o o o * * * * * o * * · * * · · · · · · o o o o o * * * * * o * o o o o o o o o * * * * * o o o o o · o · · o · · * * · o o o o o * * * * * o * o o o o o o o * * * * o * o o · · · · o · · * · o o o o o * * * * * * * * * o o o o * * * o * o · · · · · · · * ``` ### Large Nodes ![Large Node Example](https://cdn.rawgit.com/blampe/goat/master/examples/large-nodes.svg) ``` .---. .-. .-. .-. .-. | A +----->| 1 +<---->| 2 |<----+ 4 +------------------. | 8 | '---' '-' '+' '-' | '-' | ^ | ^ v | v | .-. .-+-. .-. .-+-. .-. .+. .---. | 3 +---->| B |<----->| 5 +---->| C +---->| 6 +---->| 7 |<---->| D | '-' '---' '-' '---' '-' '-' '---' ``` ### Small Grids ![Small Grids Example](https://cdn.rawgit.com/blampe/goat/master/examples/small-grids.svg) ``` ___ ___ .---+---+---+---+---. .---+---+---+---. .---. .---. ___/ \___/ \ | | | | | | / \ / \ / \ / \ / | +---+ | / \___/ \___/ +---+---+---+---+---+ +---+---+---+---+ +---+ +---+ \___/ b \___/ \ | | | b | | | \ / \a/ \b/ \ / \ | +---+ | / a \___/ \___/ +---+---+---+---+---+ +---+---+---+---+ +---+ b +---+ \___/ \___/ \ | | a | | | | / \ / \ / \ / \ / | a +---+ | \___/ \___/ '---+---+---+---+---' '---+---+---+---' '---' '---' ``` ### Big Grids ![Big Grids Example](https://cdn.rawgit.com/blampe/goat/master/examples/big-grids.svg) ``` .----. .----. / \ / \ .-----+-----+-----. + +----+ +----. | | | | .-----+-----+-----+-----+ \ / \ / \ | | | | / / / / / +----+ B +----+ + +-----+-----+-----+ +-----+-----+-----+-----+ / \ / \ / | | | | / / / / / + A +----+ +----+ | | B | | +-----+-----+-----+-----+ \ / \ / \ +-----+-----+-----+ / / A / B / / '----+ +----+ + | | | | +-----+-----+-----+-----+ \ / \ / | A | | | / / / / / '----' '----' '-----+-----+-----' '-----+-----+-----+-----+ ``` ### Complicated ![Complicated Example](https://cdn.rawgit.com/blampe/goat/master/examples/complicated.svg) ``` +-------------------+ ^ .---. | A Box |__.--.__ __.--> | .-. | | | | '--' v | * |<--- | | +-------------------+ '-' | | Round *---(-. | .-----------------. .-------. .----------. .-------. | | | | Mixed Rounded | | | / Diagonals \ | | | | | | | & Square Corners | '--. .--' / \ |---+---| '-)-' .--------. '--+------------+-' .--. | '-------+--------' | | | | / Search / | | | | '---. | '-------' | '-+------' |<---------->| | | | v Interior | ^ ' <---' '----' .-----------. ---. .--- v | .------------------. Diag line | .-------. +---. \ / . | | if (a > b) +---. .--->| | | | | Curved line \ / / \ | | obj->fcn() | \ / | '-------' |<--' + / \ | '------------------' '--' '--+--------' .--. .--. | .-. +Done?+-' .---+-----. | ^ |\ | | /| .--+ | | \ / | | | Join \|/ | | Curved | \| |/ | | \ | \ / | | +----> o --o-- '-' Vertical '--' '--' '-- '--' + .---. <--+---+-----' | /|\ | | 3 | v not:line 'quotes' .-' '---' .-. .---+--------. / A || B *bold* | ^ | | | Not a dot | <---+---<-- A dash--is not a line v | '-' '---------+--' / Nor/is this. --- ``` More examples are available [here](examples). [markdeep.mini.js]: http://casual-effects.com/markdeep/