Graph.XDotReads layout information from xdot ASTs
Simple layout types
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 *) |
}val mk_node_layout : name:string -> pos:pos -> bbox:bounding_box -> draw:XDotDraw.operation list -> ldraw:XDotDraw.operation list -> node_layoutCreates a node layout
val mk_cluster_layout : pos:pos -> bbox:bounding_box -> draw:XDotDraw.operation list -> ldraw:XDotDraw.operation list -> cluster_layoutCreates 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_layoutCreates an edge layout
Parsing and reading XDot
module Make (G : Graphviz.GraphWithDotAttrs) : sig ... endInstantiates a module which creates graph layouts from xdot files
Converts and reads various layout informations
val bounding_box : (float * float) -> float -> float -> bounding_boxbounding_box pos w h converts a bounding box of center pos, width w and height h from a Dot file to a pair of corners (lower left and upper right) in the world coordinate system.
val read_bounding_box : string -> bounding_boxval read_node_layout : Dot_ast.node_id -> Dot_ast.attr list -> node_layoutReads xdot layouts from the dot ast
val read_edge_layout : Dot_ast.attr list -> edge_layoutval read_cluster_layout : Dot_ast.attr list -> cluster_layout