|
8 | 8 | from sfnttools.internal.stream import Stream |
9 | 9 | from sfnttools.woff.headers import WoffHeader |
10 | 10 | from sfnttools.woff.reader import WoffReader |
11 | | -from sfnttools.woff2.headers import Woff2Header, Woff2CollectionFontEntry |
| 11 | +from sfnttools.woff2.headers import Woff2Header |
12 | 12 | from sfnttools.woff2.reader import Woff2Reader |
13 | 13 | from sfnttools.xtf.headers import TableDirectory, TtcHeader |
14 | 14 | from sfnttools.xtf.reader import XtfReader |
@@ -46,16 +46,19 @@ def parse( |
46 | 46 | sfnt_version, tables = reader.parse_font() |
47 | 47 | return SfntFont(sfnt_version, tables) |
48 | 48 | 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: |
56 | 53 | if font_index is None: |
57 | 54 | raise SfntError(f'must specify a font index in font collection') |
| 55 | + header = Woff2Header.parse(stream) |
58 | 56 | 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') |
59 | 62 | decompressed_stream = Stream(BytesIO(header.decompressed_data)) |
60 | 63 |
|
61 | 64 | reader = Woff2Reader(decompressed_stream, header, font_entry, False, None) |
|
0 commit comments