Skip to content

Commit 1e8ea2f

Browse files
authored
Merge pull request #28736 from QuLogic/simplify-dviread
2 parents 1c892c2 + d734a45 commit 1e8ea2f

File tree

1 file changed

+41
-29
lines changed

1 file changed

+41
-29
lines changed

lib/matplotlib/dviread.py

+41-29
Original file line numberDiff line numberDiff line change
@@ -132,20 +132,20 @@ def glyph_name_or_index(self):
132132
# raw: Return delta as is.
133133
raw=lambda dvi, delta: delta,
134134
# u1: Read 1 byte as an unsigned number.
135-
u1=lambda dvi, delta: dvi._arg(1, signed=False),
135+
u1=lambda dvi, delta: dvi._read_arg(1, signed=False),
136136
# u4: Read 4 bytes as an unsigned number.
137-
u4=lambda dvi, delta: dvi._arg(4, signed=False),
137+
u4=lambda dvi, delta: dvi._read_arg(4, signed=False),
138138
# s4: Read 4 bytes as a signed number.
139-
s4=lambda dvi, delta: dvi._arg(4, signed=True),
139+
s4=lambda dvi, delta: dvi._read_arg(4, signed=True),
140140
# slen: Read delta bytes as a signed number, or None if delta is None.
141-
slen=lambda dvi, delta: dvi._arg(delta, signed=True) if delta else None,
141+
slen=lambda dvi, delta: dvi._read_arg(delta, signed=True) if delta else None,
142142
# slen1: Read (delta + 1) bytes as a signed number.
143-
slen1=lambda dvi, delta: dvi._arg(delta + 1, signed=True),
143+
slen1=lambda dvi, delta: dvi._read_arg(delta + 1, signed=True),
144144
# ulen1: Read (delta + 1) bytes as an unsigned number.
145-
ulen1=lambda dvi, delta: dvi._arg(delta + 1, signed=False),
145+
ulen1=lambda dvi, delta: dvi._read_arg(delta + 1, signed=False),
146146
# olen1: Read (delta + 1) bytes as an unsigned number if less than 4 bytes,
147147
# as a signed number if 4 bytes.
148-
olen1=lambda dvi, delta: dvi._arg(delta + 1, signed=(delta == 3)),
148+
olen1=lambda dvi, delta: dvi._read_arg(delta + 1, signed=(delta == 3)),
149149
)
150150

151151

