:ל      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                                                 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                           Graphviz-specific exceptions Ivan.Miljenovic@gmail.com>Exceptions that arise from using this library fall into three  categories: $ Unable to parse provided Dot code.  Dot code is not valid UTF-8. 7 An error when trying to run an external program (e.g. dot). 2 Treating a non-custom Attribute as a custom one.    Specification of color schemes. Ivan.Miljenovic@gmail.com) +All of these have a minimum level value of 3, with a maximum  of 9 unless otherwise specified.  Maximum of 11.  Maximum of 12.  Maximum of 8.  Maximum of 11.  Maximum of 11.  Maximum of 11$; note that the last two are listed  after the  values in the  documentation.  Maximum of 11$; note that the last two are listed  first.  Maximum of 11$; note that the last two are listed  after the  values in the  documentation.  Maximum of 11.  Maximum of 11.  Maximum of 8. ! Maximum of 12. "#$%&' Maximum of 8. ()* Maximum of 11. +, Maximum of 8. -&The value of the depends on the name. ./=This represents the color schemes that Graphviz accepts. As  mentioned above, these are not used for actual parsing or  printing. 01)  !"#$%&'()*+,-./01) #,+*)('&%$#"!   !"#$%&'()*+,-../1001Printing and parsing state. Ivan.Miljenovic@gmail.com2@Several aspects of Dot code are either global or mutable state. 3456789:;<=>?@The default separators for LayerSep. 23456789:;<=>?@78923456:;<=>?@23456345678989:;<=>?@Internal utility functions Ivan.Miljenovic@gmail.com First character of a non-quoted  must match this. The rest of a non-quoted  must match this. A.Determine if this String represents a number. This assumes that A is . B0Determine if this String represents an integer. :Graphviz requires double quotes to be explicitly escaped. +Remove explicit escaping of double quotes. KThe following are Dot keywords and are not valid as labels, etc. unquoted.  Fold over s; first param is for  , second for . ABABHelper functions for Parsing. Ivan.Miljenovic@gmail.com>CDEFGHA ReadS-like type alias. IJ A variant of I' where it is assumed that the provided ( parsing function consumes all of the  input (with the ( exception of whitespace at the end). K?Parse the required value, returning also the rest of the input   that hasn'(t been parsed (for debugging purposes). LIf unable to parse Dot code properly,  a  . M@Parse the required value with the assumption that it will parse  all of the input . N7Use this when you do not want numbers to be treated as  values. OParse a  that doesn't need to be quoted. PQR*Used when quotes are explicitly required; S?Parse a floating point number that actually contains decimals. T1Parse a bracketed item, discarding the brackets. The definition of bracket defined in Polyparse uses   and thus doesn'$t allow backtracking and trying the / next possible parser. This is a version of bracket that does. UVWXYZ[\]^_`ab'Parse and discard optional whitespace. cdefghParse a  where the provided s (as well as " and  \%) are escaped and the second list of s are those that E are not permitted. Note: does not parse surrounding quotes. The   value indicates whether empty s are allowed or  not. ij6Consume all whitespace and newlines until a line with > non-whitespace is reached. The whitespace on that line is  not consumed. k?Parses and returns all characters up till the end of the line, . but does not touch the newline characters. lmnopqFor 6-like data structures where the presence of the field 1 name without a value implies a default value. rstuvwxyzyABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz:HCDEFGKMIJLTNOQPABRhUV[\S]^_`abcdefgijvlwxkmnopqrstuWXYZyz8CDEFGDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyzPre-process imported Dot code. Ivan.Miljenovic@gmail.com {9Remove unparseable features of Dot, such as comments and D multi-line strings (which are converted to single-line strings). @Parse out comments and make quoted strings spread over multiple 4 lines only over a single line. Should parse the entire input  .  6Parses an unwanted part of the Dot code (comments and / pre-processor lines; also un-splits lines).  =Remove pre-processor lines (that is, those that start with a  #7). Will consume the newline from the beginning of the E previous line, but will leave the one from the pre-processor line 3 there (so in the end it just removes the line).  Parse -style comments.  Parse * ... *-style comments.  Lines can be split with a \ at the end of the line. {{{/Helper functions for converting to Dot format. Ivan.Miljenovic@gmail.com|DA class used to correctly print parts of the Graphviz Dot language.  Minimal implementation is }. }>The unquoted representation, for use when composing values to $ produce a larger printing value. ~>The actual quoted representation; this should be quoted if it A contains characters not permitted a plain ID String, a number - or it is not an HTML string. Defaults to }. :The correct way of representing a list of this value when ? printed; not all Dot values require this to be implemented. 1 Defaults to Haskell-like list representation. The quoted form of ; defaults to wrapping double  quotes around the result of  (since the default 7 implementation has characters that must be quoted). 1A type alias to indicate what is being produced. "Correctly render Graphviz output. AConvert to DotCode; note that this has no indentation, as we can F only have one of indentation and (possibly) infinite line lengths.  For use with OverloadedStrings* to avoid ambiguous type variable errors.  For use with OverloadedStrings* to avoid ambiguous type variable errors. Check to see if this  needs to be quoted or not. )Escape quotes in Strings that need them. CEscape quotes and quote Texts that need them (including keywords). &Escape the specified chars as well as ". &Escape the specified chars as well as " and then wrap the  result in quotes. >Ensure the provided characters are all escaped. Note that we  cannot convert to  immediately because  ) needs to pass the result from this to  to determine if ! it needs to be quoted or not. U !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW|}~|}~|}~}~%Internal Attribute value definitions Ivan.Miljenovic@gmail.com:Specifies a name for ports (used also in record-based and 7 HTML-like labels). Note that it is not valid for a   value to contain a colon (:#) character; it is assumed that it  doesn't. XYZ5When attached to a node in a DotEdge definition, the   and the  can be in separate quotes. [Z[ Z[4Specification of Color-related types and functions. Ivan.Miljenovic@gmail.com;AThe X11 colors that Graphviz uses. Note that these are slightly  different from the "normal"% X11 colors used (e.g. the inclusion  of Crimson ). Graphviz'(s list of colors also duplicated almost  all Gray colors with Grey ones; parsing of an   which is specified using "grey" will succeed, even for those  that don'$t have the duplicate spelling (e.g. DarkSlateGray1). Equivalent to setting Style [SItem Invisible []].       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~@Defining a color for use with Graphviz. Note that named colors  have been split up into s and those based upon the  Brewer color schemes. This value should be  between 1 and the  level of the  - being  used. The ,  and  values must all  be 0 <= x <=1. \]^_`Covers the four cases:  yyyy  * /yyyy  * X11yyyy  * yyyy Attempt to convert a  into a a value with an alpha  channel. The use of b is because  values 4 cannot be converted without knowing which actual   and % level color scheme is being used. c Convert an  to its equivalent a value. Note  that it uses d because of  ; all other   values are completely opaque.  Convert a a value to an  .  Convert an d to an  . The exception to  this is for any d which has alphaChannel ac == 0;  these are converted to  X11Color  (note that the  e instance for such an d is " transparent"). fThe g of a h value. ]  !"#$%&'()*+,-./01      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~`/10-. ,+*)('&%$#"!  ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      4"~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~/Specification of HTML-like types for Graphviz. Ivan.Miljenovic@gmail.comPASpecifies how an image will use any extra space available in its < cell. If undefined, the image inherits the value of the   ImageScale attribute. Default value. ?Specifies vertical placement. When an object is allocated more D space than required, this value determines where the extra space ) is placed above and below the object. Default value. ASpecifies horizontal placement. When an object is allocated more D space than required, this value determines where the extra space + is placed left and right of the object.  values only; aligns lines * of text using the full cell width. The , alignment of a line is determined by its " (possibly implicit) associated   element. Default value. Note that not all  values are valid everywhere: 7 see the comments for each one on where it is valid.  Valid for:  , .  Valid for:  , .  Valid for:  , . Has an alias of TOOLTIP.  Valid for:  , .  Valid for: .  Valid for: .  Valid for: .  Valid for:  , .  Valid for: , .  Valid for:  , .  Valid for:  , .  Valid for:  , . Default is .  Valid for: , .  Valid for: . Default is 1.  Valid for:  , .  Valid for:  , . Default is 2 ; maximum is 127.  Valid for:  , . Default is 2.  Valid for:  . Default is 1; 0 represents no border.  Valid for:  , . Default is 1; 0 represents no border.  Valid for:   (including ), , .  Valid for: .  Valid for:  , , . <The various HTML-like label-specific attributes being used. The path to an image; accepted  are  and . )Cells either recursively contain another   or else a  path to an image file.  A row in an  . The list of  values is  assumed to be non-empty. ?A table in HTML-like labels. Tables are optionally wrapped in  overall FONT tags.  Optional FONT attributes. i  [] denotes empty FONT tags;  j denotes no such tags. &This list is assumed to be non-empty. #Textual items in HTML-like labels. Only accepts an optional   ; defined this way for ease of  printing/ parsing.   =Represents a textual component of an HTML-like label. It is  assumed that an   & list is non-empty. It is preferable  to "group"  " values together rather than have D individual ones. Note that when printing, the individual values > are concatenated together without spaces, and when parsing  anything that isn't a tag is assumed to be an   : that is,  something like "<BR/> <BR/>" is parsed as: / [HtmlNewline [], HtmlStr " ", HtmlNewline []]  AThe overall type for HTML-like labels. Fundamentally, HTML-like E values in Graphviz are either textual (i.e. a single element with & formatting) or a table. Note that   values can be  nested via .   klOnly to be used when the | instance of a matches the ! HTML syntax (i.e. numbers and Html* values;  values also  seem to work). mnopqrstuParses an HTML-compatible  , de-escaping known characters.  Note: this will/ fail if an unknown non-numeric HTML-escape is  used. v@The characters that need to be escaped and what they need to be  replaced with (sans &). wAFlip the order and add extra values that might be escaped. More 5 specifically, provide the escape code for spaces ("nbsp") and  apostrophes ("apos") since they aren't used for escaping. xyzPrint something like  FOO ATTR=\"ATTR_VALUE\"value \/FOO {|Print something like  FOO ATTR=\"ATTR_VALUE\"\/ }Parse something like  FOO ATTR=\"ATTR_VALUE\"value \/FOO ~Parse something like  FOO ATTR=\"ATTR_VALUE\"\/ ;     ;     ;        'Definition of the Graphviz attributes. Ivan.Miljenovic@gmail.com Only valid for Nodes. !" For use with %. #$%&'()*+,Device Dependent -Nodes and Clusters . Nodes only /Nodes and Clusters 0Nodes and Edges 1Nodes and Edges 2Nodes and Edges 3Nodes and Edges 4Nodes and Edges 5&An individual style item. Except for ,, the []  should be empty. 6789:;<=>?@ABCDEFGH%Must specify the record shape with a N. I%Must specify the record shape with a N. JKLMNOPQRSTUVWXYZ[\]^_`Has synonym of none. abcdefgHas synonyms of rect and  rectangle. hijklmnopqrsGSpecify the root node either as a Node attribute or a Graph attribute. tFor Graphs only uFor Nodes only vFor Nodes only wxyz{@The number of points in the list must be equivalent to 1 mod 3; " note that this is not checked. |}+Upper-case first character is major order; / lower-case second character is minor order. ~-Controls how (and if) edges are represented.  fdp only Sort by cols, sort  by user, number of  rows/cols ,If non-negative, then packs; otherwise doesn't. 0A list of layer names. The names should all be  values, 9 and when printed will use an arbitrary character from   defLayerSep. ;You should not have any layer separator characters for the   option, as they won't be parseable. Should not be a number of all.  Only when mode ==  Only when sfdp is  available, j  is equivalent to  i 1000.  Can only be i for u 3 or greater. )Input to Graphviz only: specify that the $ node position should not change. ?Specifies the sub-values of a record-based label. By default, , the cells are laid out horizontally; use  to change C the orientation of the fields (can be applied recursively). To ' change the default orientation, use $h. Will result in no label for  that cell. ,A RecordFields value should never be empty. For nodes only; requires  either I or  H as the shape. If ` is used, the    value is the entire  "shape"; if anything else  except c is used then  the   is embedded  within the shape.  Either a  or a (2D)  (i.e. created with  ).  Only when mode == . /Specify where to place arrow heads on an edge. Draw an undirected edge. &Draw arrows on both ends of the edge. +Draw a reverse directed edge with an arrow  to the node it's coming from. *Draw a directed edge with an arrow to the  node it's pointing go. .Should only have 2D points (i.e. created with ). BRepresents which side (when looking towards the node the arrow is  pointing to) is drawn. "What modifications to apply to an . Dot; has a basic grammar of arrow shapes which allows usage of ; up to 1,544,761 different shapes from 9 different basic  5s. Note that whilst an explicit list is used in the  definition of ), there must be at least one tuple and a C maximum of 4 (since that is what is required by Dot). For more  information, see:  (http://graphviz.org/doc/info/arrows.html >The 19 basic arrows shown on the overall attributes page have : been defined below as a convenience. Parsing of the 5 8 backward-compatible special cases is also supported. Some "s (mainly label-like ones) take a  argument : that allows for extra escape codes. This library doesn' t do any E extra checks or special parsing for these escape codes, but usage  of  rather than  indicates that the Graphviz ; tools will recognise these extra escape codes for these  s. BThe extra escape codes include (note that these are all Strings):  \N- Replace with the name of the node (for Node s). \G. Replace with the name of the graph (for Node s) ? or the name of the graph or cluster, whichever is 5 applicable (for Graph, Cluster and Edge s). \E6 Replace with the name of the edge, formed by the two 9 adjoining nodes and the edge type (for Edge s). \T2 Replace with the name of the tail node (for Edge  s). \H2 Replace with the name of the head node (for Edge  s). \L Replace with the object's label (for all s).  Also, if the  in question is N, a or  , then \n, \l and \r split the label into lines > centered, left-justified and right-justified respectively. If performing any custom pre-/!post-processing on Dot code, you % may wish to utilise some custom . These are wrappers  around the  constructor (and thus   is just an alias for ). You should ensure that  is  for any potential  custom attribute name. 0The name for an UnknownAttribute; must satisfy . >Attributes are used to customise the layout and design of Dot D graphs. Care must be taken to ensure that the attribute you use ; is valid, as not all attributes can be used everywhere.  Valid for(: Assumed valid for all; the fields are  name and value respectively.  Valid for: N; Default: 0.0; Minimum:  -MAXFLOAT, -1000  Valid for: N; Default: 0.75; Minimum: 0.01  Valid for: E; Default: 1.0; Minimum: 0 (dot), 1 (neato,fdp,sfdp)  Valid for: G; Default: 0.05; Minimum: 0.0; Notes : not dot  Valid for: G; Default: none  Valid for: N; Notes : write only  Valid for: G; Parsing Default: ; Notes: bitmap output only  Valid for: NEC; Default: ""; Notes: svg, cmap only  Valid for: ENGC; Default: none; Notes: svg, map only  Valid for: E; Default: ""; Notes: svg, cmap only  Valid for: E; Default: none; Notes: svg, map only  Valid for: E; Default:    Valid for: E; Default:  ""  Valid for: E; Default: ; Parsing Default:    Valid for: E; Default: ""; Notes: svg, map only   Valid for: ENC   Valid for: G; Default: ""; Notes : svg only   Valid for: G; Notes: fdp, neato only   Valid for: G; Parsing Default:   Valid for: GCN; Default: 0; Minimum: 0  Valid for: G; Default: F; Notes : sfdp only  Valid for: N; Default: 0.0; Minimum: -100.0  Valid for: G  Valid for: N; Default: 4; Minimum: 0  Valid for: ENG; Default: 0; Minimum: 0; Notes : dot only  Valid for: N; Default: e  Valid for: N; Default: ""  Valid for: G; Default:  4; Notes : not dot  Valid for: G; Default: 30; Notes : dot only  Valid for: N; Default: 8 (output), 20 (overlap and image maps)  Valid for: E; Default: ""; Notes : dot only  Valid for: E; Default: ""; Notes : dot only  Valid for: G; Default: 0  Valid for: GN; Default: t "" (graphs), u (nodes); Parsing Default: v; Notes: circo, twopi only  Valid for: G; Default: 1.0; Minimum: 0.0; Notes : sfdp only  Valid for: G; Default: ; Parsing Default: ; Notes : dot only  Valid for: N; Default: ; Parsing Default:    Valid for: N; Notes : write only ! Valid for: G " Valid for: S; Notes : dot only # Valid for: G; Default: [0.5] (dot), [1.0] (twopi); Minimum: [0.02]; Notes: twopi, dot only $ Valid for: G; Default: l; Notes : dot only % Valid for: G; Default: 0.0; Minimum: 0.0 & Valid for: G; Default: z; Parsing Default: z; Notes : sfdp only ' Valid for: EN ( Valid for: N; Default: ; Parsing Default: ; Notes: fdp, neato only ) Valid for: NC; Default: shape default (nodes), 1 (clusters); Minimum: 0 * Valid for: CNE; Default: 1.0; Minimum: 0.0 + Valid for: C; Default:   , Valid for: G - Valid for: G; Default:  . Valid for: G; Default:  0.0555 (4 points) / Valid for: G; Default: ; Parsing Default: ; Notes : not dot 0 Valid for: G; Default: ; Notes : not dot 1 Valid for: G; Default: ; Parsing Default: ; Notes : not dot 2 Valid for: G; Default: -4; Minimum: -1.0e10; Notes : prism only 3 Valid for: G; Default:  4 Valid for: N; Default: 0.0; Minimum: 360.0 5 Valid for: G; Default: ""; Notes : dot only 6 Valid for: G; Notes : dot only 7 Valid for: G; Notes : dot only 8 Valid for: G; Default: ; Parsing Default: ; Notes : not dot 9 Valid for: GCNE; Default: ; Parsing Default:  : Valid for: G; Default: 0.25; Minimum: 0.02; Notes : dot only ; Valid for: G; Default: ; Parsing Default: ; Notes*: neato only; requires the Mosek software < Valid for: G; Default: ; Notes : neato only = Valid for: G; Default: ; Notes : neato only > Valid for: E; Default: 1; Minimum: 0; Notes : dot only ? Valid for: G; Default: 1.0; Minimum: 0.0; Notes : circo only @ Valid for: G; Default: 1.0; Notes : dot only A Valid for: G; Default: 100 * # nodes (mode == ), 200 (mode == ), 600 (fdp); Notes: fdp, neato only B Valid for: NG; Default: device dependent C Valid for: E; Default: ""; Notes : dot only D Valid for: EGC; Notes : write only E Valid for: E; Default: ""; Notes : dot only F Valid for: G; Default: g; Minimum: 0; Notes : sfdp only G Valid for: G; Default: 0.0; Notes : neato only H Valid for: E; Default: 1.0 (neato), 0.3 (fdp); Notes: fdp, neato only I Valid for: G; Default: "" J Valid for: EN K Valid for: G; Default:  [] L Valid for: G; Default:  " :t" M Valid for: G; Default: ; Parsing Default:  N Valid for: ENGC; Default:  "N" (nodes),  "" (otherwise) O Valid for: E; Default: ""; Notes: svg, cmap only P Valid for: E; Default: none; Notes: svg, map only Q Valid for: GCN; Default: ! (clusters),  (root graphs),   (nodes) R Valid for: GC; Default:  S Valid for: E; Default: 14.0; Minimum: 1.0 T Valid for: E; Default: " Times-Roman" U Valid for: E; Default:   V Valid for: E; Default: ; Parsing Default:  W Valid for: E; Default: 1.0; Minimum: 0.0 X Valid for: E; Default: -25.0; Minimum: -180.0 Y Valid for: E; Default: ""; Notes: svg, map only Z Valid for: N; Default: ; Parsing Default:  [ Valid for: N; Default: "" \ Valid for: GNE; Default:  ""; Notes: svg, postscript, map only ] Valid for: N; Default: 0.5; Minimum: 0.02 ^ Valid for: E; Default: ""; Notes: svg, cmap only _ Valid for: E; Default: none; Notes: svg, map only ` Valid for: E; Default:   a Valid for: E; Default:  "" b Valid for: E; Default: ; Parsing Default:  c Valid for: E; Default: ""; Notes: svg, map only d Valid for: N; Default: ""; Notes : dot only e Valid for: ENGC; Default: 14.0; Minimum: 1.0 f Valid for: G; Default: system dependent g Valid for: G; Default: ""; Notes : svg only h Valid for: ENGC; Default: " Times-Roman" i Valid for: ENGC; Default:   j Valid for: N; Default: ; Parsing Default:  k Valid for: NC; Default:   (nodes),   (clusters) l Valid for: G; Default:  3; Notes : not dot m Valid for: G; Default: .0001 * # nodes (mode == ), .0001 (mode == ); Notes : neato only n Valid for: E; Default: ""; Notes: svg, cmap only o Valid for: E; Default: none; Notes: svg, map only p Valid for: E; Default: ""; Notes: svg, map only q Valid for: G; Default: 96.0, 0.0; Notes: svg, bitmap output only; " resolution" is a synonym r Valid for: N; Default: 0.0; Minimum: -100.0 s Valid for: G; Default: ; Parsing Default: ; Notes : neato only t Valid for: E; Default:  (directed),  (undirected) u Valid for: G; Default: 2; Minimum: 2; Notes: sfdp, fdp, neato only v Valid for: G; Default: 2; Minimum: 2; Notes: sfdp, fdp, neato only w Valid for: G; Default: 1+(avg. len)*sqrt(|V|); Minimum: epsilon; Notes : neato only x Valid for: E; Default: ; Parsing Default:  y Valid for: E; Default: ; Parsing Default: ; Notes : dot only z Valid for: G; Default: ; Parsing Default:  { Valid for: G; Default: ; Parsing Default: ; Notes : dot only | Valid for: ENG; Default: "" } Valid for: ENC; Default: [ ] ~ Valid for: ENCG; Default: 1  Valid for: G; Default: ; Notes : dot only  Valid for: G; Default: ; Parsing Default:   Valid for: GC; Default:    Valid for: G; Notes : write only  Valid for: G; Notes : dot only  Valid for: E; Default:   Valid for: E; Default: 1.0; Minimum: 0.0  Valid for: E; Default:   Valid for: ENGC; Default: none; Notes: svg, postscript, map only  Valid for: GC; Default: 0.3; Minimum: 0; Notes: sfdp, fdp only  Valid for: G; Default: 0.99; Minimum: 0.0; Notes : neato only Determine if this  is valid for use with Graphs. Determine if this ! is valid for use with Clusters. Determine if this " is valid for use with SubGraphs. Determine if this  is valid for use with Nodes. Determine if this  is valid for use with Edges. Determine if two  are the same type of . (Return the default value for a specific  if possible; graph&cluster values are preferred over node edge values. Determine if the provided  value is a valid name for an . Create a custom attribute. 6Determines whether or not this is a custom attribute. /The value of a custom attribute. Will throw a   if the provided  isn' t a custom  one. .The name of a custom attribute. Will throw a   if the provided  isn' t a custom  one. EReturns all custom attributes and the list of non-custom Attributes. @Find the (first instance of the) specified custom attribute and / returns it along with all other Attributes. =Delete all custom attributes (actually, this will delete all  / values; as such it can also be used to remove  legacy attributes). 9Removes all instances of the specified custom attribute. Apply no modifications to an .  and  Print a ( value as expected within a Record data  structure. Create a point with only x and y values. 9  !"#$%&'()*+,-./01      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ! Ggfedcba`_^]\[ZYXWVUTSRQPONMLKJIH{|svut}~wzyxmrqponhlkji;>=<%&'()*"$#?FEDCBA@7:9856+43210/.-,!  !"$##$%&'()*&'()*+ 43210/.-,,-./012345667:9889:;>=<<=>?FEDCBA@@ABCDEFG gfedcba`_^]\[ZYXWVUTSRQPONMLKJIHHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghlkjiijklmrqponnopqrsvuttuvwzyxxyz{||}~~ ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~:Common internal functions for dealing with overall types. Ivan.Miljenovic@gmail.comC An edge in DotGraph.  A node in DotGraph. 'Represents a list of top-level list of  s for the  entire graph/sub-graph. Note that  also applies to   DotSubGraphs. Note that Dot allows a single  to be listen on a line; 6 if this is the case then when parsing, the type of  it " is determined and that type of GlobalAttribute is created. AA polymorphic type that covers all possible ID values allowed by % Dot syntax. Note that whilst the C and |  instances for ( will properly take care of the special 9 cases for numbers, they are treated differently here. =Takes into account edge statements containing something like  a -> {b c}. This must# only be used for sub-graphs, etc. Print the actual ID for a  DotSubGraph. KParse the separator (and any other whitespace present) between statements. CC+Consider Attributes equal on constructors. Ivan.Miljenovic@gmail.comDefined as a wrapper around  where equality is based 2 solely upon the constructor, not the contents. Create lookups for  Attributes. Ivan.Miljenovic@gmail.com-"The available information on each  (both explicit and implicit). 0The available information for each cluster; the [] B denotes all locations where that particular cluster is located < (more than one location can indicate possible problems). @The path of clusters that must be traversed to reach this spot. If one 3 is a prefix of another, then take the longer one;  otherwise, take the first .  3User-friendly wrappers around Graphviz attributes. Ivan.Miljenovic@gmail.com+0A particular way of drawing the end of an edge. $A particular style type to be used. ?A convenience class to make it easier to create labels. It is E highly recommended that you make any other types that you wish to D create labels from an instance of this class, preferably via the  String or Text instances. This function only creates a N value to enable you to use  it for  such as a, etc. Equivalent to N . ; the most common label  .  An alias for $ for use with the OverloadedStrings  extension.  An alias for $ for use with the OverloadedStrings  extension. >Specify the background color of a graph or cluster. Requires   . ,Specify the fill color of a node. Requires  . Specify the color of text. 4Specify the color of the bounding box of a cluster. The color7 attribute serves several purposes. As such care must = be taken when using it, and it is preferable to use those 4 alternatives that are available when they exist.  The color of edges;  The bounding color of nodes; 4 The bounding color of clusters (i.e. equivalent to );  If the    is set, then it defines the 3 background color of nodes and clusters unless  or   respectively is set. Also available for edges. Also available for edges. Also available for edges. Also available for edges. Also available for edges. Also available for clusters. Also available for clusters. Only available for nodes. BSpecify the width of lines. Valid for clusters, nodes and edges. The shape of a node. @How to draw the arrow at the node the edge is pointing to. For ( an undirected graph, requires either   or   . ;How to draw the arrow at the node the edge is coming from.  Requires either   or EdgeEnds . *Specify where to place arrows on an edge. A shorter variant than using . A shorter variant than using PortName from . t      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgt~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      Ggfedcba`_^]\[ZYXWVUTSRQPONMLKJIH) ,The canonical representation of Dot graphs. Ivan.Miljenovic@gmail.comA Dot graph in canonical form. If , no multiple edges are drawn. -Assumed to be an injective mapping function. #%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. . Clusters can be nested to arbitrary depth. Indicates that the   is in  the Cluster c. (Indicates the actual Node in the Graph. 7Extract the clusters and nodes from the list of nodes. <Convert a single node cluster into its tree representation. Two nodes are in the same default" cluster; otherwise check if they  are in the same cluster. FSingleton nodes come first, and then ordering based upon the cluster. Extract the sub-trees. Combine clusters. 5Convert the cluster representation of the trees into s  and s (with  = , and   = j).  Convert this  into its Dot representation.  &Haskell representation of Dot graphs. Ivan.Miljenovic@gmail.com:This class exists just to make type signatures nicer; all  instances of  should also be an instance of  . :This class exists just to make type signatures nicer; all  instances of  should also be an instance of  . :This class exists just to make type signatures nicer; all  instances of  should also be an instance of  . >This class is used to provide a common interface to different # ways of representing a graph in Dot form. You will most probably not& need to create your own instances of  this class. >The type variable represents the current node type of the Dot  graph, and the * restriction is there because in practice = most implementations of some of these methods require it. <Convert from a graph in canonical form. This is especially ( useful when using the functions from Data.GraphViz.Algorithms. Return the ID of the graph. Set the ID of the graph. Is this graph directed? (Set whether a graph is directed or not. >Is this graph strict? Strict graphs disallow multiple edges. )A strict graph disallows multiple edges. 8Change the node values. This function is assumed to be   injective,, otherwise the resulting graph will not be . identical to the original (modulo labels). =Return information on all the clusters contained within this  , as well as the top-level  for the  overall graph. Return information on the s contained within this  . The # parameter indicates if applicable   should be included. Return information on the s contained within this  . The # parameter indicates if applicable   should be included. >Give any anonymous sub-graphs or clusters a unique identifier  (i.e. there will be no j key in the   from ). Returns all resultant  s in the  (not including  NodeAttrs). Returns all resultant  s in the  (not including  EdgeAttrs).  The actual Dot code for an instance of . Note that it  is expected that  .  ==  D (this might not be true the other way around due to un-parseable  components). BParse a limited subset of the Dot language to form an instance of  6. Each instance may have its own limitations on what ) may or may not be parseable Dot code. 0Also removes any comments, etc. before parsing.    )+  'Various algorithms on Graphviz graphs. Ivan.Miljenovic@gmail.com%  Place edges in the clusters  where their nodes are rather  than in the top-level graph.  Put common  as  top-level .  Options that are more like how  dot -Tcanon works.  $Implements similar functionality to  dot -Tcanon. However, this " method requires no IO and doesn'#t care about image locations, etc. AThis function will create a single explicit definition for every > node in the original graph and place it in the appropriate B position in the cluster hierarchy. All edges are found in the A deepest cluster that contains both nodes. Currently node and 5 edge attributes are not grouped into global ones.  As with  , but allow custom .    !"#$%&                #IO-related functions for graphviz. Ivan.Miljenovic@gmail.com'ACorrectly render Graphviz output in a more machine-oriented form ) (i.e. more compact than the output of  renderDot). Explicitly convert a (lazy) ( to a  value using  UTF-8 encoding, throwing a  if there is a  decoding error.  Output the DotRepr to the specified ).  Output the DotRepr to the spcified ) in a more compact,  machine-oriented form. *Strictly read in a & value using an appropriate encoding. Read in and parse a DotRepr value from the specified ). Write the specified DotRepr to file. Read in and parse a DotRepr value from a file. Print the specified DotRepr to +. Read in and parse a DotRepr value from ,. )Run an external command on the specified DotRepr. Remember to  use - on the ) for the output function if  necessary. (If the command was unsuccessful, then a  is  thrown. Command to run Command-line arguments Obtaining the output . A version of /& that fully evaluates the contents of  the )' (that is, until EOF is reached). The ) is  not closed. 0Store the result of the ) consumption into the 1.   $Functions to run Graphviz commands. Ivan.Miljenovic@gmail.com4Unlike ', these items do not produce an output C file; instead, they directly draw a canvas (i.e. a window) with  the resulting image. :The possible Graphviz output formats (that is, those that  actually produce a file). Wireless BitMap format; " monochrome format usually used ! for mobile computing devices. "Virtual Reality Modeling Language $ format; requires nodes to have a   attribute. Compressed VML format; ! is  usually preferred. Vector Markup Language; " is  usually preferred.  Tagged Image File Format. !Compressed SVG format. "!Scalable Vector Graphics format. #PostScript for PDF. $ PostScript. %"Portable Network Graphics format. &As for ', but provides port % names on head and tail nodes when  applicable. 'Simple text format. (Portable Document Format. )The JPEG image format. *As for ,, except only ! rectangles are used as active  areas. +As for -, except only ! rectangles are used as active  areas. ,Client-side imagemap. -Server-side imagemap. .Icon image file format. /Graphics Interchange Format. 0Compressed version of 1. 1Internal GD library format. 2FIG graphics language. 3Encapsulated PostScript. 4As with 5, but provides $ even more information on how the  graph is drawn. 5 Reproduces the input along with  layout information. 6"Pretty-printed Dot output with no  layout performed. 7Windows Bitmap Format. 2BThis class is for those data types that are valid options for the " Graphviz tools to use with the -T argument. 38?The available Graphviz commands. The following directions are B based upon those in the Graphviz man page (available online at   !http://graphviz.org/pdf/dot.1.pdf, or if installed on your  system  man graphviz)). Note that any command can be used on ( both directed and undirected graphs. 9 For symmetric layout of graphs. :For circular layout of graphs. ;For radial layout of graphs. < For symmetric layouts of graphs " (ideal for undirected graphs). ="For hierachical graphs (ideal for  directed graphs). 4>)The default command for directed graphs. ?+The default command for undirected graphs. @@The appropriate (default) Graphviz command for the given graph. 5"A default file extension for each . AFRun the recommended Graphviz command on this graph, saving the result 3 to the file provided (note: file extensions are not checked). BARun the chosen Graphviz command on this graph, saving the result 3 to the file provided (note: file extensions are not checked). C.Append the default extension for the provided  to  the provided 6 for the output file. D<Run the chosen Graphviz command on this graph, but send the 5 result to the given handle rather than to a file. Note that the ) -> 7 a function must fully consume  the input from the ); e.g. use strict  ByteStrings rather  than lazy ones. (If the command was unsuccessful, then a  is  thrown. Which command to run The  to use The  type Extract the output The error or the result. 8EBRun the chosen Graphviz command on this graph and render it using  the given canvas type. FARun the recommended Graphviz command on this graph and render it  using the given canvas type. / !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF/8=<;:9>?@76543210/.-,+*)('&%$#"! ABCEFD/76543210/.-,+*)('&%$#"!  !"#$%&'()*+,-./012345678=<;:99:;<=>?@ABCDEF,Alternate definition of the Graphviz types. Ivan.Miljenovic@gmail.com!GHIJKLMNOPQR@The internal representation of a generalised graph in Dot form. STIf , no multiple edges are drawn. UVW9 Convert a SR to a SR, keeping the same order of  statements. :;<=>?@ABCDEFGH-Assumed to be an injective mapping function. #GHIJKLMNOPQRSTUVW%RSTUVWQLPONMGHIJKGHIJKHIJKLPONMMNOPQRSTUVWSTUVW+A monadic interface for making Dot graphs. Ivan.Miljenovic@gmail.com"IJKLMNOPQRXThe actual monad; as with Y" but allows you to return a value E within the do-block. The actual implementation is based upon the  Writer monad. STY+The monadic representation of a Dot graph. UVWZ9Create a directed dot graph with the specified graph ID. [.Create a directed dot graph with no graph ID. \;Create a undirected dot graph with the specified graph ID. ]0Create a undirected dot graph with no graph ID. XYZ[^ Add graph sub-graphcluster attributes. _Add global node attributes. `Add global edge attributes a"Add a named cluster to the graph. bAdd a node to the graph. c,Add a node with no attributes to the graph. dAdd an edge to the graph. e Add an edge with no attributes. f An alias for e% to make edges look more undirected. XYZ[\]^_`abcdefYXZ[\]^_`abcdefXYZ[\]^_`abcdef+A graph-like representation of Dot graphs. Ivan.Miljenovic@gmail.comag@The decomposition of a node from a dot graph. Any loops should  be found in m rather than l . Note also  that these are createdconsumed as if for directed/ graphs. hij'The cluster this node can be found in;  Nothing indicates the node can be  found in the root graph. klm\]^_`abcdefghijkln0A Dot graph that allows graph operations on it. mnopqrsoptq Merge the g- into the graph. Assumes that the specified : node is not in the graph but that all endpoints in the  m and l (with the exception of loops) E are. If the cluster is not present in the graph, then it will be = added with no attributes with a parent of the root graph.  Note that & and | are not quite inverses, as this D function will add in the cluster if it does not yet exist in the  graph, but | will not delete it. r(Recursively merge the list of contexts. $ composeList = foldr (&) emptyGraph uvws>Add a node to the current graph. Throws an error if the node  already exists in the graph. BIf the specified cluster does not yet exist in the graph, then it = will be added (as a sub-graph of the overall graph and no  attributes). %The cluster the node can be found in  (Nothing refers to the root graph). t A variant of s# that takes in a DotNode (not in a  cluster). uBAdd the specified edge to the graph; assumes both node values are B already present in the graph. If the graph is undirected then  the order of nodes doesn' t matter. v A variant of u that takes a  value. w?Add a new cluster to the graph; throws an error if the cluster ) already exists. Assumes that it doesn't match the identifier of 2 the overall graph. If the parent cluster doesn't already exist ' in the graph then it will be added. !The identifier for this cluster. The parent of this cluster  (Nothing refers to the root  graph) xxHSpecify the parent of the cluster; adds both in if not already present. y>Specify the attributes of the cluster; adds it if not already  present. z!Create a graph with no clusters. {@Convert this DotGraph into canonical form. All edges are found / in the outer graph rather than in clusters. |A partial inverse of q&, in that if a node exists in a graph D then it will be decomposed, but will not remove the cluster that ; it was in even if it was the only node in that cluster. }As with |, but do not specify which node to  decompose. ~ARecursively decompose the Dot graph into a list of contexts such  that if (c:cs) = decomposeList dg, then dg = c & r cs. 5Note that all global attributes are lost, so this is not 5 suitable for representing a Dot graph on its own. yz{?Delete the specified node from the graph; returns the original  graph if that node isn' t present. =Delete all edges between the two nodes; returns the original  graph if there are no edges. BDeletes the specified edge from the DotGraph (note: for unordered - graphs both orientations are considered). As with  but takes a  rather than individual  values. >Delete the specified cluster, and makes any clusters or nodes = within it be in its root cluster (or the overall graph if  required). ?Remove clusters with no sub-clusters and no nodes within them.  Does this graph have any nodes? #Does this graph have any clusters? /Determine if this graph has nodes or clusters. .Return the ID for the cluster the node is in. $Return the attributes for the node. APredecessor edges for the specified node. For undirected graphs  equivalent to . ?Successor edges for the specified node. For undirected graphs  equivalent to . All edges involving this node. |6Which cluster (or the root graph) is this cluster in? }+Convert any existing DotRepr instance to a n. BConvert a canonical Dot graph to a graph-based one. This assumes > that the canonical graph is the same format as returned by  {. The " unsafeness" is that all nodes are assumed E to be explicitly listed precisely once, and that only edges found 1 in the root graph are considered. If this isn't the case, use   instead. The  graphToDot function from  Data.GraphViz produces output  suitable for this function. ~+Uses the ParseDot instance for generalised SRs. )Uses the PrintDot instance for canonical s.  If the graph is the output from , then it should be safe to  substitute  for .  It should be safe to substitute  for   in the output of this. 8ghijklmnopqrstuvwxyz{|}~8nghijklm{ozpqrstuvwxy|}~+ghijklmhijklmnopqrstuvwxyz{|}~ Graphviz bindings for Haskell. Ivan.Miljenovic@gmail.com"8Used to augment an edge label with a unique identifier. -Augment the current edge label type with the  applied  to that edge. -Augment the current node label type with the  applied  to that node.  An alias for  when dealing with FGL graphs. )Defines the parameters used to convert a  into a . A value of type  n nl el cl l indicates that  the  has a node type of n, node labels of type nl,  edge labels of type el!, corresponding clusters of type cl and 3 after clustering the nodes have a label of type l (which may or  may not be the same as nl). @The tuples ins the function types represent labelled nodes (for  (n,nl) and (n,l)) and labelled edges ((n,n,el) ; the value   (f,t,ftl) is an edge from f to l with a label of ftl). The clustering in  can be to arbitrary depth. True if the graph is directed; False  otherwise. The top-level global  for the entire  graph. 1A function to specify which cluster a particular  node is in. The name/identifier for a cluster. /Specify which global attributes are applied in  the given cluster.  The specific  Attributes for a node.  The specific  Attributes for an edge. ,Determine if the given graph is undirected.  A default " value which assumes the graph is - directed, contains no clusters and has no s set. @If you wish to have the labels of the nodes to have a different  type after applying " from before clustering, then you ! will have to specify your own  value from  scratch (or use ). If you use a custom ! function (which if you actually ? want clusters you should) then you should also override the  (nonsensical) default .  A variant of # that enforces that the clustering  type is '()'2 (i.e.: no clustering); this avoids problems when  using * internally within a function without any . constraint on what the clustering type is. A # value where every field is set to  5. This is useful when you have a function that will ( set some of the values for you (e.g.  ) but you  don':t want to bother thinking of default values to set in the 5 meantime. This is especially useful when you are D programmatically setting the clustering function (and as such do & not know what the types might be). Determine if the provided  is directed or not and set the  value of  appropriately. Convert a graph to Dot( format, using the specified parameters  to cluster the graph, etc. As with ., but this allows you to easily convert other C graph-like formats to a Dot graph as long as you can get a list  of nodes and edges from it. A pseudo-inverse to ; "pseudo" in the sense that ) the original node and edge labels aren' t able to be  reconstructed. 9Run the appropriate Graphviz command on the graph to get A positional information and then combine that information back  into the original graph.  This is a "quick-and-dirty"" graph augmentation function that  sets no . and thus should be referentially transparent  and is wrapped in . Note that the provided  is only used for  ,  and . ?Add unique edge identifiers to each label. This is useful for C when multiple edges between two nodes need to be distinguished. Add the Comment0 to the list of attributes containing the value " of the unique edge identifier. &Remove the unique identifier from the .  Pass the / through the relevant command and then augment  the  that it came from. Use the  in the provided  to augment the ( node and edge labels in the provided . The unique 3 identifiers on the edges are also stripped off. APlease note that the behaviour for this function is undefined if  the ! does not come from the original  (either @ by using a conversion function or by passing the result of a ! conversion function through a 8 via the  5 or similar). $Quickly visualise a graph using the  . If 9 your label types are not (and cannot) be instances of ,  you may wish to use ,  or  to set them to a value  such as "".       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     8  Z!"#$%&'()*+,-.{/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~L                                                                                              !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH9IJKLMNOPQRSTUVWQXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                 X                                                          !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /  0  1  2  3  4  5  6  7  8  9  :  ;    <  =  >  ?  @  A  B  C  D  E  F  G  H  I  J  K  L MNOPQRSTUVWXYZ[\]XY^_`abcde[f[ghijklmnopqrstuvwxyz{|}~d`b                                      !"#$%&'(')*+,-./0123456789:;<=>?@ABCDEFGHIJHKLMNgOPQRSTUVWXYZ[G\]^_M`abcdefghijklmnopqrstuvwxyz{|}_~    6   graphviz-2999.12.0.2Data.GraphViz.ExceptionData.GraphViz.Attributes.ColorsData.GraphViz.StateData.GraphViz.ParsingData.GraphViz.PreProcessingData.GraphViz.Printing!Data.GraphViz.Attributes.CompleteData.GraphViz.Attributes.HTMLData.GraphViz.Types.CanonicalData.GraphViz.TypesData.GraphViz.Attributes Data.GraphVizData.GraphViz.AlgorithmsData.GraphViz.Commands.IOData.GraphViz.CommandsData.GraphViz.Types.GeneralisedData.GraphViz.Types.MonadicData.GraphViz.Types.Graph$Data.GraphViz.Attributes.ColorSchemeData.GraphViz.Util!Data.GraphViz.Attributes.InternalData.GraphViz.Types.CommonData.GraphViz.Attributes.SameData.GraphViz.Types.State#Data.GraphViz.Algorithms.ClusteringbaseControl.Exception.Basebracket mapExceptionhandle GHC.ExceptionthrowGraphvizException NotCustomAttr GVProgramExc NotUTF8Dot NotDotCode BrewerNameYlorrdYlorbrYlgnbuYlgnSpectralSet3Set2Set1RedsRdylgnRdylbuRdpuRdgyRdbuPurplesPurdPuorPubugnPubuPrgnPiygPastel2Pastel1PairedOrrdOrangesGreysGreensGnbuDark2BupuBugnBrbgBluesAccent BrewerSchemeBScheme ColorSchemeBrewerX11 GraphvizStateGS directedEdgeslayerSep colorSchemeGraphvizStateMmodifyGSgetsGS initialStatesetDirectednessgetDirectedness setLayerSep getLayerSepsetColorSchemegetColorScheme isNumString isIntStringParseDot parseUnqtparse parseUnqtList parseListParse runParser runParser'parseItcheckValidParseparseIt'onlyBoolquotelessString numString stringBlock quotedStringparseStrictFloat parseAndSpacestring stringRep stringReps stringParse stringValuestrings characternoneOf whitespace whitespace' allWhitespaceallWhitespace'wrapWhitespaceoptionalQuotedStringoptionalQuoted quotedParseorQuote quoteChar parseEscapednewlinenewline' consumeLineparseEq parseField parseFieldsparseFieldBoolparseFieldsBool parseFieldDefparseFieldsDefcommaSep commaSepUnqt commaSep' parseComma tryParseList tryParseList' parseAngled parseBraced preProcessPrintDotunqtDottoDot unqtListToDot listToDotDotCode renderDotprintItunqtTextdotText addQuoteswrapcommaDel printField unqtEscaped printEscapedangledfslash CompassPointNoCP CenterPoint NorthWestWest SouthWestSouth SouthEastEast NorthEastNorthPortPos LabelledPortPortNamePNportNameX11Color YellowGreenYellow4Yellow3Yellow2Yellow1Yellow WhiteSmokeWhiteWheat4Wheat3Wheat2Wheat1Wheat VioletRed4 VioletRed3 VioletRed2 VioletRed1 VioletRedViolet Turquoise4 Turquoise3 Turquoise2 Turquoise1 Turquoise TransparentTomato4Tomato3Tomato2Tomato1TomatoThistle4Thistle3Thistle2Thistle1ThistleTan4Tan3Tan2Tan1Tan SteelBlue4 SteelBlue3 SteelBlue2 SteelBlue1 SteelBlue SpringGreen4 SpringGreen3 SpringGreen2 SpringGreen1 SpringGreenSnow4Snow3Snow2Snow1Snow SlateGray4 SlateGray3 SlateGray2 SlateGray1 SlateGray SlateBlue4 SlateBlue3 SlateBlue2 SlateBlue1 SlateBlueSkyBlue4SkyBlue3SkyBlue2SkyBlue1SkyBlueSienna4Sienna3Sienna2Sienna1Sienna SeaShell4 SeaShell3 SeaShell2 SeaShell1SeaShell SeaGreen4 SeaGreen3 SeaGreen2 SeaGreen1SeaGreen SandyBrownSalmon4Salmon3Salmon2Salmon1Salmon SaddleBrown RoyalBlue4 RoyalBlue3 RoyalBlue2 RoyalBlue1 RoyalBlue RosyBrown4 RosyBrown3 RosyBrown2 RosyBrown1 RosyBrownRed4Red3Red2Red1RedPurple4Purple3Purple2Purple1Purple PowderBluePlum4Plum3Plum2Plum1PlumPink4Pink3Pink2Pink1PinkPeru PeachPuff4 PeachPuff3 PeachPuff2 PeachPuff1 PeachPuff PapayaWhipPaleVioletRed4PaleVioletRed3PaleVioletRed2PaleVioletRed1 PaleVioletRedPaleTurquoise4PaleTurquoise3PaleTurquoise2PaleTurquoise1 PaleTurquoise PaleGreen4 PaleGreen3 PaleGreen2 PaleGreen1 PaleGreen PaleGoldenrodOrchid4Orchid3Orchid2Orchid1Orchid OrangeRed4 OrangeRed3 OrangeRed2 OrangeRed1 OrangeRedOrange4Orange3Orange2Orange1Orange OliveDrab4 OliveDrab3 OliveDrab2 OliveDrab1 OliveDrabOldLaceNavyBlueNavy NavajoWhite4 NavajoWhite3 NavajoWhite2 NavajoWhite1 NavajoWhiteMoccasin MistyRose4 MistyRose3 MistyRose2 MistyRose1 MistyRose MintCream MidnightBlueMediumVioletRedMediumTurquoiseMediumSpringGreenMediumSlateBlueMediumSeaGreen MediumPurple4 MediumPurple3 MediumPurple2 MediumPurple1 MediumPurple MediumOrchid4 MediumOrchid3 MediumOrchid2 MediumOrchid1 MediumOrchid MediumBlueMediumAquamarineMaroon4Maroon3Maroon2Maroon1MaroonMagenta4Magenta3Magenta2Magenta1MagentaLinen LimeGreen LightYellow4 LightYellow3 LightYellow2 LightYellow1 LightYellowLightSteelBlue4LightSteelBlue3LightSteelBlue2LightSteelBlue1LightSteelBlueLightSlateGrayLightSlateBlue LightSkyBlue4 LightSkyBlue3 LightSkyBlue2 LightSkyBlue1 LightSkyBlue LightSeaGreen LightSalmon4 LightSalmon3 LightSalmon2 LightSalmon1 LightSalmon LightPink4 LightPink3 LightPink2 LightPink1 LightPink LightGrayLightGoldenrodYellowLightGoldenrod4LightGoldenrod3LightGoldenrod2LightGoldenrod1LightGoldenrod LightCyan4 LightCyan3 LightCyan2 LightCyan1 LightCyan LightCoral LightBlue4 LightBlue3 LightBlue2 LightBlue1 LightBlue LemonChiffon4 LemonChiffon3 LemonChiffon2 LemonChiffon1 LemonChiffon LawnGreenLavenderBlush4LavenderBlush3LavenderBlush2LavenderBlush1 LavenderBlushLavenderKhaki4Khaki3Khaki2Khaki1KhakiIvory4Ivory3Ivory2Ivory1IvoryIndigo IndianRed4 IndianRed3 IndianRed2 IndianRed1 IndianRedHotPink4HotPink3HotPink2HotPink1HotPink HoneyDew4 HoneyDew3 HoneyDew2 HoneyDew1HoneyDew GreenYellowGreen4Green3Green2Green1GreenGray100Gray99Gray98Gray97Gray96Gray95Gray94Gray93Gray92Gray91Gray90Gray89Gray88Gray87Gray86Gray85Gray84Gray83Gray82Gray81Gray80Gray79Gray78Gray77Gray76Gray75Gray74Gray73Gray72Gray71Gray70Gray69Gray68Gray67Gray66Gray65Gray64Gray63Gray62Gray61Gray60Gray59Gray58Gray57Gray56Gray55Gray54Gray53Gray52Gray51Gray50Gray49Gray48Gray47Gray46Gray45Gray44Gray43Gray42Gray41Gray40Gray39Gray38Gray37Gray36Gray35Gray34Gray33Gray32Gray31Gray30Gray29Gray28Gray27Gray26Gray25Gray24Gray23Gray22Gray21Gray20Gray19Gray18Gray17Gray16Gray15Gray14Gray13Gray12Gray11Gray10Gray9Gray8Gray7Gray6Gray5Gray4Gray3Gray2Gray1Gray0Gray Goldenrod4 Goldenrod3 Goldenrod2 Goldenrod1 GoldenrodGold4Gold3Gold2Gold1Gold GhostWhite Gainsboro ForestGreen FloralWhite Firebrick4 Firebrick3 Firebrick2 Firebrick1 Firebrick DodgerBlue4 DodgerBlue3 DodgerBlue2 DodgerBlue1 DodgerBlueDimGray DeepSkyBlue4 DeepSkyBlue3 DeepSkyBlue2 DeepSkyBlue1 DeepSkyBlue DeepPink4 DeepPink3 DeepPink2 DeepPink1DeepPink DarkViolet DarkTurquoiseDarkSlateGray4DarkSlateGray3DarkSlateGray2DarkSlateGray1 DarkSlateGray DarkSlateBlue DarkSeaGreen4 DarkSeaGreen3 DarkSeaGreen2 DarkSeaGreen1 DarkSeaGreen DarkSalmon DarkOrchid4 DarkOrchid3 DarkOrchid2 DarkOrchid1 DarkOrchid DarkOrange4 DarkOrange3 DarkOrange2 DarkOrange1 DarkOrangeDarkOliveGreen4DarkOliveGreen3DarkOliveGreen2DarkOliveGreen1DarkOliveGreen Darkkhaki DarkGreenDarkGoldenrod4DarkGoldenrod3DarkGoldenrod2DarkGoldenrod1 DarkGoldenrodCyan4Cyan3Cyan2Cyan1CyanCrimson CornSilk4 CornSilk3 CornSilk2 CornSilk1CornSilkCornFlowerBlueCoral4Coral3Coral2Coral1Coral Chocolate4 Chocolate3 Chocolate2 Chocolate1 Chocolate Chartreuse4 Chartreuse3 Chartreuse2 Chartreuse1 Chartreuse CadetBlue4 CadetBlue3 CadetBlue2 CadetBlue1 CadetBlue Burlywood4 Burlywood3 Burlywood2 Burlywood1 BurlywoodBrown4Brown3Brown2Brown1Brown BlueVioletBlue4Blue3Blue2Blue1BlueBlanchedAlmondBlackBisque4Bisque3Bisque2Bisque1BisqueBeigeAzure4Azure3Azure2Azure1Azure Aquamarine4 Aquamarine3 Aquamarine2 Aquamarine1 Aquamarine AntiqueWhite4 AntiqueWhite3 AntiqueWhite2 AntiqueWhite1 AntiqueWhite AliceBlueColor BrewerColorHSVhue saturationvalueRGBAalphaRGBredgreenbluetoColour x11Colour fromColour fromAColour HtmlScaleHtmlExpandBothHtmlExpandHeightHtmlExpandWidthHtmlScaleUniformlyHtmlNaturalSize HtmlVAlignHBottomHMiddleHTop HtmlAlignHTextHRightHCenterHLeft HtmlAttribute HtmlWidth HtmlTitle HtmlTargetHtmlSrc HtmlRowSpanHtmlPort HtmlPointSizeHtmlHRef HtmlHeight HtmlFixedSizeHtmlFace HtmlColSpan HtmlColorHtmlCellSpacingHtmlCellPaddingHtmlCellBorder HtmlBorder HtmlBGColor HtmlBAlignHtmlAttributesHtmlImgHtmlCell HtmlImgCell HtmlLabelCellHtmlRow HtmlTableHTabletableFontAttrs tableAttrs tableRows HtmlTextItemHtmlFont HtmlNewlineHtmlStrHtmlText HtmlLabelRatios AutoRatio ExpandRatio CompressRatio FillRatio AspectRatio JustificationJCenterJRightJLeft ScaleTypeFillBoth FillHeight FillWidthNoScale UniformScaleVerticalPlacementVBottomVCenterVTop FocusType NodeFocusXYViewPortVPwValhValzValfocus StyleNameDDRounded DiagonalsFilled InvisibleBoldSolidDottedDashed StyleItemSItemSTStyle RandomStyle SelfStyle RegularStyle StartTypeStartStyleSeed StartSeed StartStyle SmoothTypeTriangleSmoothSpringRNG PowerDist GraphDistAvgDistNoSmoothShapeMRecordRecord ComponentBox3DFolderTabNoteMCircleMSquareMDiamondInvHouse InvTrapezium InvTriangle TripleOctagon DoubleOctagon DoubleCircleOctagonSeptagonHexagonPentagonHouse Parallelogram Trapezium DiamondShape PlainTextTriangleEgg PointShapeCircleEllipsePolygonBoxShapeRankDir FromRight FromBottomFromLeftFromTopRankTypeSinkRankMaxRank SourceRankMinRankSameRankRootNodeName NotCentral IsCentralQuadTypeNoQTFastQTNormalQTSplinePageDirLtLbRtRbTrTlBrBlEdgeType CompoundEdgePolyLineNoEdges LineEdges SplineEdgesPos SplinePosPointPosPackMode PackArray PackGraph PackClustPackNodePack PackMarginDontPackDoPack OutputMode EdgesFirst NodesFirst BreadthFirst LayerListLLLayerIDLRNameLRInt AllLayers LayerRangeLRSLRIDLayerSepLSepOverlap IpsepOverlap VpscOverlapCompressOverlap PrismOverlapScaleXYOverlaps ScaleOverlapsRemoveOverlaps KeepOverlapsPointxCoordyCoordzCoordforcePos RecordField FlipFields FieldLabelLabelledTarget RecordFieldsLabel RecordLabelStrLabelModelCircuitSubSet ShortPathModeTypeIpSepHierKKMajorDPointPValDVal DEConstraintsHierConstraints NoConstraintsEdgeConstraintsDirTypeNoDirBothBackForward ClusterMode NoClusterGlobalLocalRect AspectTypeRatioPassCount RatioOnly ArrowSide BothSides RightSideLeftSide ArrowFill FilledArrow OpenArrow ArrowModifierArrMod arrowFill arrowSide ArrowShapeVeeTeeNormalNoArrowInvDotArrowDiamondCrowBox ArrowTypeAType EscStringCustomAttribute AttributeName Attributes AttributeUnknownAttributeZWidthWeight VoroMarginVertices TrueColorTooltipTarget TailTooltip TailTargetTailPort TailLabelTailClipTailURLStyle StyleSheetStartSplinesSortV SmoothingSkewSizeSides ShowBoxes ShapeFileSep SearchSize SamplePointsSameTailSameHeadRotateRepulsiveForce ReMinCrossRegularRectsRatioRankRankSepQuantumQuadTreePin PeripheriesPenWidthPenColorPagePadOverlapScaling OutputOrder OrientationOrderingNslimitNslimit1 Normalize NoJustifyNodeSepMosekModeMinLenMinDistMCLimitMaxIterMarginLTailLPosLHeadLevels LevelsGapLenLayoutLayerLayers Landscape LabelTooltip LabelTargetLabelLoc LabelJust LabelFontSize LabelFontNameLabelFontColor LabelFloat LabelDistance LabelAngleLabelURL ImageScaleImageIDHeight HeadTooltip HeadTargetHeadPort HeadLabelHeadClipHeadURLGroupFontSizeFontPath FontNamesFontName FontColor FixedSize FillColorESepEpsilon EdgeTooltip EdgeTargetEdgeURLDPI DistortionDirEdgeConstraintsDirDimDimen DefaultDistDecorate Constraint ConcentrateCompoundComment ClusterRankCenterBgColorBbAspect ArrowTail ArrowSize ArrowHeadURLKDamping usedByGraphsusedByClustersusedBySubGraphs usedByNodes usedByEdges sameAttributedefaultAttributeValue validUnknowncustomAttributeisCustomisSpecifiedCustom customValue customName findCustomsfindSpecifiedCustomdeleteCustomAttributesdeleteSpecifiedCustomnoModsopenMod createPointDotEdgefromNodetoNodeedgeAttributesDotNodenodeIDnodeAttributesGlobalAttributes EdgeAttrs NodeAttrs GraphAttrsattrsGraphIDDblIntStr NodeLookup ClusterLookupPathArrow Labellable toLabelValuetoLabel textLabeltextLabelValuebgColor fillColor fontColorpenColorcolorstylestylesdasheddottedsolidinvisboldfilledrounded diagonalspenWidthshapearrowTo arrowFromedgeEndsnormalinvdotArrowinvDotoDotinvODotnoArrowteediamondoDiamondcrowboxoBoxvee DotSubGraphDotSG isCluster subGraphID subGraphStmts DotStatementsDotStmts attrStmts subGraphs nodeStmts edgeStmtsDotGraph strictGraph directedGraphgraphIDgraphStatements NodeClusterCN PPDotRepr ParseDotRepr PrintDotReprDotRepr fromCanonicalgetIDsetIDgraphIsDirected setIsDirected graphIsStrict setStrictness mapDotGraphgraphStructureInformationnodeInformationedgeInformation unAnonymise graphNodes graphEdges printDotGraph parseDotGraphCanonicaliseOptionsCOptsedgesInClustersgroupAttributesdefaultCanonOptionsdotLikeOptions canonicalisecanonicaliseOptionstransitiveReductiontransitiveReductionOptionstoUTF8hPutDothPutCompactDot hGetStricthGetDot writeDotFile readDotFileputDotreadDot runCommandGraphvizCanvasXlibGtkGraphvizOutputWBmpVrmlVmlZVmlTiffSvgZSvgPs2PsPngPlainExtPlainPdfJpegCmapxNPImapNPCmapxImapIcoGifGd2GdFigEpsXDot DotOutputCanonBmpGraphvizCommandFdpCircoTwoPiNeatoDot dirCommand undirCommand commandFor runGraphvizrunGraphvizCommand addExtensiongraphvizWithHandlerunGraphvizCanvasrunGraphvizCanvas' DotStatementDEDNSGGADotMdigraphdigraph'graphgraph' graphAttrs nodeAttrs edgeAttrsclusternodenode'edge--><->ContextCntxt inCluster attributes predecessors successorsadjacent emptyGraph& composeListaddNode addDotNodeaddEdge addDotEdge addClustersetClusterParentsetClusterAttributesmkGraph toCanonical decompose decomposeAny decomposeList deleteNodedeleteAllEdges deleteEdge deleteDotEdge deleteClusterremoveEmptyClustersisEmpty hasClusters isEmptyGraphgraphAttributesfoundInCluster attributesOfpredecessorsOf successorsOf adjacentToparentOfclusterAttributes fromDotReprunsafeFromCanonicalEdgeID AttributeEdge AttributeNode LNodeClusterGraphvizParamsParams isDirectedglobalAttributes clusterBy clusterID fmtClusterfmtNodefmtEdge defaultParamsnonClusteredParams blankParams graphToDotgraphElemsToDot dotToGraph graphToGraph dotizeGraph addEdgeIDssetEdgeIDAttribute dotAttributes augmentGraphpreview defLayerSep isIDString frstIDStringGHC.BaseString restIDStringtoDoubleghc-prim GHC.TypesTrue stringToInt escapeQuotes descapeQuotes isKeywordkeywordsuniquniqBy groupSortBygroupSortCollectByboolBoolFalseisSingle text-0.11.1.5Data.Text.Lazy.InternalText parseSignedparseInt parseInt' parseFloat parseFloat' polyparse-1.7 Text.ParserCombinators.Poly.Base adjustErrBad parseQuoteCharFunctorControl.Applicative ApplicativeoptionalliftA3liftA2liftA<**><**><*>puremanysome<|> AlternativegetConstConst unwrapMonad WrapMonad WrappedMonad unwrapArrow WrapArrow WrappedArrow getZipListZipList Data.Functor<$><$%Text.ParserCombinators.Poly.StateTextreparsestGetstQuerystUpdate many1Satisfy manySatisfyonFailsatisfyeofnextPParser manyFinally' manyFinally bracketSepsepBy1sepBymany1uptoexactlyoneOffailBaddiscardapplyoneOf' adjustErrcommit Commitment PolyParse"Text.ParserCombinators.Poly.ResultSuccessFailure CommittedResultparseOutUnwanted parseUnwantedparsePreProcessorparseLineCommentparseMultiLineCommentparseConcatStringsparseSplitLine parseHTMLqtChar needsQuotes unqtStringqtString addEscapeswl-pprint-text-1.0.0.0$Text.PrettyPrint.Leijen.Text.Monadicgroupnestingcolumnnest linebreaklinetextcharemptyalignhangindent fillBreakwidthfillprettyMrationaldoublefloatintegerintequals backslashdotspacecommacolonsemidquotesquoterbracketlbracketrbracelbraceranglelanglerparenlparenenclosebracketsanglesparensbracesdquotessquotes softbreaksoftline<$$><+><>vcathcatfillCatcatvsephsepfillSepsep punctuate encloseSep semiBracestupledlistText.PrettyPrint.Leijen.TextDoc unqtPortName checkPortNameparseEdgeBasedPP compassLookuphexColorword8DocprintBrewerColorparseBrewerColor parseX11Color colour-2.3.1Data.Colour.InternalColour Data.MaybeMaybe toOpacity AlphaColourGHC.ShowShowmaxWordGHC.EnummaxBoundGHC.WordWord8JustNothing printCellprintHtmlFieldprintHtmlField'parseHtmlFieldparseHtmlField'escapeAttribute escapeValue escapeHtmlunescapeAttribute unescapeValue unescapeHtml htmlEscapes htmlUnescapes printBoolHtml parseBoolHtml printHtmlTagprintHtmlFontTagprintHtmlEmptyTag parseHtmlTagparseHtmlFontTagparseHtmlEmptyTagDoubleeDiamondopenArrhalfOpenemptyArrinvEmptyspecialArrowParse printPortName parseRecordunqtRecordStringrecordEscChars parsePoint2D parseLayerSepparseLayerNameparseLayerName'checkLayerName parseArgscheckDDparseStyleNameEdgeNode stringNum numericValuepartitionGlobalprintGlobAttrTypeparseGlobAttrType determineType printNodeID parseNodeID printEdgeID parseEdgeIDparseEdgeNodes parseEdgeNodemkEdgemkEdges addPortPos parseEdgeType parseEdgeLinedirEdgedirEdge' undirEdge undirEdge'dirGraph dirGraph' undirGraph undirGraph'strGraph strGraph'sGraphsGraph'clustclust' printGraphID parseGraphIDprintStmtBasedprintStmtBasedListparseStmtBasedprintBracesBasedparseBracesBasedprintSubGraphID printSGIDparseSubGraphID parseSGIDprintAttrBasedprintAttrBasedListparseAttrBasedparseAttrBasedList statementEndparseStatementsSAttrsSameAttrSAgetAttrtoSAttrunSame EdgeState NodeStateNodeInfoNIattsgAttslocation NodeLookup' ClusterInfoClusterLookup' GraphState StateValueSV globalAttrs useGlobals globalPathGVState modifyGlobal modifyValue addGlobals getGlobalsgetPath modifyPath recursiveCall unionWith getGraphInfo mergeCInfos addSubGraphaddGraphGlobals toDotNodes getNodeLookup mergeNInfosmergePsaddNodeGlobals mergeNode addEdgeNodes getDotEdgesaddEdgeGlobals$fLabellable(,)$fLabellablePortNameprintSubGraphID'$fFunctorDotGraph ClusterTreeCTNTclustersToNodes clustToTree sameClust clustOrdergetNodescollapseNClusts treesToDot treeToDot GHC.ClassesOrdidstatementStructurestatementNodesstatementEdgeswithSubGraphIDrenumbermaxSGIntTagStateTagMap TaggedValuesTVmarkedincomingoutgoing TaggedEdgeTagSetTagcreateCanonical compLists nonEmptyGAs commonAttrs edgeClustersinnerAttributes rmTransEdgeszeroTagtagEdgesdefTVgetMapgetsMap modifyMapgetSet modifySet edgeGraphtraverserenderCompactDotbytestring-0.9.2.0Data.ByteString.Lazy.Internal ByteStringGHC.IO.Handle.TypesHandletoHandleGHC.IO.Handle.FDstdoutstdin GHC.IO.HandlehSetBinaryMode hGetContents'GHC.IO.Handle.Text hGetContentssignalWhenDoneGHC.MVarMVarGraphvizResult outputCallshowCmddefaultExtensionGHC.IOFilePathIOgraphvizWithHandle'generaliseDotGraph printGStmts parseGStmtsgeneraliseStatements stmtStructure stmtNodes stmtEdgesgeneraliseSubGraphClusterClclIDclStmtsDotStmtMEMNMCMArunDotexecDottelltellStmt execStmtsconvertStatementsconvertStatementEdgeMapNodeMapCI parentCluster clusterAttrs _inCluster _attributes _predecessors _successors GlobAttrsgraphAsnodeAsedgeAsDGclustersvaluesemptyGAaddSuccaddPredaddPSaddEmptyClusterdelSuccdelPreddelPSemToDEcOptions toEdgeMapmapNs getNodeInfo getEdgeInfo globAttrMap clusterPath clusterPath' withValues withClusters toGlobAttrs fromGlobAttrsniSuccniPredtoMapfromMap$fParseDotDotGraph$fPrintDotDotGraph$fReadDotGraphshow$fShowDotGraphEIDeIDeLbl fgl-5.4.2.4Data.Graph.Inductive.GraphGraph isUndirectedGHC.Err undefinedunsafePerformIOidentifierAttrNameidentifierAttributestripIDLEdgegmapnmapemap