watercloud 发表于 2004-8-5 21:39:16

今天修正了graphviz的一个BUG,解决了其中文问题:)

graphviz-1.13.20040729.1224
在我的MagicLinux上用dotty时习惯性的用鼠标中键的滚轮
轻轻的向下滚动了一下,居然就core dump了:
# gdb lefty core.23835
......
#00x0805d9f7 in find (tp=0x80bd1f4, ko=0x80895f0, sk=0x0) at tbl.c:479
479             if ((kvlp = tp->lp))
(gdb) p/x sk
$1 = 0x0

看看GETSKINDEX是什么东东:
# grep GETSKINDEX tbl.c
#define GETSKINDEX(tp, sk) (unsigned long) *sk % tp->ln

不core dump才怪!!

patch了一下这个bug:

# diff tbl.c tbl.c.bk
479,483d478
<       /* Add by cloud.040804*/
<       if(sk == NULL)
<               return NULL;
<       /* Add End */
<

最后把这个BUG报告给 [email protected]了,

不能显示中文问题原来是需要在dotty.lefy中硬加入中文字体影射,
然后在dot中指定fontname=Simsun即可!

顺修改了一些功能:
1. 鼠标左键点击不建立新节点,改为中键点击时建立.
2. 移动节点后鼠标左键up时重绘视图.
3. 增加快捷键v显示鸟瞰视图

还没有解决的问题有:
1. 通过左键拖戈来移动图像
2. 通过左建拖戈加shift键来实现放大和缩小


Patch结果如下:

# diff dotty.leftydotty.lefty.old
44,45d43
<               'Simsun' =
<               '-misc-fixed-medium-r-normal--0-0-0-0-c-0-gbk-0';
55d52
<               'Simsun' = 'Simsun';
# diff dotty_ui.lefty dotty_ui.lefty.old
236d235
<         'v' = "birdseye view";
281c280
<         local gt,vt;
---
>         local gt;
286d284
<             {
288,291d285
<               vt = dotty.views;
<               gt = dotty.graphs;
<               gt.drawgraph (gt, );
<             }
293,297c287,288
<         }
<
< # else if (~data.obj)
< #   gt.insertnode (gt, data.pos, null, null, null, 1);
<
---
>         } else if (~data.obj)
>             gt.insertnode (gt, data.pos, null, null, null, 1);
322,323d312
<         {
<             gt.insertnode (gt, data.pos, null, null, null, 1);
325d313
<         }
页: [1]
查看完整版本: 今天修正了graphviz的一个BUG,解决了其中文问题:)