Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
old_parent_node = self.parent_node
old_font_size = self.font_size
old_context_size = self.context_width, self.context_height
self.parent_node = node
if "font" in node:
font = parse_font(node["font"])
for att in font:
if att not in node:
node[att] = font[att]
self.font_size = size(self, node.get('font-size', '12pt'))
self.context.save()
# Apply transformations
transform(self, node.get('transform'))
# Find and prepare opacity, masks and filters
mask = parse_url(node.get('mask')).fragment
filter_ = parse_url(node.get('filter')).fragment
opacity = float(node.get('opacity', 1))
if filter_:
prepare_filter(self, node, filter_)
if filter_ or mask or (opacity < 1 and node.children):
self.context.push_group()
# Move to (node.x, node.y)
self.context.move_to(
size(self, node.get('x'), 'x'),
size(self, node.get('y'), 'y'))
elif gradient_node.tag == 'radialGradient':
r = size(surface, gradient_node.get('r', '50%'), diagonal_ref)
cx = size(surface, gradient_node.get('cx', '50%'), width_ref)
cy = size(surface, gradient_node.get('cy', '50%'), height_ref)
fx = size(surface, gradient_node.get('fx', str(cx)), width_ref)
fy = size(surface, gradient_node.get('fy', str(cy)), height_ref)
gradient_pattern = cairo.RadialGradient(fx, fy, 0, cx, cy, r)
# Apply matrix to set coordinate system for gradient
if gradient_node.get('gradientUnits') != 'userSpaceOnUse':
gradient_pattern.set_matrix(cairo.Matrix(
1 / width, 0, 0, 1 / height, - x / width, - y / height))
# Apply transform of gradient
transform(
surface, gradient_node.get('gradientTransform'), gradient_pattern)
# Apply gradient (
def draw_pattern(surface, node, name):
"""Draw a pattern image."""
pattern_node = surface.patterns[name]
pattern_node.tag = 'g'
transform(surface, pattern_node.get('patternTransform'))
if pattern_node.get('viewBox'):
if not (size(surface, pattern_node.get('width', 1), 1) and
size(surface, pattern_node.get('height', 1), 1)):
return False
else:
if not (size(surface, pattern_node.get('width', 0), 1) and
size(surface, pattern_node.get('height', 0), 1)):
return False
if pattern_node.get('patternUnits') == 'userSpaceOnUse':
x = size(surface, pattern_node.get('x'), 'x')
y = size(surface, pattern_node.get('y'), 'y')
pattern_width = size(surface, pattern_node.get('width', 0), 1)
pattern_height = size(surface, pattern_node.get('height', 0), 1)
else: