static function parse(&$reader, $opts = array()) { $tagCode = $opts['tagCode']; $isMorph = $tagCode == 46 || $tagCode == 84; $lineStyle = array(); if ($isMorph === false) { $lineStyle['Width'] = $reader->getUI16LE(); if ($tagCode == 83) { // DefineShape4 $lineStyle['StartCapStyle'] = $reader->getUIBits(2); $lineStyle['JoinStyle'] = $reader->getUIBits(2); $lineStyle['HasFillFlag'] = $reader->getUIBit(); $lineStyle['NoHScaleFlag'] = $reader->getUIBit(); $lineStyle['NoVScaleFlag'] = $reader->getUIBit(); $lineStyle['PixelHintingFlag'] = $reader->getUIBit(); // ---- $lineStyle['(Reserved)'] = $reader->getUIBits(5); $lineStyle['NoClose'] = $reader->getUIBit(); $lineStyle['EndCapStyle'] = $reader->getUIBits(2); if ($lineStyle['JoinStyle'] == 2) { $lineStyle['MiterLimitFactor'] = $reader->getUI16LE(); } } if ($tagCode < 32) { // DefineShape1,2 $lineStyle['Color'] = IO_SWF_Type_RGB::parse($reader); } else { if ($tagCode == 32) { // DefineShape3 $lineStyle['Color'] = IO_SWF_Type_RGBA::parse($reader); } else { // DefineShape4 if ($lineStyle['HasFillFlag'] == 0) { $lineStyle['Color'] = IO_SWF_Type_RGBA::parse($reader); } else { $lineStyle['FillType'] = IO_SWF_Type_FILLSTYLE::parse($reader, $opts); } } } } else { $lineStyle['StartWidth'] = $reader->getUI16LE(); $lineStyle['EndWidth'] = $reader->getUI16LE(); $lineStyle['StartColor'] = IO_SWF_Type_RGBA::parse($reader); $lineStyle['EndColor'] = IO_SWF_Type_RGBA::parse($reader); } return $lineStyle; }
static function parse(&$reader, $opts = array()) { $textrecord = array(); $reader->byteAlign(); $textrecord['TextRecordType'] = $reader->getUIBit(); $textrecord['StyleFlagsReserved'] = $reader->getUIBits(3); $styleFlagsHasFont = $reader->getUIBit(); $styleFlagsHasColor = $reader->getUIBit(); $styleFlagsHasYOffeet = $reader->getUIBit(); $styleFlagsHasXOffeet = $reader->getUIBit(); $textrecord['StyleFlagsHasFont'] = $styleFlagsHasFont; $textrecord['StyleFlagsHasColor'] = $styleFlagsHasColor; $textrecord['StyleFlagsHasYOffeet'] = $styleFlagsHasYOffeet; $textrecord['StyleFlagsHasXOffeet'] = $styleFlagsHasXOffeet; // if ($styleFlagsHasFont) { $textrecord['FontID'] = $reader->getUI16LE(); } if ($styleFlagsHasColor) { if ($opts['tagCode'] == 11) { // DefintText $textrecord['TextColor'] = IO_SWF_Type_RGB::parse($reader); } else { // DefineText2 $textrecord['TextColor'] = IO_SWF_Type_RGBA::parse($reader); } } if ($styleFlagsHasXOffeet) { $textrecord['XOffset'] = $reader->getUI16LE(); } if ($styleFlagsHasYOffeet) { $textrecord['YOffset'] = $reader->getUI16LE(); } if ($styleFlagsHasFont) { $textrecord['TextHeight'] = $reader->getUI16LE(); } $glyphCount = $reader->getUI8(); $textrecord['GlyphCount'] = $glyphCount; $glyphEntries = array(); for ($i = 0; $i < $glyphCount; $i++) { $glyphEntries[] = IO_SWF_Type_GLYPHENTRY::parse($reader, $opts); } $textrecord['GlyphEntries'] = $glyphEntries; return $textrecord; }
static function parse(&$reader, $opts = array()) { $tagCode = $opts['tagCode']; $isMorph = $tagCode == 46 || $tagCode == 84; $fillStyle = array(); $fillStyleType = $reader->getUI8(); $fillStyle['FillStyleType'] = $fillStyleType; switch ($fillStyleType) { case 0x0: // solid fill if ($isMorph === false) { if ($tagCode < 32) { // 32:DefineShape3 $fillStyle['Color'] = IO_SWF_Type_RGB::parse($reader); } else { $fillStyle['Color'] = IO_SWF_Type_RGBA::parse($reader); } } else { $fillStyle['StartColor'] = IO_SWF_Type_RGBA::parse($reader); $fillStyle['EndColor'] = IO_SWF_Type_RGBA::parse($reader); } break; case 0x10: // linear gradient fill // linear gradient fill case 0x12: // radial gradient fill // radial gradient fill case 0x13: // focal gradient fill // 8 and later if ($isMorph === false) { $fillStyle['GradientMatrix'] = IO_SWF_Type_MATRIX::parse($reader); } else { $fillStyle['StartGradientMatrix'] = IO_SWF_Type_MATRIX::parse($reader); $fillStyle['EndGradientMatrix'] = IO_SWF_Type_MATRIX::parse($reader); } $reader->byteAlign(); if ($isMorph === false) { $fillStyle['SpreadMode'] = $reader->getUIBits(2); $fillStyle['InterpolationMode'] = $reader->getUIBits(2); $numGradients = $reader->getUIBits(4); } else { $numGradients = $reader->getUI8(); } $fillStyle['GradientRecords'] = array(); for ($j = 0; $j < $numGradients; $j++) { $gradientRecord = array(); if ($isMorph === false) { $gradientRecord['Ratio'] = $reader->getUI8(); if ($tagCode < 32) { // 32:DefineShape3 $gradientRecord['Color'] = IO_SWF_Type_RGB::parse($reader); } else { $gradientRecord['Color'] = IO_SWF_Type_RGBA::parse($reader); } } else { // Morph $gradientRecord['StartRatio'] = $reader->getUI8(); $gradientRecord['StartColor'] = IO_SWF_Type_RGBA::parse($reader); $gradientRecord['EndRatio'] = $reader->getUI8(); $gradientRecord['EndColor'] = IO_SWF_Type_RGBA::parse($reader); } $fillStyle['GradientRecords'][] = $gradientRecord; } if ($fillStyleType == 0x13) { // focal gradient fill // 8 and later $gradientRecord['FocalPoint'] = $reader->getUI8(); } break; case 0x40: // repeating bitmap fill // repeating bitmap fill case 0x41: // clipped bitmap fill // clipped bitmap fill case 0x42: // non-smoothed repeating bitmap fill // non-smoothed repeating bitmap fill case 0x43: // non-smoothed clipped bitmap fill $fillStyle['BitmapId'] = $reader->getUI16LE(); if ($isMorph === false) { $fillStyle['BitmapMatrix'] = IO_SWF_Type_MATRIX::parse($reader); } else { $fillStyle['StartBitmapMatrix'] = IO_SWF_Type_MATRIX::parse($reader); $fillStyle['EndBitmapMatrix'] = IO_SWF_Type_MATRIX::parse($reader); } break; default: throw new IO_SWF_Exception("Unknown FillStyleType={$fillStyleType} tagCode={$tagCode}"); } return $fillStyle; }
function parseContent($tagCode, $content, $opts = array()) { $reader = new IO_Bit(); $reader->input($content); $this->_color = IO_SWF_Type_RGB::parse($reader); }