Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 548cd25

Browse filesBrowse files
committed
Privatize some SVG internal APIs.
... and make their parameter non-optional at the same time (which would also have required a deprecation period otherwise; this is the main motivation for hiding the entire API). The parameter is always passed, it doesn't make much sense to call `generate_transform()` or `generate_css()` with no arg (and get an empty string), and this avoids having to switch the mutable default {} of generate_css to None and add None-to-{} logic.
1 parent fea21af commit 548cd25
Copy full SHA for 548cd25

File tree

Expand file treeCollapse file tree

2 files changed

+44
-33
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+44
-33
lines changed
+3Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
``backend_svg.generate_transform`` and ``backend_svg.generate_css``
2+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3+
... are deprecated with no replacement.

‎lib/matplotlib/backends/backend_svg.py

Copy file name to clipboardExpand all lines: lib/matplotlib/backends/backend_svg.py
+41-33Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -249,26 +249,34 @@ def flush(self):
249249
pass # replaced by the constructor
250250

251251

252+
def _generate_transform(transform_list):
253+
output = StringIO()
254+
for type, value in transform_list:
255+
if (type == 'scale' and (value == (1,) or value == (1, 1))
256+
or type == 'translate' and value == (0, 0)
257+
or type == 'rotate' and value == (0,)):
258+
continue
259+
if type == 'matrix' and isinstance(value, Affine2DBase):
260+
value = value.to_values()
261+
output.write('%s(%s)' % (
262+
type, ' '.join(short_float_fmt(x) for x in value)))
263+
return output.getvalue()
264+
265+
266+
@_api.deprecated("3.6")
252267
def generate_transform(transform_list=None):
253-
if transform_list:
254-
output = StringIO()
255-
for type, value in transform_list:
256-
if (type == 'scale' and (value == (1,) or value == (1, 1))
257-
or type == 'translate' and value == (0, 0)
258-
or type == 'rotate' and value == (0,)):
259-
continue
260-
if type == 'matrix' and isinstance(value, Affine2DBase):
261-
value = value.to_values()
262-
output.write('%s(%s)' % (
263-
type, ' '.join(short_float_fmt(x) for x in value)))
264-
return output.getvalue()
265-
return ''
268+
return _generate_transform(transform_list or [])
266269

267270

268-
def generate_css(attrib={}):
271+
def _generate_css(attrib):
269272
return "; ".join(f"{k}: {v}" for k, v in attrib.items())
270273

271274

275+
@_api.deprecated("3.6")
276+
def generate_css(attrib=None):
277+
return _generate_css(attrib or {})
278+
279+
272280
_capstyle_d = {'projecting': 'square', 'butt': 'butt', 'round': 'round'}
273281

274282

@@ -441,7 +449,7 @@ def ensure_metadata(mid):
441449

