2018-06-02 17:03:01 +02:00
|
|
|
|
# Diagon
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Diagon is an interactive interpreter. It transforms markdown-style expression
|
|
|
|
|
|
into an ascii-art representation.
|
|
|
|
|
|
|
|
|
|
|
|
It is written in C++ and use WebAssembly, HTML and CSS to make a Web
|
|
|
|
|
|
Application.
|
|
|
|
|
|
|
2018-06-02 17:09:54 +02:00
|
|
|
|
### [https://arthursonzogni.com/Diagon/](https://arthursonzogni.com/Diagon/)
|
|
|
|
|
|
|
2018-06-02 17:03:01 +02:00
|
|
|
|
**Table of content**
|
|
|
|
|
|
* [Diagon](#diagon)
|
|
|
|
|
|
* [Generators](#generators)
|
|
|
|
|
|
* [Mathematic Expression](#mathematic-expression)
|
|
|
|
|
|
* [Sequence Diagram](#sequence-diagram)
|
|
|
|
|
|
* [Tree](#tree)
|
|
|
|
|
|
* [Frame](#frame)
|
|
|
|
|
|
* [Table](#table)
|
|
|
|
|
|
* [Planar graph](#planar-graph)
|
|
|
|
|
|
* [Thanks](#thanks)
|
|
|
|
|
|
|
|
|
|
|
|
# Generators
|
|
|
|
|
|
|
|
|
|
|
|
## Mathematic Expression
|
|
|
|
|
|
|
|
|
|
|
|
input:
|
|
|
|
|
|
~~~
|
|
|
|
|
|
f(x) = 1 + x / (1 + x)
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
output (Unicode):
|
|
|
|
|
|
~~~
|
|
|
|
|
|
x
|
|
|
|
|
|
f(x) = 1 + ─────
|
|
|
|
|
|
1 + x
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
input:
|
|
|
|
|
|
~~~
|
|
|
|
|
|
sqrt(1+sqrt(1+x/2))
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
output (Unicode)
|
|
|
|
|
|
~~~
|
|
|
|
|
|
_____________
|
|
|
|
|
|
╱ _____
|
|
|
|
|
|
╱ ╱ x
|
|
|
|
|
|
╱ 1 + ╱ 1 + ─
|
|
|
|
|
|
╲╱ ╲╱ 2
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
input:
|
|
|
|
|
|
~~~
|
|
|
|
|
|
f(x) = 1 + x^2 + x^3 + x^(1+1/2)
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
output (Unicode):
|
|
|
|
|
|
~~~
|
|
|
|
|
|
⎛ 1⎞
|
|
|
|
|
|
⎜1 + ─⎟
|
|
|
|
|
|
2 3 ⎝ 2⎠
|
|
|
|
|
|
f(x) = 1 + x + x + x
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
input:
|
|
|
|
|
|
~~~
|
|
|
|
|
|
sum(i^2,i=0,n) = n^3/2+n^2/2+n/6
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
output (Unicode):
|
|
|
|
|
|
~~~
|
|
|
|
|
|
n
|
|
|
|
|
|
___ 3 2
|
|
|
|
|
|
╲ 2 n n n
|
|
|
|
|
|
╱ i = ── + ── + ─
|
|
|
|
|
|
‾‾‾ 2 2 6
|
|
|
|
|
|
i = 0
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
input:
|
|
|
|
|
|
~~~
|
|
|
|
|
|
int(x^2/2 * dx ,0,1) = 1/6
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
output (Unicode):
|
|
|
|
|
|
~~~
|
|
|
|
|
|
1
|
|
|
|
|
|
⌠ 2
|
|
|
|
|
|
⎮ x 1
|
|
|
|
|
|
⎮ ── ⋅ dx = ─
|
|
|
|
|
|
⌡ 2 6
|
|
|
|
|
|
0
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
input:
|
|
|
|
|
|
~~~
|
|
|
|
|
|
[a;b] + [c;d] = [a+c; b+d]
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
output (Unicode):
|
|
|
|
|
|
~~~
|
|
|
|
|
|
⎛a⎞ ⎛c⎞ ⎛a + c⎞
|
|
|
|
|
|
⎜ ⎟ + ⎜ ⎟ = ⎜ ⎟
|
|
|
|
|
|
⎝b⎠ ⎝d⎠ ⎝b + d⎠
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
input:
|
|
|
|
|
|
~~~
|
|
|
|
|
|
[1,2;3,4] * [x;y] = [1*x+2*y; 3*x+4*y]
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
~~~
|
|
|
|
|
|
⎛1 2⎞ ⎛x⎞ ⎛1 ⋅ x + 2 ⋅ y⎞
|
|
|
|
|
|
⎜ ⎟ ⋅ ⎜ ⎟ = ⎜ ⎟
|
|
|
|
|
|
⎝3 4⎠ ⎝y⎠ ⎝3 ⋅ x + 4 ⋅ y⎠
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Sequence Diagram
|
|
|
|
|
|
|
|
|
|
|
|
input
|
|
|
|
|
|
~~~
|
|
|
|
|
|
Alice -> Bob: Hello Bob!
|
|
|
|
|
|
Alice <- Bob: Hello Alice!
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
Output (Unicode)
|
|
|
|
|
|
~~~
|
|
|
|
|
|
┌─────┐ ┌───┐
|
|
|
|
|
|
│Alice│ │Bob│
|
|
|
|
|
|
└──┬──┘ └─┬─┘
|
|
|
|
|
|
│ │
|
|
|
|
|
|
│ Hello Bob! │
|
|
|
|
|
|
│───────────>│
|
|
|
|
|
|
│ │
|
|
|
|
|
|
│Hello Alice!│
|
|
|
|
|
|
│<───────────│
|
|
|
|
|
|
┌──┴──┐ ┌─┴─┐
|
|
|
|
|
|
│Alice│ │Bob│
|
|
|
|
|
|
└─────┘ └───┘
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
Input
|
|
|
|
|
|
~~~
|
|
|
|
|
|
Renderer -> Browser: BeginNavigation()
|
|
|
|
|
|
Browser -> Network: URLRequest()
|
|
|
|
|
|
Browser <- Network: URLResponse()
|
|
|
|
|
|
Renderer <- Browser: CommitNavigation()
|
|
|
|
|
|
Renderer -> Browser: DidCommitNavigation()
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
Output (Unicode)
|
|
|
|
|
|
~~~
|
|
|
|
|
|
┌────────┐ ┌───────┐ ┌───────┐
|
|
|
|
|
|
│Renderer│ │Browser│ │Network│
|
|
|
|
|
|
└───┬────┘ └───┬───┘ └───┬───┘
|
|
|
|
|
|
│ │ │
|
|
|
|
|
|
│ BeginNavigation() │ │
|
|
|
|
|
|
│────────────────────>│ │
|
|
|
|
|
|
│ │ │
|
|
|
|
|
|
│ │URLRequest() │
|
|
|
|
|
|
│ │────────────>│
|
|
|
|
|
|
│ │ │
|
|
|
|
|
|
│ │URLResponse()│
|
|
|
|
|
|
│ │<────────────│
|
|
|
|
|
|
│ │ │
|
|
|
|
|
|
│ CommitNavigation() │ │
|
|
|
|
|
|
│<────────────────────│ │
|
|
|
|
|
|
│ │ │
|
|
|
|
|
|
│DidCommitNavigation()│ │
|
|
|
|
|
|
│────────────────────>│ │
|
|
|
|
|
|
┌───┴────┐ ┌───┴───┐ ┌───┴───┐
|
|
|
|
|
|
│Renderer│ │Browser│ │Network│
|
|
|
|
|
|
└────────┘ └───────┘ └───────┘
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Input
|
|
|
|
|
|
~~~
|
|
|
|
|
|
1) Renderer -> Browser: Message 1
|
|
|
|
|
|
2) Renderer <- Browser: Message 2
|
|
|
|
|
|
|
|
|
|
|
|
Renderer: 1<2
|
|
|
|
|
|
Browser: 2<1
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
Output (Unicode)
|
|
|
|
|
|
~~~
|
|
|
|
|
|
┌────────┐┌───────┐
|
|
|
|
|
|
│Renderer││Browser│
|
|
|
|
|
|
└───┬────┘└───┬───┘
|
|
|
|
|
|
│ │
|
|
|
|
|
|
│──┐ │
|
|
|
|
|
|
│Message 2│
|
|
|
|
|
|
│<────────│
|
|
|
|
|
|
│ │ │
|
|
|
|
|
|
│Message 1│
|
|
|
|
|
|
│ └─────>│
|
|
|
|
|
|
┌───┴────┐┌───┴───┐
|
|
|
|
|
|
│Renderer││Browser│
|
|
|
|
|
|
└────────┘└───────┘
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
## Tree
|
|
|
|
|
|
|
|
|
|
|
|
Input
|
|
|
|
|
|
~~~
|
|
|
|
|
|
Linux
|
|
|
|
|
|
Android
|
|
|
|
|
|
Debian
|
|
|
|
|
|
Ubuntu
|
|
|
|
|
|
Lubuntu
|
|
|
|
|
|
Kubuntu
|
|
|
|
|
|
Xubuntu
|
|
|
|
|
|
Xubuntu
|
|
|
|
|
|
Mint
|
|
|
|
|
|
Centos
|
|
|
|
|
|
Fedora
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
Output (Style Unicode 1)
|
|
|
|
|
|
~~~
|
|
|
|
|
|
Linux
|
|
|
|
|
|
├─Android
|
|
|
|
|
|
├─Debian
|
|
|
|
|
|
│ ├─Ubuntu
|
|
|
|
|
|
│ │ ├─Lubuntu
|
|
|
|
|
|
│ │ ├─Kubuntu
|
|
|
|
|
|
│ │ ├─Xubuntu
|
|
|
|
|
|
│ │ └─Xubuntu
|
|
|
|
|
|
│ └─Mint
|
|
|
|
|
|
├─Centos
|
|
|
|
|
|
└─Fedora
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
Output (Style ASCII 2)
|
|
|
|
|
|
~~~
|
|
|
|
|
|
Linux
|
|
|
|
|
|
+--Android
|
|
|
|
|
|
+--Debian
|
|
|
|
|
|
| +--Ubuntu
|
|
|
|
|
|
| | +--Lubuntu
|
|
|
|
|
|
| | +--Kubuntu
|
|
|
|
|
|
| | +--Xubuntu
|
|
|
|
|
|
| | `--Xubuntu
|
|
|
|
|
|
| `--Mint
|
|
|
|
|
|
+--Centos
|
|
|
|
|
|
`--Fedora
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
Output (Style Unicode right top)
|
|
|
|
|
|
~~~
|
|
|
|
|
|
───Linux─┬─Android
|
|
|
|
|
|
├─Debian─┬─Ubuntu─┬─Lubuntu
|
|
|
|
|
|
│ │ ├─Kubuntu
|
|
|
|
|
|
│ │ ├─Xubuntu
|
|
|
|
|
|
│ │ └─Xubuntu
|
|
|
|
|
|
│ └─Mint
|
|
|
|
|
|
├─Centos
|
|
|
|
|
|
└─Fedora
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
Output (Style Unicode right center)
|
|
|
|
|
|
~~~
|
|
|
|
|
|
┌─Android
|
|
|
|
|
|
│ ┌─Lubuntu
|
|
|
|
|
|
│ ├─Kubuntu
|
|
|
|
|
|
├─Debian─┬─Ubuntu─┼─Xubuntu
|
|
|
|
|
|
───Linux─┤ │ └─Xubuntu
|
|
|
|
|
|
│ └─Mint
|
|
|
|
|
|
├─Centos
|
|
|
|
|
|
└─Fedora
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Frame
|
|
|
|
|
|
|
|
|
|
|
|
Input
|
|
|
|
|
|
~~~
|
|
|
|
|
|
#include <iostream>
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
|
|
int main()
|
|
|
|
|
|
{
|
|
|
|
|
|
cout << "Hello, World!";
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
Output
|
|
|
|
|
|
~~~
|
|
|
|
|
|
┌─┬────────────────────────────┐
|
|
|
|
|
|
│1│#include <iostream> │
|
|
|
|
|
|
│2│using namespace std; │
|
|
|
|
|
|
│3│ │
|
|
|
|
|
|
│4│int main() │
|
|
|
|
|
|
│5│{ │
|
|
|
|
|
|
│6│ cout << "Hello, World!";│
|
|
|
|
|
|
│7│ return 0; │
|
|
|
|
|
|
│8│} │
|
|
|
|
|
|
└─┴────────────────────────────┘
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
## Table
|
|
|
|
|
|
|
|
|
|
|
|
Input
|
|
|
|
|
|
~~~
|
|
|
|
|
|
Column 1,Column 2,Column 3
|
|
|
|
|
|
C++,Web,Assembly
|
|
|
|
|
|
Javascript,CSS,HTML
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
Output (Style Unicode)
|
|
|
|
|
|
~~~
|
|
|
|
|
|
┌──────────┬────────┬────────┐
|
|
|
|
|
|
│Column 1 │Column 2│Column 3│
|
|
|
|
|
|
├──────────┼────────┼────────┤
|
|
|
|
|
|
│C++ │Web │Assembly│
|
|
|
|
|
|
├──────────┼────────┼────────┤
|
|
|
|
|
|
│Javascript│CSS │HTML │
|
|
|
|
|
|
└──────────┴────────┴────────┘
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
## Planar graph
|
|
|
|
|
|
|
|
|
|
|
|
Input
|
|
|
|
|
|
~~~
|
|
|
|
|
|
if -> "then A" -> end
|
|
|
|
|
|
if -> "then B" -> end
|
|
|
|
|
|
end -> loop -> if
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
|
|
Output (Unicode)
|
|
|
|
|
|
~~~
|
|
|
|
|
|
┌──────────┐
|
|
|
|
|
|
│ if │
|
|
|
|
|
|
└△─┬──────┬┘
|
|
|
|
|
|
│ │ ┌▽─────┐
|
|
|
|
|
|
│ │ │then A│
|
|
|
|
|
|
│ │ └┬─────┘
|
|
|
|
|
|
│┌▽─────┐│
|
|
|
|
|
|
││then B││
|
|
|
|
|
|
│└┬─────┘│
|
|
|
|
|
|
│┌▽──────▽─┐
|
|
|
|
|
|
││ end │
|
|
|
|
|
|
│└┬────────┘
|
|
|
|
|
|
┌┴─▽─┐
|
|
|
|
|
|
│loop│
|
|
|
|
|
|
└────┘
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
2019-09-07 23:05:23 +02:00
|
|
|
|
#### Universal Linux package:
|
|
|
|
|
|
[](https://snapcraft.io/diagon)
|
|
|
|
|
|
[](https://build.snapcraft.io/user/ArthurSonzogni/Diagon)
|
|
|
|
|
|
[](https://snapcraft.io/diagon)
|
|
|
|
|
|
~~~bash
|
|
|
|
|
|
sudo snap install diagon
|
|
|
|
|
|
~~~
|
|
|
|
|
|
|
2018-06-02 17:03:01 +02:00
|
|
|
|
# Thanks
|
|
|
|
|
|
|
2018-06-02 17:19:13 +02:00
|
|
|
|
This project has been possible thanks to these great projects
|
2018-06-02 17:03:01 +02:00
|
|
|
|
* [ANTLR](http://www.antlr.org/)
|
2018-06-02 17:19:13 +02:00
|
|
|
|
* [Boost-graph](https://www.boost.org/doc/libs/1_66_0/libs/graph/doc/)
|
2018-06-02 17:03:01 +02:00
|
|
|
|
* [CMake](https://cmake.org/)
|
|
|
|
|
|
* [Emscripten](https://github.com/kripken/emscripten)
|
|
|
|
|
|
* [Git](https://git-scm.com/)
|
2018-06-02 17:19:13 +02:00
|
|
|
|
* [LLVM](https://llvm.org/)
|
2018-06-02 17:03:01 +02:00
|
|
|
|
* [NeoVim](https://neovim.io/)
|
|
|
|
|
|
* [PlantUML](http://plantuml.com/)
|
|
|
|
|
|
* [WebAssembly](https://webassembly.org/)
|
|
|
|
|
|
|
|
|
|
|
|
|