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

Skip to content

Commit e9f8571

Browse files
committed
Make dviread.Dvi a context manager
so files get closed automatically Available in Python 2.5 and up
1 parent 29db8b2 commit e9f8571

4 files changed

Lines changed: 32 additions & 32 deletions

File tree

lib/matplotlib/backends/backend_pdf.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1845,9 +1845,8 @@ def draw_tex(self, gc, x, y, s, prop, angle, ismath='TeX!', mtext=None):
18451845
texmanager = self.get_texmanager()
18461846
fontsize = prop.get_size_in_points()
18471847
dvifile = texmanager.make_dvi(s, fontsize)
1848-
dvi = dviread.Dvi(dvifile, 72)
1849-
page = six.next(iter(dvi))
1850-
dvi.close()
1848+
with dviread.Dvi(dvifile, 72) as dvi:
1849+
page = six.next(iter(dvi))
18511850

18521851
# Gather font information and do some setup for combining
18531852
# characters into strings. The variable seq will contain a

lib/matplotlib/dviread.py

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@
66
77
Interface::
88
9-
dvi = Dvi(filename, 72)
10-
# iterate over pages (but only one page is supported for now):
11-
for page in dvi:
12-
w, h, d = page.width, page.height, page.descent
13-
for x,y,font,glyph,width in page.text:
14-
fontname = font.texname
15-
pointsize = font.size
16-
...
17-
for x,y,height,width in page.boxes:
18-
...
9+
with Dvi(filename, 72) as dvi:
10+
# iterate over pages (but only one page is supported for now):
11+
for page in dvi:
12+
w, h, d = page.width, page.height, page.descent
13+
for x,y,font,glyph,width in page.text:
14+
fontname = font.texname
15+
pointsize = font.size
16+
...
17+
for x,y,height,width in page.boxes:
18+
...
1919
2020
"""
2121
from __future__ import (absolute_import, division, print_function,
@@ -75,6 +75,12 @@ def _get_baseline(self, filename):
7575
return float(depth)
7676
return None
7777

78+
def __enter__(self):
79+
return self
80+
81+
def __exit__(self, etype, evalue, etrace):
82+
self.close()
83+
7884
def __iter__(self):
7985
"""
8086
Iterate through the pages of the file.
@@ -910,15 +916,15 @@ def _vffile(texname):
910916
fname = sys.argv[1]
911917
try: dpi = float(sys.argv[2])
912918
except IndexError: dpi = None
913-
dvi = Dvi(fname, dpi)
914-
fontmap = PsfontsMap(find_tex_file('pdftex.map'))
915-
for page in dvi:
916-
print('=== new page ===')
917-
fPrev = None
918-
for x,y,f,c,w in page.text:
919-
if f != fPrev:
920-
print('font', f.texname, 'scaled', f._scale/pow(2.0,20))
921-
fPrev = f
922-
print(x,y,c, 32 <= c < 128 and chr(c) or '.', w)
923-
for x,y,w,h in page.boxes:
924-
print(x,y,'BOX',w,h)
919+
with Dvi(fname, dpi) as dvi:
920+
fontmap = PsfontsMap(find_tex_file('pdftex.map'))
921+
for page in dvi:
922+
print('=== new page ===')
923+
fPrev = None
924+
for x,y,f,c,w in page.text:
925+
if f != fPrev:
926+
print('font', f.texname, 'scaled', f._scale/pow(2.0,20))
927+
fPrev = f
928+
print(x,y,c, 32 <= c < 128 and chr(c) or '.', w)
929+
for x,y,w,h in page.boxes:
930+
print(x,y,'BOX',w,h)

lib/matplotlib/texmanager.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -673,10 +673,7 @@ def get_text_width_height_descent(self, tex, fontsize, renderer=None):
673673
else:
674674
# use dviread. It sometimes returns a wrong descent.
675675
dvifile = self.make_dvi(tex, fontsize)
676-
dvi = dviread.Dvi(dvifile, 72 * dpi_fraction)
677-
try:
676+
with dviread.Dvi(dvifile, 72 * dpi_fraction) as dvi:
678677
page = next(iter(dvi))
679-
finally:
680-
dvi.close()
681678
# A total height (including the descent) needs to be returned.
682679
return page.width, page.height + page.descent, page.descent

lib/matplotlib/textpath.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -313,10 +313,8 @@ def get_glyphs_tex(self, prop, s, glyph_map=None,
313313
else:
314314
dvifile = texmanager.make_dvi(s, self.FONT_SCALE)
315315
dvi = dviread.Dvi(dvifile, self.DPI)
316-
try:
316+
with dvi:
317317
page = next(iter(dvi))
318-
finally:
319-
dvi.close()
320318

321319
if glyph_map is None:
322320
glyph_map = dict()

0 commit comments

Comments
 (0)