[Libreoffice-commits] core.git: oox/CustomTarget_generated.mk oox/Library_oox.mk oox/Package_generated.mk oox/source scp2/source

Miklos Vajna vmiklos at collabora.co.uk
Tue Apr 15 03:39:05 PDT 2014


 oox/CustomTarget_generated.mk                          |    6 -
 oox/Library_oox.mk                                     |    4 
 oox/Package_generated.mk                               |    1 
 oox/source/export/preset-definitions-to-shape-types.pl |   70 ++++++-----------
 oox/source/export/vmlexport.cxx                        |   30 ++++++-
 scp2/source/ooo/module_filter.scp                      |   10 ++
 6 files changed, 66 insertions(+), 55 deletions(-)

New commits:
commit 96e9fdd49b61d6342bde5a71098b3892f59fa38a
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Tue Apr 15 12:30:05 2014 +0200

    oox: generate data, not code for VML export preset definitions
    
    Change-Id: Ied9171715de948d30b360eb56626b93b695b7b93

diff --git a/oox/CustomTarget_generated.mk b/oox/CustomTarget_generated.mk
index 0b81f11..70aa0d2 100644
--- a/oox/CustomTarget_generated.mk
+++ b/oox/CustomTarget_generated.mk
@@ -14,14 +14,14 @@ oox_MISC := $(call gb_CustomTarget_get_workdir,oox/generated)/misc
 oox_INC := $(call gb_CustomTarget_get_workdir,oox/generated)
 oox_GENHEADERPATH := $(oox_INC)/oox/token
 
-$(oox_MISC)/vmlexport-shape-types.cxx : \
+$(oox_MISC)/vml-shape-types : \
 		$(SRCDIR)/oox/source/export/preset-definitions-to-shape-types.pl \
 		$(SRCDIR)/oox/source/drawingml/customshapes/presetShapeDefinitions.xml \
 		$(SRCDIR)/oox/source/export/presetTextWarpDefinitions.xml \
 		$(SRCDIR)/oox/CustomTarget_generated.mk
 	$(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),build,PRL,1)
 	mkdir -p $(dir $@)
-	perl $^ > $@.in_progress 2> $@.log && mv $@.in_progress $@
+	perl $< --vml-shape-types-data $(filter-out $<,$^) > $@.in_progress 2> $@.log && mv $@.in_progress $@
 
 $(oox_MISC)/oox-drawingml-adj-names : \
 		$(SRCDIR)/oox/source/export/preset-definitions-to-shape-types.pl \
@@ -58,8 +58,8 @@ $(eval $(call oox_GenTarget,properties,property,))
 $(eval $(call oox_GenTarget,tokens,token,tokenhash.gperf))
 
 $(call gb_CustomTarget_get_target,oox/generated) : \
-	$(oox_MISC)/vmlexport-shape-types.cxx \
 	$(oox_MISC)/oox-drawingml-adj-names \
+	$(oox_MISC)/vml-shape-types \
 	$(oox_INC)/tokenhash.inc \
 	$(oox_INC)/tokennames.inc \
 	$(oox_INC)/namespacenames.inc \
diff --git a/oox/Library_oox.mk b/oox/Library_oox.mk
index 007c22f..06f0477 100644
--- a/oox/Library_oox.mk
+++ b/oox/Library_oox.mk
@@ -296,8 +296,4 @@ $(eval $(call gb_Library_add_exception_objects,oox,\
     oox/source/vml/vmltextbox \
 ))
 
-$(eval $(call gb_Library_add_generated_exception_objects,oox,\
-    CustomTarget/oox/generated/misc/vmlexport-shape-types \
-))
-
 # vim: set noet sw=4 ts=4:
diff --git a/oox/Package_generated.mk b/oox/Package_generated.mk
index e233662..6ed8f83 100644
--- a/oox/Package_generated.mk
+++ b/oox/Package_generated.mk
@@ -11,6 +11,7 @@ $(eval $(call gb_Package_Package,oox_generated,$(call gb_CustomTarget_get_workdi
 
 $(eval $(call gb_Package_add_files,oox_generated,$(LIBO_SHARE_FOLDER)/filter,\
 	misc/oox-drawingml-adj-names \
+	misc/vml-shape-types \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/oox/source/export/preset-definitions-to-shape-types.pl b/oox/source/export/preset-definitions-to-shape-types.pl
index 005d9cd..cd324d1 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 b4b97b5..0f3038b 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;
                     }
                 }
diff --git a/scp2/source/ooo/module_filter.scp b/scp2/source/ooo/module_filter.scp
index 2caac9c..e4fdeae 100644
--- a/scp2/source/ooo/module_filter.scp
+++ b/scp2/source/ooo/module_filter.scp
@@ -17,7 +17,8 @@ Module gid_Module_Filter
     Styles = (HIDDEN_ROOT);
     Dirs = (gid_Dir_Share_Filter);
     Files = (
-        gid_File_Dat_OoxDrawingmlAdjNames);
+        gid_File_Dat_OoxDrawingmlAdjNames,
+        gid_File_Dat_VmlShapeTypes);
 End
 
 Directory gid_Dir_Share_Filter
@@ -32,4 +33,11 @@ File gid_File_Dat_OoxDrawingmlAdjNames
     Styles = (PACKED);
 End
 
+File gid_File_Dat_OoxVmlShapeTypes
+    TXT_FILE_BODY;
+    Dir = gid_Dir_Share_Filter;
+    Name = "vml-shape-types";
+    Styles = (PACKED);
+End
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list