Difference between revisions of "C.php"

From Organic Design wiki
m
m
Line 1: Line 1:
 
<?
 
<?
# SWF Compiler for XmlWiki Environment
+
# C compiler for XmlWiki Environment
  
 
$server = $_SERVER['HTTP_HOST'];
 
$server = $_SERVER['HTTP_HOST'];
Line 6: Line 6:
 
if ( !ereg( "\\/$", $htdocs ) ) $htdocs .= '/';
 
if ( !ereg( "\\/$", $htdocs ) ) $htdocs .= '/';
  
xwSetProperty( $properties, 'language', 'raw' );
+
$article = "\n[[$title]] successfully compiled.\n";
  
# Read in relevent properties
 
# - also supplies defaults
 
# - and constructs link which requests the raw compiled SWF
 
# - also adds each property as a constant to the script
 
$t = ereg_replace( '\\.as$', '.swf', $title );
 
$tag = ereg( '(\\w+)$', $path, $m ) ? $m[1] : 'swf';
 
$src = "$script?title=$title&xpath:/properties:language=raw&xpath:/properties:data=$tTitle&xpath:/properties:$tag";
 
foreach ( array(
 
 
'width' => 550,
 
'height' => 400,
 
'fps' => 12,
 
'background' => 'ffffff',
 
'quality' => 'medium',
 
'flashvars' => '',
 
'format' => 'embed',
 
'version' => 6,
 
'url' => "www/$t"
 
 
) as $key => $value ) {
 
if ( !xwGetProperty( $properties, "xpath:$path/$key", $$key ) ) $$key = $value;
 
$value = $$key;
 
$src .= "&xpath:$path:$key=".( ( $key == 'format' ) ? 'raw' : $value );
 
$article = "$key='$value';\n$article";
 
}
 
 
# Have to add imports to src url
 
foreach ( xwGetListByTagname( $properties, 'import', $import ) as $image )
 
$src .= "&xpath:$path:import=$image";
 
 
# if format is embed, just convert the content to an object-tag referring to raw-compiled-swf
 
if ( $format == 'embed' ) {
 
$article = "<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"
 
codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=$version,0,0,0\"
 
width=$width height=$height id=\"$src\" align=\"\"
 
type=\"application/x-shockwave-flash\" data=\"$src\">
 
<param name=flashvars value=\"$flashvars\">
 
<param name=movie value=\"$src\">
 
<param name=quality value=\"$quality\">
 
<param name=bgcolor value=\"$background\">
 
<embed src=\"$src\" quality=\"$quality\" bgcolor=\"$background\"
 
width=$width height=$height align=\"\" flashvars=\"$flashvars\"
 
name=\"$src\" type=\"application/x-shockwave-flash\"
 
pluginspage=\"http://www.macromedia.com/go/getflashplayer\" />
 
</object>";
 
}
 
 
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";
 
}
 
 
}
 
 
?>
 
?>

Revision as of 01:39, 23 June 2006

<?

  1. C compiler for XmlWiki Environment

$server = $_SERVER['HTTP_HOST']; $htdocs = $_SERVER['DOCUMENT_ROOT']; if ( !ereg( "\\/$", $htdocs ) ) $htdocs .= '/';

$article = "\n$title successfully compiled.\n";

?>