swiftparsingwoff2

Parse WOFF2 DirectoryEntry Flags not working


I think this might be the best place to ask stupid questions… so here we are:

I’m currently writing a pretty simple woff2 parser to get some information about the font. I got woff and otf parsing working but woff2 gives me headaches.

I’m struggling parsing the the TableDictionaryEntries. As stated in the specification the flags are UInt8. The first 6 bits represents the index in a list of table names.

So I’m doing the following: (I’m new to all that bitwise stuff)

let tables = [
 'cmap',
 'head',
 ...
] // size 64

let flags = binary.getUInt8(); // gets me the next 8bits as UInt8
// 00001101 or 10000010 or 10101011 or 01110100

let tableNameIndex = (flags << 2) >> 2
// 00001101 or 00000010 or 00101011 or 00110100
// some libraries do flags & 0x3f but that seems to be the same


let tableName = tables[Int(tableNameIndex)]

But I think I do something wrong. I have double names in the TableDirectory — thats not right… Maybe I mess something up with bigEdian or something like that?


Solution

  • Thats it. transformLength was not set so I got a alignment issue.