summaryrefslogtreecommitdiff
path: root/oox/source
diff options
context:
space:
mode:
Diffstat (limited to 'oox/source')
-rw-r--r--oox/source/export/preset-definitions-to-shape-types.pl70
-rw-r--r--oox/source/export/vmlexport.cxx30
2 files changed, 53 insertions, 47 deletions
diff --git a/oox/source/export/preset-definitions-to-shape-types.pl b/oox/source/export/preset-definitions-to-shape-types.pl
index 005d9cdc5e21..cd324d1bb72d 100644
--- a/oox/source/export/preset-definitions-to-shape-types.pl
+++ b/oox/source/export/preset-definitions-to-shape-types.pl
@@ -22,7 +22,7 @@ use warnings;
sub usage() {
print STDERR <<EOF;
-Usage: preset-definitions-to-shape-types.pl <shapes> <text>
+Usage: preset-definitions-to-shape-types.pl [ --drawingml-adj-names-data | --vml-shape-types-data ] <shapes> <text>
Converts presetShapeDefinitions.xml and presetTextWarpDefinitions.xml to a
.cxx that contains VML with the definitions of the shapes. The result is
@@ -47,10 +47,14 @@ sub show_call_stack
}
my $drawingml_adj_names_data = 0;
+my $vml_shape_types_data = 0;
my $src_shapes = shift;
if ($src_shapes eq "--drawingml-adj-names-data") {
$drawingml_adj_names_data = 1;
$src_shapes = shift;
+} elsif ($src_shapes eq "--vml-shape-types-data") {
+ $vml_shape_types_data = 1;
+ $src_shapes = shift;
}
my $src_text = shift;
@@ -1191,7 +1195,7 @@ if ( !defined( $result_shapes{'textBox'} ) ) {
"</v:shapetype>";
}
-# Generate the code
+# Generate the data
if ($drawingml_adj_names_data eq 1) {
foreach my $adj_name (keys %adj_names)
{
@@ -1201,52 +1205,32 @@ if ($drawingml_adj_names_data eq 1) {
}
}
exit 0;
-}
-
-print <<EOF;
-// Shape types generated from
-// '$src_shapes'
-// and
-// '$src_text'
-// which are part of the OOXML documentation
-
-#include <map>
-#include <filter/msfilter/escherex.hxx>
-
-const char* pShapeTypes[ ESCHER_ShpInst_COUNT ] =
-{
-EOF
-
-for ( my $i = 0; $i < 203; ++$i ) {
- if ( $i < 4 ) {
- print " /* $i - $shapes_ids{$i} - handled separately */\n NULL,\n";
- }
- else {
- print " /* $i - $shapes_ids{$i} */\n";
- my $out = $result_shapes{$shapes_ids{$i}};
- if ( defined( $out ) ) {
- # set the id
- $out =~ s/__ID__/$i/g;
-
- # escape the '"'s
- $out =~ s/"/\\"/g;
-
- # output as string
- $out =~ s/^/ "/;
- $out =~ s/\n/"\n "/g;
- $out =~ s/$/"/;
-
- print "$out,\n";
+} elsif ($vml_shape_types_data eq 1) {
+ for ( my $i = 0; $i < 203; ++$i ) {
+ if ( $i < 4 ) {
+ print "/* $i - $shapes_ids{$i} - handled separately */\nNULL\n";
}
else {
- print " NULL,\n";
+ print "/* $i - $shapes_ids{$i} */\n";
+ my $out = $result_shapes{$shapes_ids{$i}};
+ if ( defined( $out ) ) {
+ # set the id
+ $out =~ s/__ID__/$i/g;
+
+ # output as string
+ $out =~ s/\n//g;
+
+ print "$out\n";
+ }
+ else {
+ print "NULL\n";
+ }
}
}
+ exit 0;
}
-print <<EOF;
-};
-
-EOF
+# should not happen
+exit 1;
# vim:set ft=perl shiftwidth=4 softtabstop=4 expandtab: #
diff --git a/oox/source/export/vmlexport.cxx b/oox/source/export/vmlexport.cxx
index b4b97b54dfe7..0f3038b5115a 100644
--- a/oox/source/export/vmlexport.cxx
+++ b/oox/source/export/vmlexport.cxx
@@ -17,6 +17,8 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <config_folders.h>
+#include "rtl/bootstrap.hxx"
#include <oox/export/vmlexport.hxx>
#include <oox/token/tokens.hxx>
@@ -927,7 +929,26 @@ void VMLExport::AddShapeAttribute( sal_Int32 nAttribute, const OString& rValue )
m_pShapeAttrList->add( nAttribute, rValue );
}
-extern const char* pShapeTypes[];
+std::vector<OString> lcl_getShapeTypes()
+{
+ std::vector<OString> aRet;
+
+ OUString aPath("$BRAND_BASE_DIR/" LIBO_SHARE_FOLDER "/filter/vml-shape-types");
+ rtl::Bootstrap::expandMacros(aPath);
+ SvFileStream aStream(aPath, STREAM_READ);
+ if (aStream.GetError() != ERRCODE_NONE)
+ SAL_WARN("oox", "failed to open vml-shape-types");
+ OString aLine;
+ bool bNotDone = aStream.ReadLine(aLine);
+ while (bNotDone)
+ {
+ // Filter out comments.
+ if (!aLine.startsWith("/"))
+ aRet.push_back(aLine);
+ bNotDone = aStream.ReadLine(aLine);
+ }
+ return aRet;
+}
sal_Int32 VMLExport::StartShape()
{
@@ -951,13 +972,14 @@ sal_Int32 VMLExport::StartShape()
nShapeElement = XML_shape;
// a predefined shape?
- const char* pShapeType = pShapeTypes[ m_nShapeType ];
- if ( pShapeType )
+ static std::vector<OString> aShapeTypes = lcl_getShapeTypes();
+ OString aShapeType = aShapeTypes[ m_nShapeType ];
+ if ( aShapeType != "NULL" )
{
bReferToShapeType = true;
if ( !m_pShapeTypeWritten[ m_nShapeType ] )
{
- m_pSerializer->write( pShapeType );
+ m_pSerializer->write( aShapeType.getStr() );
m_pShapeTypeWritten[ m_nShapeType ] = true;
}
}