]> granicus.if.org Git - graphviz/commitdiff
Updated lefty scripts to handle extensions to xdot format.
authorerg <devnull@localhost>
Mon, 2 May 2005 17:30:14 +0000 (17:30 +0000)
committererg <devnull@localhost>
Mon, 2 May 2005 17:30:14 +0000 (17:30 +0000)
cmd/dotty/dotty.lefty
cmd/dotty/dotty_draw.lefty
cmd/dotty/dotty_layout.lefty

index a6e037be97c4a77a3b57de49cb8a40fe2b6796c8..b0653a78096aed5292ad7d90337d90cab76a0874 100644 (file)
@@ -151,7 +151,6 @@ load ('dotty_ui.lefty');
 # initialization functions
 #
 dotty.init = function () {
-    dotty.outlinecolor = 1;
     dotty.fontmap = dotty.maps[getenv ('LEFTYWINSYS')].fontmap;
     dotty.clipgt = dotty.protogt.creategraph (['noundo' = 1;]);
     dotty.inited = 1;
index aae363f8210dede0464ec720e91a6f1251f2c015..39323b7ff18d7f26b7c71647c983419732d50985 100644 (file)
@@ -99,8 +99,8 @@ dotty.protogt.drawsgraph = function (gt, views, sgraph) {
         'fontname' = sgraph.fontname;
         'fontsize' = sgraph.fontsize;
         'fontcolor' = sgraph.fontcolor;
-        'color' = sgraph.color;
-        'outlinecolor' = dotty.outlinecolor;
+        'drawcolor' = sgraph.color;
+        'fillcolor' = sgraph.color;
     ]);
 };
 dotty.protogt.undrawsgraph = function (gt, views, sgraph) {
@@ -111,8 +111,8 @@ dotty.protogt.undrawsgraph = function (gt, views, sgraph) {
         'fontname' = sgraph.fontname;
         'fontsize' = sgraph.fontsize;
         'fontcolor' = sgraph.fontcolor;
-        'color' = sgraph.color;
-        'outlinecolor' = 0;
+        'drawcolor' = 0;
+        'fillcolor' = 0;
     ]);
 };
 dotty.protogt.drawnode = function (gt, views, node) {
@@ -125,8 +125,8 @@ dotty.protogt.drawnode = function (gt, views, node) {
         'fontname' = node.fontname;
         'fontsize' = node.fontsize;
         'fontcolor' = node.fontcolor;
-        'color' = node.color;
-        'outlinecolor' = dotty.outlinecolor;
+        'drawcolor' = node.color;
+        'fillcolor' = node.color;
     ]);
     for (vid in views)
         setpick (views[vid].canvas, node, node.rect);
