Skip to content

Commit 02b4a63

Browse files
author
Steve Canny
committed
img: add _LongIfdEntry._parse_value()
1 parent a41f9ec commit 02b4a63

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

docx/image/tiff.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,16 @@ class _LongIfdEntry(_IfdEntry):
294294
"""
295295
IFD entry expressed as a long (4-byte) integer
296296
"""
297+
@classmethod
298+
def _parse_value(cls, stream_rdr, offset, value_count, value_offset):
299+
"""
300+
Return the long int value contained in the *value_offset* field of
301+
this entry. Only supports single values at present.
302+
"""
303+
if value_count == 1:
304+
return stream_rdr.read_long(offset, 8)
305+
else:
306+
return 'Multi-value long integer NOT IMPLEMENTED'
297307

298308

299309
class _RationalIfdEntry(_IfdEntry):

tests/image/test_tiff.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
from docx.image.constants import MIME_TYPE, TIFF_TAG
1515
from docx.image.helpers import BIG_ENDIAN, LITTLE_ENDIAN, StreamReader
1616
from docx.image.tiff import (
17-
_IfdEntries, _IfdEntry, _IfdEntryFactory, _IfdParser, _ShortIfdEntry,
18-
Tiff, _TiffParser
17+
_IfdEntries, _IfdEntry, _IfdEntryFactory, _IfdParser, _LongIfdEntry,
18+
_ShortIfdEntry, Tiff, _TiffParser
1919
)
2020

2121
from ..unitutil import (
@@ -424,3 +424,12 @@ def it_can_parse_a_short_int_IFD_entry(self):
424424
stream_rdr = StreamReader(BytesIO(bytes_), BIG_ENDIAN)
425425
val = _ShortIfdEntry._parse_value(stream_rdr, 0, 1, None)
426426
assert val == 42
427+
428+
429+
class Describe_LongIfdEntry(object):
430+
431+
def it_can_parse_a_long_int_IFD_entry(self):
432+
bytes_ = b'foobaroo\x00\x00\x00\x2A'
433+
stream_rdr = StreamReader(BytesIO(bytes_), BIG_ENDIAN)
434+
val = _LongIfdEntry._parse_value(stream_rdr, 0, 1, None)
435+
assert val == 42

0 commit comments

Comments
 (0)