Skip to content

Commit 1f5a2bf

Browse files
committed
a
1 parent 0447697 commit 1f5a2bf

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

src/sfnttools/font.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from sfnttools.internal.stream import Stream
99
from sfnttools.woff.headers import WoffHeader
1010
from sfnttools.woff.reader import WoffReader
11-
from sfnttools.woff2.headers import Woff2Header, Woff2CollectionFontEntry
11+
from sfnttools.woff2.headers import Woff2Header
1212
from sfnttools.woff2.reader import Woff2Reader
1313
from sfnttools.xtf.headers import TableDirectory, TtcHeader
1414
from sfnttools.xtf.reader import XtfReader
@@ -46,16 +46,19 @@ def parse(
4646
sfnt_version, tables = reader.parse_font()
4747
return SfntFont(sfnt_version, tables)
4848
elif tag == SfntFileTag.WOFF2:
49-
header = Woff2Header.parse(stream)
50-
if header.collection_header is None:
51-
font_entry = Woff2CollectionFontEntry(
52-
SfntVersion(header.flavor),
53-
[i for i in range(len(header.table_directory_entries))],
54-
)
55-
else:
49+
stream.seek(4)
50+
flavor = stream.read_tag()
51+
stream.seek(0)
52+
if flavor == SfntFileTag.TTCF:
5653
if font_index is None:
5754
raise SfntError(f'must specify a font index in font collection')
55+
header = Woff2Header.parse(stream)
5856
font_entry = header.collection_header.font_entries[font_index]
57+
elif flavor in [*SfntVersion]:
58+
header = Woff2Header.parse(stream)
59+
font_entry = header.simulate_single_font_entry()
60+
else:
61+
raise SfntError('unsupported SFNT font')
5962
decompressed_stream = Stream(BytesIO(header.decompressed_data))
6063

6164
reader = Woff2Reader(decompressed_stream, header, font_entry, False, None)

src/sfnttools/woff2/headers.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,11 @@ def __init__(
284284
self.collection_header = collection_header
285285
self.decompressed_data = decompressed_data
286286

287+
def simulate_single_font_entry(self):
288+
sfnt_version = SfntVersion(self.flavor)
289+
indices = [i for i in range(len(self.table_directory_entries))]
290+
return Woff2CollectionFontEntry(sfnt_version, indices)
291+
287292
def dump(self, stream: Stream):
288293
compressed_data = brotli.compress(self.decompressed_data, mode=brotli.MODE_FONT)
289294
stream.write_tag(SfntFileTag.WOFF2)

0 commit comments

Comments
 (0)