Bu sınıfın test / örnek kodu da aşağıdaki gibi:
/**
* This class is used to create an xml file for creating or editing swf documents by the tool swfmill.
* It uses DOMDocument Class. swfmill version is swfmill-0.2.12
*
* @author Behçet MUTLU
* @email behcetmutlu@b-prodesign.com
* @copyright 2009 AdresGezgini.Com
*/
class SWFMillXMLCreator extends DOMDocument
{
private $movie = null;
private function addSimpleElement($name, $parent)
{
return $this->addElement($name, is_null($parent) ? $this->movie : $parent);
}
private function addArrayElement($name, $parent, $vars)
{
return $this->addElement($name, is_null($parent) ? $this->movie : $parent, $vars);
}
//
/**
* Importing a Sound
*
* We can import sounds with a similar method, where “id” is the linkage
* id, and we put the following tag inside of thetag:
*
*
*
* and later in our actionscript (compiled prior via Mtasc, etc). we’d put:
*
* var snd:Sound = new Sound();
* snd.attachSound("myID");
* snd.start();
*
* Note: Requires pre-release 0.2.11.18 or later, and sound is not streamed.
* Note: Works with 56, 64, 128, 192 and 256 kbps MP3s. Note: joint stereo
* MP3s, WAV etc don’t play at all.
*
* SWFMillXMLCreator::addSound()
*
* @param string $id
* @param string $import
* @param mixed $parent
* @return
*/
public function addSound($id = "foo", $import = "", $parent = null)
{
return $this->addArrayElement("sound", $parent, array("id" => $id, "import" => $import));
}
/**
* Note : That the font tag must exist inside a library tag for the linkage
* id to work with TextFormats and dynamically created TextFields, or that
* it is Exported for runtime sharing.
*
* The font node get two attributes “id” and “name”. id will be to be used
* for the format attribute of textfields :
*
*
*
*
* name attribute is used in order to get an actionscript reference to the
* embedded font. When using the TextField’s embedFonts property, you’ll be
* able to use the TextFormat.font property with this name. This attribute
* is also a way to group different font by families and retrieve them from
* actionscript (Flash 8 only).
*
* Last thing to note, the id and attributes can be used together as the
* serve different purposes.
*
* SWFMillXMLCreator::placeElement()
*
* @param string $id
* @param string $name
* @param string $depth
* @param mixed $parent
* @return
*/
public function placeElement($id = "hellobox", $name = "", $depth = "10", $parent = null)
{
return $this->addArrayElement("place", $parent, array("id" => $id, "name" => $name, "depth" => $depth));
}
//
/**
* Note : That the font tag must exist inside a library tag for the linkage
* id to work with TextFormats and dynamically created TextFields, or that
* it is Exported for runtime sharing.
*
* The font node get two attributes “id” and “name”. id will be to be used
* for the format attribute of textfields :
*
*
*
*
* name attribute is used in order to get an actionscript reference to the
* embedded font. When using the TextField’s embedFonts property, you’ll be
* able to use the TextFormat.font property with this name. This attribute
* is also a way to group different font by families and retrieve them from
* actionscript (Flash 8 only).
*
* Last thing to note, the id and attributes can be used together as the
* serve different purposes.
*
* SWFMillXMLCreator::addTextField()
*
* @param string $id
* @param string $width
* @param string $height
* @param string $size
* @param string $font
* @param string $text
* @param mixed $parent
* @return
*/
public function addTextField($id = "hellobox", $width = "200", $height="50", $size="10", $font="font", $text="hello world!", $parent = null )
{
return $this->addArrayElement("textfield", $parent, array("id" => $id, "width" => $width, "height" => $height, "size" => $size, "font" => $font, "text" => $text));
}
/**
* Importing Fonts
*
* Imoporting TTF fonts works almost like importing images or SWFs,
* but the tag is used and you can specify the characters you
* want included with the glyphs attribute. The example imports the
* numerical characters of vera.ttf.
*
*
*
* Note : In order to use special characters, you’d use the equivalent
* xml entity in the glyph attribute. For example é in place of é.
*
* SWFMillXMLCreator::addFont()
*
* @param string $id
* @param string $import
* @param string $glyphs
* @param mixed $parent
* @return
*/
public function addFont($id = "font", $import="", $glyphs="0123456789", $parent = null)
{
return $this->addArrayElement("font", $parent, array("id" => $id, "import" => $import, "glyphs" => $glyphs));
}
/**
* A simple Library
*
* Thetag, like almost all others, lives in a tag.
* You can determine in which frame assets are included into your SWF by
* using multiple frames and putting it into the one you want your assets
* to be available in. You don’t have to import assets into the library,
* but then they won’t be available to ActionScript. Sometimes you don’t
* need an asset to be in the library, because you only want to use it as
* a part of another clip you define, or you place it onto the stage directly
* with thetag. Of course, you can have several and
* tags in one. The example will import the same image as above,
* but this time into the library. The ID also serves as the linkage name if
* you import into the library.
*
*
*
*
*
*
*
* SWFMillXMLCreator::addLibrary()
*
* @param mixed $parent
* @return
*/
public function addLibrary($parent = null)
{
return $this->addSimpleElement("library", $parent);
}
/**
* The most basic SWF
*
* That’s the most basic SWF you can make. It’s 320 by 240 pixels, tries
* to run at 12 frames per second, and has a white background. Note the
* tag, except of theand tags, all other
* tags belong into one. For simplicity’s sake, most examples below will
* assume you know that, and won’t include the header explicitly.
*
*
*
*
*
*
* If you save this XML code into a file sample.swfml (it could also be
* sample.xml or in fact anything else), you can compile it into a binary
* SWF with the following commandline:
*
* swfmill simple sample.swfml sample.swf
*
*
*
* SWFMillXMLCreator::createMovie()
*
* @param string $width
* @param string $height
* @param string $framerate
* @return
*/
public function createMovie($width = "320", $height = "240", $framerate = "12", $version="")
{
$this->movie = $this->addArrayElement("movie", null, array("width" => $width,
"height" => $height, "framerate" => $framerate, "version" => $version));
return $this->movie;
}
/**
* Creating a frame.
* SWFMillXMLCreator::addFrame()
*
* @param mixed $parent
* @return
*/
public function addFrame($name = "", $parent = null)
{
return $this->addArrayElement("frame", $parent, array("name" =>$name));
}
/**
* Creating a frame.
* SWFMillXMLCreator::addFrame()
*
* @param mixed $parent
* @return
*/
public function stop($parent = null)
{
return $this->addSimpleElement("stop", $parent);
}
/**
* Setting background property
* SWFMillXMLCreator::addBackground()
*
* @param mixed $color
* @param mixed $parent
* @return
*/
public function addBackground($color, $parent = null)
{
return $this->addArrayElement("background", $parent, array("color" => $color));
}
/**
* Thetag lets you import JPGs, PNGs (including alpha), SWFs and SVGs (somewhat experimental).
* They will be available as MovieClips. This example will import library/foo.jpg
* and give it the ID foo. swfmill can also import TrueType fonts, but the syntax is different.
*
*
*
*
* SWFMillXMLCreator::addClip()
*
* @param string $id
* @param string $import
* @param mixed $parent
* @return
*/
public function addClip($id = "foo", $import = "", $class="", $parent = null)
{
return $this->addArrayElement("clip", $parent, array("id" => $id, "import" => $import, "class" => $class));
}
/**
* Metadata that search engine could index :
*
* < meta title="my title" description="To be indexed" />
*
* SWFMillXMLCreator::addMetaData()
*
* @param string $title
* @param string $description
* @param mixed $parent
* @return
*/
public function addMetaData($title="my title", $description="To be indexed", $parent = null)
{
return $this->addArrayElement("meta", $parent, array("title" => $title, "description" => $description));
}
//
/**
* Importing a Shared Library
*
* You can use shared libraries, too. SWFs created with swfmill always
* are available for runtime sharing, to import another SWF as a library
* keep a local copy for testing purposes and import it like this:
*
* SWFMillXMLCreator::import()
*
* @param string $file
* @param string $url
* @param mixed $parent
* @return
*/
public function import($file = "library/library.swf", $url = "http://foo.com/library.swf", $parent = null)
{
return $this->addArrayElement("import", $parent, array("file" => $file, "url" => $url));
}
//
/**
* Using components
*
* As for version 0.2.9 you are able to use the new component tag.
* No need to use a library and a call tag. Here is a simple example.
* The combo is instantiated later by actionscript injected using MTASC.
*
*
*
*
*
*
* There are still 2 problems with components:
*
* SWF extracted from a SWC can be big because they contain data for
* the Flash IDE, classes and the visual elements that we need.
*
* If you add a couple of components from the same family, swfmill will
* not check if some classes already exist and you will end up with duplicates.
* Here is a comparison with 3 components of the same family, an Alert window,
* a Label and a ProgressBar:
*
* Compiled with the Flash IDE: 12k
*
* Compiled with swfmill: 99k
*
*
* SWFMillXMLCreator::addComponent()
*
* @param string $id
* @param string $file
* @param mixed $parent
* @return
*/
public function addComponent($id = "ComboBox", $file = "library/library.swf", $parent = null)
{
return $this->addArrayElement("component", $parent, array("id" => $id, "file" => $file));
}
private function addElement($name, $parent, $vars = array())
{
$currentElement = $this->createElement($name);
if (sizeof($vars) > 0)
{
if(isset($vars[0]) && is_array($vars[0]))
{
foreach ($vars as $element)
{
$currentElement->appendChild($element);
}
}
else
{
foreach ($vars as $var => $value) {
if(isset($value) && !is_null($value) && $value != "")
$currentElement->setAttribute($var, $value);
}
}
}
if (!is_null($parent))
$parent->appendChild($currentElement);
return $currentElement;
}
/**
* SWFMillXMLCreator::toArray()
* @author Yarg Dahc
* @link http://php.net/manual/en/class.domdocument.php
* @param mixed $oDomNode
* @return
*/
public function toArray(DOMNode$oDomNode = null)
{
// return empty array if dom is blank
if (is_null($oDomNode) && !$this->hasChildNodes()) {
return array();
}
$oDomNode = (is_null($oDomNode)) ? $this->documentElement : $oDomNode;
if (!$oDomNode->hasChildNodes()) {
$mResult = $oDomNode->nodeValue;
} else {
$mResult = array();
foreach ($oDomNode->childNodes as $oChildNode) {
// how many of these child nodes do we have?
// this will give us a clue as to what the result structure should be
$oChildNodeList = $oDomNode->getElementsByTagName($oChildNode->nodeName);
$iChildCount = 0;
// there are x number of childs in this node that have the same tag name
// however, we are only interested in the # of siblings with the same tag name
foreach ($oChildNodeList as $oNode) {
if ($oNode->parentNode->isSameNode($oChildNode->parentNode)) {
$iChildCount++;
}
}
$mValue = $this->toArray($oChildNode);
$sKey = ($oChildNode->nodeName {
0}
== '#') ? 0 : $oChildNode->nodeName;
$mValue = is_array($mValue) ? $mValue[$oChildNode->nodeName] : $mValue;
// how many of thse child nodes do we have?
if ($iChildCount > 1) { // more than 1 child - make numeric array
$mResult[$sKey][] = $mValue;
} else {
$mResult[$sKey] = $mValue;
}
}
// if the child isbar , the result will be array(bar)
// make the result just 'bar'
if (count($mResult) == 1 && isset($mResult[0]) && !is_array($mResult[0])) {
$mResult = $mResult[0];
}
}
// get our attributes if we have any
$arAttributes = array();
if ($oDomNode->hasAttributes()) {
foreach ($oDomNode->attributes as $sAttrName => $oAttrNode) {
// retain namespace prefixes
$arAttributes["@{$oAttrNode->nodeName}"] = $oAttrNode->nodeValue;
}
}
// check for namespace attribute - Namespaces will not show up in the attributes list
if ($oDomNode instanceof DOMElement && $oDomNode->getAttribute('xmlns')) {
$arAttributes["@xmlns"] = $oDomNode->getAttribute('xmlns');
}
if (count($arAttributes)) {
if (!is_array($mResult)) {
$mResult = (trim($mResult)) ? array($mResult) : array();
}
$mResult = array_merge($mResult, $arAttributes);
}
$arResult = array($oDomNode->nodeName => $mResult);
return $arResult;
}
}
?>
/**
* The tester of the SWFMillCreator class.
*
* @author Behçet MUTLU
* @email behcetmutlu@b-prodesign.com
* @copyright 2009 AdresGezgini.Com
*/
require_once("SWFMillXMLCreator.class.php");
$xml = new SWFMillXMLCreator("1.0", "utf-8");
$movie = $xml->createMovie("320", "240", "12", "7");
$xml->addClip("upState", "up.png");
$xml->addClip("downState", "down.png");
$xml->addClip("overState", "over.png");
$xml->addClip("disabledState", "disabled.png");
$frame = $xml->addFrame();
$library = $xml->addLibrary($frame);
$clip = $xml->addClip("testButton","","",$library);
$xml->placeElement("upState", "", "1", $up = $xml->addFrame("Up", $clip));
$xml->placeElement("downState", "", "2", $down = $xml->addFrame("Down", $clip));
$xml->placeElement("overState", "", "3", $over = $xml->addFrame("Over", $clip));
$xml->placeElement("disabledState", "", "4", $disabled = $xml->addFrame("Disabled", $clip));
$xml->stop($up);
$xml->stop($down);
$xml->stop($over);
$xml->stop($disabled);
$xml->appendChild($movie);
header( "content-type: application/xml; charset=utf-8" );
$xml->preserveWhiteSpace = false;
$xml->formatOutput = true;
print($xml->saveXML());
?>