Diazo Prints

Diazo Prints is a node-based editor for writing code, inspired by Unreal Engine's Blueprints, that can be expanded to support as many languages and their libraries as possible

It's got support for C, C#, JavaScript, PHP, Python, and Structured Text, with the ability to import custom modules.

These languages are well established to the point where I could keep working on libraries forever, so the modules aren't 100% complete, but I'll continue to update them from time to time.

Terminology

There are some things I should clear up first

Node: Refers to the entire thing

Equal (==)









Nub: Refers to the icons that connect nodes together (Unreal Engine calls them pins)

How To Use (Desktop)

Most of the common shortcuts are supported: CTRL+C to copy, CTRL+X to cut, CTRL+V to paste, DEL to delete

Adding Nodes

Add new nodes by right clicking on an empty spot to bring up the commands menu, you can then browse the available options or search for the desired node.

Connecting Nodes

Connect nodes by clicking and dragging from one nub to another

Right-side nubs can only be connected to left-side nubs, and vise-versa

To disconnect, click on the nub

If you drag out a nub to an empty area, it'll bring up the commands menu and automatically connect the new node, if it has a nub of the same type

You can adjust the zoom level in your browser, the shortcut on desktop is usually CTRL + Scroll Wheel

Panning

You can pan the view in 3 ways:

Unreal Engine Style

Hold right-click while moving the mouse to pan around

Blender Style

Hold middle-click while moving the mouse to pan around

Adobe Style

Hold space and left-click while moving the mouse to pan around

Creating Modules

There are 3 ways to make modules: Header file style (.hmodule), JSON (.json), or Base Module files (.module)

The header file format mimics how you'd define the functions in a real language, but it has limitations. Meanwhile the module files use my own custom format, but they offer more control.

JSON is the middle ground, much easier to read, while having as much control as a module file. I'll admit though it's a bit tedious to write

Header file docs | JSON file docs | Module file docs

V0.99 Changes

I was hoping this would be 1.0, but I've noticed some last minute things to fix/change.

- Fixed the 'TouchEvent is undefined' error on linux.

- Added 2 languages: C#, and Structured Text

- Added the Libraries feature. It allows you to add more modules to the current language, so existing languages can be extended, and you can choose which libraries to include. To start off I've added libraries for C, C#, and Python

- Remade the function system, so now user functions are put in the compiled language just like you would with text, though their definitions only show up when Preview All or Export All is used.

- Added 2 new node types: compact nodes, and programmable nodes with a JavaScript-style Node Language.

- Added a Node Language module, so you don't need to know JavaScript to use programmable nodes

- If compilation fails, the view will pan over to the node responsible and give it a red outline.

- The page will alert with an error when a module fails to load

- Added Set By Reference nodes to all the modules, so you can still assign to things that don't have a Set node

- All of the modules have been updated with nodes like 'Is Empty' and 'Is Not Zero' to make truthiness more intuitive

- Comments can now be added to the graph

- You can now right-click on a type in the side panel to change its colour

- Added the Make Variable option to the commands menu, that will take the context type and create a variable from it.

- The 'this' parameter on constant structs are now optional

- Changed the icon for optional nubs to a question mark

- Auto nubs that have been given a type will change back when disconnected

- Also, when auto nubs change their type, the gradient and lighting on the node will update to match

- Added support for enum-like types, which will create a drop-down menu instead of an input tag

- Structs now have propfmt and funcfmt properties, to tell the editor how properties and functions are accessed from a struct

- Properties used by the editor don't use a type to distinguish them from actual properties

- Changed the Break and New terminology to Break and Make, to make it more intuitive for people familiar with blueprints

- Added more options to the settings panel

- Fixed a bug causing 'ghost nodes' once and for all

- Custom nodes in the header format can now have keywords like static or start put beforehand

- Small UI tweaks, such as the headers being slightly smaller, nubs being organized into containers so things align better, stuff like that.

- Tons of optimization

V0.95 Changes

- The commands menu is now sorted by relevance to the search

- You can now check a nub's type by hovering over it

- Added the Make Statement node to all the modules, for functions that have a return value but can be used like a void function

- Module files can now be written in JSON, the Python module was re-written as an example

- Added features to the header format to make it more customizable

- The C and Python modules have been updated with more nodes

- Finalized the look of the commands menu

- Now works on mobile, though it's not the optimal way to use it, especially on a phone-sized screen

- Quite a few UI features are now finished, such as nubs with multiple inputs, break and make nodes, input tags as nubs

- Added a settings section to the side panel

- Fixed instances of nodes spawning at the top of the screen when they shouldn't

- The linking system is more robust, it will overwrite a connection when a nub can only accept one

- Variables reserved for things like for loops have a more complex name to prevent them from accidentally sharing a name with your variables

- New functions can be created with a C declaration (same syntax as header file modules) for the most customizability while I'm working on the UI for it

V0.9 Changes

- You can now search special characters

- Auto types will still show up when context sensitive is turned on

- Updated the header format to support multiple named outputs

- Header files can now specify the colour of structs

- Updated the modules with more nodes and fixes

- The default value on the optional nodes are working now

There were a lot more bugs than I thought

- Modules made with header files have no documentation links instead of broken ones, I'm still figuring that out

- Documentation links on nodes need to include the file extension now

- Fixed a bug where 2 nodes would share the same id, causing things to break.

- Fixed freezing when using For with type 0 nodes

- Fixed exponential indenting

- Fixed bug where the Then and Completed nodes on If and For would stop after the first node