protected function parseSubTables($font)
{
$bytePos = $font->tableInfo['cmap']->offset + 4;
// Get each of the subtable's data.
for ($i = 0; $i < $this->header->numberOfTables; $i++) {
$ary = unpack('nplatformId/' . 'nencodingId/' . 'Noffset', $font->read($bytePos, 8));
if ($ary['platformId'] == 0 && $ary['encodingId'] == 0) {
$ary['encoding'] = 'Unicode 2.0';
} else {
if ($ary['platformId'] == 0 && $ary['encodingId'] == 3) {
$ary['encoding'] = 'Unicode';
} else {
if ($ary['platformId'] == 3 && $ary['encodingId'] == 1) {
$ary['encoding'] = 'Microsoft Unicode';
} else {
if ($ary['platformId'] == 1 && $ary['encodingId'] == 0) {
$ary['encoding'] = 'Mac Roman';
} else {
$ary['encoding'] = 'Unknown';
}
}
}
}
$this->subTables[] = new \ArrayObject($ary, \ArrayObject::ARRAY_AS_PROPS);
$bytePos += 8;
}
// Parse each of the subtable's data.
foreach ($this->subTables as $key => $subTable) {
$bytePos = $font->tableInfo['cmap']->offset + $subTable->offset;
$ary = unpack('nformat/' . 'nlength/' . 'nlanguage', $font->read($bytePos, 6));
$this->subTables[$key]->format = $ary['format'];
$this->subTables[$key]->length = $ary['length'];
$this->subTables[$key]->language = $ary['language'];
$bytePos += 6;
$this->subTables[$key]->data = $font->read($bytePos, $ary['length'] - 6);
switch ($this->subTables[$key]->format) {
case 0:
$this->subTables[$key]->parsed = Cmap\ByteEncoding::parseData($this->subTables[$key]->data);
break;
case 4:
$this->subTables[$key]->parsed = Cmap\SegmentToDelta::parseData($this->subTables[$key]->data);
break;
case 6:
$this->subTables[$key]->parsed = Cmap\TrimmedTable::parseData($this->subTables[$key]->data);
break;
}
}
}