k[      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     Helper functions for Parsing. Ivan.Miljenovic@gmail.com     'Definition of the GraphViz attributes. Ivan.Miljenovic@gmail.com  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~c~}|{zyxwvutsrqponmlkjihgfedZba`_^]\[WYXUVSTNRQPOJMLKFIHGEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  EEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFIHGGHIJMLKKLMNRQPOOPQRSTTUVVWYXXYZba`_^]\[[\]^_`abc ~}|{zyxwvutsrqponmlkjihgfeddefghijklmnopqrstuvwxyz{|}~ "Definition of the GraphViz types. Ivan.Miljenovic@gmail.com An edge in .  A node in ) is either a singular node, or a cluster 2 containing nodes (or more clusters) within it. 4The internal representation of a graph in Dot form. !"#$ Prefix each % with a tab character. &'(Parse a  )Parse a  Parse a  $Functions to run GraphViz commands. Ivan.Miljenovic@gmail.com53The possible Graphviz outputs, obtained by running  dot -Txxx. C Note that it is not possible to choose between output variants, > and that not all of these may be available on your system. *This will probably be improved in future. !The available Graphviz commands. )The default command for directed graphs. +The default command for undirected graphs. @The appropriate (default) GraphViz command for the given graph.  FRun the recommended Graphviz command on this graph, saving the result 3 to the file provided (note: file extensions are not checked).  Returns True if successful, False otherwise.  ARun the chosen Graphviz command on this graph, saving the result 3 to the file provided (note: file extensions are not checked).  Returns True if successful, False otherwise.  JRun the chosen Graphviz command on this graph, but send the result to the ' given handle rather than to a file.  The result is wrapped in * rather than throwing an error. + This function is taken from the mohws project, available under a = 3-Clause BSD license. The actual function is taken from:   )http://code.haskell.org/mohws/src/Util.hs > It provides an efficient way of transferring data from one ,  to another. 4   4   4'   1Definition of the clustering types for GraphViz. Ivan.Miljenovic@gmail.com-$A tree representation of a cluster. ./ 5Define into which cluster a particular node belongs. + Nodes can be nested to arbitrary depth.  0 Create the s for the given graph. 1<Convert a single node cluster into its tree representation. 2Two nodes are in the same default" cluster; otherwise check if they  are in the same cluster. 3FSingleton nodes come first, and then ordering based upon the cluster. 4Extract the sub-trees. 5Combine clusters. 65Convert the cluster representation of the trees into s. " Clusters will be labelled with 7s. 8'Start labelling the clusters with this 7. 9 Convert this - into its  representation.   0   0GraphViz bindings for Haskell. Ivan.Miljenovic@gmail.com:8Determine if the given graph is undirected or directed. Convert a graph to GraphViz's Dot format. Convert a graph to Dot1 format, using the specified clustering function ! to group nodes into clusters. . Clusters can be nested to arbitrary depth. =Run the graph via dot to get positional information and then : combine that information back into the original graph.  Note that this doesn' t support graphs with clusters. Pass the plain graph through . This is an IO action,  however since the state doesn' t change it's safe to use ; ) to convert this to a normal function.   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~        <      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZZ[[\]\^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+%,-.%/0123456789:;<=>?@%ABCgraphviz-2009.5.1Data.GraphViz.AttributesData.GraphViz.TypesData.GraphViz.Commands Data.GraphVizData.GraphViz.ParserCombinatorsData.GraphViz.Types.Clustering AttributeUnknownWidthWeight TailLabelTailClipStyleSplinesSkewSizeSidesShapeSepSameTailSameHeadRotateRegularRatioRankSepRankDirQuantumPosPenColorPageDirPagePadOverlap OutputOrder Orientation Normalize NoJustifyNodesepMinlenMinDistMarginLen LandscapeLabelLoc LabelJust LabelFontSize LabelFontNameLabelFontColor LabelFloat LabelDistance LabelAngleLabel ImageScaleImageHeight HeadLabelHeadClipGroupFontSizeFontName FontColor FixedSize FillColorDpiDir DefaultDistDecorate Constraint ConcentrateColorCenterBgColorBb ArrowTail ArrowSize ArrowHeadVerticalPlacementVBottomVCenterVTop JustificationJCenterJRightJLeft ScaleTypeFitYFitXNoScaleScaleRect PointListPointPointD StyleTypeBoldSolidDottedDashedRounded Diagonals InvisibleFilled ShapeType ComponentBox3dFolderTabNoteNoShape RectangleMcircleMsquareMdiamondInvhouse Invtrapezium Invtriangle Tripleoctagon Doubleoctagon DoublecircleOctagonSeptagonHexagonPentagonHouse Parallelogram Trapezium DiamondShape PlaintextTriangleEgg PointShapeCircleEllipsePolygonBoxShapeLTLBRTRBTRTLBRBL OutputMode EdgesFirst NodesFirst BreadthFirstDirTypeNoneBothBackForward ColorTypeRGBAalphaRGBredgreenblue ArrowTypeVeeHalfOpenOpenOBoxBoxCrowEDiamondODiamondDiamondInvEmptyEmptyTeeNoArrowInvODotODotInvDotDotInvNormal readArrowType showWord8Pad readColorType readDirTypereadOutputMode readPageDir readShapeType readStyleType readPoint readPointListreadRect readScaleTypereadJustificationreadVerticalPlacementreadBool readString readAttributereadAttributesListDotEdgeedgeHeadNodeIDedgeTailNodeIDedgeAttributes directedEdgeDotNode DotCluster clusterIDclusterAttributes clusterElemsnodeIDnodeAttributesDotGraphgraphAttributes graphNodes graphEdges directedGraph readDotGraphGraphvizOutputXlibXdotWbmpVtxVrmlVmlzVmlTkSvgzSvgPs2PsPngPlainExtPlainPicPdfPclMpMifJpgJpegJpeIsmapImap_npImapHpglGtkGifGd2GdFigEps DotOutputDiaCmapx_npCmapxCmapCanonGraphvizCommandFdpCircoTwoPiNeatoDotCmd dirCommand undirCommand commandFor runGraphvizrunGraphvizCommandgraphvizWithHandle NodeClusterCN AttributeEdge AttributeNode graphToDotclusterGraphToDot graphToGraph dotizeGraphstringstringscharnoneOfdigitnumberfloatingNumber whitespaceoptionalQuotedStringoptionalQuotednewline skipToNewlinedirGraph undirGraph nodesToStringaddTabsbaseGHC.BaseStringdirEdge undirEdge readDotNode readDotEdge Data.MaybeMaybesquirtGHC.IO.Handle.TypesHandle ClusterTreeCTNTclustersToNodes clustToTree sameClust clustOrdergetNodescollapseNClusts treesToNodesghc-prim GHC.TypesInttreesToNodesFrom treeToNodeisUndirGHC.IOunsafePerformIO