{- | Module : Data.Graph.Analysis.Visualisation Description : Graphviz wrapper functions Copyright : (c) Ivan Lazar Miljenovic 2008 License : 2-Clause BSD Maintainer : Ivan.Miljenovic@gmail.com A wrapper module around the Haskell "Data.GraphViz" library to turn Graphs into basic graphs for processing by the Graphviz application. -} module Data.Graph.Analysis.Visualisation where import Data.Graph.Analysis.Types import Data.Graph.Analysis.Utils import Data.Graph.Inductive.Graph import Data.GraphViz -- | Turns the graph into 'DotGraph' format with the given title. -- Nodes are labelled, edges aren't. graphviz :: (Graph g, Show a, Ord b) => String -> g a b -> DotGraph graphviz t g = graphToDot g attrs nattrs eattrs where attrs = [Label t] nattrs (_,a) = [Label (show a)] eattrs _ = [] -- | Turns the graph into 'DotGraph' format with the given title. -- Cluster the nodes based upon their 'ClusterLabel' clusters. -- Nodes and clusters are labelled, edges aren't. graphvizClusters :: (Graph g, Show c, ClusterLabel a c, Ord b) => String -> g a b -> DotGraph graphvizClusters t g = clusterGraphToDot g atts assignCluster catts natts eatts where atts = [Label t] catts c = [Label (show c)] natts (_,a) = [Label (nodelabel a)] eatts _ = []