Pop\Font\TrueType\Table\Cmap::parseSubTables PHP Метод

parseSubTables() защищенный Метод

Method to parse the CMAP subtables.
protected parseSubTables ( AbstractFont $font ) : void
$font Pop\Font\AbstractFont
Результат void
    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;
            }
        }
    }