diff --git a/README.rst b/README.rst index 86cbaf3..2b89423 100644 --- a/README.rst +++ b/README.rst @@ -87,7 +87,8 @@ Known limitations of supported attributes is still limited - clipping is limited to single paths, no mask support - color gradients are not supported (limitation of reportlab) -- SVG ``ForeignObject`` elements are not supported. +- SVG ``ForeignObject`` elements are not supported +- limited support for SVG ``switch`` elements. Examples diff --git a/svglib/svglib.py b/svglib/svglib.py index ac9bedf..965db40 100755 --- a/svglib/svglib.py +++ b/svglib/svglib.py @@ -555,6 +555,9 @@ def renderNode(self, node, parent=None): parent.add(item) elif name == "clipPath": item = self.renderG(node) + elif name == "switch": # process only default case + item = self.renderSwitch(node) + parent.add(item) elif name in self.handled_shapes: if name == 'image': # We resolve the image target at renderer level because it can point @@ -826,6 +829,14 @@ def renderG(self, node, clipping=None): return gr + def renderSwitch(self, node): + gr = Group() + for child in node.iter_children(): + if child.getAttribute('requiredFeatures') == '': + self.renderNode(child, parent=gr) + break + return gr + def renderStyle(self, node): self.attrConverter.css_rules.add_styles(node.text or "")