railway 0.3.2

Binary file format for vector animated pictures
Documentation
# Railway

Railway is a binary file format for vector animated pictures.
This is a library for parsing, computing and rendering such pictures.

![generated.png](https://docs.rs/crate/railway/0.1.1/source/generated.png)

# Anatomy of a railway file

Throughout this format we use the term "Couple" which means a pair of floating point numbers.
For a more exhaustive description of the file format, [see the format specification](https://github.com/NathanRoyer/railway/blob/main/format.txt).

## Virtual Machine Program

Before drawing, railway files have a program that needs to be computed to yield results.
These results are then used as coordinates for the drawing stage.
A stack is used to store these results.

### Parameters (Arguments)

Couples whose values can be changed.
Some have names, which implies that they're meant to be changed.
Those without a name are to be seen as constant values of the program.
The parameters corresponds to the initial content of the stack.

### Instructions

Mathematical operations which have one output and up to 3 inputs.
Inputs are specified using a stack index/offset.
Every instruction results in a couple which is pushed onto the stack.

### Outputs

Some results can be useful to the client code, for instance to overlay something precisely over the rendered picture.
These are specified in the file under this section, as a name and a stack index/offset.

## Draw Operations

Once every instruction has been computed, the drawing stage can begin.
It will make use of couples present in the stack, referenced by a stack index/offset.

A railway file contains a number of "layers": combinations of background triangles and masks.

### Triangles

Background triangles specify x/y coordinates and an RGBA color for each point.

### Masks

Masks are polygons constructed with arcs and bezier curves (cubic / quadratic / linear).
Bezier curves are specified using 2, 3 or 4 points.
Arcs are specified using a center, two absolute angles, and two radii.

### Clips

A clip specified a mask and a background triangle.
Every pixel that is in both the mask and the triangle will be drawn.

### Strokes

A stroke is the drawing of a mask's contour in a specified color and with a specified pattern.