|
|
Line 1: |
Line 1: |
| <? | | <? |
− | # SWF Compiler for XmlWiki Environment
| + | $article = 'test'; |
− | | |
− | $server = $_SERVER['HTTP_HOST']; | |
− | $htdocs = $_SERVER['DOCUMENT_ROOT'];
| |
− | if ( !ereg( "\\/$", $htdocs ) ) $htdocs .= '/';
| |
− | | |
− | # if format is embed, just convert the content to an object-tag referring to raw-compiled-swf
| |
− | if ( $format == 'embed' ) {
| |
− | $article = "test";
| |
− | }
| |
− | | |
− | else {
| |
− | | |
− | # Compile the script into a binary SWF
| |
− | # - also builds hard wired common vector shapes (later converted to Ming from SVG)
| |
− | | |
− | # Check weather required extentions are available (GD2 and Ming)
| |
− | $ext = get_loaded_extensions();
| |
− | if ( !in_array( 'ming', $ext ) ) xwMessage( 'Ming extention not loaded! (at least version 0.3 required)', 'red' );
| |
− | | |
− | ming_useswfversion( $version );
| |
− | global $lib, $swf;
| |
− | $lib = array();
| |
− | $swf = new SWFMovie();
| |
− | $swf->setDimension( $width, $height );
| |
− | eregi( '^#?([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])$' , $background, $m );
| |
− | list(,$r,$g,$b) = $m;
| |
− | $swf->setBackground( hexdec($r), hexdec($g), hexdec($b) );
| |
− | $swf->setRate( $fps );
| |
− | xwMessage( "SWF movie created from \"$title\": $width"." x $height @ $fps".'fps' );
| |
− | | |
− | # Don't redeclare (happens if more than one compile on same page)
| |
− | if ( !isset( $GLOBALS[$tTitle] ) ) {
| |
− | | |
− | $GLOBALS[$tTitle] = true;
| |
− | | |
− | # Make symbol library available at runtime in library array
| |
− | function libAdd( $item, $name ) {
| |
− | global $lib, $swf;
| |
− | $sym = new SWFSprite();
| |
− | $sym->add( $item );
| |
− | $sym->nextFrame();
| |
− | $swf->addExport( $sym, $lib[] = $name );
| |
− | }
| |
− | | |
− | }
| |
− | | |
− | # Import images
| |
− | foreach ( xwGetListByTagname( $properties, 'import', $import ) as $image ) {
| |
− | $ref = strtolower( trim( ereg_replace( '^.*/', '', $image ) ) );
| |
− | $ref = ereg_replace( '\\..+$', '', $ref );
| |
− | $w = $htdocs.'wiki';
| |
− | shell_exec( "$w/png2dbl $htdocs$image $w/$ref.dbl" );
| |
− | # investigate creating a unix level pipe and reading a la /dev
| |
− | #$img = new SWFBitmap( popen( "$w/png2dbl $w$image $w/stream.dbl", 'rb' ) );
| |
− | $img = new SWFBitmap( fopen( "$w/$ref.dbl", 'rb' ) );
| |
− | libAdd( $img, $ref );
| |
− | }
| |
− | | |
− | $grad = new SWFGradient();
| |
− | for ( $n = 0; $n <= 10; $n++ ) {
| |
− | $i = ( 2 - log( $n + 1 ) * 0.95 ) * 125;
| |
− | if ( $i > 255 ) $i = 255; else if ( $i < 0 ) $i = 0;
| |
− | $grad->addEntry( $n / 10, 255, 255, 255, $i );
| |
− | }
| |
− | $shape = new SWFShape();
| |
− | $fill = $shape->addFill( $grad, SWFFILL_RADIAL_GRADIENT );
| |
− | $fill->scaleTo( 0.17 );
| |
− | $shape->setRightFill( $fill );
| |
− | $shape->drawCircle( 100 );
| |
− | libAdd( $shape, 'star' );
| |
− | | |
− | # Add compile.as common code
| |
− | $article = xwArticleContent( 'compile.as' ).$article;
| |
− | | |
− | # Write exports and make all available at runtime in library array
| |
− | $swf->writeExports();
| |
− | $article = 'library=array("'.join( '","', $lib )."\");\n$article";
| |
− | if ( count( $lib ) ) xwMessage( 'Pre-compiled symbols: "'.join( '", "', $lib ).'"' );
| |
− | | |
− | # Flashvars aren't working just compile assignments into script for now
| |
− | foreach( split( '&', $flashvars ) as $var )
| |
− | if ( ereg( '^(.+)=(.+)$', $var, $m ) )
| |
− | $article = "$m[1]='$m[2]';\n$article";
| |
− | | |
− | # Replace #Include statements with content
| |
− | $includes = array();
| |
− | $more = true;
| |
− | while ( $more ) {
| |
− | $more = count( $includes );
| |
− | $article = preg_replace(
| |
− | '/^\\s*#include\\s+[\'"](.+?)[\'"].*?$/emi',
| |
− | 'xwArticleContent($includes["$1"]="$1",true);',
| |
− | $article );
| |
− | $more = count( $includes ) > $more;
| |
− | }
| |
− | if ( count( $includes ) ) xwMessage( 'Included articles: "'.join( '", "', array_keys( $includes ) ).'"' );
| |
− | | |
− | # Fix the ^= operator which doesn't work in Ming but does in Flash
| |
− | $article = preg_replace( '/([a-z_]+[a-z_0-9.]+)\\s*\\^=/i', '$1=$1^', $article );
| |
− | | |
− | # Add actionscript in frames 1-3
| |
− | $swf->add( new SWFAction( $article ) );
| |
− | $swf->nextFrame();
| |
− | $swf->add( new SWFAction( 'internal_reduce();' ) );
| |
− | $swf->nextFrame();
| |
− | $swf->add( new SWFAction( 'gotoAndPlay(2);' ) );
| |
− | $swf->nextFrame();
| |
− | | |
− | if ( $format == 'raw' ) {
| |
− | # Send the raw SWF back to the client and die
| |
− | ob_end_clean();
| |
− | header( 'Content-Type: application/x-shockwave-flash' );
| |
− | $swf->output(9);
| |
− | die();
| |
− | }
| |
− | else {
| |
− | # Write the SWF to $url and render a link to it
| |
− |
| |
− | $swf->save( "$htdocs$url" ,9 );
| |
− | $article = "\n[[$title]] successfully compiled to [http://$server/$url $server/$url]\n";
| |
− | }
| |
− | | |
− | }
| |
| ?> | | ?> |