sig
  val version : string
  type graph_kind = Graph | Digraph
  type id =
      Simple_id of string
    | Html_id of string
    | Double_quoted_id of string
  type attr = Odot.id * Odot.id option
  type compass_pt = N | NE | E | SE | S | SW | W | NW
  type port = Odot.id * Odot.compass_pt option
  type node_id = Odot.id * Odot.port option
  type edge_stmt_point =
      Edge_node_id of Odot.node_id
    | Edge_subgraph of Odot.subgraph
  and edge_stmt =
      Odot.edge_stmt_point * Odot.edge_stmt_point list * Odot.attr list
  and attr_stmt =
      Attr_graph of Odot.attr list
    | Attr_node of Odot.attr list
    | Attr_edge of Odot.attr list
  and stmt =
      Stmt_node of Odot.node_id * Odot.attr list
    | Stmt_equals of Odot.id * Odot.id
    | Stmt_edge of Odot.edge_stmt
    | Stmt_attr of Odot.attr_stmt
    | Stmt_subgraph of Odot.subgraph
  and subgraph = {
    mutable sub_id : Odot.id option;
    mutable sub_stmt_list : Odot.stmt list;
  }
  and graph = {
    mutable strict : bool;
    mutable kind : Odot.graph_kind;
    mutable id : Odot.id option;
    mutable stmt_list : Odot.stmt list;
  }
  exception Parse_error of int * int
  val parse_file : string -> Odot.graph
  val parse_string : string -> Odot.graph
  val string_of_graph_kind : Odot.graph_kind -> string
  val string_of_id : Odot.id -> string
  val string_of_attr : Odot.id * Odot.id option -> string
  val string_of_attr_list : (Odot.id * Odot.id option) list -> string
  val string_of_compass_pt : Odot.compass_pt -> string
  val string_of_node_id :
    Odot.id * (Odot.id * Odot.compass_pt option) option -> string
  val string_of_edge_stmt_point :
    Odot.graph_kind -> Odot.edge_stmt_point -> string
  val string_of_edge_stmt : Odot.graph_kind -> Odot.edge_stmt -> string
  val string_of_attr_stmt : Odot.attr_stmt -> string
  val string_of_stmt : Odot.graph_kind -> Odot.stmt -> string
  val string_of_stmt_list : Odot.graph_kind -> Odot.stmt list -> string
  val string_of_subgraph : Odot.graph_kind -> Odot.subgraph -> string
  val string_of_graph : Odot.graph -> string
  val print : Stdlib.out_channel -> Odot.graph -> unit
  val print_file : string -> Odot.graph -> unit
  val attr_value : Odot.id -> Odot.attr list -> Odot.id option
  val node_id :
    ?port:Odot.id -> ?comp:Odot.compass_pt -> Odot.id -> Odot.node_id
  val simple_node_id : string -> Odot.node_id
  val dblq_node_id : string -> Odot.node_id
  val html_node_id : string -> Odot.node_id
end