Awesome Open Source
Awesome Open Source

# 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.

Table of content

# 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โ
โโโโโโ
``````

# Command line interface

Diagon is also usable as a command line tool. For instance:

```echo ""1+1/2 + sum(i,0,10) = 112/2" | diagon Math
10
___
1   โฒ       112
1 + โ + โฑ   i = โโโ
2   โพโพโพ      2
0
```

To use it, you can either compile it from source or use the precompiled binaries published on the snapstore:

```sudo snap install diagon
```

# Thanks

This project has been possible thanks to these great projects

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
c-plus-plus (18,460)ย
cpp (1,311)ย
markdown (857)ย
parser (513)ย
cmake (404)ย
webassembly (350)ย
webapp (267)ย
unicode (126)ย
ascii (88)ย
ascii-art (76)ย
uml (43)ย
lexer (43)ย
antlr (28)ย
generators (19)ย
webapplication (16)ย