]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/graphviz.scm
apply Julian's patch to fix install-info warnings
[lilypond.git] / scm / graphviz.scm
index f5db38b7a800a52d13f614411dc0707626784bee..f6fd8fa9e44806b619f8e6cdb7183a8b2fb6fb04 100644 (file)
@@ -1,26 +1,39 @@
-;;;; graphviz.scm -- utilities for creating graphviz output
+;;;; This file is part of LilyPond, the GNU music typesetter.
 ;;;;
-;;;;  source file of the GNU LilyPond music typesetter
+;;;; Copyright (C) 2007--2011 Joe Neeman <joeneeman@gmail.com>
 ;;;;
-;;;; (c) 2007 Joe Neeman <joeneeman@gmail.com>
+;;;; LilyPond 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.
+;;;;
+;;;; LilyPond 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.
+;;;;
+;;;; You should have received a copy of the GNU General Public License
+;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
 
 (define-module (scm graphviz)
   #:use-module (lily)
   #:export
-  (make-graph add-node add-edge add-cluster
-             graph-write
-             ))
+  (make-empty-graph add-node add-edge add-cluster
+                   graph-write
+                   ))
 
-(define (make-graph filename)
-   #(() () () ()))
+(define graph-type (make-record-type "graph" '(nodes edges clusters name)))
 
+(define make-graph (record-constructor graph-type))
+(define (make-empty-graph name) (make-graph '() '() '() name))
 
-;; fixme: use structs/records.
-;; fixme add & use setters.
-(define (nodes g) (vector-ref g 1))
-(define (edges g) (vector-ref g 2))
-(define (clusters g) (vector-ref g 3))
+(define nodes (record-accessor graph-type 'nodes))
+(define edges (record-accessor graph-type 'edges))
+(define clusters (record-accessor graph-type 'clusters))
+(define set-nodes! (record-modifier graph-type 'nodes))
+(define set-edges! (record-modifier graph-type 'edges))
+(define set-clusters! (record-modifier graph-type 'clusters))
 
 (define (add-cluster graph node-id cluster-name)
   (let* ((cs (clusters graph))
         (already-in-cluster (if cluster
                                 (cdr cluster)
                                 '())))
-    (vector-set! graph 3 (assq-set! cs
+    (set-clusters! graph (assq-set! cs
                                    cluster-name
                                    (cons node-id already-in-cluster)))))
 
 (define (add-node graph label . cluster-name)
   (let* ((ns (nodes graph))
          (id (length ns)))
-    (vector-set! graph 1 (cons `(,id . ,label) ns))
+    (set-nodes! graph (assq-set! ns id label))
     (if (and (not (null? cluster-name))
             (string? (car cluster-name)))
        (add-cluster graph id (car cluster-name)))
     id))
 
 (define (add-edge graph node1 node2)
-  (vector-set! graph 2 (cons `(,node1 . ,node2) (edges graph))))
+  (set-edges! graph (cons `(,node1 . ,node2) (edges graph))))
 
 (define (graph-write graph out)
   (let ((ns (nodes graph))