@@ -140,11 +140,12 @@ dotty.protogt.undrawnode = function (gt, views, node) {
     if (~node.pos)
         return;
     gt.execalldraw (gt, views, node, node.draws, [
+        'nooverride' = 1;
         'fontname' = node.fontname;
         'fontsize' = node.fontsize;
         'fontcolor' = 0;
-        'color' = 0;
-        'outlinecolor' = 0;
+        'drawcolor' = 0;
+        'fillcolor' = 0;
     ]);
     for (vid in views)
         clearpick (views[vid].canvas, node);
@@ -172,22 +173,15 @@ dotty.protogt.drawedge = function (gt, views, edge) {
     edge.drawn = 1;
     if (~edge.draws)
         return;
-    for (vid in views) {
-        canvas = views[vid].canvas;
-        if (edge.attr.style == 'bold')
-            setgfxattr (canvas, ['width' = 3;]);
-    }
     gt.execalldraw (gt, views, edge, edge.draws, [
         'fontname' = edge.fontname;
         'fontsize' = edge.fontsize;
         'fontcolor' = edge.fontcolor;
-        'color' = edge.color;
-        'outlinecolor' = dotty.outlinecolor;
+        'drawcolor' = edge.color;
+        'fillcolor' = edge.color;
     ]);
     for (vid in views) {
         canvas = views[vid].canvas;
-        if (edge.attr.style == 'bold')
-            setgfxattr (canvas, ['width' = 0;]);
         if (gt.edgehandles == 0 | ~edge.draws.ep)
             continue;
         arc (canvas, edge, edge.draws.ep, ['x' = 5; 'y' = 5;], ['color' = 1;]);
@@ -201,22 +195,16 @@ dotty.protogt.undrawedge = function (gt, views, edge) {
     edge.drawn = 0;
     if (~edge.draws)
         return;
-    for (vid in views) {
-        canvas = views[vid].canvas;
-        if (edge.attr.style == 'bold')
-            setgfxattr (canvas, ['width' = 3;]);
-    }
     gt.execalldraw (gt, views, edge, edge.draws, [
+        'nooverride' = 1;
         'fontname' = edge.fontname;
         'fontsize' = edge.fontsize;
         'fontcolor' = 0;
-        'color' = 0;
-        'outlinecolor' = 0;
+        'drawcolor' = 0;
+        'fillcolor' = 0;
     ]);
     for (vid in views) {
         canvas = views[vid].canvas;
-        if (edge.attr.style == 'bold')
-            setgfxattr (canvas, ['width' = 0;]);
         if (gt.edgehandles == 0 | ~edge.draws.ep)
             continue;
         arc (canvas, edge, edge.draws.ep, ['x' = 5; 'y' = 5;], ['color' = 0;]);
@@ -242,30 +230,72 @@ dotty.protogt.execalldraw = function (gt, views, obj, draws, gc) {
     }
 };
 dotty.protogt.drawfunc.E = function (gt, canvas, obj, data, gc) {
-    arc (canvas, obj, data.c, data.s, ['color' = gc.color; 'fill' = 'on';]);
-    arc (canvas, obj, data.c, data.s, ['color' = gc.outlinecolor;]);
+    arc (canvas, obj, data.c, data.s, [
+        'color' = gc.fillcolor; 'style' = gc.style; 'width' = gc.width;
+        'fill' = 'on';
+    ]);
+    arc (canvas, obj, data.c, data.s, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
 };
 dotty.protogt.drawfunc.e = function (gt, canvas, obj, data, gc) {
-    arc (canvas, obj, data.c, data.s, ['color' = gc.color;]);
+    arc (canvas, obj, data.c, data.s, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
 };
 dotty.protogt.drawfunc.P = function (gt, canvas, obj, data, gc) {
-    polygon (canvas, obj, data.ps, ['color' = gc.color; 'fill' = 'on';]);
-    polygon (canvas, obj, data.ps, ['color' = gc.outlinecolor;]);
+    polygon (canvas, obj, data.ps, [
+        'color' = gc.fillcolor; 'style' = gc.style; 'width' = gc.width;
+        'fill' = 'on';
+    ]);
+    polygon (canvas, obj, data.ps, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
 };
 dotty.protogt.drawfunc.p = function (gt, canvas, obj, data, gc) {
-    polygon (canvas, obj, data.ps, ['color' = gc.color;]);
+    polygon (canvas, obj, data.ps, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
 };
 dotty.protogt.drawfunc.L = function (gt, canvas, obj, data, gc) {
-    polygon (canvas, obj, data.ps, ['color' = gc.color;]);
+    polygon (canvas, obj, data.ps, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
+};
+dotty.protogt.drawfunc.b = function (gt, canvas, obj, data, gc) {
+    splinegon (canvas, obj, data.ps, [
+        'color' = gc.fillcolor; 'style' = gc.style; 'width' = gc.width;
+        'fill' = 'on';
+    ]);
 };
 dotty.protogt.drawfunc.B = function (gt, canvas, obj, data, gc) {
-    splinegon (canvas, obj, data.ps, ['color' = gc.color;]);
+    splinegon (canvas, obj, data.ps, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
 };
 dotty.protogt.drawfunc.T = function (gt, canvas, obj, data, gc) {
     text (canvas, obj, data.p, data.s, gc.fontname, gc.fontsize, data.j, [
-        'color' = gc.fontcolor;
+        'color' = gc.fontcolor; 'style' = gc.style; 'width' = gc.width;
     ]);
 };
+dotty.protogt.drawfunc.C = function (gt, canvas, obj, data, gc) {
+    if (gc.nooverride ~= 1)
+        gc.fillcolor = data.fillcolor;
+};
+dotty.protogt.drawfunc.c = function (gt, canvas, obj, data, gc) {
+    if (gc.nooverride ~= 1) {
+        gc.drawcolor = data.drawcolor;
+        gc.fontcolor = data.drawcolor;
+    }
+};
+dotty.protogt.drawfunc.F = function (gt, canvas, obj, data, gc) {
+    gc.fontname = data.fn;
+    gc.fontsize = data.fs;
+};
+dotty.protogt.drawfunc.S = function (gt, canvas, obj, data, gc) {
+    gc.style = data.style;
+    gc.width = data.width;
+};
 dotty.protogt.movenodedraw = function (draws, dp) {
     local did, draw, i, j;
 
index 8e04dad209d45649248e80ed79df92b337fa5bd2..1f3fcb6666317cce9ac04db986510453ac1b3605 100644 (file)
@@ -211,17 +211,17 @@ dotty.protogt.unpackalldraw = function (gt, attr) {
 
     o = [];
     if (attr._draw_)
-        o._draw_ = gt.unpackdraw (attr._draw_);
+        o._draw_ = gt.unpackdraw (gt, attr._draw_);
     if (attr._ldraw_)
-        o._ldraw_ = gt.unpackdraw (attr._ldraw_);
+        o._ldraw_ = gt.unpackdraw (gt, attr._ldraw_);
     if (attr._hdraw_)
-        o._hdraw_ = gt.unpackdraw (attr._hdraw_);
+        o._hdraw_ = gt.unpackdraw (gt, attr._hdraw_);
     if (attr._tdraw_)
-        o._tdraw_ = gt.unpackdraw (attr._tdraw_);
+        o._tdraw_ = gt.unpackdraw (gt, attr._tdraw_);
     if (attr._hldraw_)
-        o._hldraw_ = gt.unpackdraw (attr._hldraw_);
+        o._hldraw_ = gt.unpackdraw (gt, attr._hldraw_);
     if (attr._tldraw_)
-        o._tldraw_ = gt.unpackdraw (attr._tldraw_);
+        o._tldraw_ = gt.unpackdraw (gt, attr._tldraw_);
     for (did in o)
         if (o[did].ep) {
             o.ep = o[did].ep;
@@ -243,7 +243,7 @@ dotty.protogt.removealldraw = function (gt, attr) {
     if (attr._tldraw_)
         remove ('_tldraw_', attr);
 };
-dotty.protogt.unpackdraw = function (attr) {
+dotty.protogt.unpackdraw = function (gt, attr) {
     local oo, o, tt, t, n, i, j, s, l, ep;
 
     oo = [];
@@ -279,7 +279,7 @@ dotty.protogt.unpackdraw = function (attr) {
             }
             i = i + 2 + o.n * 2;
             o.ps[o.n] = o.ps[0];
-            o.n = o.n + 1; 
+            o.n = o.n + 1;
         } else if (t[i] == 'p') {
             o.type = t[i];
             o.n = ston (t[i + 1]);
@@ -289,7 +289,7 @@ dotty.protogt.unpackdraw = function (attr) {
             }
             i = i + 2 + o.n * 2;
             o.ps[o.n] = o.ps[0];
-            o.n = o.n + 1; 
+            o.n = o.n + 1;
         } else if (t[i] == 'L') {
             o.type = t[i];
             o.n = ston (t[i + 1]);
@@ -310,6 +310,16 @@ dotty.protogt.unpackdraw = function (attr) {
             i = i + 2 + o.n * 2;
             if (~ep)
                 ep = copy (o.ps[1]);
+        } else if (t[i] == 'b') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            for (j = 0; j < o.n; j = j + 1) {
+                o.ps[j].x = ston (t[i + 2 + j * 2]);
+                o.ps[j].y = ston (t[i + 2 + j * 2 + 1]);
+            }
+            i = i + 2 + o.n * 2;
+            if (~ep)
+                ep = copy (o.ps[1]);
         } else if (t[i] == 'T') {
             o.type = t[i];
             o.p.x = ston (t[i + 1]);
@@ -339,17 +349,92 @@ dotty.protogt.unpackdraw = function (attr) {
                 s = concat (s, tt[j]);
             o.s = s;
         } else if (t[i] == 'C') {
-            i = i + 3;
-            continue;
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            i = i + 2;
+            s = t[i];
+            i = i + 1;
+            l = strlen (s) - 1;
+            while (l < o.n) {
+                s = concat (s, ' ', t[i]);
+                l = l + 1 + strlen (t[i]);
+                i = i + 1;
+            }
+            tt = split (s, '');
+            l = tablesize (tt);
+            s = '';
+            for (j = 1; j < l; j = j + 1)
+                s = concat (s, tt[j]);
+            o.fillcolor = gt.getcolor (gt.views, s);
         } else if (t[i] == 'c') {
-            i = i + 3;
-            continue;
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            i = i + 2;
+            s = t[i];
+            i = i + 1;
+            l = strlen (s) - 1;
+            while (l < o.n) {
+                s = concat (s, ' ', t[i]);
+                l = l + 1 + strlen (t[i]);
+                i = i + 1;
+            }
+            tt = split (s, '');
+            l = tablesize (tt);
+            s = '';
+            for (j = 1; j < l; j = j + 1)
+                s = concat (s, tt[j]);
+            o.drawcolor = gt.getcolor (gt.views, s);
         } else if (t[i] == 'F') {
-            i = i + 4;
-            continue;
-        } else if (t[i] == 'S') {
+            o.type = t[i];
+            o.fs = ston (t[i + 1]);
+            o.n = ston (t[i + 2]);
             i = i + 3;
-            continue;
+            s = t[i];
+            i = i + 1;
+            l = strlen (s) - 1;
+            while (l < o.n) {
+                s = concat (s, ' ', t[i]);
+                l = l + 1 + strlen (t[i]);
+                i = i + 1;
+            }
+            tt = split (s, '');
+            l = tablesize (tt);
+            s = '';
+            for (j = 1; j < l; j = j + 1)
+                s = concat (s, tt[j]);
+            o.fn = dotty.fontmap[s];
+        } else if (t[i] == 'S') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            i = i + 2;
+            s = t[i];
+            i = i + 1;
+            l = strlen (s) - 1;
+            while (l < o.n) {
+                s = concat (s, ' ', t[i]);
+                l = l + 1 + strlen (t[i]);
+                i = i + 1;
+            }
+            tt = split (s, '');
+            l = tablesize (tt);
+            s = '';
+            for (j = 1; j < l; j = j + 1)
+                s = concat (s, tt[j]);
+            if (
+                s == 'solid' | s == 'dashed' | s == 'dotted' |
+                s == 'longdashed' | s == 'shortdashed'
+            )
+                o.style = s;
+            else if (s == 'bold')
+                o.width = 3;
+            else {
+                tt = split (s, '(');
+                if (tt[0] == 'setlinewidth') {
+                    tt = split (tt[1], ')');
+                    o.width = ston (tt[0]);
+                } else
+                    continue;
+            }
         } else {
             dotty.message (0, concat ('draw language parser error: ', t[i]));
             return null;