]> granicus.if.org Git - graphviz/commitdiff
don't lose it.
authorellson <devnull@localhost>
Fri, 10 Oct 2008 03:09:40 +0000 (03:09 +0000)
committerellson <devnull@localhost>
Fri, 10 Oct 2008 03:09:40 +0000 (03:09 +0000)
lib/gvc/Makefile.am
lib/gvc/plugins.tcl [new file with mode: 0755]

index bfe1fe209bb3cbbb17d6dee9fc049e24c28c182a..8c752bad6b3d1b22555d452872ee5bb35e47b847 100644 (file)
@@ -68,6 +68,6 @@ libgvc_builtins_la_LIBADD = $(libgvc_la_LIBADD)
 gvc.3.pdf: $(srcdir)/gvc.3
        - @GROFF@ -Tps -man $(srcdir)/gvc.3 | @PS2PDF@ - - > gvc.3.pdf
 
-EXTRA_DIST = $(man_MANS) $(pdf_DATA) Makefile.old regex_win32.h regex_win32.c
+EXTRA_DIST = $(man_MANS) $(pdf_DATA) Makefile.old regex_win32.h regex_win32.c plugins.tcl
 
 DISTCLEANFILES = $(pdf_DATA)
diff --git a/lib/gvc/plugins.tcl b/lib/gvc/plugins.tcl
new file mode 100755 (executable)
index 0000000..406ae30
--- /dev/null
@@ -0,0 +1,104 @@
+#!/usr/bin/tclsh
+
+set fn /usr/lib64/graphviz/config5
+set f [open $fn r]
+set d [read $f [file size $fn]]
+close $f
+
+regsub -all -line {^#.*$} $d {} d
+
+proc mergealias {format} {
+    switch $format {
+       jpg - jpeg - jpe {return jpg/jpe/jpeg}
+       default {return $format}
+    }
+}
+
+foreach {lib name contents} $d {
+    set LIB($name) {}
+    foreach {type plugins} $contents {
+       foreach {plugin quality} $plugins {
+           switch $type {
+               render {
+                   lappend LIB_RENDER($name) $plugin
+               }
+               loadimage {
+                   foreach {iformat irender} [split $plugin :] {break}
+                   set iformat [mergealias $iformat]
+                   lappend IFORMAT($iformat) {}
+                   lappend INAMEFORMAT([list $name $iformat]) $irender
+                   lappend LIB_IFORMAT($name) $iformat
+               }
+               device {
+                   foreach {oformat orender} [split $plugin :] {break}
+                   set oformat [mergealias $oformat]
+                   lappend OFORMAT($oformat) {}
+                   lappend ONAMEFORMAT([list $name $oformat]) $orender
+                   lappend LIB_OFORMAT($name) $oformat
+               }
+           }
+       }
+    }
+}
+
+#set f [open plugins.gv w]
+set f stdout
+puts $f "digraph G {"
+puts $f "\trankdir=LR ranksep=2"
+puts $f "\tsubgraph { rank=same"
+foreach {iformat} [lsort [array names IFORMAT]] {
+    puts "\t\t\"i-$iformat\" \[label=\"$iformat\"\]"
+}
+puts $f "\t}"
+puts $f "\tsubgraph { rank=same"
+foreach {oformat} [lsort [array names OFORMAT]] {
+    puts "\t\t\"o-$oformat\" \[label=\"$oformat\"\]"
+}
+puts $f "\t}"
+foreach {name} [array names LIB] {
+    puts $f "\tsubgraph cluster_$name { label=\"$name\" penwidth=2"
+    if {[info exists LIB_IFORMAT($name)]} {
+        puts $f "\t\tsubgraph { rank=same"
+        foreach {iformat} [lsort -unique $LIB_IFORMAT($name)] {
+            puts $f "\t\t\t\"i-$name-$iformat\" \[label=\"$iformat\"\]"
+        }
+        puts $f "\t\t}"
+    }
+    if {[info exists LIB_RENDER($name)]} {
+        puts $f "\t\tsubgraph { rank=same"
+        foreach {render} [lsort $LIB_RENDER($name)] {
+            puts $f "\t\t\t\"r-$render\" \[label=\"$render\"\]"
+        }
+        puts $f "\t\t}"
+    }
+    if {[info exists LIB_OFORMAT($name)]} {
+        puts $f "\t\tsubgraph { rank=same"
+        foreach {oformat} [lsort -unique $LIB_OFORMAT($name)] {
+            puts $f "\t\t\t\"o-$name-$oformat\" \[label=\"$oformat\"\]"
+        }
+        puts $f "\t\t}"
+    }
+    puts $f "\t}"
+}
+foreach {name_iformat} [lsort [array names INAMEFORMAT]] {
+    foreach {name iformat} $name_iformat {break}
+    if {[string equal $iformat svg]} {set color red} {set color black}
+    puts $f "\t\"i-$iformat\" -> \"i-$name-$iformat\" \[color=$color\]"
+    foreach {irender} [lsort -unique $INAMEFORMAT($name_iformat)] {
+       puts $f "\t\"i-$name-$iformat\" -> \"r-$irender\" \[color=$color\]"
+       set RENDERCOLOR($irender) $color
+    }
+}
+foreach {name_oformat} [lsort [array names ONAMEFORMAT]] {
+    foreach {name oformat} $name_oformat {break}
+    foreach {orender} [lsort -unique $ONAMEFORMAT($name_oformat)] {
+       if {[info exists RENDERCOLOR($orender)]} {
+           set color $RENDERCOLOR($orender)
+        } {
+           set color black
+        }
+       puts $f "\t\"r-$orender\" -> \"o-$name-$oformat\" -> \"o-$oformat\" \[color=$color\]"
+    }
+}
+puts $f "}"
+#close $f