PhpOffice\PhpPresentation\Reader\PowerPoint97::readStructureTextPFRun PHP Метод

readStructureTextPFRun() приватный Метод

A structure that specifies the paragraph-level formatting of a run of text.
private readStructureTextPFRun ( string $stream, integer $pos, $strLenRT )
$stream string
$pos integer
    private function readStructureTextPFRun($stream, $pos, $strLenRT)
    {
        $arrayReturn = array('length' => 0, 'strLenRT' => $strLenRT);
        // rgTextPFRun
        $countRgTextPFRun = self::getInt4d($stream, $pos + $arrayReturn['length']);
        $arrayReturn['strLenRT'] -= $countRgTextPFRun;
        $arrayReturn['length'] += 4;
        // indent
        $arrayReturn['length'] += 2;
        $masks = self::getInt4d($stream, $pos + $arrayReturn['length']);
        $arrayReturn['length'] += 4;
        $masksData = array();
        $masksData['hasBullet'] = $masks >> 0 & bindec('1');
        $masksData['bulletHasFont'] = $masks >> 1 & bindec('1');
        $masksData['bulletHasColor'] = $masks >> 2 & bindec('1');
        $masksData['bulletHasSize'] = $masks >> 3 & bindec('1');
        $masksData['bulletFont'] = $masks >> 4 & bindec('1');
        $masksData['bulletColor'] = $masks >> 5 & bindec('1');
        $masksData['bulletSize'] = $masks >> 6 & bindec('1');
        $masksData['bulletChar'] = $masks >> 7 & bindec('1');
        $masksData['leftMargin'] = $masks >> 8 & bindec('1');
        $masksData['unused'] = $masks >> 9 & bindec('1');
        $masksData['indent'] = $masks >> 10 & bindec('1');
        $masksData['align'] = $masks >> 11 & bindec('1');
        $masksData['lineSpacing'] = $masks >> 12 & bindec('1');
        $masksData['spaceBefore'] = $masks >> 13 & bindec('1');
        $masksData['spaceAfter'] = $masks >> 14 & bindec('1');
        $masksData['defaultTabSize'] = $masks >> 15 & bindec('1');
        $masksData['fontAlign'] = $masks >> 16 & bindec('1');
        $masksData['charWrap'] = $masks >> 17 & bindec('1');
        $masksData['wordWrap'] = $masks >> 18 & bindec('1');
        $masksData['overflow'] = $masks >> 19 & bindec('1');
        $masksData['tabStops'] = $masks >> 20 & bindec('1');
        $masksData['textDirection'] = $masks >> 21 & bindec('1');
        $masksData['reserved1'] = $masks >> 22 & bindec('1');
        $masksData['bulletBlip'] = $masks >> 23 & bindec('1');
        $masksData['bulletScheme'] = $masks >> 24 & bindec('1');
        $masksData['bulletHasScheme'] = $masks >> 25 & bindec('1');
        $bulletFlags = array();
        if ($masksData['hasBullet'] == 1 || $masksData['bulletHasFont'] == 1 || $masksData['bulletHasColor'] == 1 || $masksData['bulletHasSize'] == 1) {
            $data = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
            $bulletFlags['fHasBullet'] = $data >> 0 & bindec('1');
            $bulletFlags['fBulletHasFont'] = $data >> 1 & bindec('1');
            $bulletFlags['fBulletHasColor'] = $data >> 2 & bindec('1');
            $bulletFlags['fBulletHasSize'] = $data >> 3 & bindec('1');
        }
        if ($masksData['bulletChar'] == 1) {
            $data = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
            $arrayReturn['bulletChar'] = chr($data);
        }
        if ($masksData['bulletFont'] == 1) {
            // $data = self::getInt2d($stream, $pos);
            $arrayReturn['length'] += 2;
        }
        if ($masksData['bulletSize'] == 1) {
            // $data = self::getInt2d($stream, $pos);
            $arrayReturn['length'] += 2;
        }
        if ($masksData['bulletColor'] == 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');
            }
        }
        if ($masksData['align'] == 1) {
            $data = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
            switch ($data) {
                case 0x0:
                    $arrayReturn['alignH'] = Alignment::HORIZONTAL_LEFT;
                    break;
                case 0x1:
                    $arrayReturn['alignH'] = Alignment::HORIZONTAL_CENTER;
                    break;
                case 0x2:
                    $arrayReturn['alignH'] = Alignment::HORIZONTAL_RIGHT;
                    break;
                case 0x3:
                    $arrayReturn['alignH'] = Alignment::HORIZONTAL_JUSTIFY;
                    break;
                case 0x4:
                    $arrayReturn['alignH'] = Alignment::HORIZONTAL_DISTRIBUTED;
                    break;
                case 0x5:
                    $arrayReturn['alignH'] = Alignment::HORIZONTAL_DISTRIBUTED;
                    break;
                case 0x6:
                    $arrayReturn['alignH'] = Alignment::HORIZONTAL_JUSTIFY;
                    break;
                default:
                    break;
            }
        }
        if ($masksData['lineSpacing'] == 1) {
            // $data = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
        }
        if ($masksData['spaceBefore'] == 1) {
            // $data = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
        }
        if ($masksData['spaceAfter'] == 1) {
            // $data = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
        }
        if ($masksData['leftMargin'] == 1) {
            $data = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
            $arrayReturn['leftMargin'] = (int) round($data / 6);
        }
        if ($masksData['indent'] == 1) {
            $data = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
            $arrayReturn['indent'] = (int) round($data / 6);
        }
        if ($masksData['defaultTabSize'] == 1) {
            // $data = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
        }
        if ($masksData['tabStops'] == 1) {
            throw new \Exception('Feature not implemented (l.' . __LINE__ . ')');
        }
        if ($masksData['fontAlign'] == 1) {
            // $data = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
        }
        if ($masksData['charWrap'] == 1 || $masksData['wordWrap'] == 1 || $masksData['overflow'] == 1) {
            // $data = self::getInt2d($stream, $pos + $arrayReturn['length']);
            $arrayReturn['length'] += 2;
        }
        if ($masksData['textDirection'] == 1) {
            throw new \Exception('Feature not implemented (l.' . __LINE__ . ')');
        }
        return $arrayReturn;
    }
PowerPoint97