Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2f89e54

Browse files
committed
Turned mathtext in SVG into single <text> with multiple <tspan>s
svn path=/trunk/matplotlib/; revision=3353
1 parent 36672b1 commit 2f89e54

5 files changed

Lines changed: 41 additions & 17 deletions

File tree

CHANGELOG

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
2007-06-03 Turned mathtext in SVG into single <text> with multiple <tspan>
2+
objects (easier to edit in inkscape). - NN
3+
14
===============================================================
25
2007-06-02 Released 0.90.1 at revision 3352
36

lib/matplotlib/backends/backend_svg.py

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -263,21 +263,42 @@ def _draw_mathtext(self, gc, x, y, s, prop, angle):
263263
svg_lines = svg_elements.svg_lines
264264
color = rgb2hex(gc.get_rgb())
265265

266-
svg = ""
267266
self.open_group("mathtext")
268-
for fontname, fontsize, thetext, ox, oy, metrics in svg_glyphs:
269-
style = 'font-size: %f; font-family: %s; fill: %s;'%(fontsize,
270-
fontname, color)
271-
if angle!=0:
272-
transform = 'transform="translate(%f,%f) rotate(%1.1f) translate(%f,%f)"' % (x,y,-angle,-x,-y) # Inkscape doesn't support rotate(angle x y)
273-
else: transform = ''
267+
268+
svg = '<text style="fill: %s" x="%f" y="%f"' % (color,x,y)
269+
270+
if angle != 0:
271+
svg += ( ' transform="translate(%f,%f) rotate(%1.1f) translate(%f,%f)"'
272+
% (x,y,-angle,-x,-y) ) # Inkscape doesn't support rotate(angle x y)
273+
svg += '>\n'
274+
275+
curr_x,curr_y = 0.0,0.0
276+
277+
for fontname, fontsize, thetext, new_x, new_y_mtc, metrics in svg_glyphs:
274278
if rcParams["mathtext.mathtext2"]:
275-
newx, newy = x+ox, y+oy-height
279+
new_y = new_y_mtc - height
276280
else:
277-
newx, newy = x+ox, y-oy
278-
svg += """\
279-
<text style="%(style)s" x="%(newx)f" y="%(newy)f" %(transform)s>%(thetext)s</text>
280-
""" % locals()
281+
new_y = - new_y_mtc
282+
283+
svg += '<tspan'
284+
svg += ' style="font-size: %f; font-family: %s"'%(fontsize, fontname)
285+
xadvance = metrics.advance
286+
svg += ' textLength="%f"' % xadvance
287+
288+
dx = new_x - curr_x
289+
if dx != 0.0:
290+
svg += ' dx="%f"' % dx
291+
292+
dy = new_y - curr_y
293+
if dy != 0.0:
294+
svg += ' dy="%f"' % dy
295+
296+
svg += '>%s</tspan>\n' % thetext
297+
298+
curr_x = new_x + xadvance
299+
curr_y = new_y
300+
301+
svg += '</text>\n'
281302

282303
self._svgwriter.write (svg)
283304
rgbFace = gc.get_rgb()

lib/matplotlib/mathtext.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,10 +1164,10 @@ def ymax(self):
11641164

11651165
def render(self):
11661166
'render to the fonts canvas'
1167-
Element.render(self)
11681167
Element.fonts.render(
11691168
self.ox, self.oy,
11701169
self.font, self.sym, self.fontsize, self.dpi)
1170+
Element.render(self)
11711171

11721172
def __repr__(self):
11731173
return self.sym
@@ -1229,8 +1229,8 @@ def width(self):
12291229

12301230
def render(self):
12311231
'render to the fonts canvas'
1232-
Element.render(self)
12331232
self.elements[0].render()
1233+
Element.render(self)
12341234

12351235
def xmin(self):
12361236
'get the minimum ink in x'

lib/matplotlib/mathtext2.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,8 +304,8 @@ def hrender(self, x, y):
304304
thetext = unichr(self.uniindex)
305305
thetext.encode('utf-8')
306306
fontsize = self.env.fontsize * scriptfactors[self.env.scriptdepth]
307-
svg_elements.svg_glyphs.append((familyname, fontsize,thetext, x,
308-
y, None)) # None was originaly metrics (in old mathtext)
307+
svg_elements.svg_glyphs.append((familyname, fontsize,thetext, x, y,
308+
Bunch(advance=self.hadvance))) # last was originaly metrics (in old mathtext)
309309

310310

311311
class Kern(Renderer):

lib/matplotlib/mpl-data/matplotlibrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
#### CONFIGURATION BEGINS HERE
2727
# the default backend; one of GTK GTKAgg GTKCairo FltkAgg QtAgg TkAgg
2828
# Agg Cairo GD GDK Paint PS PDF SVG Template
29-
backend : WXAgg
29+
backend : TkAgg
3030
numerix : numpy # numpy, Numeric or numarray
3131
units : True
3232
#interactive : False # see http://matplotlib.sourceforge.net/interactive.html

0 commit comments

Comments
 (0)