diff options
Diffstat (limited to 'ccwl/graphviz.scm')
-rw-r--r-- | ccwl/graphviz.scm | 57 |
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}." |