Example #1
0
 def __init__(self, **attr):
     Canvas.__init__(self, **attr)
     self.xmlns = 'http://www.w3.org/2000/svg'
     self.xlink = 'http://www.w3.org/1999/xlink'
     self.ev = 'http://www.w3.org/2001/xml-events'
     self.defs = Defs()
     self.scripts = []
Example #2
0
class PrintableCanvas(Canvas):
    def __init__(self, **attr):
        Canvas.__init__(self, **attr)
        self.xmlns = 'http://www.w3.org/2000/svg'
        self.xlink = 'http://www.w3.org/1999/xlink'
        self.ev = 'http://www.w3.org/2001/xml-events'
        self.defs = Defs()
        self.scripts = []

    def addScript(self, cdata):
        self.scripts.append(Script(cdata))

    def setSVG(self):
        self.addDefTags()
        if len(self.defs) > 0:
            self.drawAt(self.defs, 0)
        attr = Canvas.setSVG(self)
        if self.parent is None:
            attr.update([('xmlns', self.xmlns), ('xmlns:xlink', self.xlink),
                         ('xmlns:ev', self.ev)])
        return attr

    def addDefTags(self):
        dlist = {}
        for child in self:
            self.addDefs(child, dlist)
        for key, value in dlist.iteritems():
            self.defs.draw(value)

    def addDefs(self, node, dlist):
        if hasattr(node, '__iter__'):
            for child in node:
                self.addDefs(child, dlist)
        if hasattr(node, 'defs'):
            for d in node.defs:
                dlist.update([(d.id, d)])

    def SVG(self, indent):
        if self.parent is None:
            prepend = '<?xml version="1.0" standalone="no"?>\n'
            prepend += '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" '
            prepend += '"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n'
            self.scripts.reverse()
            for script in self.scripts:
                self.drawAt(script, 0)
            return prepend + GroupableElement.SVG(self, indent)
        else:
            return GroupableElement.SVG(self, indent)

    def save(self, fileOrString=None):
        if fileOrString is None:
            return self.SVG('')
        needToClose = False
        if isinstance(fileOrString, str):
            needToClose = True
            fileOrString = open(fileOrString, 'w')
        fileOrString.write(self.SVG(''))
        if needToClose:
            fileOrString.close()
Example #3
0
 def createDef(self, element):
     if not hasattr(self, 'defs'):
         self.defs = Defs()
     node = self.defs.getElementById(element.id)
     if node is None:
         self.defs.draw(element)
         return True
     else:
         return False
Example #4
0
class PrintableCanvas (Canvas):
    def __init__ (self, **attr):
        Canvas.__init__ (self, **attr)
        self.xmlns = 'http://www.w3.org/2000/svg'
        self.xlink = 'http://www.w3.org/1999/xlink'
        self.ev = 'http://www.w3.org/2001/xml-events'
        self.defs = Defs ()
        self.scripts = []

    def addScript (self, filename):
        self.scripts.append (Script (filename))

    def setSVG (self):
        self.addDefTags ()
        if len (self.defs) > 0:
            self.drawAt (self.defs, 0)
        attr = Canvas.setSVG (self)
        attr.update ([('xmlns', self.xmlns),
                      ('xmlns:xlink', self.xlink),
                      ('xmlns:ev', self.ev)])
        return attr

    def addDefTags (self):
        dlist = {}
        for child in self:
            self.addDefs (child, dlist)
        for key, value in dlist.iteritems ():
            self.defs.draw (value)
        

    def addDefs (self, node, dlist):
        if hasattr (node, '__iter__'):
            for child in node:
                self.addDefs (child, dlist)
        if hasattr (node, 'defs'):
            for d in node.defs:
                dlist.update ([(d.id, d)])

    def SVG (self, indent):
        prepend = '<?xml version="1.0" standalone="no"?>\n'
        prepend += '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" '
        prepend += '"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n'
        self.scripts.reverse ()
        for script in self.scripts:
            self.drawAt (script, 0)
        return prepend + Canvas.SVG (self, indent)

    def save (self, fileOrString):
        needToClose = False
        if isinstance (fileOrString, str):
            needToClose = True
            fileOrString = open (fileOrString, 'w')
        fileOrString.write (self.SVG (''))
        if needToClose:
            fileOrString.close ()
Example #5
0
 def __init__ (self, **attr):
     Canvas.__init__ (self, **attr)
     self.xmlns = 'http://www.w3.org/2000/svg'
     self.xlink = 'http://www.w3.org/1999/xlink'
     self.ev = 'http://www.w3.org/2001/xml-events'
     self.defs = Defs ()
     self.scripts = []
Example #6
0
class Element (object):
    def __init__ (self, **attr):
        if attr.has_key ('name'):
            self.name = attr['name']
        else:
            self.name = None
        if attr.has_key ('id'):
            self.id = attr['id']
        else:
            self.id = None
        if attr.has_key ('className'):
            self.className = attr['className']
        else:
            self.className = None
        self.parent = None
        self.style = Style ()
        self.xml = {}

    def root (self):
        parent = self
        while not parent.parent is None:
            parent = parent.parent
        return parent

    def createDef (self, element):
        if not hasattr (self, 'defs') :
            self.defs = Defs ()
        node = self.defs.getElementById (element.id)
        if node is None:
            self.defs.draw (element)
            return True
        else:
            return False

    def setSVG (self):
        attr = {'class': self.className,
                'id': self.id}
        attr.update (self.style.setSVG ())
        xml = {}
        for key, value in self.xml.iteritems ():
            xml[clean (str (key))] = clean (str(value))
        attr.update (xml)
        return attr

    def SVG (self, indent):
        attr = self.setSVG ()
        return indent + '<' + self.name + ' ' + attributesToSVG (attr) + ' />\n'
