First implementation of senfutil.Doxygen
[senf.git] / site_scons / lib / dot
diff --git a/site_scons/lib/dot b/site_scons/lib/dot
new file mode 100755 (executable)
index 0000000..c6bdbe4
--- /dev/null
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+topdir="`dirname "$0"`"; topdir="`cd "$topdir/.."; pwd`"
+if head -4 "$1" | grep -q nomunge; then
+    dot "$@"
+    exit $?
+fi
+sed -i -e 's/rankdir=LR/rankdir=TB/' "$1"
+"$topdir/doclib/dot-munge.pl" "$1"
+unflatten -l2 -c2 -f -o "$1".unflat "$1"
+mv "$1".unflat "$1"
+
+case "$2" in
+    -Tpng:gd)
+    first="$1"; shift; shift
+    set -- "$first" "-Tpng" "$@"
+    ;;
+    *)
+esac
+
+set -e
+
+dot "$@"
+
+case "$4" in
+    *.png)
+    if [ -r "$4" ]; then
+        size="`pngtopnm "$4" | sed -n -e '2p'`"
+        width_a="${size% *}"
+        height_a="${size#* }"
+        if [ $width_a -gt 800 ]; then
+            for file in "${1%.dot}".*; do
+                cp "$file" "$file.a"
+            done
+            sed -e 's/rankdir=LR/rankdir=TB/' -e t -e 's/rankdir=TB/rankdir=LR/' "$1.a" > "$1"
+            dot "$@"
+            size="`pngtopnm "$4" | sed -n -e '2p'`"
+            width_b="${size% *}"
+            height_b="${size#* }"
+            if [ $width_a -lt $width_b ]; then
+                for file in "${1%.dot}".*.a; do
+                mv "$file" "${file%.a}"
+                done
+            else
+                rm "${1%.dot}".*.a
+            fi
+        fi
+    fi
+    ;;
+    *)  ;;
+esac