mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-27 01:34:24 +03:00
Moved all comments logic into _ignore_comments()
This commit is contained in:
parent
6eb6232f04
commit
1bac1cf6f5
|
@ -156,24 +156,38 @@ class PpmPlainDecoder(ImageFile.PyDecoder):
|
||||||
return min(a, b) if a * b > 0 else max(a, b) # lowest nonnegative index (or -1)
|
return min(a, b) if a * b > 0 else max(a, b) # lowest nonnegative index (or -1)
|
||||||
|
|
||||||
def _ignore_comments(self, block):
|
def _ignore_comments(self, block):
|
||||||
"""
|
if self._comment_spans:
|
||||||
Delete comments from block.
|
# Finish current comment
|
||||||
If comment does not end in this block, raises a flag.
|
while block:
|
||||||
"""
|
comment_end = self._find_comment_end(block)
|
||||||
comment_spans = False
|
if comment_end != -1:
|
||||||
|
# Comment ends in this block
|
||||||
|
# Delete tail of comment
|
||||||
|
block = block[comment_end + 1 :]
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
# Comment spans whole block
|
||||||
|
# So read the next block, looking for the end
|
||||||
|
block = self._read_block()
|
||||||
|
|
||||||
|
# Search for any further comments
|
||||||
|
self._comment_spans = False
|
||||||
while True:
|
while True:
|
||||||
comment_start = block.find(b"#") # look for next comment
|
comment_start = block.find(b"#")
|
||||||
if comment_start == -1: # no comment found
|
if comment_start == -1:
|
||||||
|
# No comment found
|
||||||
break
|
break
|
||||||
comment_end = self._find_comment_end(block, comment_start)
|
comment_end = self._find_comment_end(block, comment_start)
|
||||||
if comment_end != -1: # comment ends in this block
|
if comment_end != -1:
|
||||||
# delete comment
|
# Comment ends in this block
|
||||||
|
# Delete comment
|
||||||
block = block[:comment_start] + block[comment_end + 1 :]
|
block = block[:comment_start] + block[comment_end + 1 :]
|
||||||
else: # last comment continues to next block(s)
|
else:
|
||||||
|
# Comment continues to next block(s)
|
||||||
block = block[:comment_start]
|
block = block[:comment_start]
|
||||||
comment_spans = True
|
self._comment_spans = True
|
||||||
break
|
break
|
||||||
return block, comment_spans
|
return block
|
||||||
|
|
||||||
def _decode_bitonal(self):
|
def _decode_bitonal(self):
|
||||||
"""
|
"""
|
||||||
|
@ -183,22 +197,13 @@ class PpmPlainDecoder(ImageFile.PyDecoder):
|
||||||
data = bytearray()
|
data = bytearray()
|
||||||
total_bytes = self.state.xsize * self.state.ysize
|
total_bytes = self.state.xsize * self.state.ysize
|
||||||
|
|
||||||
comment_spans = False
|
|
||||||
while len(data) != total_bytes:
|
while len(data) != total_bytes:
|
||||||
block = self._read_block() # read next block
|
block = self._read_block() # read next block
|
||||||
if not block:
|
if not block:
|
||||||
# eof
|
# eof
|
||||||
break
|
break
|
||||||
|
|
||||||
while block and comment_spans:
|
block = self._ignore_comments(block)
|
||||||
comment_end = self._find_comment_end(block)
|
|
||||||
if comment_end != -1: # comment ends in this block
|
|
||||||
block = block[comment_end + 1 :] # delete tail of previous comment
|
|
||||||
break
|
|
||||||
else: # comment spans whole block
|
|
||||||
block = self._read_block()
|
|
||||||
|
|
||||||
block, comment_spans = self._ignore_comments(block)
|
|
||||||
|
|
||||||
tokens = b"".join(block.split())
|
tokens = b"".join(block.split())
|
||||||
for token in tokens:
|
for token in tokens:
|
||||||
|
@ -216,7 +221,6 @@ class PpmPlainDecoder(ImageFile.PyDecoder):
|
||||||
bands = Image.getmodebands(self.mode)
|
bands = Image.getmodebands(self.mode)
|
||||||
total_bytes = self.state.xsize * self.state.ysize * bands * out_byte_count
|
total_bytes = self.state.xsize * self.state.ysize * bands * out_byte_count
|
||||||
|
|
||||||
comment_spans = False
|
|
||||||
half_token = False
|
half_token = False
|
||||||
while len(data) != total_bytes:
|
while len(data) != total_bytes:
|
||||||
block = self._read_block() # read next block
|
block = self._read_block() # read next block
|
||||||
|
@ -227,15 +231,7 @@ class PpmPlainDecoder(ImageFile.PyDecoder):
|
||||||
# eof
|
# eof
|
||||||
break
|
break
|
||||||
|
|
||||||
while block and comment_spans:
|
block = self._ignore_comments(block)
|
||||||
comment_end = self._find_comment_end(block)
|
|
||||||
if comment_end != -1: # comment ends in this block
|
|
||||||
block = block[comment_end + 1 :] # delete tail of previous comment
|
|
||||||
break
|
|
||||||
else: # comment spans whole block
|
|
||||||
block = self._read_block()
|
|
||||||
|
|
||||||
block, comment_spans = self._ignore_comments(block)
|
|
||||||
|
|
||||||
if half_token:
|
if half_token:
|
||||||
block = half_token + block # stitch half_token to new block
|
block = half_token + block # stitch half_token to new block
|
||||||
|
@ -264,6 +260,7 @@ class PpmPlainDecoder(ImageFile.PyDecoder):
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def decode(self, buffer):
|
def decode(self, buffer):
|
||||||
|
self._comment_spans = False
|
||||||
if self.mode == "1":
|
if self.mode == "1":
|
||||||
data = self._decode_bitonal()
|
data = self._decode_bitonal()
|
||||||
rawmode = "1;8"
|
rawmode = "1;8"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user