Author: Tobias Pape <[email protected]>
Branch: dotviewer-linewidth
Changeset: r65633:ada230ad6f68
Date: 2013-07-24 18:21 +0200
http://bitbucket.org/pypy/pypy/changeset/ada230ad6f68/
Log: Add linewidth attribute to dotviewer
note that due to 'plain'-format restrictions, only the older
'style="setlinewidth(...)"' style is supported.
diff --git a/dotviewer/drawgraph.py b/dotviewer/drawgraph.py
--- a/dotviewer/drawgraph.py
+++ b/dotviewer/drawgraph.py
@@ -22,6 +22,7 @@
'yellow': (255,255,0),
}
re_nonword=re.compile(r'([^0-9a-zA-Z_.]+)')
+re_linewidth=re.compile(r'setlinewidth\((\d+(\.\d*)?|\.\d+)\)')
def combine(color1, color2, alpha):
r1, g1, b1 = color1
@@ -138,6 +139,13 @@
self.yl = float(yl)
rest = rest[3:]
self.style, self.color = rest
+ linematch = re_linewidth.match(self.style)
+ if linematch:
+ num = linematch.group(1)
+ self.linewidth = int(round(float(num)))
+ self.style = self.style[linematch.end(0):]
+ else:
+ self.linewidth = 1
self.highlight = False
self.cachedbezierpoints = None
self.cachedarrowhead = None
@@ -520,8 +528,8 @@
fgcolor = highlight_color(fgcolor)
points = [self.map(*xy) for xy in edge.bezierpoints()]
- def drawedgebody(points=points, fgcolor=fgcolor):
- pygame.draw.lines(self.screen, fgcolor, False, points)
+ def drawedgebody(points=points, fgcolor=fgcolor,
width=edge.linewidth):
+ pygame.draw.lines(self.screen, fgcolor, False, points, width)
edgebodycmd.append(drawedgebody)
points = [self.map(*xy) for xy in edge.arrowhead()]
diff --git a/dotviewer/test/test_interactive.py
b/dotviewer/test/test_interactive.py
--- a/dotviewer/test/test_interactive.py
+++ b/dotviewer/test/test_interactive.py
@@ -34,6 +34,23 @@
}
'''
+SOURCE2=r'''digraph f {
+ a; d; e; f; g; h; i; j; k; l;
+ a -> d [penwidth=1, style="setlinewidth(1)"];
+ d -> e [penwidth=2, style="setlinewidth(2)"];
+ e -> f [penwidth=4, style="setlinewidth(4)"];
+ f -> g [penwidth=8, style="setlinewidth(8)"];
+ g -> h [penwidth=16, style="setlinewidth(16)"];
+ h -> i [penwidth=32, style="setlinewidth(32)"];
+ i -> j [penwidth=64, style="setlinewidth(64)"];
+ j -> k [penwidth=128, style="setlinewidth(128)"];
+ k -> l [penwidth=256, style="setlinewidth(256)"];
+}'''
+
+
+
+
+
def setup_module(mod):
if not option.pygame:
py.test.skip("--pygame not enabled")
@@ -161,3 +178,10 @@
page = MyPage(str(dotfile))
page.fixedfont = True
graphclient.display_page(page)
+
+def test_linewidth():
+ udir.join("graph2.dot").write(SOURCE2)
+ from dotviewer import graphpage, graphclient
+ dotfile = udir.join('graph2.dot')
+ page = graphpage.DotFileGraphPage(str(dotfile))
+ graphclient.display_page(page)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit