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