PhpOffice\PhpPresentation\Reader\PowerPoint97::readStructureTextCFRun PHP Method

readStructureTextCFRun() private method

A structure that specifies the character-level formatting of a run of text.
private readStructureTextCFRun ( string $stream, integer $pos, integer $strLenRT )
$stream string
$pos integer
$strLenRT integer
    private function readStructureTextCFRun($stream, $pos, $strLenRT)
    {
        $arrayReturn = array('length' => 0, 'strLenRT' => $strLenRT);
        // rgTextCFRun
        $countRgTextCFRun = self::getInt4d($stream, $pos + $arrayReturn['length']);
        $arrayReturn['strLenRT'] -= $countRgTextCFRun;
        $arrayReturn['length'] += 4;
        $arrayReturn['partLength'] = $countRgTextCFRun;
        $masks = self::getInt4d($stream, $pos + $arrayReturn['length']);
        $arrayReturn['length'] += 4;
        $masksData = array();
        $masksData['bold'] = $masks >> 0 & bindec('1');
        $masksData['italic'] = $masks >> 1 & bindec('1');
        $masksData['underline'] = $masks >> 2 & bindec('1');
        $masksData['unused1'] = $masks >> 3 & bindec('1');
        $masksData['shadow'] = $masks >> 4 & bindec('1');
        $masksData['fehint'] = $masks >> 5 & bindec('1');
        $masksData['unused2'] = $masks >> 6 & bindec('1');
        $masksData['kumi'] = $masks >> 7 & bindec('1');
        $masksData['unused3'] = $masks >> 8 & bindec('1');
        $masksData['emboss'] = $masks >> 9 & bindec('1');
        $masksData['fHasStyle'] = $masks >> 10 & bindec('1111');
        $masksData['unused4'] = $masks >> 14 & bindec('11');
        $masksData['typeface'] = $masks >> 16 & bindec('1');
        $masksData['size'] = $masks >> 17 & bindec('1');
        $masksData['color'] = $masks >> 18 & bindec('1');
        $masksData['position'] = $masks >> 19 & bindec('1');
        $masksData['pp10ext'] = $masks >> 20 & bindec('1');
        $masksData['oldEATypeface'] = $masks >> 21 & bindec('1');
        $masksData['ansiTypeface'] = $masks >> 22 & bindec('1');
        $masksData['symbolTypeface'] = $masks >> 23 & bindec('1');
        $masksData['newEATypeface'] = $masks >> 24 & bindec('1');
        $masksData['csTypeface'] = $masks >> 25 & bindec('1');
        $masksData['pp11ext'] = $masks >> 26 & bindec('1');
        if ($masksData['bold'] == 1 || $masksData['italic'] == 1 || $masksData['underline'] == 1 || $masksData['shadow'] == 1 || $masksData['fehint'] == 1 || $masksData['kumi'] == 1 || $masksData['emboss'] == 1 || $masksData['fHasStyle'] == 1) {
            $data = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
            $fontStyleFlags = array();
            $fontStyleFlags['bold'] = $data >> 0 & bindec('1');
            $fontStyleFlags['italic'] = $data >> 1 & bindec('1');
            $fontStyleFlags['underline'] = $data >> 2 & bindec('1');
            $fontStyleFlags['unused1'] = $data >> 3 & bindec('1');
            $fontStyleFlags['shadow'] = $data >> 4 & bindec('1');
            $fontStyleFlags['fehint'] = $data >> 5 & bindec('1');
            $fontStyleFlags['unused2'] = $data >> 6 & bindec('1');
            $fontStyleFlags['kumi'] = $data >> 7 & bindec('1');
            $fontStyleFlags['unused3'] = $data >> 8 & bindec('1');
            $fontStyleFlags['emboss'] = $data >> 9 & bindec('1');
            $fontStyleFlags['pp9rt'] = $data >> 10 & bindec('1111');
            $fontStyleFlags['unused4'] = $data >> 14 & bindec('11');
            $arrayReturn['bold'] = $fontStyleFlags['bold'] == 1 ? true : false;
            $arrayReturn['italic'] = $fontStyleFlags['italic'] == 1 ? true : false;
            $arrayReturn['underline'] = $fontStyleFlags['underline'] == 1 ? true : false;
        }
        if ($masksData['typeface'] == 1) {
            $data = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
            $arrayReturn['fontName'] = isset($this->arrayFonts[$data]) ? $this->arrayFonts[$data] : '';
        }
        if ($masksData['oldEATypeface'] == 1) {
            // $data = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
        }
        if ($masksData['ansiTypeface'] == 1) {
            // $data = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
        }
        if ($masksData['symbolTypeface'] == 1) {
            // $data = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
        }
        if ($masksData['size'] == 1) {
            $arrayReturn['fontSize'] = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
        }
        if ($masksData['color'] == 1) {
            $red = self::getInt1d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 1;
            $green = self::getInt1d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 1;
            $blue = self::getInt1d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 1;
            $index = self::getInt1d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 1;
            if ($index == 0xfe) {
                $strColor = str_pad(dechex($red), 2, STR_PAD_LEFT, '0');
                $strColor .= str_pad(dechex($green), 2, STR_PAD_LEFT, '0');
                $strColor .= str_pad(dechex($blue), 2, STR_PAD_LEFT, '0');
                $arrayReturn['color'] = new Color('FF' . $strColor);
            }
        }
        if ($masksData['position'] == 1) {
            throw new \Exception('Feature not implemented (l.' . __LINE__ . ')');
        }
        return $arrayReturn;
    }
PowerPoint97