[Libreoffice-commits] core.git: oox/README

Mark Hung marklh9 at gmail.com
Wed Nov 23 09:25:41 UTC 2016


 oox/README |   92 +++++++++++++++++++++++++++++--------------------------------
 1 file changed, 44 insertions(+), 48 deletions(-)

New commits:
commit 9e3c0bbe0c6f85e1d14c15cf1e94424bb0c387cc
Author: Mark Hung <marklh9 at gmail.com>
Date:   Sun Nov 20 12:06:14 2016 +0800

    oox: update README for recent change.
    
    Change-Id: I0c50ec67b7d71c9a59f5a522f19ec40a4b21090b
    Reviewed-on: https://gerrit.libreoffice.org/31008
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/oox/README b/oox/README
index 6d01ca5..4f0329d 100644
--- a/oox/README
+++ b/oox/README
@@ -1,19 +1,21 @@
 Support for Office Open XML, the office XML-format designed by Microsoft.
 
-See also:
-[http://wiki.openoffice.org/wiki/OOX]
 
 == DrawingML Custom shapes and presets ==
 
-custom shapes are part of DrawingML and are different to binary ppt
-and VML in older formats, so we needed to add new code to work with
-these. the import happens in oox/source/drawingml, where they are
+Custom shapes are part of DrawingML and are different to binary ppt
+and VML in older formats.
+The import happens in oox/source/drawingml, where they are
 imported as LO's enhanced custom shape's. see
 offapi/com/sun/star/drawing/CustomShape.idl and
 offapi/com/sun/star/drawing/EnhancedCustomShape*.idl
+Check CustomShapeProperties::pushToPropSet() and see
+how custom shape properties are converted.
 
-the export is quite behind now, as it was done before we started work
-on fully supporting drawingml custom shapes. (see FUTURE WORK below)
+Preset shapes are custom shapes whose guides and handles
+have been defined in OOXML specification. By specifying
+preset type and the adjustment values, the reset can
+be taken from the shape definition.
 
 example of drawingml preset:
 
@@ -125,51 +127,24 @@ which is extension not yet in the standard. Thorsten suggested to put
 it in such a namespace and keep original (incomplete) geometry for
 backward compatibility, before we can extend the ODF. that's why you
 will see 2 of them in cases where some of the new commands was
-needed. Radek backported code for the new commands to 3-6
-and 4-0 branches.
+needed.
 
-the drawingml also contains new presets (compared to binary/VML) and
-so we now have code with these presets - they are basically
-predefined custom shapes. we generate them using scripts in
-oox/source/drawingml/customshapes/ and the output are
-oox/source/drawingml/customshapepresets[123456].cxx source files
-containing the definition for the preset shapes. this mean that we
-import presets from OOXML files perfectly. one area to look at might
-be check how handles on the imported custom shapes (and presets)
-work.
-
-the source code generation happens in these steps:
-
-  * generate pptx files by running generatePresetsPPTXs.pl. it
-    generates files in pptx/ from cshape.pptx sample - replacing
-    slide1.xml in it and placing it in new file in pptx/ named after
-    the preset plus one cshape-all.pptx file all the presets
-
-  * build oox module with debug (ie. make -s debug=t dbglevel=2)
-
-  * import cshape-all.pptx into impress and redirect output to
-    custom-shapes.log
-
-  * generate oox-drawingml-cs-presets data file by running
-    generatePresetsData.pl - it uses debug output from the custom-shapes.log
-    file
-
-  * check generated data file oox-drawingml-cs-presets and move them to
-    oox/source/drawingml/
-
-  * build oox with new source files and test
+In order to convert preset shapes to LO's enhanced custom shape,
+we need to load shape definition of preset shapes. The procedure
+to convert the defintion from OOXML spec for LO is documented
+( also a script ) in oox/source/drawingml/customshapes/README.
+The scripts in oox/source/drawingml/customshapes/ also generate pptx
+files for signle presets and also for all presets
+cshape-all.pptx. The cshape-all.pptx file is then loaded into Impress
+build with debug enabled in oox and the command line output contains
+information. The generated definition is oox-drawingml-cs-presets.
 
-while importing presets, we also set the name of the custom shape so
+Check CustomShapeProperties::initializePresetDataMap() to see how
+generated presets data are loaded into LO.
+While importing presets, we prefix the name with "ooxml-" so
 that we can detect it on export as save it again as preset.
 
-the scripts in oox/source/drawingml/customshapes/ also generate pptx
-files for signle presets and also for all presets
-cshape-all.pptx. the cshape-all.pptx file is then loaded into impress
-build with debug enabled in oox and the command line output contains
-information, which are used by generatePresetsCXX.pl. redirect the
-output into custom-shapes.log in oox/source/drawingml/customshapes/
-and run the script. it creates the customshapepresets[123456].cxx
-source files with presets definitions. also the generated pptx files
+The generated pptx files
 can be used when debugging bugs in custom shapes import/export. also
 the cshape-all.pptx can be used to test the round trips. there's small
 problem with these pptx as they cannot be imported into powerpoint,
@@ -179,6 +154,23 @@ custom shapes. OpenXML SDK tools might help when fixing
 cshape-all.pptx
 http://www.microsoft.com/en-us/download/details.aspx?id=30425
 
+== Export ==
+Here is how LO's enhanced custom shapes are exported:
+* Shape name is ooxml-* - they are imported from ooxml, export as is.
+* Blacklist - ODF presets that has OOXML equivalent.
+  We convert adjustment values case by case. Microsofot Office
+  is rather strict about adjustment values, either none of them
+  are provided so that default values are taken, or the exact set
+  of handles have to be provided. In some cases we are converting
+  from the preset with less handles to the one with more handles
+  so that default values suitable for the odf one need to be
+  provided.
+* Whitelist - ODF presets that has OOXML equivalent but looks a bit
+different, export them as PolyPolygon.
+
+Check Andras Timar's presentation[1] and ShapeExport::WriteCustomShape()
+for further detail.
+
 FUTURE WORK: because we have to make sure that all the roundtrips
 like PPTX --> ODP --> PPTX work correctly and doesn't lose data.
 the only problematic part is probably saving custom shapes (ie. not
@@ -187,3 +179,7 @@ and is unable to export general custom shapes yet. it will need a bit
 of work as LO has more complex equations than DrawingML. other parts
 should work OK, PPTX --> ODP should work and don't lose any
 data. presets should already survive PPTX --> ODP --> PPTX roundtrip
+
+[1]https://archive.fosdem.org/2016/schedule/event/drawingml/attachments/
+slides/1184/export/events/attachments/drawingml/slides/1184/
+andras_timar_fosdem_2016.pdf


More information about the Libreoffice-commits mailing list