Artifact a07b3e3a20b9cf0896f3d585b6350ab367b8c44b:
File tools/cvs2fossil/lib/dot.tcl part of check-in [7208c7ac4d] - Changes to cvs2fossil to import tcllib CVS into fossil on Win32* using ::file instead of file in snit methods to get the core file command * taking care of files that only differ in case in the Attic and the repo on case insensitive FS * passing platform specific
by mjanssen on 2008-01-28 23:57:27.
0000: 23 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23 ## -*- tcl -*-.# 0010: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### ##### 0020: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## ####### 0030: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### ######### 0040: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 ############.## 0050: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30 Copyright (c) 20 0060: 30 37 20 41 6e 64 72 65 61 73 20 4b 75 70 72 69 07 Andreas Kupri 0070: 65 73 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66 es..#.# This sof 0080: 74 77 61 72 65 20 69 73 20 6c 69 63 65 6e 73 65 tware is license 0090: 64 20 61 73 20 64 65 73 63 72 69 62 65 64 20 69 d as described i 00a0: 6e 20 74 68 65 20 66 69 6c 65 20 4c 49 43 45 4e n the file LICEN 00b0: 53 45 2c 20 77 68 69 63 68 0a 23 20 79 6f 75 20 SE, which.# you 00c0: 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65 should have rece 00d0: 69 76 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 ived as part of 00e0: 74 68 69 73 20 64 69 73 74 72 69 62 75 74 69 6f this distributio 00f0: 6e 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66 74 n..#.# This soft 0100: 77 61 72 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 ware consists of 0110: 20 76 6f 6c 75 6e 74 61 72 79 20 63 6f 6e 74 72 voluntary contr 0120: 69 62 75 74 69 6f 6e 73 20 6d 61 64 65 20 62 79 ibutions made by 0130: 20 6d 61 6e 79 0a 23 20 69 6e 64 69 76 69 64 75 many.# individu 0140: 61 6c 73 2e 20 20 46 6f 72 20 65 78 61 63 74 20 als. For exact 0150: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 20 68 69 73 contribution his 0160: 74 6f 72 79 2c 20 73 65 65 20 74 68 65 20 72 65 tory, see the re 0170: 76 69 73 69 6f 6e 0a 23 20 68 69 73 74 6f 72 79 vision.# history 0180: 20 61 6e 64 20 6c 6f 67 73 2c 20 61 76 61 69 6c and logs, avail 0190: 61 62 6c 65 20 61 74 20 68 74 74 70 3a 2f 2f 66 able at http://f 01a0: 6f 73 73 69 6c 2d 73 63 6d 2e 68 77 61 63 69 2e ossil-scm.hwaci. 01b0: 63 6f 6d 2f 66 6f 73 73 69 6c 0a 23 20 23 20 23 com/fossil.# # # 01c0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### #### 01d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ########### 01e0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## ############# 01f0: 23 23 23 23 23 23 23 23 0a 0a 23 23 20 55 74 69 ########..## Uti 0200: 6c 69 74 79 20 70 61 63 6b 61 67 65 2c 20 65 78 lity package, ex 0210: 70 6f 72 74 20 67 72 61 70 68 20 64 61 74 61 20 port graph data 0220: 74 6f 20 64 6f 74 20 66 6f 72 6d 61 74 20 66 6f to dot format fo 0230: 72 20 66 6f 72 6d 61 74 74 69 6e 67 0a 23 23 20 r formatting.## 0240: 77 69 74 68 20 6e 65 61 74 6f 20 65 74 2e 20 61 with neato et. a 0250: 6c 6c 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 ll..# # ## ### # 0260: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ## 0270: 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 ########### #### 0280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 0290: 23 0a 23 23 20 52 65 71 75 69 72 65 6d 65 6e 74 #.## Requirement 02a0: 73 0a 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 s..package requi 02b0: 72 65 20 54 63 6c 20 38 2e 34 20 20 3b 20 23 20 re Tcl 8.4 ; # 02c0: 52 65 71 75 69 72 65 64 20 72 75 6e 74 69 6d 65 Required runtime 02d0: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 .package require 02e0: 20 73 6e 69 74 20 20 20 20 20 3b 20 23 20 4f 4f snit ; # OO 02f0: 20 73 79 73 74 65 6d 2e 0a 70 61 63 6b 61 67 65 system..package 0300: 20 72 65 71 75 69 72 65 20 66 69 6c 65 75 74 69 require fileuti 0310: 6c 20 3b 20 23 20 48 65 6c 70 65 72 20 63 6f 6d l ; # Helper com 0320: 6d 61 6e 64 73 2e 0a 0a 23 20 23 20 23 23 20 23 mands...# # ## # 0330: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### ####### 0340: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 # ############# 0350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 0360: 23 23 23 23 23 0a 23 23 0a 0a 73 6e 69 74 3a 3a #####.##..snit:: 0370: 74 79 70 65 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 type ::vc::tools 0380: 3a 3a 64 6f 74 20 7b 0a 20 20 20 20 23 20 23 20 ::dot {. # # 0390: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ### 03a0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ########## 03b0: 23 23 23 0a 20 20 20 20 23 23 20 50 75 62 6c 69 ###. ## Publi 03c0: 63 20 41 50 49 2c 20 4d 65 74 68 6f 64 73 0a 0a c API, Methods.. 03d0: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 66 typemethod f 03e0: 6f 72 6d 61 74 20 7b 67 20 6e 61 6d 65 20 7b 73 ormat {g name {s 03f0: 75 62 67 72 61 70 68 20 7b 7d 7d 7d 20 7b 0a 09 ubgraph {}}} {.. 0400: 6c 61 70 70 65 6e 64 20 6c 69 6e 65 73 20 22 64 lappend lines "d 0410: 69 67 72 61 70 68 20 5c 22 24 6e 61 6d 65 5c 22 igraph \"$name\" 0420: 20 5c 7b 22 0a 0a 09 69 66 20 7b 21 5b 6c 6c 65 \{"...if {![lle 0430: 6e 67 74 68 20 24 73 75 62 67 72 61 70 68 5d 7d ngth $subgraph]} 0440: 20 7b 0a 09 20 20 20 20 73 65 74 20 6e 6f 64 65 {.. set node 0450: 73 20 5b 24 67 20 6e 6f 64 65 73 5d 0a 09 20 20 s [$g nodes].. 0460: 20 20 73 65 74 20 61 72 63 73 20 20 5b 24 67 20 set arcs [$g 0470: 61 72 63 73 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a arcs]..} else {. 0480: 09 20 20 20 20 73 65 74 20 6e 6f 64 65 73 20 24 . set nodes $ 0490: 73 75 62 67 72 61 70 68 0a 09 20 20 20 20 73 65 subgraph.. se 04a0: 74 20 61 72 63 73 20 5b 65 76 61 6c 20 5b 6c 69 t arcs [eval [li 04b0: 6e 73 65 72 74 20 24 73 75 62 67 72 61 70 68 20 nsert $subgraph 04c0: 30 20 24 67 20 61 72 63 73 20 2d 69 6e 6e 65 72 0 $g arcs -inner 04d0: 5d 5d 0a 09 7d 0a 0a 09 66 6f 72 65 61 63 68 20 ]]..}...foreach 04e0: 6e 20 24 6e 6f 64 65 73 20 7b 0a 09 20 20 20 20 n $nodes {.. 04f0: 73 65 74 20 73 74 79 6c 65 20 5b 53 74 79 6c 65 set style [Style 0500: 20 24 67 20 6e 6f 64 65 20 24 6e 20 7b 6c 61 62 $g node $n {lab 0510: 65 6c 20 6c 61 62 65 6c 20 73 68 61 70 65 20 73 el label shape s 0520: 68 61 70 65 20 66 6f 6e 74 63 6f 6c 6f 72 20 66 hape fontcolor f 0530: 6f 6e 74 63 6f 6c 6f 72 7d 5d 0a 09 20 20 20 20 ontcolor}].. 0540: 6c 61 70 70 65 6e 64 20 6c 69 6e 65 73 20 22 5c lappend lines "\ 0550: 22 24 6e 5c 22 20 24 7b 73 74 79 6c 65 7d 3b 22 "$n\" ${style};" 0560: 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20 61 20 24 ..}..foreach a $ 0570: 61 72 63 73 20 7b 0a 09 20 20 20 20 73 65 74 20 arcs {.. set 0580: 73 74 79 6c 65 20 5b 53 74 79 6c 65 20 24 67 20 style [Style $g 0590: 61 72 63 20 24 61 20 7b 63 6f 6c 6f 72 20 63 6f arc $a {color co 05a0: 6c 6f 72 7d 5d 0a 09 20 20 20 20 6c 61 70 70 65 lor}].. lappe 05b0: 6e 64 20 6c 69 6e 65 73 20 22 5c 22 5b 24 67 20 nd lines "\"[$g 05c0: 61 72 63 20 73 6f 75 72 63 65 20 24 61 5d 5c 22 arc source $a]\" 05d0: 20 2d 3e 20 5c 22 5b 24 67 20 61 72 63 20 74 61 -> \"[$g arc ta 05e0: 72 67 65 74 20 24 61 5d 5c 22 20 24 7b 73 74 79 rget $a]\" ${sty 05f0: 6c 65 7d 3b 22 0a 09 7d 0a 0a 09 6c 61 70 70 65 le};"..}...lappe 0600: 6e 64 20 6c 69 6e 65 73 20 22 5c 7d 22 0a 09 72 nd lines "\}"..r 0610: 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 24 6c 69 6e eturn [join $lin 0620: 65 73 20 5c 6e 5d 0a 20 20 20 20 7d 0a 0a 20 20 es \n]. }.. 0630: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 77 72 69 typemethod wri 0640: 74 65 20 7b 67 20 6e 61 6d 65 20 66 69 6c 65 20 te {g name file 0650: 7b 73 75 62 67 72 61 70 68 20 7b 7d 7d 7d 20 7b {subgraph {}}} { 0660: 0a 09 66 69 6c 65 75 74 69 6c 3a 3a 77 72 69 74 ..fileutil::writ 0670: 65 46 69 6c 65 20 24 66 69 6c 65 20 5b 24 74 79 eFile $file [$ty 0680: 70 65 20 66 6f 72 6d 61 74 20 24 67 20 24 6e 61 pe format $g $na 0690: 6d 65 20 24 73 75 62 67 72 61 70 68 5d 0a 09 72 me $subgraph]..r 06a0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }.. 06b0: 20 74 79 70 65 6d 65 74 68 6f 64 20 6c 61 79 6f typemethod layo 06c0: 75 74 20 7b 66 6f 72 6d 61 74 20 67 20 6e 61 6d ut {format g nam 06d0: 65 20 66 69 6c 65 7d 20 7b 0a 09 73 65 74 20 66 e file} {..set f 06e0: 20 5b 66 69 6c 65 75 74 69 6c 3a 3a 74 65 6d 70 [fileutil::temp 06f0: 66 69 6c 65 20 63 32 66 64 6f 74 5f 5d 0a 09 24 file c2fdot_]..$ 0700: 74 79 70 65 20 77 72 69 74 65 20 24 67 20 24 6e type write $g $n 0710: 61 6d 65 20 24 66 0a 09 65 78 65 63 20 64 6f 74 ame $f..exec dot 0720: 20 2d 54 20 24 66 6f 72 6d 61 74 20 2d 6f 20 24 -T $format -o $ 0730: 66 69 6c 65 20 24 66 0a 09 3a 3a 66 69 6c 65 20 file $f..::file 0740: 64 65 6c 65 74 65 20 24 66 0a 09 72 65 74 75 72 delete $f..retur 0750: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 n. }.. # # 0760: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 ## ### ##### ## 0770: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### ######### 0780: 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65 ####. ## Inte 0790: 72 6e 61 6c 2c 20 73 74 61 74 65 0a 0a 20 20 20 rnal, state.. 07a0: 20 70 72 6f 63 20 53 74 79 6c 65 20 7b 67 72 61 proc Style {gra 07b0: 70 68 20 78 20 79 20 64 69 63 74 7d 20 7b 0a 09 ph x y dict} {.. 07c0: 73 65 74 20 73 65 70 20 22 20 22 0a 09 73 65 74 set sep " "..set 07d0: 20 68 65 61 64 20 22 20 5c 5b 22 0a 09 73 65 74 head " \["..set 07e0: 20 74 61 69 6c 20 22 22 0a 09 73 65 74 20 73 74 tail ""..set st 07f0: 79 6c 65 20 22 22 0a 09 66 6f 72 65 61 63 68 20 yle ""..foreach 0800: 7b 67 61 74 74 72 20 6b 65 79 7d 20 24 64 69 63 {gattr key} $dic 0810: 74 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 5b 24 t {.. if {![$ 0820: 67 72 61 70 68 20 24 78 20 6b 65 79 65 78 69 73 graph $x keyexis 0830: 74 73 20 24 79 20 24 6b 65 79 5d 7d 20 63 6f 6e ts $y $key]} con 0840: 74 69 6e 75 65 0a 09 20 20 20 20 61 70 70 65 6e tinue.. appen 0850: 64 20 73 74 79 6c 65 20 22 24 68 65 61 64 24 73 d style "$head$s 0860: 65 70 24 7b 67 61 74 74 72 7d 3d 5c 22 5b 24 67 ep${gattr}=\"[$g 0870: 72 61 70 68 20 24 78 20 67 65 74 20 24 79 20 24 raph $x get $y $ 0880: 6b 65 79 5d 5c 22 22 0a 09 20 20 20 20 73 65 74 key]\"".. set 0890: 20 73 65 70 20 22 2c 20 22 0a 09 20 20 20 20 73 sep ", ".. s 08a0: 65 74 20 68 65 61 64 20 22 22 0a 09 20 20 20 20 et head "".. 08b0: 73 65 74 20 74 61 69 6c 20 22 20 5c 5d 22 0a 09 set tail " \]".. 08c0: 7d 0a 0a 09 61 70 70 65 6e 64 20 73 74 79 6c 65 }...append style 08d0: 20 24 7b 74 61 69 6c 7d 0a 09 72 65 74 75 72 6e ${tail}..return 08e0: 20 24 73 74 79 6c 65 0a 20 20 20 20 7d 0a 0a 20 $style. }.. 08f0: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 # # ## ### ## 0900: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ### 0910: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 ##########. # 0920: 23 20 49 6e 74 65 72 6e 61 6c 2c 20 68 65 6c 70 # Internal, help 0930: 65 72 20 6d 65 74 68 6f 64 73 20 28 66 6f 72 6d er methods (form 0940: 61 74 74 69 6e 67 2c 20 64 69 73 70 61 74 63 68 atting, dispatch 0950: 29 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 ).. # # ## ## 0960: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ######## 0970: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 #############. 0980: 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 ## Configurat 0990: 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 ion.. pragma 09a0: 2d 68 61 73 69 6e 73 74 61 6e 63 65 73 20 20 20 -hasinstances 09b0: 6e 6f 20 3b 20 23 20 73 69 6e 67 6c 65 74 6f 6e no ; # singleton 09c0: 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 . pragma -has 09d0: 74 79 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 3b typeinfo no ; 09e0: 20 23 20 6e 6f 20 69 6e 74 72 6f 73 70 65 63 74 # no introspect 09f0: 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d ion. pragma - 0a00: 68 61 73 74 79 70 65 64 65 73 74 72 6f 79 20 6e hastypedestroy n 0a10: 6f 20 3b 20 23 20 69 6d 6d 6f 72 74 61 6c 0a 0a o ; # immortal.. 0a20: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 # # ## ### # 0a30: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ## 0a40: 23 23 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e ###########.}..n 0a50: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a amespace eval :: 0a60: 76 63 3a 3a 74 6f 6f 6c 73 20 7b 0a 20 20 20 20 vc::tools {. 0a70: 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74 namespace export 0a80: 20 64 6f 74 0a 7d 0a 0a 23 20 2d 2d 2d 2d 2d 2d dot.}..# ------ 0a90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0aa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0ab0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0ad0: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 52 65 61 64 79 0a -------.# Ready. 0ae0: 0a 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 .package provide 0af0: 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 64 6f 74 20 vc::tools::dot 0b00: 31 2e 30 0a 72 65 74 75 72 6e 0a 1.0.return.