Esempio n. 1
0
 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;
 }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
 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;
 }
Esempio n. 4
0
 function parseContent($tagCode, $content, $opts = array())
 {
     $reader = new IO_Bit();
     $reader->input($content);
     $this->_color = IO_SWF_Type_RGB::parse($reader);
 }