~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to dotgraph.py

  • Committer: Aaron Bentley
  • Date: 2009-03-11 01:19:53 UTC
  • Revision ID: aaron@aaronbentley.com-20090311011953-2xgksl6krrs1yb4d
bzr patch handles URLs with trailing slashes

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Copyright (C) 2004, 2005 Aaron Bentley
2
 
# <aaron.bentley@utoronto.ca>
 
2
# <aaron@aaronbentley.com>
3
3
#
4
4
#    This program is free software; you can redistribute it and/or modify
5
5
#    it under the terms of the GNU General Public License as published by
16
16
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
17
 
18
18
from subprocess import Popen, PIPE
19
 
from urllib import urlencode
20
 
from xml.sax.saxutils import escape
21
19
import os.path
22
20
import errno
23
21
import tempfile
24
22
import shutil
25
 
import time
26
23
 
27
24
RSVG_OUTPUT_TYPES = ('png', 'jpg')
28
 
DOT_OUTPUT_TYPES = ('svg', 'svgz', 'gif', 'jpg', 'ps', 'fig', 'mif', 'png', 
 
25
DOT_OUTPUT_TYPES = ('svg', 'svgz', 'gif', 'jpg', 'ps', 'fig', 'mif', 'png',
29
26
                    'cmapx')
30
27
 
31
28
class NoDot(Exception):
52
49
        self.message = message
53
50
        self.href = None
54
51
 
 
52
    @staticmethod
 
53
    def get_attribute(name, value):
 
54
        if value is None:
 
55
            return ''
 
56
        value = value.replace("\\", "\\\\")
 
57
        value = value.replace('"', '\\"')
 
58
        value = value.replace('\n', '\\n')
 
59
        return '%s="%s"' % (name, value)
 
60
 
55
61
    def define(self):
56
62
        attributes = []
57
63
        style = []
65
71
        if label is not None:
66
72
            attributes.append('label="%s"' % label)
67
73
        attributes.append('shape="box"')
68
 
        tooltip = ''
 
74
        tooltip = None
69
75
        if self.message is not None:
70
 
            tooltip += self.message.replace('"', '\\"')
71
 
        if tooltip:
72
 
            attributes.append('tooltip="%s"' % tooltip)
 
76
            tooltip = self.message
 
77
        attributes.append(self.get_attribute('tooltip', tooltip))
73
78
        if self.href is not None:
74
79
            attributes.append('href="%s"' % self.href)
75
80
        elif tooltip:
198
203
        shutil.rmtree(tempdir)
199
204
    return status
200
205
 
201
 
def invoke_dot(input, out_file=None, file_type='svg', antialias=None, 
 
206
def invoke_dot(input, out_file=None, file_type='svg', antialias=None,
202
207
               fontname="Helvetica", fontsize=11):
203
 
    cmdline = ['dot', '-T%s' % file_type, '-Nfontname=%s' % fontname, 
 
208
    cmdline = ['dot', '-T%s' % file_type, '-Nfontname=%s' % fontname,
204
209
               '-Efontname=%s' % fontname, '-Nfontsize=%d' % fontsize,
205
210
               '-Efontsize=%d' % fontsize]
206
211
    if out_file is not None: