diff options
author | Ludovic Courtès <ludo@gnu.org> | 2016-04-02 21:46:26 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2016-04-02 22:40:18 +0200 |
commit | 8463d1345ef302fd016c73b412bd90fdf8adc818 (patch) | |
tree | 009eb22993d35ba73550278855fb0273406bda7e | |
parent | 451c1436a38a92d6903f78381f74c935a332ee87 (diff) | |
download | guix-8463d1345ef302fd016c73b412bd90fdf8adc818.tar guix-8463d1345ef302fd016c73b412bd90fdf8adc818.tar.gz |
graph: Edges are colored based on their source node.
* guix/graph.scm (%colors): New variable.
(pop-color): New procedure.
(emit-edge): Use it.
-rw-r--r-- | guix/graph.scm | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/guix/graph.scm b/guix/graph.scm index a39208e7f9..1a8f2d55b3 100644 --- a/guix/graph.scm +++ b/guix/graph.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2015, 2016 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -131,6 +131,16 @@ typically returned by 'node-edges' or 'node-back-edges'." (node graph-backend-node) (edge graph-backend-edge)) +(define %colors + ;; See colortbl.h in Graphviz. + #("red" "magenta" "blue" "cyan3" "darkseagreen" + "peachpuff4" "darkviolet" "dimgrey" "darkgoldenrod")) + +(define (pop-color hint) + "Return a Graphviz color based on HINT, an arbitrary object." + (let ((index (hash hint (vector-length %colors)))) + (vector-ref %colors index))) + (define (emit-prologue name port) (format port "digraph \"Guix ~a\" {\n" name)) @@ -140,8 +150,8 @@ typically returned by 'node-edges' or 'node-back-edges'." (format port " \"~a\" [label = \"~a\", shape = box, fontname = Helvetica];~%" id label)) (define (emit-edge id1 id2 port) - (format port " \"~a\" -> \"~a\" [color = red];~%" - id1 id2)) + (format port " \"~a\" -> \"~a\" [color = ~a];~%" + id1 id2 (pop-color id1))) (define %graphviz-backend (graph-backend emit-prologue emit-epilogue |