@@ -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" )
252267def 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,18 +1159,16 @@ 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 )
1155- attrib ['transform' ] = "rotate(%s, %s, %s)" % (
1156- short_float_fmt (- angle ),
1157- short_float_fmt (ax ),
1158- short_float_fmt (ay ))
1159- writer .element ('text' , s , attrib = attrib )
1162+ attrib ['style' ] = _generate_css (style )
1163+ attrib ['transform' ] = _generate_transform ([
1164+ ("rotate" , (- angle , ax , ay ))])
1165+
11601166 else :
1161- attrib ['transform' ] = generate_transform ([
1167+ attrib ['transform' ] = _generate_transform ([
11621168 ('translate' , (x , y )),
11631169 ('rotate' , (- angle ,))])
11641170
1165- writer .element ('text' , s , attrib = attrib )
1171+ writer .element ('text' , s , attrib = attrib )
11661172
11671173 else :
11681174 writer .comment (s )
@@ -1173,8 +1179,8 @@ def _draw_text_as_text(self, gc, x, y, s, prop, angle, ismath, mtext=None):
11731179 # Apply attributes to 'g', not 'text', because we likely have some
11741180 # rectangles as well with the same style and transformation.
11751181 writer .start ('g' ,
1176- style = generate_css (style ),
1177- transform = generate_transform ([
1182+ style = _generate_css (style ),
1183+ transform = _generate_transform ([
11781184 ('translate' , (x , y )),
11791185 ('rotate' , (- angle ,))]),
11801186 )
@@ -1199,7 +1205,7 @@ def _draw_text_as_text(self, gc, x, y, s, prop, angle, ismath, mtext=None):
11991205 style = {'font' : ' ' .join (font_parts )}
12001206 if entry .stretch != 'normal' :
12011207 style ['font-stretch' ] = entry .stretch
1202- style = generate_css (style )
1208+ style = _generate_css (style )
12031209 if thetext == 32 :
12041210 thetext = 0xa0 # non-breaking space
12051211 spans .setdefault (style , []).append ((new_x , - new_y , thetext ))
0 commit comments