private function readRecordOfficeArtClientTextbox($stream, $pos)
{
$arrayReturn = array('length' => 0, 'text' => '', 'numParts' => 0, 'numTexts' => 0, 'hyperlink' => array());
$data = $this->loadRecordHeader($stream, $pos);
// recVer 0xF
// Doc : 0x0 https://msdn.microsoft.com/en-us/library/dd910958(v=office.12).aspx
// Sample : 0xF https://msdn.microsoft.com/en-us/library/dd953497(v=office.12).aspx
if ($data['recVer'] == 0xf && $data['recInstance'] == 0x0 && $data['recType'] == 0xf00d) {
// Record Header
$arrayReturn['length'] += 8;
// Datas
$strLen = 0;
do {
$rhChild = $this->loadRecordHeader($stream, $pos + $arrayReturn['length']);
/**
* @link : https://msdn.microsoft.com/en-us/library/dd947039(v=office.12).aspx
*/
// echo dechex($rhChild['recType']).'-'.$rhChild['recType'].EOL;
switch ($rhChild['recType']) {
case self::RT_INTERACTIVEINFO:
//@link : http://msdn.microsoft.com/en-us/library/dd948623(v=office.12).aspx
if ($rhChild['recInstance'] == 0x0) {
$mouseClickInfo = $this->readRecordMouseClickInteractiveInfoContainer($stream, $pos + $arrayReturn['length']);
$arrayReturn['length'] += $mouseClickInfo['length'];
$arrayReturn['hyperlink'][]['id'] = $mouseClickInfo['exHyperlinkIdRef'];
}
if ($rhChild['recInstance'] == 0x1) {
$mouseOverInfo = $this->readRecordMouseOverInteractiveInfoContainer($stream, $pos + $arrayReturn['length']);
$arrayReturn['length'] += $mouseOverInfo['length'];
}
break;
case self::RT_STYLETEXTPROPATOM:
$arrayReturn['length'] += 8;
// @link : http://msdn.microsoft.com/en-us/library/dd950647(v=office.12).aspx
// rgTextPFRun
$strLenRT = $strLen + 1;
do {
$strucTextPFRun = $this->readStructureTextPFRun($stream, $pos + $arrayReturn['length'], $strLenRT);
$arrayReturn['numTexts']++;
$arrayReturn['text' . $arrayReturn['numTexts']] = $strucTextPFRun;
if (isset($strucTextPFRun['alignH'])) {
$arrayReturn['alignH'] = $strucTextPFRun['alignH'];
}
$strLenRT = $strucTextPFRun['strLenRT'];
$arrayReturn['length'] += $strucTextPFRun['length'];
} while ($strLenRT > 0);
// rgTextCFRun
$strLenRT = $strLen + 1;
do {
$strucTextCFRun = $this->readStructureTextCFRun($stream, $pos + $arrayReturn['length'], $strLenRT);
$arrayReturn['numParts']++;
$arrayReturn['part' . $arrayReturn['numParts']] = $strucTextCFRun;
$strLenRT = $strucTextCFRun['strLenRT'];
$arrayReturn['length'] += $strucTextCFRun['length'];
} while ($strLenRT > 0);
break;
case self::RT_TEXTBYTESATOM:
$arrayReturn['length'] += 8;
// @link : https://msdn.microsoft.com/en-us/library/dd947905(v=office.12).aspx
$strLen = (int) $rhChild['recLen'];
for ($inc = 0; $inc < $strLen; $inc++) {
$char = self::getInt1d($stream, $pos + $arrayReturn['length']);
if ($char == 0xb) {
$char = 0x20;
}
$arrayReturn['text'] .= Text::chr($char);
$arrayReturn['length'] += 1;
}
break;
case self::RT_TEXTCHARSATOM:
$arrayReturn['length'] += 8;
// @link : http://msdn.microsoft.com/en-us/library/dd772921(v=office.12).aspx
$strLen = (int) ($rhChild['recLen'] / 2);
for ($inc = 0; $inc < $strLen; $inc++) {
$char = self::getInt2d($stream, $pos + $arrayReturn['length']);
if ($char == 0xb) {
$char = 0x20;
}
$arrayReturn['text'] .= Text::chr($char);
$arrayReturn['length'] += 2;
}
break;
case self::RT_TEXTHEADERATOM:
$arrayReturn['length'] += 8;
// @link : http://msdn.microsoft.com/en-us/library/dd905272(v=office.12).aspx
// textType
$arrayReturn['length'] += 4;
break;
case self::RT_TEXTINTERACTIVEINFOATOM:
$arrayReturn['length'] += 8;
//@link : http://msdn.microsoft.com/en-us/library/dd947973(v=office.12).aspx
if ($rhChild['recInstance'] == 0x0) {
//@todo : MouseClickTextInteractiveInfoAtom
$arrayReturn['hyperlink'][count($arrayReturn['hyperlink']) - 1]['start'] = self::getInt4d($stream, $pos + +$arrayReturn['length']);
$arrayReturn['length'] += 4;
$arrayReturn['hyperlink'][count($arrayReturn['hyperlink']) - 1]['end'] = self::getInt4d($stream, $pos + +$arrayReturn['length']);
$arrayReturn['length'] += 4;
}
if ($rhChild['recInstance'] == 0x1) {
throw new \Exception('Feature not implemented (l.' . __LINE__ . ')');
}
break;
case self::RT_TEXTSPECIALINFOATOM:
$arrayReturn['length'] += 8;
// @link : http://msdn.microsoft.com/en-us/library/dd945296(v=office.12).aspx
$strLenRT = $strLen + 1;
do {
$structTextSIRun = $this->readStructureTextSIRun($stream, $pos + $arrayReturn['length'], $strLenRT);
$strLenRT = $structTextSIRun['strLenRT'];
$arrayReturn['length'] += $structTextSIRun['length'];
} while ($strLenRT > 0);
break;
case self::RT_TEXTRULERATOM:
$arrayReturn['length'] += 8;
// @link : http://msdn.microsoft.com/en-us/library/dd953212(v=office.12).aspx
$structRuler = $this->readStructureTextRuler($stream, $pos + $arrayReturn['length']);
$arrayReturn['length'] += $structRuler['length'];
break;
case self::RT_SLIDENUMBERMETACHARATOM:
$datasRecord = $this->readRecordSlideNumberMCAtom($stream, $pos + $arrayReturn['length']);
$arrayReturn['length'] += $datasRecord['length'];
break;
default:
throw new \Exception('Feature not implemented (l.' . __LINE__ . ' : 0x' . dechex($rhChild['recType']) . ')');
}
} while ($data['recLen'] - $arrayReturn['length'] > 0);
}
return $arrayReturn;
}