This is an automated email from the git hooks/post-receive script. mehdi pushed a commit to branch master in repository ocamlgraph.
commit 96da5ed539dce050375265b5afb1217ebfbacb4a Author: Mehdi Dogguy <me...@debian.org> Date: Sun Apr 27 10:48:53 2014 +0200 Imported Upstream version 1.8.5 --- CHANGES | 10 ++++ Makefile.in | 16 +++++- configure | 6 +- configure.in | 6 +- dgraph/dGraphTreeLayout.ml | 6 +- dgraph/dGraphTreeModel.ml | 4 +- src/graphviz.ml | 139 ++++++++++++++++++++++++++++----------------- src/graphviz.mli | 5 +- 8 files changed, 127 insertions(+), 65 deletions(-) diff --git a/CHANGES b/CHANGES index de52adb..7d9d1d3 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,14 @@ +version 1.8.5, March 4, 2014 +----------------------------- + o Graphviz: reverted to the old API where edges and vertices are + given a single style attribute; but such attributes are collected + and output in the DOT file into a list (thus allowing multiple style + attributes) + o fixed issue in ./configure with ocamlfind on Win32. + o fixed compilation when laglgnomecanvas is missing (bug introduced in 1.8.4). + o fixed more issues with 'make -j'. + version 1.8.4, February 4, 2014 ------------------------------- o fixed [Graphml] printer (contributed by Johannes Schauer) diff --git a/Makefile.in b/Makefile.in index 1c9e657..9cecdc4 100644 --- a/Makefile.in +++ b/Makefile.in @@ -112,7 +112,7 @@ graph.cmo: $(CMI) $(CMO) graph.cmx: $(CMI) $(CMX) $(OCAMLOPT) $(INCLUDES) -pack -o $@ $^ -VERSION=1.8.4 +VERSION=1.8.5 src/version.ml: Makefile rm -f $@ @@ -239,9 +239,19 @@ $(DGRAPH_DIR)/dgraph.opt: $(CMXA) $(DGRAPH_CMXLIB) \ # without these extra dependencies, building graph.cmx also rebuilds the .cmi # while graph.cmi may be required at the same time by some .cmo of the # bytecodes, leading to tentative access to a corrupted graph.cmi. + +ifeq (@LABLGNOMECANVAS@,yes) graph.cmx: | $(DGRAPH_DIR)/dgraph.byte \ $(VIEWER_DIR)/viewgraph.byte \ $(ED_DIR)/editor.byte +endif + +$(CMX): | $(SRCDIR)/blocks.cmo + +# No .mli for blocks.ml: so, to avoid clash when generating block.cmi +# from both ocamlc and ocamlopt, force to fully compile the bytecode library +# before the native one +$(SRCDIR)/blocks.cmx: | graph.cmo # Examples ########## @@ -446,7 +456,7 @@ endif doc: $(DOC_CMO) mkdir -p doc rm -f doc/* - $(OCAMLDOC) -d doc -html $(DGRAPH_INCLUDES) $(DOC_SRC) + $(OCAMLDOC) -d doc -html $(DGRAPH_INCLUDES) -I lib -I src $(DOC_SRC) # literate programming $(NAME).tex: $(DOC_SRC) @@ -501,7 +511,7 @@ source: # Build and install the .tar.gz requiered by Frama-C framac: EXPORTDIR=ocamlgraph -framac: FTP=$$HOME/frama-c +framac: FTP=$$HOME/GIT/BRANCHES/master framac: mkdir -p export cd export; rm -rf $(EXPORTDIR) diff --git a/configure b/configure index 884a345..1b59d5b 100755 --- a/configure +++ b/configure @@ -2249,11 +2249,13 @@ fi if test "$OCAMLFIND" = "" ; then echo "No ocamlfind detected" else - OCAMLLIB_BY_FINDLIB=`ocamlfind query stdlib | tr -d '\\r'` + OCAMLLIB_BY_FINDLIB=`ocamlfind printconf stdlib | tr -d '\\r'` if test "$OCAMLLIB_BY_FINDLIB" = "$OCAMLLIB" ; then echo "OCamlfind detected and enabled" else - echo "OCamlfind detected but disabled. Standard libraries differ." + echo "OCamlfind detected but disabled. Standard libraries differ:" + echo " ocamlc: '$OCAMLLIB'" + echo " ocamlfind: '$OCAMLLIB_BY_FINDLIB'" OCAMLFIND="" fi fi diff --git a/configure.in b/configure.in index fbc437d..cbb3f6f 100644 --- a/configure.in +++ b/configure.in @@ -146,11 +146,13 @@ AC_CHECK_PROG(OCAMLFIND,ocamlfind,ocamlfind) if test "$OCAMLFIND" = "" ; then echo "No ocamlfind detected" else - OCAMLLIB_BY_FINDLIB=`ocamlfind query stdlib | tr -d '\\r'` + OCAMLLIB_BY_FINDLIB=`ocamlfind printconf stdlib | tr -d '\\r'` if test "$OCAMLLIB_BY_FINDLIB" = "$OCAMLLIB" ; then echo "OCamlfind detected and enabled" else - echo "OCamlfind detected but disabled. Standard libraries differ." + echo "OCamlfind detected but disabled. Standard libraries differ:" + echo " ocamlc: '$OCAMLLIB'" + echo " ocamlfind: '$OCAMLLIB_BY_FINDLIB'" OCAMLFIND="" fi fi diff --git a/dgraph/dGraphTreeLayout.ml b/dgraph/dGraphTreeLayout.ml index 1a1f52a..1cbe97f 100755 --- a/dgraph/dGraphTreeLayout.ml +++ b/dgraph/dGraphTreeLayout.ml @@ -239,7 +239,7 @@ struct | `Peripheries p -> vattrs.peripheries <- set_if_none vattrs.peripheries p | `Regular r -> vattrs.regular <- set_if_none vattrs.regular r | `Shape shape -> vattrs.shape <- set_if_none vattrs.shape shape - | `Style s -> vattrs.style <- s @ vattrs.style + | `Style s -> vattrs.style <- s :: vattrs.style | `Width w -> vattrs.width <- set_if_none vattrs.width w | `Fillcolor c -> vattrs.fillcolor <- set_if_none vattrs.fillcolor @@ -605,7 +605,7 @@ struct eattrs.labelfontsize <- set_if_none eattrs.labelfontsize s; attributes_list_to_eattributes eattrs q | `Style s :: q -> - eattrs.style <- s @ eattrs.style; + eattrs.style <- s :: eattrs.style; attributes_list_to_eattributes eattrs q | (`Arrowhead _ | `Arrowsize _ | `Arrowtail _ | `Comment _ | `Constraint _ | `Headlabel _ | `Headport _ | `Headurl _ | `Labelangle _ @@ -631,7 +631,7 @@ struct let dgraph_layout_default = [ `Color 0xFF0000; `Decorate false; `Dir `Forward; `Fontcolor 0x00000; `Fontname "Sans"; `Fontsize 12; `Label ""; `Labelfontcolor 0x000000; - `Labelfontname "Sans"; `Labelfontsize 12; `Style [`Solid] ] + `Labelfontname "Sans"; `Labelfontsize 12; `Style `Solid ] in attributes_list_to_eattributes eattrs (Tree.default_edge_attributes tree diff --git a/dgraph/dGraphTreeModel.ml b/dgraph/dGraphTreeModel.ml index ba2a992..00dab20 100755 --- a/dgraph/dGraphTreeModel.ml +++ b/dgraph/dGraphTreeModel.ml @@ -175,13 +175,13 @@ module SubTreeMake(G: Graphviz.GraphWithDotAttrs) = struct let vertex_attributes v = let t = tree () in - if TM.is_ghost_node v t then [ `Style [`Invis] ] + if TM.is_ghost_node v t then [ `Style `Invis ] else G.vertex_attributes (TM.get_graph_vertex v t) let edge_attributes e = let t = tree () in if TM.is_ghost_node (T.E.src e) t || TM.is_ghost_node (T.E.dst e) t then - [ `Style [`Dashed]; `Dir `None ] + [ `Style `Dashed; `Dir `None ] else G.edge_attributes (G.find_edge diff --git a/src/graphviz.ml b/src/graphviz.ml index 4b32232..c4038c7 100644 --- a/src/graphviz.ml +++ b/src/graphviz.ml @@ -64,6 +64,10 @@ let fprint_string_user ppf s = (* let s = String.escaped s in*) fprintf ppf "\"%s\"" s +let fprint_square_not_empty printer ppf = function + | [] -> () + | l -> fprintf ppf " [%a]" printer l + type arrow_style = [ `None | `Normal | `Inv | `Dot | `Odot | `Invdot | `Invodot ] @@ -80,6 +84,14 @@ let fprint_dir ppf = function `TopToBottom -> fprintf ppf "TB" | `LeftToRight -> fprintf ppf "LR" +type symbseq = + | COMMA + | SEMI + +let fprint_symbseq ppf = function + | COMMA -> pp_print_string ppf "," + | SEMI -> pp_print_string ppf ";" + (** The [ATTRIBUTES] module type defines the interface for the engines. *) module type ATTRIBUTES = sig @@ -167,7 +179,8 @@ module CommonAttributes = struct (** Sets the shape of the node. Default value is [`Ellipse]. [`Polygon (i, f)] draws a polygon with [n] sides and a skewing of [f]. *) - | `Style of [ `Rounded | `Filled | `Solid | `Dashed | `Dotted | `Bold | `Invis ] list + | `Style of + [ `Rounded | `Filled | `Solid | `Dashed | `Dotted | `Bold | `Invis ] (** Sets the layout style of the node. Several styles may be combined simultaneously. *) | `Width of float @@ -208,7 +221,7 @@ module CommonAttributes = struct | `Penwidth of float (** Width of the pen (in points) used to draw the edge. Default value is [1.0]. *) - | `Style of [ `Solid | `Dashed | `Dotted | `Bold | `Invis ] list + | `Style of [ `Solid | `Dashed | `Dotted | `Bold | `Invis ] (** Sets the layout style of the edge. Several styles may be combined simultaneously. *) ] @@ -242,12 +255,12 @@ module CommonAttributes = struct | `Polygon (i, f) -> fprintf ppf "polygon, sides=%i, skew=%f" i f let rec fprint_string_list ppf = function - [] -> () + | [] -> () | [hd] -> fprintf ppf "%s" hd | hd :: tl -> fprintf ppf "%s,%a" hd fprint_string_list tl let node_style_str = function - `Rounded -> "rounded" + | `Rounded -> "rounded" | `Filled -> "filled" | `Solid -> "solid" | `Dashed -> "dashed" @@ -255,6 +268,11 @@ module CommonAttributes = struct | `Bold -> "bold" | `Invis -> "invis" + let fprint_style_list sep ppf a = + fprintf ppf "style=\"%a\"%a@ " + fprint_string_list (List.map node_style_str a) + fprint_symbseq sep + let fprint_vertex ppf = function | `Color a -> fprintf ppf "color=%a" fprint_color a | `ColorWithTransparency a -> @@ -269,7 +287,7 @@ module CommonAttributes = struct | `Peripheries i -> fprintf ppf "peripheries=%i" i | `Regular b -> fprintf ppf "regular=%b" b | `Shape a -> fprintf ppf "shape=%a" fprint_shape a - | `Style a -> fprintf ppf "style=\"%a\"" fprint_string_list (List.map node_style_str a) + | `Style _ -> assert false | `Width f -> fprintf ppf "width=%f" f let edge_style_str = @@ -296,7 +314,40 @@ module CommonAttributes = struct (* (String.escaped s) *) | `Labelfontsize i -> fprintf ppf "labelfontsize=%i" i | `Penwidth f -> fprintf ppf "penwidth=%f" f - | `Style a -> fprintf ppf "style=\"%a\"" fprint_string_list (List.map edge_style_str a) + | `Style _ -> assert false + + let rec filter_style al sl l = match l with + | [] -> al, sl + | `Style s :: l -> filter_style al (s :: sl) l + | a :: l -> filter_style (a :: al) sl l + + (** [fprint_graph_attribute printer ppf list] pretty prints a list of + attributes on the formatter [ppf], using the printer [printer] for + each attribute. The list appears between brackets and attributes + are speparated by ",". If the list is empty, nothing is printed. *) + let fprint_attributes fprint_style_list fprint_attribute sep ppf list = + if list <> [] then begin + let list, styles = filter_style [] [] list in + let rec fprint_attributes_rec ppf = function + | [] -> () + | hd :: tl -> + fprintf ppf "%a%a@ " + fprint_attribute hd + fprint_symbseq sep; + fprint_attributes_rec ppf tl + in + fprintf ppf "@[<hov>%a" fprint_attributes_rec list; + if styles <> [] then begin + fprint_style_list sep ppf styles + end; + fprintf ppf "@]" + end + + let fprint_vertex_list = + fprint_attributes fprint_style_list fprint_vertex + + let fprint_edge_list = + fprint_attributes fprint_style_list fprint_edge end @@ -310,8 +361,8 @@ module type ENGINE = sig module Attributes : sig include ATTRIBUTES val fprint_graph:formatter -> graph -> unit - val fprint_vertex: formatter -> vertex -> unit - val fprint_edge: formatter -> edge -> unit + val fprint_vertex_list: symbseq -> formatter -> vertex list -> unit + val fprint_edge_list: symbseq -> formatter -> edge list -> unit end (** The litteral name of the engine. *) @@ -375,34 +426,6 @@ struct fprintf ppf "%a;@ " EN.Attributes.fprint_graph att ) list - (** [fprint_graph_attribute printer ppf list] pretty prints a list of - attributes on the formatter [ppf], using the printer [printer] for - each attribute. The list appears between brackets and attributes - are speparated by ",". If the list is empty, nothing is printed. *) - let fprint_attributes fprint_attribute ppf = function - [] -> () - | hd :: tl -> - let rec fprint_attributes_rec ppf = function - [] -> () - | hd' :: tl' -> - fprintf ppf ",@ %a%a" - fprint_attribute hd' - fprint_attributes_rec tl' - in - fprintf ppf " [@[<hov>%a%a@]]" - fprint_attribute hd - fprint_attributes_rec tl - - (** [fprint_graph_attributes ppf list] pretty prints a list of - node attributes using the format of [fprint_attributes]. *) - let fprint_node_attributes ppf list = - fprint_attributes EN.Attributes.fprint_vertex ppf list - - (** [fprint_graph_attributes ppf list] pretty prints a list of - edge attributes using the format of [fprint_attributes]. *) - let fprint_edge_attributes ppf list = - fprint_attributes EN.Attributes.fprint_edge ppf list - (** [fprint_graph ppf graph] pretty prints the graph [graph] in the CGL language on the formatter [ppf]. *) let fprint_graph ppf graph = @@ -414,8 +437,8 @@ struct let print_nodes ppf = let default_node_attributes = X.default_vertex_attributes graph in if default_node_attributes <> [] then - fprintf ppf "node%a;@ " - fprint_node_attributes + fprintf ppf "node%a;@ " + (fprint_square_not_empty (EN.Attributes.fprint_vertex_list COMMA)) default_node_attributes; X.iter_vertex @@ -433,7 +456,7 @@ struct end; fprintf ppf "%s%a;@ " (X.vertex_name node) - fprint_node_attributes + (fprint_square_not_empty (EN.Attributes.fprint_vertex_list COMMA)) (X.vertex_attributes node) ) graph @@ -447,17 +470,13 @@ struct | name :: worklist -> let sg, nodes = SG.find name !subgraphs in let children = SG.filter (fun n (sg, nodes) -> sg.EN.Attributes.sg_parent = Some name) !subgraphs in - fprintf ppf "@[<v 2>subgraph cluster_%s { %t%t@ %t };@]@\n" - + fprintf ppf "@[<v 2>subgraph cluster_%s { %a%t@ %t };@]@\n" + name - - (fun ppf -> - (List.iter - (fun n -> fprintf ppf "%a;@\n" EN.Attributes.fprint_vertex n) - sg.EN.Attributes.sg_attributes - ) - ) - + + (EN.Attributes.fprint_vertex_list SEMI) + sg.EN.Attributes.sg_attributes + (fun ppf -> (List.iter (fun n -> fprintf ppf "%s;" (X.vertex_name n)) nodes) ) @@ -481,14 +500,16 @@ struct let default_edge_attributes = X.default_edge_attributes graph in if default_edge_attributes <> [] then fprintf ppf "edge%a;@ " - fprint_edge_attributes default_edge_attributes; + (fprint_square_not_empty (EN.Attributes.fprint_edge_list COMMA)) + default_edge_attributes; X.iter_edges_e (function edge -> fprintf ppf "%s %s %s%a;@ " (X.vertex_name (X.E.src edge)) EN.edge_arrow (X.vertex_name (X.E.dst edge)) - fprint_edge_attributes (X.edge_attributes edge) + (fprint_square_not_empty (EN.Attributes.fprint_edge_list COMMA)) + (X.edge_attributes edge) ) graph in @@ -736,6 +757,14 @@ module DotAttributes = struct | `Tailurl s -> fprintf ppf "tailURL=%a" fprint_string s | `Weight i -> fprintf ppf "weight=%i" i + let fprint_vertex_list = + CommonAttributes.fprint_attributes + CommonAttributes.fprint_style_list fprint_vertex + + let fprint_edge_list = + CommonAttributes.fprint_attributes + CommonAttributes.fprint_style_list fprint_edge + end (** Graph modules with dot attributes *) @@ -844,6 +873,14 @@ module NeatoAttributes = struct | `Len f -> fprintf ppf "len=%f" f | `Weight f -> fprintf ppf "weight=%f" f + let fprint_vertex_list = + CommonAttributes.fprint_attributes + CommonAttributes.fprint_style_list fprint_vertex + + let fprint_edge_list = + CommonAttributes.fprint_attributes + CommonAttributes.fprint_style_list fprint_edge + end module Neato = diff --git a/src/graphviz.mli b/src/graphviz.mli index 26ea28e..5992f46 100644 --- a/src/graphviz.mli +++ b/src/graphviz.mli @@ -142,7 +142,8 @@ module CommonAttributes : sig (** Sets the shape of the vertex. Default value is [`Ellipse]. [`Polygon (i, f)] draws a polygon with [n] sides and a skewing of [f]. *) - | `Style of [ `Rounded | `Filled | `Solid | `Dashed | `Dotted | `Bold | `Invis ] list + | `Style of + [ `Rounded | `Filled | `Solid | `Dashed | `Dotted | `Bold | `Invis ] (** Sets the layout style of the vertex. Several styles may be combined simultaneously. *) | `Width of float @@ -183,7 +184,7 @@ module CommonAttributes : sig | `Penwidth of float (** Width of the pen (in points) used to draw the edge. Default value is [1.0]. *) - | `Style of [ `Solid | `Dashed | `Dotted | `Bold | `Invis ] list + | `Style of [ `Solid | `Dashed | `Dotted | `Bold | `Invis ] (** Sets the layout style of the edge. Several styles may be combined simultaneously. *) ] -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ocaml-maint/packages/ocamlgraph.git _______________________________________________ Pkg-ocaml-maint-commits mailing list Pkg-ocaml-maint-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-ocaml-maint-commits