about summary refs log tree commit diff
path: root/ccwl/graphviz.scm
diff options
context:
space:
mode:
Diffstat (limited to 'ccwl/graphviz.scm')
-rw-r--r--ccwl/graphviz.scm57
1 files changed, 40 insertions, 17 deletions
diff --git a/ccwl/graphviz.scm b/ccwl/graphviz.scm
index 2d39156..970af72 100644
--- a/ccwl/graphviz.scm
+++ b/ccwl/graphviz.scm
@@ -41,7 +41,9 @@
     (((? workflow? workflow) port)
      (workflow->dot workflow port))
     (((? command? command) port)
-     (command->dot command port))))
+     (command->dot command port))
+    (((? js-expression? expression) port)
+     (js-expression->dot expression port))))
 
 (define (workflow->dot workflow port)
   "Render WORKFLOW, a <workflow> object, to PORT in the graphviz dot
@@ -121,18 +123,13 @@ language."
          #:subgraphs (list (inputs-cluster (workflow-inputs workflow))
                            (outputs-cluster (workflow-outputs workflow)))))
 
-(define (command->dot command port)
-  "Render @var{command}, a @code{<command>} object, to @var{port} in the
-graphviz dot language."
-  (graph->dot (command->graph command)
-              port))
-
-(define (command->graph command)
-  "Convert @var{command}, a @code{<command>} object, to a @code{<graph>}
-object."
+(define (single-node-workflow->graph node-name inputs outputs)
+  "Convert a single node workflow (usually a @code{<command>} or
+@code{<js-expression>}) with @var{node-name}, @var{inputs} and
+@var{outputs}, to a @code{<graph>} object."
   (graph 'workflow
          #:properties '((bgcolor . "#eeeeee"))
-         #:nodes (list (graph-node 'command
+         #:nodes (list (graph-node node-name
                                    '((fillcolor . "lightgoldenrodyellow")
                                      (shape . "record")
                                      (style . "filled"))))
@@ -140,15 +137,41 @@ object."
                   ;; Connect inputs to command.
                   (map (lambda (input)
                          (cons (input-id input)
-                               'command))
-                       (command-inputs command))
+                               node-name))
+                       inputs)
                   ;; Connect command to outputs.
                   (map (lambda (output)
-                         (cons 'command
+                         (cons node-name
                                (output-id output)))
-                       (command-outputs command)))
-         #:subgraphs (list (inputs-cluster (command-inputs command))
-                           (outputs-cluster (command-outputs command)))))
+                       outputs))
+         #:subgraphs (list (inputs-cluster inputs)
+                           (outputs-cluster outputs))))
+
+(define (command->dot command port)
+  "Render @var{command}, a @code{<command>} object, to @var{port} in the
+graphviz dot language."
+  (graph->dot (command->graph command)
+              port))
+
+(define (command->graph command)
+  "Convert @var{command}, a @code{<command>} object, to a @code{<graph>}
+object."
+  (single-node-workflow->graph 'command
+                               (command-inputs command)
+                               (command-outputs command)))
+
+(define (js-expression->dot expression port)
+  "Render @var{expression}, a @code{<js-expression>} object, to
+@var{port} in the graphviz dot language."
+  (graph->dot (js-expression->graph expression)
+              port))
+
+(define (js-expression->graph expression)
+  "Convert @var{expression}, a @code{<js-expression>} object, to a
+@code{<graph>} object."
+  (single-node-workflow->graph 'js-expression
+                               (js-expression-inputs expression)
+                               (js-expression-outputs expression)))
 
 (define (step-node id)
   "Return graph node describing step with @var{id}."