'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) {
'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) {
'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);
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);
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;]);
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;]);
}
};
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;
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;
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 = [];
}
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]);
}
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]);
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]);
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;