https://github.com/p-ranav/box
box is a text-based visual programming language inspired by Unreal Engine Blueprint function graphs.
https://github.com/p-ranav/box
blueprints blueprints-visual-scripting box drawing esoteric-language esoteric-programming-language flow-based-programming function-graphs functions node-graph python3 transpiler unreal-engine visual-programming-language
Last synced: 4 months ago
JSON representation
box is a text-based visual programming language inspired by Unreal Engine Blueprint function graphs.
- Host: GitHub
- URL: https://github.com/p-ranav/box
- Owner: p-ranav
- Created: 2021-06-15T01:23:52.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2021-08-08T12:22:27.000Z (over 3 years ago)
- Last Synced: 2024-11-23T08:22:18.811Z (5 months ago)
- Topics: blueprints, blueprints-visual-scripting, box, drawing, esoteric-language, esoteric-programming-language, flow-based-programming, function-graphs, functions, node-graph, python3, transpiler, unreal-engine, visual-programming-language
- Language: Python
- Homepage:
- Size: 322 KB
- Stars: 121
- Watchers: 5
- Forks: 4
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
![]()
`Box` is a text-based visual programming language inspired by Unreal Engine blueprint function graphs.
```console
$ cat factorial.box┌─ƒ(Factorial)───┐ ┌─[Branch]─────┐ ┌─[Set]─┐
│ ►┼─────────────────────┼► True ►┼───────────────────────┼► ►┼─────────┐ ┌─[For Loop]───────────┐ ┌───────┐
│ n ○┼──┐ ┌──┼○ False ►┼──┐ ┌──────────┐ ┌───┼○ │ └─────────┼► Loop body ►┼───────────────────┼► │
└────────────────┘ │ ┌────────┐ │ │ │ │ │ result ○┼──┘ ┌─┼○ │ │ │ ┌──────────┐ ┌────┼○ *= │
┌────┐ └────┼○ >= ○┼─┘ └──────────────┘ │ └──────────┘ │ └───────┘ ┌────┐ │ │ │ result ○┼─┘ ┌─┼○ │
│ 1 ○┼───────┼○ │ │ ┌────┐ │ │ 1 ○┼────┼○ start │ └──────────┘ │ └───────┘
└────┘ └────────┘ │ │ 1 ○┼─────┘ └────┘ │ │ │
│ └────┘ │ index ○┼─────────────────┘
│ ┌────┐ │ │
│ │ n ○┼─┐ ┌───────┐ │ │
│ └────┘ └──┼○ + │ │ │
│ ┌────┐ ┌──┼○ ○┼─────┼○ end │
│ │ 1 ○┼─┘ └───────┘ │ │
│ └────┘ │ │
│ ┌────┐ │ │
│ ┌─[Return]─┐ │ 1 ○┼────┼○ step │
┌────┐ └───┼► │ └────┘ │ Completed ►┼────┐
│ 1 ○┼─────┼○ │ └──────────────────────┘ │ ┌─[Return]─┐
└────┘ └──────────┘ ┌─────────┐ └──┼► │
│ result ○┼──────┼○ │
└─────────┘ └──────────┘$ box factorial.box -e 5
120$ box factorial.box -o factorial.py
$ cat factorial.py
def Factorial(n):
if (n >= 1):
result = 1
for index_8b6ee4f2 in range(1, (n + 1), 1):
result *= index_8b6ee4f2
return result
else:
return 1
```### Getting Started
Install the box interpreter with `pip`
```console
pip3 install boxlang
```Now open your text editor and start drawing your program! Check out existing samples [here](https://github.com/p-ranav/box/tree/main/samples).
### Anatomy of a Box
A Box has 2 types of ports: control flow ports (`─►┼─`) and data flow ports (`─○┼─`). These ports can additionally be classified as input or output ports. All ports to the left side of a box are input ports and all ports on the right side of the box are output ports.
Below, you can see a `[For Loop]` box which is a special type of box that the interpreter can parse - It has 1 input control flow port, 3 input data flow ports (start, end, and step), 2 output control flow ports (the loop body and completed control flows), and 1 output data flow port (the index)

### Function Graphs
`Box` programs are function graphs. Functions have a single entry point designated by a node with the name of the Function containing a single output control flow port.
Here's a simple hello world example. This example declares a `Greet()` function that prints the string "Hello, World!" to the console. It calls the built-in print function.

Execute the above program with the box interpreter like so:
```console
$ box samples/hello_world.box -e
Hello,World!
```### Features
* ✅ Function declarations
* ✅ Defining constants and variables
* ✅ Operators - Unary, binary, and assignment operators
* ✅ `[Set]` - set the value of variables
* ✅ Function calls - Call Python built-in functions
* ✅ `[Branch]` - if-else box
* ✅ `[For Loop]` - Python-style for loop with (start,end,step)
* ✅ `[While Loop]` - Python-style while loop
* ✅ `[For Each]` for iterables
* ✅ `[Break]` and `[Continue]` boxes
* ✅ `[Return]` box to return values from functions### Gotchas
* The interpreter will likely fail if you have tabs in your file - replace all tabs with the appropriate number of spaces
* There are a number of UNICODE character you'll need for this to work - Just look through the samples and COPY-PASTE (no, seriously)## Contributing
Contributions are welcome, have a look at the [CONTRIBUTING.md](CONTRIBUTING.md) document for more information.## License
The project is available under the [MIT](https://opensource.org/licenses/MIT) license.