diff options
Diffstat (limited to 'oox/source')
-rw-r--r-- | oox/source/export/preset-definitions-to-shape-types.pl | 70 | ||||
-rw-r--r-- | oox/source/export/vmlexport.cxx | 30 |
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; } } |