### Common stuff

Because the neato and dot engines present a lot of common points - in particular in the graph description language, large parts of the code is shared. The `CommonAttributes` module defines attributes of graphs, vertices and edges that are understood by the two engines. Then module `DotAttributes` and `NeatoAttributes` define attributes specific to dot and neato respectively.

#### Common types and signatures

`type color = int`
`type color_with_transparency = int32`

The two least significant bytes encode the transparency information; the six most signification are the standard RGB color

`val color_to_color_with_transparency : color -> color_with_transparency`
`type arrow_style = [`

1. `| `None`
2. `| `Normal`
3. `| `Onormal`
4. `| `Inv`
5. `| `Dot`
6. `| `Odot`
7. `| `Invdot`
8. `| `Invodot`

`]`
`module type ATTRIBUTES = sig ... end`

The `ATTRIBUTES` module type defines the interface for the engines.

#### Common attributes

`module CommonAttributes : sig ... end`

The `CommonAttributes` module defines attributes for graphs, vertices and edges that are available in the two engines, dot and neato.

### Interface with the dot engine

`module DotAttributes : sig ... end`

`DotAttributes` extends `CommonAttributes` and implements `ATTRIBUTES`.

`module type GraphWithDotAttrs = sig ... end`

Graph module with dot attributes

`module Dot (X : sig ... end) : sig ... end`

### The neato engine

`module NeatoAttributes : sig ... end`
`module Neato (X : sig ... end) : sig ... end`