(self, buffer: Image.DecoderInput)
| 119 | _pulls_fd = True |
| 120 | |
| 121 | def decode(self, buffer: Image.DecoderInput) -> tuple[int, int]: |
| 122 | assert self.fd is not None |
| 123 | |
| 124 | data = bytearray() |
| 125 | bpp, palette = self.args |
| 126 | dest_length = self.state.xsize * self.state.ysize |
| 127 | if self.mode == "RGB": |
| 128 | dest_length *= 3 |
| 129 | pixel_header = False |
| 130 | while len(data) < dest_length: |
| 131 | line = self.fd.readline() |
| 132 | if not line: |
| 133 | break |
| 134 | if line.rstrip() == b"/* pixels */" and not pixel_header: |
| 135 | pixel_header = True |
| 136 | continue |
| 137 | line = b'"'.join(line.split(b'"')[1:-1]) |
| 138 | for i in range(0, len(line), bpp): |
| 139 | key = line[i : i + bpp] |
| 140 | if self.mode == "RGB": |
| 141 | data += palette[key] |
| 142 | else: |
| 143 | data += o8(palette.index(key)) |
| 144 | self.set_as_raw(bytes(data)) |
| 145 | return -1, 0 |
| 146 | |
| 147 | |
| 148 | # |
nothing calls this directly
no test coverage detected