public function getControlsArray() { $ret = array(); $frame = 0; $frame_name = null; $display_stack = array(); $actions_stack = array(); $remove_stack = array(); foreach ($this->_tags as $tag) { switch ($tag->getCode()) { case Media_SWF_Tag::PLACE_OBJECT: case Media_SWF_Tag::PLACE_OBJECT2: case Media_SWF_Tag::PLACE_OBJECT3: $depth = $tag->getField('Depth'); $characterId = $tag->getField('CharacterId'); $display = $display_stack[$depth]; if ($characterId) { $id = $this->root->getTagByCharacterId($characterId)->getElementIdString(); if ($display) { $display['cid'] = $id; //$display['replace'] = true; } else { $display = array('dp' => $depth, 'cid' => $id); } } else { //if ($display['replace']) { // unset($display['replace']); //} } if ($tag->hasField('Name')) { $display['name'] = $tag->getField('Name'); } if ($tag->hasField('Matrix')) { $matrix = Media_SWF_SVGUtill::matrixToArray($tag->getField('Matrix')); if ($matrix != array(1, 0, 0, 1, 0, 0)) { $display['mtx'] = Media_SWF_SVGUtill::matrixToArray($tag->getField('Matrix')); } } if ($tag->hasField('ColorTransform')) { $cxform = $tag->getField('ColorTransform'); $display['cx'] = Media_SWF_SVGUtill::cxformToArray($tag->getField('ColorTransform')); } if ($tag->hasField('ClipDepth')) { $display['cdp'] = $tag->getField('ClipDepth'); } $display_stack[$depth] = $display; break; case Media_SWF_Tag::REMOVE_OBJECT: case Media_SWF_Tag::REMOVE_OBJECT2: // SVGでは何もしない $depth = $tag->getField('Depth'); $remove_stack[] = $depth; unset($display_stack[$depth]); break; case Media_SWF_Tag::DO_ACTION: $actions_stack[] = $tag->convertArray(); break; case Media_SWF_Tag::FRAME_LABEL: $frame_name = $tag->getField('Name'); break; case Media_SWF_Tag::SHOW_FRAME: ++$frame; ksort($display_stack); $d = array(); foreach ($display_stack as $i => $display) { $d[] = $display; //if ($display_stack[$i]['new']) unset($display_stack[$i]['new']); //if ($display_stack[$i]['replace']) unset($display_stack[$i]['replace']); } $r = array('d' => $d); if (count($remove_stack) > 0) { $r['rm'] = $remove_stack; } if ($frame_name) { $r['label'] = $frame_name; } if (count($actions_stack) > 0) { $r['act'] = $actions_stack; } $ret[] = $r; $remove_stack = array(); $actions_stack = array(); $frame_name = null; break; case Media_SWF_Tag::SET_BACKGROUND_COLOR: break; case Media_SWF_Tag::END: break; case Media_SWF_Tag::FILE_ATTRIBUTES: case Media_SWF_Tag::METADATA: break; default: if (!$tag->isDefinitionTag()) { var_dump($tag->getTagName()); } } } return $ret; }