diff options
Diffstat (limited to 'oox/source/drawingml/customshapes/generatePresetsPPTXs.pl')
-rwxr-xr-x | oox/source/drawingml/customshapes/generatePresetsPPTXs.pl | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/oox/source/drawingml/customshapes/generatePresetsPPTXs.pl b/oox/source/drawingml/customshapes/generatePresetsPPTXs.pl new file mode 100755 index 000000000..246bfddcd --- /dev/null +++ b/oox/source/drawingml/customshapes/generatePresetsPPTXs.pl @@ -0,0 +1,193 @@ +#!/usr/bin/env perl +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +use IO::Handle; + +$shapes = loadShapes (); + +generatePPTXs($shapes); +exit; + + +sub generatePPTXs +{ + $shapes = shift; + + foreach $shape (keys %$shapes) + { + generatePPTX ($shapes, $shape); + } + + generatePPTX ($shapes); +} + +sub generatePPTX +{ + $shapes = shift; + $type = shift; + + mkdir ("cshape"); + mkdir ("pptx"); + system ("unzip -qq -o -d cshape cshape.pptx"); + + # custom shape(s) slide with preset definition + generateSlide ($shapes, $type, ">cshape/ppt/slides/slide1.xml", 0); + + $pptx = "../pptx/cshape-" . (defined $type ? $type : "all") . ".pptx"; + system ("cd cshape\nrm -rf ". $pptx . "\nzip -q -r " . $pptx . " .\ncd .."); + + # preset(s) slide, for testing + generateSlide ($shapes, $type, ">cshape/ppt/slides/slide1.xml", 1); + + $pptx = "../pptx/preset-cshape-" . (defined $type ? $type : "all") . ".pptx"; + system ("cd cshape\nrm -rf ". $pptx . "\nzip -q -r " . $pptx . " .\ncd .."); +} + +sub loadShapes() +{ + open (IN, "<presetShapeDefinitions.xml"); + + $inside = false; + my %shapes; + + while (<IN>) + { + if (/^ <[^\/]/) + { + $inside = true; + @definition = (); + } + else + { + if (/^ <\//) + { + chomp; + s/^ <\/([^>]+)>.*/$1/; + undef $inside; + $shapes{$_} = [ @definition ]; + #print "added ", $_, "\n"; + } + else + { + if ($inside) + { + push @definition, $_; + } + } + } + } + + close (IN); + + return \%shapes; +} + +sub generateSlide +{ + $shapes = shift; + $type = shift; + $file = shift; + $preset = shift; + + open (OUT, $file); + + print OUT "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?> +<p:sld xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"> + <p:cSld> + <p:spTree> + <p:nvGrpSpPr> + <p:cNvPr id=\"1\" name=\"\"/> + <p:cNvGrpSpPr/> + <p:nvPr/> + </p:nvGrpSpPr> + <p:grpSpPr> + <a:xfrm> + <a:off x=\"0\" y=\"0\"/> + <a:ext cx=\"0\" cy=\"0\"/> + <a:chOff x=\"0\" y=\"0\"/> + <a:chExt cx=\"0\" cy=\"0\"/> + </a:xfrm> + </p:grpSpPr> +"; + + $id = 16; + $col = 0; + $row = 0; + $size = 500000; + foreach $shape (keys %$shapes) + { + if (defined $type) { + if ($shape ne $type) { next; } +# <a:ext cx=\"1050925\" cy=\"457200\"/> +# <a:ext cx=\"1000000\" cy=\"1000000\"/> + $size *= 10; + $col = 0.5; + $row = 0.25; + } + + if ($col > 15) { + $col = 0; + $row ++; + } + + print OUT " <p:sp> + <p:nvSpPr> + <p:cNvPr id=\"", $id++, "\" name=\"", $shape, "\"/> + <p:cNvSpPr/> + <p:nvPr/> + </p:nvSpPr> + <p:spPr bwMode=\"auto\"> + <a:xfrm> + <a:off x=\"" . (350000 + $col++*$size) . "\" y=\"" . (450000 + $row*$size) . "\"/> + <a:ext cx=\"" . (4*$size/5) . "\" cy=\"" . (4*$size/5) . "\"/> + </a:xfrm> +"; + if ($preset) { + print OUT " <a:prstGeom prst=\"" . $shape . "\"><a:avLst/></a:prstGeom> +"; + } else { + print OUT " <a:custGeom> +"; + print OUT @{$shapes->{$shape}}; + print OUT " </a:custGeom> +"; + } + print OUT " <a:solidFill> + <a:srgbClr val=\"FFFF7F\"/> + </a:solidFill> + <a:ln w=\"19080\"> + <a:solidFill> + <a:srgbClr val=\"A0A060\"/> + </a:solidFill> + <a:miter lim=\"800000\"/> + <a:headEnd/> + <a:tailEnd/> + </a:ln> + </p:spPr> + </p:sp> +"; + } + + print OUT " </p:spTree> + </p:cSld> + <p:clrMapOvr> + <a:masterClrMapping/> + </p:clrMapOvr> + <p:timing> + <p:tnLst> + <p:par> + <p:cTn id=\"1\" dur=\"indefinite\" restart=\"never\" nodeType=\"tmRoot\"/> + </p:par> + </p:tnLst> + </p:timing> +</p:sld> +"; + + close (OUT); +} |