Module XDot


module XDot: sig .. end
Reads layout information from xdot ASTs


Simple layout types
type pos = float * float 
2D coordinates
type bounding_box = pos * pos 
upper-left and bottom-right corners

Layout informations are parsed from xdot files (dot files with graphviz layout).

Each node or edge layout thus contains several lists of drawing operations.

See http://www.graphviz.org/doc/info/output.html#d:xdot to understand the details of the layout informations.

type node_layout = {
   n_name : string; (*Dot label*)
   n_pos : pos; (*Center position*)
   n_bbox : bounding_box; (*Bounding box*)
   n_draw : XDotDraw.operation list; (*Shape drawing*)
   n_ldraw : XDotDraw.operation list; (*Label drawing*)
}

Each node has at least a position and a bounding box.

type cluster_layout = {
   c_pos : pos;
   c_bbox : bounding_box;
   c_draw : XDotDraw.operation list;
   c_ldraw : XDotDraw.operation list;
}
type edge_layout = {
   e_draw : XDotDraw.operation list; (*Shapes and curves*)
   e_ldraw : XDotDraw.operation list; (*Label drawing*)
   e_hdraw : XDotDraw.operation list; (*Head arrowhead drawing*)
   e_tdraw : XDotDraw.operation list; (*Tail arrowhead drawing*)
   e_hldraw : XDotDraw.operation list; (*Head label drawing*)
   e_tldraw : XDotDraw.operation list; (*Tail label drawing*)
}
type ('a, 'b, 'c) graph_layout = {
   vertex_layouts : ('a, node_layout) Hashtbl.t;
   edge_layouts : ('b, edge_layout) Hashtbl.t;
   cluster_layouts : ('c, cluster_layout) Hashtbl.t;
   bbox : bounding_box;
}
Main layout type
val mk_node_layout : name:string ->
pos:pos ->
bbox:bounding_box ->
draw:XDotDraw.operation list ->
ldraw:XDotDraw.operation list -> node_layout
Creates a node layout
val mk_cluster_layout : pos:pos ->
bbox:bounding_box ->
draw:XDotDraw.operation list ->
ldraw:XDotDraw.operation list -> cluster_layout
Creates a cluster layout
val mk_edge_layout : draw:XDotDraw.operation list ->
ldraw:XDotDraw.operation list ->
hdraw:XDotDraw.operation list ->
tdraw:XDotDraw.operation list ->
hldraw:XDotDraw.operation list ->
tldraw:XDotDraw.operation list -> edge_layout
Creates an edge layout

Parsing and reading XDot
exception ParseError of string
module Make: 
functor (G : Graph.Graphviz.GraphWithDotAttrs) -> sig .. end
Instantiates a module which creates graph layouts from xdot files

Converts and reads various layout informations
val conv_coord : float * float -> float * float
Converts a coordinate from a dot file to a coordinate on the canvas
val bounding_box : float * float -> float -> float -> bounding_box
val read_bounding_box : string -> bounding_box
val read_node_layout : Graph.Dot_ast.node_id -> Graph.Dot_ast.attr list -> node_layout
Reads xdot layouts from the dot ast
val read_edge_layout : Graph.Dot_ast.attr list -> edge_layout
val read_cluster_layout : Graph.Dot_ast.attr list -> cluster_layout