+++ /dev/null
-// Péter Diviánszky, 2007\r
-// Code extended and adapted by Peter Achten, 2007\r
-\r
-definition module Graphviz\r
-\r
-//from StdOverloaded import class ==, class toString\r
-from StdOverloaded import class toString\r
-import StdMaybe\r
-import ESMSpec\r
-import GenEq\r
-\r
-// A digraph contains a title and a list of node definitions\r
-:: Digraph \r
- = Digraph String [GraphAttribute] [NodeDef] (Maybe SelectedItem)\r
-:: SelectedItem\r
- = Node Int\r
-\r
-digraphTitle :: !Digraph -> String\r
-digraphAtts :: !Digraph -> [GraphAttribute]\r
-digraphNodes :: !Digraph -> [NodeDef]\r
-digraphSelectedItem :: !Digraph -> Maybe SelectedItem\r
-\r
-// A node definition contains a unique identifier (an integer), a list of node attributes and a list of edge definitions.\r
-// An edge definition contains an identifier (the id of the end node and edge attributes).\r
-:: NodeDef \r
- = NodeDef !Int ![NodeState] ![NodeAttribute] [EdgeDef]\r
-:: EdgeDef\r
- :== (!Int,![EdgeAttribute])\r
-:: NodeState\r
- = NStAllEdgesFound !Bool // all edges of this node are known\r
-\r
-// Convert digraph into list of strings.\r
-// The strings are lines of the graphviz representation of the graph.\r
-printDigraph :: !Digraph -> [String]\r
-\r
-:: GraphAttribute\r
- = GAtt_Damping Real\r
- | GAtt_K Real\r
- | GAtt_URL String\r
- | GAtt_bb Rect\r
- | GAtt_bgcolor Color\r
- | GAtt_center Bool\r
- | GAtt_charset String\r
- | GAtt_clusterrank ClusterMode\r
- | GAtt_colorscheme String\r
- | GAtt_comment String\r
- | GAtt_compound Bool\r
- | GAtt_concentrate Bool\r
- | GAtt_defaultdist Real\r
- | GAtt_dim Int\r
-// | GAtt_diredgeconstraints ... PA: ignored, neato only\r
- | GAtt_dpi Real\r
- | GAtt_epsilon Real\r
- | GAtt_esep Real\r
- | GAtt_fontcolor Color\r
- | GAtt_fontname String\r
- | GAtt_fontnames String\r
- | GAtt_fontpath String\r
- | GAtt_fontsize Real\r
- | GAtt_label String\r
- | GAtt_labeljust String\r
- | GAtt_labelloc String\r
- | GAtt_landscape Bool\r
- | GAtt_layers LayerList\r
- | GAtt_layersep String\r
- | GAtt_levelsgap Real\r
- | GAtt_lp DotPoint\r
- | GAtt_margin Margin\r
- | GAtt_maxiter Int\r
- | GAtt_mclimit Real\r
- | GAtt_mindist Real\r
- | GAtt_mode String\r
- | GAtt_model String\r
- | GAtt_mosek Bool\r
- | GAtt_nodesep Real\r
- | GAtt_nojustify Bool\r
- | GAtt_normalize Bool\r
- | GAtt_nslimit Real\r
- | GAtt_nslimit1 Real\r
- | GAtt_ordering String\r
- | GAtt_orientation String\r
- | GAtt_outputorder OutputMode\r
- | GAtt_pad Pad\r
- | GAtt_page Pointf\r
- | GAtt_pagedir PageDir\r
- | GAtt_quantum Real\r
- | GAtt_rank RankType\r
- | GAtt_rankdir RankDir\r
- | GAtt_ranksep Real\r
- | GAtt_ratio Ratio\r
- | GAtt_remincross Bool\r
- | GAtt_resolution Real\r
- | GAtt_root String\r
- | GAtt_rotate Int\r
- | GAtt_searchsize Int\r
- | GAtt_showboxes Int\r
- | GAtt_size Sizef //Pointf // PA++\r
-// | GAtt_splines PA: skipped for the time being\r
- | GAtt_start StartType\r
- | GAtt_stylesheet String\r
- | GAtt_target String\r
- | GAtt_truecolor Bool\r
- | GAtt_viewport ViewPort\r
- | GAtt_voro_margin Real\r
-:: NodeAttribute\r
- = NAtt_URL String\r
- | NAtt_color Color\r
- | NAtt_colorscheme String\r
- | NAtt_comment String\r
- | NAtt_distortion Real\r
- | NAtt_fillcolor Color\r
- | NAtt_fixedsize Bool\r
- | NAtt_fontcolor Color\r
- | NAtt_fontname String\r
- | NAtt_fontsize Real\r
- | NAtt_group String\r
- | NAtt_height Real\r
- | NAtt_label String\r
- | NAtt_layer LayerRange\r
- | NAtt_margin Margin\r
- | NAtt_nojustify Bool\r
- | NAtt_orientation Real\r
- | NAtt_peripheries Int\r
- | NAtt_pin Bool\r
-// | NAtt_pos ... PA: ignored for the time being\r
- | NAtt_rects Rect\r
- | NAtt_regular Bool\r
- | NAtt_samplepoints Int\r
- | NAtt_shape NodeShape\r
- | NAtt_shapefile String\r
- | NAtt_showboxes Int\r
- | NAtt_sides Int\r
- | NAtt_skew Real\r
- | NAtt_style NodeStyle\r
- | NAtt_target String\r
- | NAtt_tooltip String\r
- | NAtt_width Real\r
- | NAtt_z Real\r
-:: EdgeAttribute\r
- = EAtt_URL String\r
- | EAtt_arrowhead ArrowType\r
- | EAtt_arrowsize Real\r
- | EAtt_arrowtail ArrowType\r
- | EAtt_color Color\r
- | EAtt_colorscheme String\r
- | EAtt_comment String\r
- | EAtt_constraint Bool\r
- | EAtt_decorate Bool\r
- | EAtt_dir DirType\r
- | EAtt_edgeURL String\r
- | EAtt_edgehref String\r
- | EAtt_edgetarget String\r
- | EAtt_edgetooltip String\r
- | EAtt_fontcolor Color\r
- | EAtt_fontname String\r
- | EAtt_fontsize Real\r
- | EAtt_headURL String\r
- | EAtt_headclip Bool\r
- | EAtt_headhref String\r
- | EAtt_headlabel String\r
- | EAtt_headport PortPos\r
- | EAtt_headtarget String\r
- | EAtt_headtooltip String\r
- | EAtt_href String\r
- | EAtt_label String\r
- | EAtt_labelURL String\r
- | EAtt_labelangle Real\r
- | EAtt_labeldistance Real\r
- | EAtt_labelfloat Bool\r
- | EAtt_labelfontcolor Color\r
- | EAtt_labelfontname String\r
- | EAtt_labelfontsize Real\r
- | EAtt_labelhref String\r
- | EAtt_labeltarget String\r
- | EAtt_labeltooltip String\r
- | EAtt_layer LayerRange\r
- | EAtt_len Real\r
- | EAtt_lhead String\r
- | EAtt_lp DotPoint\r
- | EAtt_ltail String\r
- | EAtt_minlen Int\r
- | EAtt_nojustify Bool\r
-// | EAtt_pos PA: ignored for the time being\r
- | EAtt_samehead String\r
- | EAtt_sametail String\r
- | EAtt_showboxes Int\r
- | EAtt_style EdgeStyle\r
- | EAtt_tailURL String\r
- | EAtt_tailclip Bool\r
- | EAtt_tailhref String\r
- | EAtt_taillabel String\r
- | EAtt_tailport PortPos\r
- | EAtt_tailtarget String\r
- | EAtt_tailtooltip String\r
- | EAtt_target String\r
- | EAtt_tooltip String\r
- | EAtt_weight Real\r
-:: ClusterMode\r
- = CM_local | CM_global | CM_none\r
-:: CompassPoint\r
- = CP_n | CP_ne | CP_e | CP_se | CP_s | CP_sw | CP_w | CP_nw\r
-:: DotPoint\r
- = DotPoint Real Real Bool\r
-:: LayerId\r
- = LayerAll\r
- | LayerNr Int\r
- | LayerName String\r
-:: LayerList\r
- = LayerList [String]\r
-:: LayerRange\r
- = LayerRange LayerId [LayerId]\r
-:: Margin\r
- = SingleMargin Real\r
- | DoubleMargin Real Real\r
-:: OutputMode\r
- = OM_breadthfirst | OM_nodesfirst | OM_edgesfirst\r
-:: Pad\r
- = SinglePad Real\r
- | DoublePad Real Real\r
-:: PageDir\r
- = PD_BL | PD_BR | PD_TL | PD_TR | PD_RB | PD_RT | PD_LB | PD_LT\r
-:: Pointf\r
- = Pointf Real Real\r
-:: PortPos // PA: for now only compass points are supported\r
- :== CompassPoint\r
-:: RankDir\r
- = RD_TB | RD_LR | RD_BT | RD_RL\r
-:: RankType\r
- = RT_same | RT_min | RT_source | RT_max | RT_sink\r
-:: Ratio\r
- = AspectRatio Real\r
- | R_fill\r
- | R_compress\r
- | R_expand\r
- | R_auto\r
-:: Rect\r
- = {llx :: Int,lly :: Int, urx :: Int, ury :: Int}\r
-:: Sizef // PA++\r
- = Sizef Real Real Bool\r
-:: StartStyle\r
- = SS_regular | SS_self | SS_random\r
-:: StartType\r
- = { startStyle :: Maybe StartStyle\r
- , startSeed :: Maybe Int\r
- }\r
-:: ViewPort\r
- = { vp_W :: Real\r
- , vp_H :: Real\r
- , vp_Z :: Maybe Real\r
- , vp_xy :: Maybe Pointf\r
- }\r
-\r
-pointNode :: [NodeAttribute] // attributes of a point-shaped node\r
-hiddenNode :: [NodeAttribute] // attributes of a hidden node\r
-\r
-\r
-:: NodeShape \r
- = NShape_box\r
- | NShape_circle \r
- | NShape_diamond\r
- | NShape_doublecircle\r
- | NShape_doubleoctagon\r
- | NShape_egg\r
- | NShape_ellipse \r
- | NShape_hexagon\r
- | NShape_house\r
- | NShape_invtriangle\r
- | NShape_invtrapezium\r
- | NShape_invhouse\r
- | NShape_octagon\r
- | NShape_Mdiamond\r
- | NShape_Msquare\r
- | NShape_Mcircle\r
- | NShape_parallelogram \r
- | NShape_pentagon\r
- | NShape_plainText\r
- | NShape_polygon\r
- | NShape_point \r
- | NShape_rect\r
- | NShape_rectangle\r
- | NShape_septagon\r
- | NShape_trapezium\r
- | NShape_triangle\r
- | NShape_tripleoctagon\r
- | NShape_none\r
-instance toString NodeShape\r
-instance == NodeShape\r
-derive gEq NodeShape // PK++\r
-\r
-:: NodeStyle\r
- = NStyle_filled\r
- | NStyle_invis\r
- | NStyle_diagonals\r
- | NStyle_rounded\r
- | NStyle_dashed\r
- | NStyle_dotted\r
- | NStyle_solid\r
- | NStyle_bold\r
-instance toString NodeStyle\r
-instance == NodeStyle\r
-derive gEq NodeStyle // PK++\r
-\r
-:: EdgeStyle \r
- = EStyle_solid \r
- | EStyle_bold\r
- | EStyle_dashed\r
- | EStyle_dotted\r
- | EStyle_invis\r
-instance toString EdgeStyle\r
-instance == EdgeStyle\r
-derive gEq EdgeStyle // PK++\r
-\r
-:: Color \r
- = RGB Int Int Int\r
- | HSV Real Real Real\r
- | Color String // X11 1.2 color names; see rgb.txt\r
-\r
-C_black :== Color "black"\r
-C_white :== Color "white"\r
-C_gray :== Color "gray"\r
-C_red :== Color "red"\r
-C_green :== Color "green"\r
-C_blue :== Color "blue"\r
-C_yellow :== Color "yellow"\r
-\r
-instance toString Color\r
-instance == Color\r
-derive gEq Color // PK++\r
-\r
-:: ArrowType =\r
- { closest :: Arrow\r
- , furthest :: Maybe Arrow\r
- }\r
-:: Arrow =\r
- { open :: Bool\r
- , side :: Maybe Side\r
- , shape :: ArrowShape\r
- }\r
-:: Side\r
- = Side_l\r
- | Side_r\r
-:: ArrowShape\r
- = AShape_box\r
- | AShape_crow\r
- | AShape_diamond\r
- | AShape_dot\r
- | AShape_inv\r
- | AShape_none\r
- | AShape_normal\r
- | AShape_tee\r
- | AShape_vee\r
-instance toString ArrowType\r
-instance == ArrowType\r
-derive gEq ArrowType // PK++\r
-\r
-\r
-// direction of the edge\r
-:: DirType\r
- = DT_forward \r
- | DT_back \r
- | DT_both \r
- | DT_none\r
-instance toString DirType\r
-instance == DirType\r
-derive gEq DirType // PK++\r
-\r
-layersep :== ":\t"\r
-\r
-mkDigraph :: String (KnownAutomaton s i o,s,[s],[s],[SeenTrans s i o],[SeenTrans s i o]) -> Digraph | render, gEq{|*|} s \r
- & render, gEq{|*|} i \r
- & render, gEq{|*|} o\r