Improved type hints

This commit is contained in:
Andrew Murray 2025-04-10 18:57:31 +10:00
parent 6512a8e371
commit 34efaaddf3

View File

@ -37,17 +37,18 @@ class XpmImageFile(ImageFile.ImageFile):
format_description = "X11 Pixel Map" format_description = "X11 Pixel Map"
def _open(self) -> None: def _open(self) -> None:
assert self.fp is not None
if not _accept(self.fp.read(9)): if not _accept(self.fp.read(9)):
msg = "not an XPM file" msg = "not an XPM file"
raise SyntaxError(msg) raise SyntaxError(msg)
# skip forward to next string # skip forward to next string
while True: while True:
s = self.fp.readline() line = self.fp.readline()
if not s: if not line:
msg = "broken XPM file" msg = "broken XPM file"
raise SyntaxError(msg) raise SyntaxError(msg)
m = xpm_head.match(s) m = xpm_head.match(line)
if m: if m:
break break
@ -62,10 +63,10 @@ class XpmImageFile(ImageFile.ImageFile):
palette = {} palette = {}
for _ in range(palette_length): for _ in range(palette_length):
s = self.fp.readline().rstrip() line = self.fp.readline().rstrip()
c = s[1 : bpp + 1] c = line[1 : bpp + 1]
s = s[bpp + 1 : -2].split() s = line[bpp + 1 : -2].split()
for i in range(0, len(s), 2): for i in range(0, len(s), 2):
if s[i] == b"c": if s[i] == b"c":
@ -74,9 +75,11 @@ class XpmImageFile(ImageFile.ImageFile):
if rgb == b"None": if rgb == b"None":
self.info["transparency"] = c self.info["transparency"] = c
elif rgb.startswith(b"#"): elif rgb.startswith(b"#"):
rgb = int(rgb[1:], 16) rgb_int = int(rgb[1:], 16)
palette[c] = ( palette[c] = (
o8((rgb >> 16) & 255) + o8((rgb >> 8) & 255) + o8(rgb & 255) o8((rgb_int >> 16) & 255)
+ o8((rgb_int >> 8) & 255)
+ o8(rgb_int & 255)
) )
else: else:
# unknown colour # unknown colour
@ -106,6 +109,7 @@ class XpmImageFile(ImageFile.ImageFile):
xsize, ysize = self.size xsize, ysize = self.size
assert self.fp is not None
s = [self.fp.readline()[1 : xsize + 1].ljust(xsize) for i in range(ysize)] s = [self.fp.readline()[1 : xsize + 1].ljust(xsize) for i in range(ysize)]
return b"".join(s) return b"".join(s)
@ -124,15 +128,15 @@ class XpmDecoder(ImageFile.PyDecoder):
dest_length *= 3 dest_length *= 3
pixel_header = False pixel_header = False
while len(data) < dest_length: while len(data) < dest_length:
s = self.fd.readline() line = self.fd.readline()
if not s: if not line:
break break
if s.rstrip() == b"/* pixels */" and not pixel_header: if line.rstrip() == b"/* pixels */" and not pixel_header:
pixel_header = True pixel_header = True
continue continue
s = b'"'.join(s.split(b'"')[1:-1]) line = b'"'.join(line.split(b'"')[1:-1])
for i in range(0, len(s), bpp): for i in range(0, len(line), bpp):
key = s[i : i + bpp] key = line[i : i + bpp]
if self.mode == "RGB": if self.mode == "RGB":
data += palette[key] data += palette[key]
else: else: