:
eval 'exec perl -wS $0 ${1+"$@"}'
if 0;
use IO::File;
use Cwd;
use File::Spec;
use File::Spec::Functions;
use File::Temp;
use File::Path;
$TempDir = "";
# all the XML package generation is a blatant rip from AF's
# write-calc-doc.pl
###############################################################################
# Open a file with the given name.
# First it is checked if the temporary directory, in which all files for
# the document are gathered, is already present and create it if it is not.
# Then create the path to the file inside the temporary directory.
# Finally open the file and return a file handle to it.
#
sub open_file
{
my $filename = pop @_;
# Create base directory of temporary directory tree if not alreay
# present.
if ($TempDir eq "")
{
$TempDir = File::Temp::tempdir (CLEANUP => 1);
}
# Create the path to the file.
my $fullname = File::Spec->catfile ($TempDir, $filename);
my ($volume,$directories,$file) = File::Spec->splitpath ($fullname);
mkpath (File::Spec->catpath ($volume,$directories,""));
# Open the file and return a file handle to it.
return new IO::File ($fullname, "w");
}
###############################################################################
# Zip the files in the directory tree into the given file.
#
sub zip_dirtree
{
my $filename = pop @_;
my $cwd = getcwd;
my $zip_name = $filename;
# We are about to change the directory.
# Therefore create an absolute pathname for the zip archive.
# First transfer the drive from $cwd to $zip_name. This is a
# workaround for a bug in file_name_is_absolute which thinks
# the the path \bla is an absolute path under DOS.
my ($volume,$directories,$file) = File::Spec->splitpath ($zip_name);
my ($volume_cwd,$directories_cwd,$file_cwd) = File::Spec->splitpath ($cwd);
$volume = $volume_cwd if ($volume eq "");
$zip_name = File::Spec->catpath ($volume,$directories,$file);
# Add the current working directory to a relative path.
if ( ! file_name_is_absolute ($zip_name))
{
$zip_name = File::Spec->catfile ($cwd, $zip_name);
# Try everything to clean up the name.
$zip_name = File::Spec->rel2abs ($filename);
$zip_name = File::Spec->canonpath ($zip_name);
# Remove .. directories from the middle of the path.
while ($zip_name =~ /\/[^\/][^\.\/][^\/]*\/\.\.\//)
{
$zip_name = $` . "/" . $';
}
}
# Just in case the zip program gets confused by an existing file with the
# same name as the one to be written that file is removed first.
if ( -e $filename)
{
if (unlink ($filename) == 0)
{
print "Existing file $filename could not be deleted.\n";
print "Please close the application that uses it, then try again.\n";
return;
}
}
# Finally create the zip file. First change into the temporary directory
# so that the resulting zip file contains only paths relative to it.
print "zipping [$ZipCmd $ZipFlags $zip_name *]\n";
chdir ($TempDir);
system ("$ZipCmd $ZipFlags $zip_name *");
chdir ($cwd);
}
sub writeHeader
{
print $OUT qq~
~;
}
sub writeSlideHeader
{
my $titleText = pop @_;
my $slideNum = pop @_;
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " Slide: $slideNum\n";
print $OUT " Topic: $titleText\n";
print $OUT " Some text to show text effects\n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
}
sub writeSlideFooter
{
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
}
sub writeFooter
{
print $OUT qq~
~;
}
sub writeTransitionAnimation
{
my $transitionSubtype = pop @_;
my $transitionType = pop @_;
my $slideNum = pop @_;
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
}
sub writePropertyAnimation
{
my $propertyEnd = pop @_;
my $propertyStart = pop @_;
my $propertyName = pop @_;
my $slideNum = pop @_;
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
}
sub writeTransformAnimation
{
my $propertyBy = pop @_;
my $propertyName = pop @_;
my $slideNum = pop @_;
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
}
sub writePathMotionAnimation
{
my $slideNum = pop @_;
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
print $OUT " \n";
}
sub writeManifest
{
my $outFile = open_file("META-INF/manifest.xml");
print $outFile qq~
~;
$outFile->close;
}
###############################################################################
# Print usage information.
#
sub usage ()
{
print <* []
output-file-name defaults to alltransitions.odp.
options: -a Generate _all_ combinations of type, subtype,
direction, and mode
-h Print this usage information.
END_OF_USAGE
}
###############################################################################
# Process the command line.
#
sub process_command_line
{
foreach (@ARGV)
{
if (/^-h/)
{
usage;
exit 0;
}
}
$global_gen_all=0;
$global_output_name = "alltransitions.odp";
my $j = 0;
for (my $i=0; $i<=$#ARGV; $i++)
{
if ($ARGV[$i] eq "-a")
{
$global_gen_all=1;
}
elsif ($ARGV[$i] =~ /^-/)
{
print "Unknown option $ARGV[$i]\n";
usage;
exit 1;
}
elsif ($#ARGV == $i )
{
$global_output_name = $ARGV[$i];
}
}
print "output to $global_output_name\n";
}
$transitionsRef = [
["barWipe",
["leftToRight",
"topToBottom"]],
["blindsWipe",
["vertical",
"horizontal"]],
["boxWipe",
["topLeft",
"topRight",
"bottomRight",
"bottomLeft",
"topCenter",
"rightCenter",
"bottomCenter",
"leftCenter"]],
["fourBoxWipe",
["cornersIn",
"cornersOut"]],
["barnDoorWipe",
["vertical",
"horizontal",
"diagonalBottomLeft",
"diagonalTopLeft"]],
["bowTieWipe",
["vertical",
"horizontal"]],
["miscDiagonalWipe",
["doubleBarnDoor",
"doubleDiamond"]],
["veeWipe",
["down",
"left",
"up",
"right"]],
["barnVeeWipe",
["top",
"left",
"up",
"right"]],
["zigZagWipe",
["leftToRight",
"topToBottom"]],
["barnZigZagWipe",
["vertical",
"horizontal"]],
["irisWipe",
["rectangle",
"diamond"]],
["triangleWipe",
["up",
"right",
"down",
"left"]],
["arrowHeadWipe",
["up",
"right",
"down",
"left"]],
["pentagonWipe",
["up",
"down"]],
["hexagonWipe",
["horizontal",
"vertical"]],
["ellipseWipe",
["circle",
"horizontal",
"vertical"]],
["eyeWipe",
["vertical",
"horizontal"]],
["roundRectWipe",
["horizontal",
"vertical"]],
["starWipe",
["fourPoint",
"fivePoint",
"sixPoint"]],
["miscShapeWipe",
["heart",
"keyhole"]],
["clockWipe",
["clockwiseTwelve",
"clockwiseThree",
"clockwiseSix",
"clockwiseNine"]],
["pinWheelWipe",
["oneBlade",
"twoBladeVertical",
"twoBladeHorizontal",
"threeBlade",
"fourBlade",
"eightBlade"]],
["singleSweepWipe",
["clockwiseTop",
"clockwiseRight",
"clockwiseBottom",
"clockwiseLeft",
"clockwiseTopLeft",
"counterClockwiseBottomLeft",
"clockwiseBottomRight",
"counterClockwiseTopRight"]],
["fanWipe",
["centerTop",
"centerRight",
"top",
"right",
"bottom",
"left"]],
["doubleFanWipe",
["fanOutVertical",
"fanOutHorizontal",
"fanInVertical",
"fanInHorizontal"]],
["doubleSweepWipe",
["parallelVertical",
"parallelDiagonal",
"oppositeVertical",
"oppositeHorizontal",
"parallelDiagonalTopLeft",
"parallelDiagonalBottomLeft"]],
["saloonDoorWipe",
["top",
"left",
"bottom",
"right"]],
["windshieldWipe",
["right",
"up",
"vertical",
"horizontal"]],
["snakeWipe",
["topLeftHorizontal",
"topLeftVertical",
"topLeftDiagonal",
"topRightDiagonal",
"bottomRightDiagonal",
"bottomLeftDiagonal"]],
["spiralWipe",
["topLeftClockwise",
"topRightClockwise",
"bottomRightClockwise",
"bottomLeftClockwise",
"topLeftCounterClockwise",
"topRightCounterClockwise",
"bottomRightCounterClockwise",
"bottomLeftCounterClockwise"]],
["parallelSnakesWipe",
["verticalTopSame",
"verticalBottomSame",
"verticalTopLeftOpposite",
"verticalBottomLeftOpposite",
"horizontalLeftSame",
"horizontalRightSame",
"horizontalTopLeftOpposite",
"horizontalTopRightOpposite",
"diagonalBottomLeftOpposite",
"diagonalTopLeftOpposite"]],
["boxSnakesWipe",
["twoBoxTop",
"twoBoxLeft",
"twoBoxRight",
"fourBoxVertical",
"fourBoxHorizontal"]],
["waterfallWipe",
["verticalLeft",
"verticalRight",
"horizontalLeft",
"horizontalRight"]],
["pushWipe",
["fromLeft",
"fromTop",
"fromRight",
"fromBottom",
"fromBottomRight",
"fromBottomLeft",
"fromTopRight",
"fromTopLeft",
"combHorizontal",
"combVertical"]],
["slideWipe",
["fromLeft",
"fromTop",
"fromRight",
"fromBottom"]],
["fade",
["crossfade",
"fadeToColor",
"fadeFromColor",
"fadeOverColor"]],
["randomBarWipe",
["vertical",
"horizontal"]],
["checkerBoardWipe",
["down",
"across"]],
["dissolve",
["default"]]
];
$propertiesRef = [
[ "value", "color", "#000000", "#FF0000" ],
[ "string", "font-family", "Helvetica", "Times New Roman" ],
[ "value", "font-size", "1pt", "1.5pt" ],
[ "string", "font-style", "normal", "italic" ],
[ "string", "text-underline", "none", "solid" ],
[ "string", "font-weight", "normal", "bold" ],
[ "value", "fill-color", "#000000", "#00FF00" ],
[ "string", "fill", "none", "solid" ],
[ "value", "height", "0.5*height", "height" ],
[ "value", "stroke-color", "#000000", "#0000FF" ],
[ "string", "stroke", "none", "solid" ],
[ "value", "opacity", "0.0", "0.9" ],
[ "value", "rotate", "0", "90" ],
[ "value", "skewX", "0", "-1" ],
[ "value", "skewY", "0", "-1" ],
[ "string", "visibility", "hidden", "visible" ],
[ "value", "width", "0.5*width", "width" ],
[ "value", "x", "x-0.1", "x+0.1" ],
[ "value", "y", "y-0.1", "y+0.1" ]
];
$transformsRef = [
["translate", "0.5*width,0.5*height"],
["scale", "0.5*width,0.5*height"],
["rotate", "270"],
["skewX", "-1"],
["skewY", "1"]
];
###############################################################################
# Main
###############################################################################
$ZipCmd = $ENV{LOG_FILE_ZIP_CMD};
$ZipFlags = $ENV{LOG_FILE_ZIP_FLAGS};
# Provide default values for the zip command and it's flags.
if ( ! defined $ZipCmd)
{
$ZipCmd = "zip" unless defined $ZipCmd;
$ZipFlags = "-r -q" unless defined $ZipFlags;
}
process_command_line();
writeManifest();
$OUT = open_file( "content.xml" );
writeHeader();
$transitionNum=0;
writeSlideHeader($transitionNum, "Transition effects");
foreach $transitionRef (@$transitionsRef)
{
$transitionType = @$transitionRef[0];
foreach $subtype (@{$transitionRef->[1]})
{
writeTransitionAnimation($transitionNum,
$transitionType,
$subtype);
}
}
writeSlideFooter();
writeSlideHeader(++$transitionNum, "Property effects");
foreach $propertyRef (@$propertiesRef)
{
$propertyType = @$propertyRef[0];
if( $propertyType eq "value" )
{
writePropertyAnimation( $transitionNum, @$propertyRef[1], @$propertyRef[2], @$propertyRef[3] );
}
elsif( $propertyType eq "string" )
{
}
else
{
die "Unexpected case";
}
}
writeSlideFooter();
writeSlideHeader(++$transitionNum, "Transformation effects");
foreach $transformRef (@$transformsRef)
{
writeTransformAnimation( $transitionNum, @$transformRef[0], @$transformRef[1] );
}
writeSlideFooter();
writeSlideHeader(++$transitionNum, "Path motion effects");
writePathMotionAnimation($transitionNum);
writeSlideFooter();
print $OUT qq~
Slide: 4
Topic: Misc effects
Some text to show accelerate effects
Some text to show decelerate effects
Some text to show additive effects
Some text to show autoreverse effects
Some text to show key value effects
Some text to show discrete key value effects
Some text to show formula effects
~;
writeSlideFooter();
# iterate, single paragraphs, word, lines, sentences, characters
print $OUT qq~
Slide: 5
Topic: Text effects
Some text to show iterated single paragraph
Some text to show iterated word-by-word effects
Some text to show iterated letter-by-letter effects
Some more text
Some more text
Some more text
Some more text
Some more text
~;
writeSlideFooter();
writeFooter();
$OUT->close;
zip_dirtree ($global_output_name);