wdot.rb - Workflow / Flowchart extensions to grahpviz‘s dot language.
License: GPL v2 or (at your option) any later version. See www.fsf.org/licensing .
Copyright (C) 2008, Loh Siu Yin (siuyin@beyondbroadcast.com)
Graphviz‘s dot language ( www.graphviz.org ) is a very flexible language that can generate graph images (.png, .svg etc) from a text file. However for creating workflow diagrams dot is very repetitious and rather verbose. In the spirit of "Don‘t Repeat Yourself", I wrote wdot.rb to eliminate most of the repetitious effort while still retaining the full flexibility of dot when I need it.
wdot.rb allows you to quickly create workflow diagrams / flowcharts easily from text files. As text files these can be updated with any text editor resulting in easily updateable diagrams.
Usage
wdot.rb < <sourcefile> | dot -T<fmt> -o <outputfile>
eg. wdot.rb < my_diagram.wdot | dot -Tpng -o my_diagram.png
Examples
# my_diagram.wdot
:head {
_start
_end
proc1
_start->proc1->_end
}
produces:
# my_diagram.wdot - with title and LR orientation
:head "My Diagram", LR {
_start
_end
proc1
_start->proc1->_end
}
produces:
# my_diagram.wdot - node descriptions
:head "My Diagram", LR {
_start "Start here."
_end "All done."
proc1 "Complex\nprocessing\nhere."
_start->proc1->_end
}
produces:
# my_diagram.wdot - edge descriptions
:head "My Diagram", LR {
_start "Start"
_end "Done"
proc1 "Complex\nprocessing\nhere."
_start->proc1 "begin"
proc1->_end "finish up"
}
produces:
# my_diagram.wdot - if .. then .. else
:head "My Diagram", LR {
_start "Start"
_end "Done"
proc1 "Complex\nprocessing\nhere."
if_check_ok
_start->proc1
proc1->if_check_ok
if_check_ok->_end "Y"
if_check_ok->proc1 "N: redo"
}
produces:
# my_diagram.wdot - comments
/* My workflow diagram.
*/
:head "My Diagram", LR {
// Nodes - note: leading whitespace or blank lines not significant
_start "Start"
_end "Done"
proc1 "Complex\nprocessing\nhere."
if_check_ok "Check:\na. This\nb. That\nAll OK?"
// Links
_start->proc1
proc1->if_check_ok
if_check_ok->_end "Y"
if_check_ok->proc1 "N: redo"
}
produces:
# my_diagram.wdot - override using underlying dot for flexibility.
/* My workflow diagram.
*/
:head "My Diagram", LR {
// Nodes - note: leading whitespace or blank lines not significant
_start "Start"
_end "Done"
proc1 [label="Dangerous Process" fillcolor="red" shape="hexagon"]
if_check_ok "Check:\na. This\nb. That\nAll OK?"
// Links
_start->proc1
proc1->if_check_ok
if_check_ok->_end "Y"
if_check_ok->proc1 [label="N: redo" fontcolor="red" color="magenta" style="bold" arrowtail="inv"]
}
produces:
Frequently Asked Questions?
See here.
Requirements
- wdot.rb — this file. Download from www.beyondbroadcast.com/cms/wdot or from rubyforge.org/projects/wdot
- graphviz — download from www.graphviz.org
- ruby — download from www.ruby-lang.org