@@ -271,7 +271,8 @@ def _output(self):
271271
Output the text and boxes belonging to the most recent page.
272272
page = dvi._output()
273273
"""
274-
minx, miny, maxx, maxy = np.inf, np.inf, -np.inf, -np.inf
274+
minx = miny = np.inf
275+
maxx = maxy = -np.inf
275276
maxy_pure = -np.inf
276277
for elt in self.text + self.boxes:
277278
if isinstance(elt, Box):
@@ -357,7 +358,7 @@ def _read(self):
357358
self.close()
358359
return False
359360

360-
def _arg(self, nbytes, signed=False):
361+
def _read_arg(self, nbytes, signed=False):
361362
"""
362363
Read and return a big-endian integer *nbytes* long.
363364
Signedness is determined by the *signed* keyword.
@@ -422,7 +423,7 @@ def _nop(self, _):
422423
@_dispatch(139, state=_dvistate.outer, args=('s4',)*11)
423424
def _bop(self, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, p):
424425
self.state = _dvistate.inpage
425-
self.h, self.v, self.w, self.x, self.y, self.z = 0, 0, 0, 0, 0, 0
426+
self.h = self.v = self.w = self.x = self.y = self.z = 0
426427
self.stack = []
427428
self.text = [] # list of Text objects
428429
self.boxes = [] # list of Box objects
@@ -506,7 +507,7 @@ def _fnt_def_real(self, k, c, s, d, a, l):
506507
self.fonts[k] = exc
507508
return
508509
if c != 0 and tfm.checksum != 0 and c != tfm.checksum:
509-
raise ValueError('tfm checksum mismatch: %s' % n)
510+
raise ValueError(f'tfm checksum mismatch: {n}')
510511
try:
511512
vf = _vffile(fontname)
512513
except FileNotFoundError:
@@ -517,7 +518,7 @@ def _fnt_def_real(self, k, c, s, d, a, l):
517518
def _pre(self, i, num, den, mag, k):
518519
self.file.read(k) # comment in the dvi file
519520
if i != 2:
520-
raise ValueError("Unknown dvi format %d" % i)
521+
raise ValueError(f"Unknown dvi format {i}")
521522
if num != 25400000 or den != 7227 * 2**16:
522523
raise ValueError("Nonstandard units in dvi file")
523524
# meaning: TeX always uses those exact values, so it
@@ -678,57 +679,66 @@ def _read(self):
678679
Read one page from the file. Return True if successful,
679680
False if there were no more pages.
680681
"""
681-
packet_char, packet_ends = None, None
682-
packet_len, packet_width = None, None
682+
packet_char = packet_ends = None
683+
packet_len = packet_width = None
683684
while True:
684685
byte = self.file.read(1)[0]
685686
# If we are in a packet, execute the dvi instructions
686687
if self.state is _dvistate.inpage:
687688
byte_at = self.file.tell()-1
688689
if byte_at == packet_ends:
689690
self._finalize_packet(packet_char, packet_width)
690-
packet_len, packet_char, packet_width = None, None, None
691+
packet_len = packet_char = packet_width = None
691692
# fall through to out-of-packet code
692693
elif byte_at > packet_ends:
693694
raise ValueError("Packet length mismatch in vf file")
694695
else:
695696
if byte in (139, 140) or byte >= 243:
696-
raise ValueError(
697-
"Inappropriate opcode %d in vf file" % byte)
697+
raise ValueError(f"Inappropriate opcode {byte} in vf file")
698698
Dvi._dtable[byte](self, byte)
699699
continue
700700

701701
# We are outside a packet
702702
if byte < 242: # a short packet (length given by byte)
703703
packet_len = byte
704-
packet_char, packet_width = self._arg(1), self._arg(3)
704+
packet_char = self._read_arg(1)
705+
packet_width = self._read_arg(3)
705706
packet_ends = self._init_packet(byte)
706707
self.state = _dvistate.inpage
707708
elif byte == 242: # a long packet
708-
packet_len, packet_char, packet_width = \
709-
[self._arg(x) for x in (4, 4, 4)]
709+
packet_len = self._read_arg(4)
710+
packet_char = self._read_arg(4)
711+
packet_width = self._read_arg(4)
710712
self._init_packet(packet_len)
711713
elif 243 <= byte <= 246:
712-
k = self._arg(byte - 242, byte == 246)
713-
c, s, d, a, l = [self._arg(x) for x in (4, 4, 4, 1, 1)]
714+
k = self._read_arg(byte - 242, byte == 246)
715+
c = self._read_arg(4)
716+
s = self._read_arg(4)
717+
d = self._read_arg(4)
718+
a = self._read_arg(1)
719+
l = self._read_arg(1)
714720
self._fnt_def_real(k, c, s, d, a, l)
715721
if self._first_font is None:
716722
self._first_font = k
717723
elif byte == 247: # preamble
718-
i, k = self._arg(1), self._arg(1)
724+
i = self._read_arg(1)
725+
k = self._read_arg(1)
719726
x = self.file.read(k)
720-
cs, ds = self._arg(4), self._arg(4)
727+
cs = self._read_arg(4)
728+
ds = self._read_arg(4)
721729
self._pre(i, x, cs, ds)
722730
elif byte == 248: # postamble (just some number of 248s)
723731
break
724732
else:
725-
raise ValueError("Unknown vf opcode %d" % byte)
733+
raise ValueError(f"Unknown vf opcode {byte}")
726734

727735
def _init_packet(self, pl):
728736
if self.state != _dvistate.outer:
729737
raise ValueError("Misplaced packet in vf file")
730-
self.h, self.v, self.w, self.x, self.y, self.z = 0, 0, 0, 0, 0, 0
731-
self.stack, self.text, self.boxes = [], [], []
738+
self.h = self.v = self.w = self.x = self.y = self.z = 0
739+
self.stack = []
740+
self.text = []
741+
self.boxes = []
732742
self.f = self._first_font
733743
self._missing_font = None
734744
return self.file.tell() + pl
@@ -744,7 +754,7 @@ def _pre(self, i, x, cs, ds):
744754
if self.state is not _dvistate.pre:
745755
raise ValueError("pre command in middle of vf file")
746756
if i != 202:
747-
raise ValueError("Unknown vf format %d" % i)
757+
raise ValueError(f"Unknown vf format {i}")
748758
if len(x):
749759
_log.debug('vf file comment: %s', x)
750760
self.state = _dvistate.outer
@@ -794,7 +804,9 @@ def __init__(self, filename):
794804
widths = struct.unpack(f'!{nw}i', file.read(4*nw))
795805
heights = struct.unpack(f'!{nh}i', file.read(4*nh))
796806
depths = struct.unpack(f'!{nd}i', file.read(4*nd))
797-
self.width, self.height, self.depth = {}, {}, {}
807+
self.width = {}
808+
self.height = {}
809+
self.depth = {}
798810
for idx, char in enumerate(range(bc, ec+1)):
799811
byte0 = char_info[4*idx]
800812
byte1 = char_info[4*idx+1]

0 commit comments

Comments
 (0)