Author: Tobias Pape <tob...@netshed.de> 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 pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit