The format-graph library defines procedures that print the nodes and edges of a graph in different formats, such as the ones used by the GraphViz or VCG programs. The input graph objects must have the API defined by the digraph module.
returns a graph formatter procedure of the specified types; the following formats are supported:
| 'dot |
dot format (see the GraphViz documentation) |
| 'vcg |
vcg format (see the VCG documetation) |
generates an s-expression description of the given graph, with the following structure:
(graph (name GRAPH-NAME )
(nodes (node (id NODE-ID ) (info NODE-INFO )) ... )
(edges (edge (i EDGE-I-NODE ) (j EDGE-J-NODE ) (info (EDGE-INFO ))) ... ));; example adapted from the Boost graph library documentation
(require-extension srfi-1)
(require-extension digraph)
(require-extension format-graph)
(define used-by
(list
(cons 'dax_h 'foo_cpp) (cons 'dax_h 'bar_cpp) (cons 'dax_h 'yow_h)
(cons 'yow_h 'bar_cpp) (cons 'yow_h 'zag_cpp) (cons 'boz_h 'bar_cpp)
(cons 'boz_h 'zig_cpp) (cons 'boz_h 'zag_cpp) (cons 'zow_h 'foo_cpp)
(cons 'foo_cpp 'foo_o) (cons 'foo_o 'libfoobar_a)
(cons 'bar_cpp 'bar_o) (cons 'bar_o 'libfoobar_a)
(cons 'libfoobar_a 'libzigzag_a) (cons 'zig_cpp 'zig_o)
(cons 'zig_o 'libzigzag_a) (cons 'zag_cpp 'zag_o)
(cons 'zag_o 'libzigzag_a) (cons 'libzigzag_a 'killerapp)))
(define g (make-digraph 'depgraph "dependency graph"))
(define node-list (delete-duplicates
(concatenate (list (map car used-by) (map cdr used-by)))))
(define node-ids (list-tabulate (length node-list) values))
(for-each (lambda (i n) ((g 'add-node!) i n))
node-ids node-list)
(define node-map (zip node-list node-ids))
(for-each (lambda (e)
(match e ((ni . nj) (let ((i (car (alist-ref ni node-map)))
(j (car (alist-ref nj node-map))))
((g 'add-edge!) (list i j (format "~A->~A" ni nj)))))
(else (error "invalid edge " e))))
used-by)
((make-format-graph 'dot) (current-output-port) g )
((make-format-graph 'vcg) (current-output-port) g )Copyright 2007 Ivan Raikov. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. A full copy of the GPL license can be found at <http://www.gnu.org/licenses/>.