442450
def _write_default_style(self):
443451
writer = self.writer
444-
default_style = generate_css({
452+
default_style = _generate_css({
445453
'stroke-linejoin': 'round',
446454
'stroke-linecap': 'butt'})
447455
writer.start('defs')
@@ -528,7 +536,7 @@ def _write_hatches(self):
528536
writer.element(
529537
'path',
530538
d=path_data,
531-
style=generate_css(hatch_style)
539+
style=_generate_css(hatch_style)
532540
)
533541
writer.end('pattern')
534542
writer.end('defs')
@@ -579,7 +587,7 @@ def _get_style_dict(self, gc, rgbFace):
579587
return attrib
580588

581589
def _get_style(self, gc, rgbFace):
582-
return generate_css(self._get_style_dict(gc, rgbFace))
590+
return _generate_css(self._get_style_dict(gc, rgbFace))
583591

584592
def _get_clip_attrs(self, gc):
585593
cliprect = gc.get_clip_rectangle()
@@ -682,9 +690,9 @@ def draw_markers(
682690
marker_trans + Affine2D().scale(1.0, -1.0),
683691
simplify=False)
684692
style = self._get_style_dict(gc, rgbFace)
685-
dictkey = (path_data, generate_css(style))
693+
dictkey = (path_data, _generate_css(style))
686694
oid = self._markers.get(dictkey)
687-
style = generate_css({k: v for k, v in style.items()
695+
style = _generate_css({k: v for k, v in style.items()
688696
if k.startswith('stroke')})
689697

690698
if oid is None:
@@ -842,13 +850,13 @@ def draw_gouraud_triangle(self, gc, points, colors, trans):
842850
writer.element(
843851
'stop',
844852
offset='1',
845-
style=generate_css({
853+
style=_generate_css({
846854
'stop-color': rgb2hex(avg_color),
847855
'stop-opacity': short_float_fmt(rgba_color[-1])}))
848856
writer.element(
849857
'stop',
850858
offset='0',
851-
style=generate_css({'stop-color': rgb2hex(rgba_color),
859+
style=_generate_css({'stop-color': rgb2hex(rgba_color),
852860
'stop-opacity': "0"}))
853861

854862
writer.end('linearGradient')
@@ -958,7 +966,7 @@ def draw_image(self, gc, x, y, im, transform=None):
958966

959967
self.writer.element(
960968
'image',
961-
transform=generate_transform([
969+
transform=_generate_transform([
962970
('scale', (1, -1)), ('translate', (0, -h))]),
963971
x=short_float_fmt(x),
964972
y=short_float_fmt(-(self.height - y - h)),
@@ -977,7 +985,7 @@ def draw_image(self, gc, x, y, im, transform=None):
977985
.scale(1.0, -1.0)
978986
.translate(0.0, self.height))
979987

980-
attrib['transform'] = generate_transform(
988+
attrib['transform'] = _generate_transform(
981989
[('matrix', flipped.frozen())])
982990
attrib['style'] = (
983991
'image-rendering:crisp-edges;'
@@ -1007,7 +1015,7 @@ def _update_glyph_map_defs(self, glyph_map_new):
10071015
Path(vertices * 64, codes), simplify=False)
10081016
writer.element(
10091017
'path', id=char_id, d=path_data,
1010-
transform=generate_transform([('scale', (1 / 64,))]))
1018+
transform=_generate_transform([('scale', (1 / 64,))]))
10111019
writer.end('defs')
10121020
self._glyph_map.update(glyph_map_new)
10131021

@@ -1045,8 +1053,8 @@ def _draw_text_as_path(self, gc, x, y, s, prop, angle, ismath, mtext=None):
10451053
style['opacity'] = short_float_fmt(alpha)
10461054
font_scale = fontsize / text2path.FONT_SCALE
10471055
attrib = {
1048-
'style': generate_css(style),
1049-
'transform': generate_transform([
1056+
'style': _generate_css(style),
1057+
'transform': _generate_transform([
10501058
('translate', (x, y)),
10511059
('rotate', (-angle,)),
10521060
('scale', (font_scale, -font_scale))]),
@@ -1082,7 +1090,7 @@ def _draw_text_as_path(self, gc, x, y, s, prop, angle, ismath, mtext=None):
10821090
char_id = self._adjust_char_id(char_id)
10831091
writer.element(
10841092
'use',
1085-
transform=generate_transform([
1093+
transform=_generate_transform([
10861094
('translate', (xposition, yposition)),
10871095
('scale', (scale,)),
10881096
]),
@@ -1125,7 +1133,7 @@ def _draw_text_as_text(self, gc, x, y, s, prop, angle, ismath, mtext=None):
11251133
style['font'] = ' '.join(font_parts)
11261134
if prop.get_stretch() != 'normal':
11271135
style['font-stretch'] = prop.get_stretch()
1128-
attrib['style'] = generate_css(style)
1136+
attrib['style'] = _generate_css(style)
11291137

11301138
if mtext and (angle == 0 or mtext.get_rotation_mode() == "anchor"):
11311139
# If text anchoring can be supported, get the original
@@ -1151,14 +1159,14 @@ def _draw_text_as_text(self, gc, x, y, s, prop, angle, ismath, mtext=None):
11511159

11521160
attrib['x'] = short_float_fmt(ax)
11531161
attrib['y'] = short_float_fmt(ay)
1154-
attrib['style'] = generate_css(style)
1162+
attrib['style'] = _generate_css(style)
11551163
attrib['transform'] = "rotate(%s, %s, %s)" % (
11561164
short_float_fmt(-angle),
11571165
short_float_fmt(ax),
11581166
short_float_fmt(ay))
11591167
writer.element('text', s, attrib=attrib)
11601168
else:
1161-
attrib['transform'] = generate_transform([
1169+
attrib['transform'] = _generate_transform([
11621170
('translate', (x, y)),
11631171
('rotate', (-angle,))])
11641172

@@ -1173,8 +1181,8 @@ def _draw_text_as_text(self, gc, x, y, s, prop, angle, ismath, mtext=None):
11731181
# Apply attributes to 'g', not 'text', because we likely have some
11741182
# rectangles as well with the same style and transformation.
11751183
writer.start('g',
1176-
style=generate_css(style),
1177-
transform=generate_transform([
1184+
style=_generate_css(style),
1185+
transform=_generate_transform([
11781186
('translate', (x, y)),
11791187
('rotate', (-angle,))]),
11801188
)
@@ -1199,7 +1207,7 @@ def _draw_text_as_text(self, gc, x, y, s, prop, angle, ismath, mtext=None):
11991207
style = {'font': ' '.join(font_parts)}
12001208
if entry.stretch != 'normal':
12011209
style['font-stretch'] = entry.stretch
1202-
style = generate_css(style)
1210+
style = _generate_css(style)
12031211
if thetext == 32:
12041212
thetext = 0xa0 # non-breaking space
12051213
spans.setdefault(style, []).append((new_x, -new_y, thetext))

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.