Example #7
0
 def createDef(self, element):
     if not hasattr(self, "defs"):
         self.defs = Defs()
     node = self.defs.getElementById(element.id)
     if node is None:
         self.defs.draw(element)
         return True
     else:
         return False
Example #8
0
class Element(object):
    def __init__(self, **attr):
        if attr.has_key("name"):
            self.name = attr["name"]
        else:
            self.name = None
        if attr.has_key("id"):
            self.id = attr["id"]
        else:
            self.id = None
        if attr.has_key("className"):
            self.className = attr["className"]
        else:
            self.className = None
        self.parent = None
        self.style = Style()
        self.xml = {}

    def root(self):
        parent = self
        while not parent.parent is None:
            parent = parent.parent
        return parent

    def createDef(self, element):
        if not hasattr(self, "defs"):
            self.defs = Defs()
        node = self.defs.getElementById(element.id)
        if node is None:
            self.defs.draw(element)
            return True
        else:
            return False

    def setSVG(self):
        attr = {"class": self.className, "id": self.id}
        attr.update(self.style.setSVG())
        attr.update(self.xml)
        return attr

    def SVG(self, indent):
        attr = self.setSVG()
        return indent + "<" + self.name + " " + attributesToSVG(attr) + " />\n"
Example #9
0
class Element(object):
    def __init__(self, **attr):
        if attr.has_key('name'):
            self.name = attr['name']
        else:
            self.name = None
        if attr.has_key('id'):
            self.id = attr['id']
        else:
            self.id = None
        if attr.has_key('className'):
            self.className = attr['className']
        else:
            self.className = None
        self.parent = None
        self.style = Style()
        self.xml = {}

    def root(self):
        parent = self
        while not parent.parent is None:
            parent = parent.parent
        return parent

    def createDef(self, element):
        if not hasattr(self, 'defs'):
            self.defs = Defs()
        node = self.defs.getElementById(element.id)
        if node is None:
            self.defs.draw(element)
            return True
        else:
            return False

    def setSVG(self):
        attr = {'class': self.className, 'id': self.id}
        attr.update(self.style.setSVG())
        attr.update(self.xml)
        return attr

    def SVG(self, indent):
        attr = self.setSVG()
        return indent + '<' + self.name + ' ' + attributesToSVG(attr) + ' />\n'
Example #10
0
class Element:
    def __init__ (self, **attr):
        if attr.has_key ('name'):
            self.name = attr['name']
        else:
            self.name = None
        if attr.has_key ('id'):
            self.id = attr['id']
        else:
            self.id = None
        if attr.has_key ('className'):
            self.className = attr['className']
        else:
            self.className = None
        self.parent = None
        self.style = Style ()
        self.xml = {}

    def createDef (self, element):
        if not hasattr (self, 'defs') :
            self.defs = Defs ()
        node = self.defs.getElementById (element.id)
        if node is None:
            self.defs.draw (element)
            return True
        else:
            return False

    def setSVG (self):
        attr = {'class': self.className,
                'id': self.id}
        attr.update (self.style.setSVG ())
        attr.update (self.xml)
        return attr

    def SVG (self, indent):
        attr = self.setSVG ()
        return indent + '<' + self.name + ' ' + attributesToSVG (attr) + ' />\n'
Example #11
0
class PrintableCanvas (Canvas):
    def __init__ (self, **attr):
        Canvas.__init__ (self, **attr)
        self.xmlns = 'http://www.w3.org/2000/svg'
        self.xlink = 'http://www.w3.org/1999/xlink'
        self.ev = 'http://www.w3.org/2001/xml-events'
        self.defs = Defs ()
        self.scripts = []

    def addScript (self, cdata):
        self.scripts.append (Script (cdata))

    def setSVG (self):
        self.addDefTags ()
        if len (self.defs) > 0:
            self.drawAt (self.defs, 0)
        rect = Rectangle (width = self.viewBox.width, height = self.viewBox.height)
        rect.style.fill = 'white'
        self.drawAt (rect, 0)
        attr = Canvas.setSVG (self)
        if self.parent is None:
            attr.update ([('xmlns', self.xmlns),
                          ('xmlns:xlink', self.xlink),
                          ('xmlns:ev', self.ev)])
        return attr

    def addDefTags (self):
        dlist = {}
        for child in self:
            self.addDefs (child, dlist)
        for key, value in dlist.iteritems ():
            self.defs.draw (value)
        

    def addDefs (self, node, dlist):
        if hasattr (node, '__iter__'):
            for child in node:
                self.addDefs (child, dlist)
        if hasattr (node, 'defs'):
            for d in node.defs:
                dlist.update ([(d.id, d)])

    def SVG (self, indent, noScript = False):
        if self.parent is None:
            prepend = '<?xml version="1.0" standalone="no"?>\n'
            prepend += '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" '
            prepend += '"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n'
            if not noScript:
                self.scripts.reverse ()
                for script in self.scripts:
                    self.drawAt (script, 0)
            return prepend + GroupableElement.SVG (self, indent)
        else:
            return GroupableElement.SVG (self, indent)

    def save (self, fileOrString = None, noScript = False):
        self.id = 'image-root'
        if fileOrString is None:
            return self.SVG ('', noScript = noScript)
        needToClose = False
        if isinstance (fileOrString, str):
            needToClose = True
            fileOrString = open (fileOrString, 'w')
        fileOrString.write (self.SVG ('', noScript = noScript))
        if needToClose:
            fileOrString.close ()