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;
}