Revision: 3816
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=3816&view=rev
Author: jouni
Date: 2007-09-07 13:43:20 -0700 (Fri, 07 Sep 2007)
Log Message:
-----------
Return widths of glyphs to caller
Modified Paths:
--------------
trunk/matplotlib/lib/matplotlib/dviread.py
Modified: trunk/matplotlib/lib/matplotlib/dviread.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/dviread.py 2007-09-07 20:28:01 UTC (rev 3815)
+++ trunk/matplotlib/lib/matplotlib/dviread.py 2007-09-07 20:43:20 UTC (rev 3816)
@@ -8,7 +8,7 @@
dvi = Dvi(filename, 72)
for text, boxes in dvi: # iterate over pages
text, boxes = dvi.output(72)
- for x,y,font,glyph in text:
+ for x,y,font,glyph,width in text:
fontname, pointsize = dvi.fontinfo(font)
...
for x,y,height,width in boxes:
@@ -48,7 +48,7 @@
Iterate through the pages of the file.
Returns (text, pages) pairs, where:
- text is a list of (x, y, fontnum, glyphnum) tuples
+ text is a list of (x, y, fontnum, glyphnum, width) tuples
boxes is a list of (x, y, height, width) tuples
The coordinates are transformed into a standard Cartesian
@@ -78,13 +78,14 @@
"""
t0 = self.text[0]
minx, miny, maxx, maxy = t0[0], t0[1], t0[0], t0[1]
- for x,y,_,_ in self.text + self.boxes:
+ for elt in self.text + self.boxes:
+ x,y = elt[:2]
if x < minx: minx = x
if y < miny: miny = y
if x > maxx: maxx = x
if y > maxy: maxy = y
d = self.dpi / (72.27 * 2**16) # from TeX's "scaled points" to dpi units
- text = [ ((x-minx)*d, (maxy-y)*d, f, g) for (x,y,f,g) in self.text ]
+ text = [ ((x-minx)*d, (maxy-y)*d, f, g, w*d) for (x,y,f,g,w) in self.text ]
boxes = [ ((x-minx)*d, (maxy-y)*d, h*d, w*d) for (x,y,h,w) in self.boxes ]
return text, boxes
@@ -219,14 +220,17 @@
# I think we can assume this is constant
self.state = _dvistate.outer
+ def _width_of(self, char):
+ font = self.fonts[self.f]
+ width = font.tfm.width[char]
+ width = (width * font.scale) >> 20
+ return width
+
def _set_char(self, char):
if self.state != _dvistate.inpage:
raise ValueError, "misplaced set_char in dvi file"
self._put_char(char)
- font = self.fonts[self.f]
- width = font.tfm.width[char]
- width = (width * font.scale) >> 20
- self.h += width
+ self.h += self._width_of(char)
def _set_rule(self, a, b):
if self.state != _dvistate.inpage:
@@ -237,7 +241,7 @@
def _put_char(self, char):
if self.state != _dvistate.inpage:
raise ValueError, "misplaced put_char in dvi file"
- self.text.append((self.h, self.v, self.f, char))
+ self.text.append((self.h, self.v, self.f, char, self._width_of(char)))
def _put_rule(self, a, b):
if self.state != _dvistate.inpage:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|