summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorRadek Doulik <rodo@novell.com>2013-07-08 18:56:33 +0200
committerJan Holesovsky <kendy@suse.cz>2013-07-08 18:57:44 +0200
commit4a9a2c0ed10608d1afcaebaf8bd25059b7a3f4be (patch)
treed56c691e6cbb003ff701b29d06ec71c476abfb3b /oox
parent3a54294e45f20e7705d06b9aa036a2ba12f56a50 (diff)
Turn Radek's notes into README files.
Change-Id: I904142622ac37b394ddedf62bb7d9c099fc9cab4
Diffstat (limited to 'oox')
-rw-r--r--oox/README185
1 files changed, 185 insertions, 0 deletions
diff --git a/oox/README b/oox/README
index 43b60bd924d2..a1972fa5eef6 100644
--- a/oox/README
+++ b/oox/README
@@ -2,3 +2,188 @@ Support for Office Open XML, the office XML-format designed by Microsoft.
See also:
[http://wiki.services.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
+imported as LO's enhanced custom shape's. see
+offapi/com/sun/star/drawing/CustomShape.idl and
+offapi/com/sun/star/drawing/EnhancedCustomShape*.idl
+
+the export is quite behind now, as it was done before we started work
+on fully supporting drawingml custom shapes. (see FUTURE WORK below)
+
+example of drawingml preset:
+
+ <a:prstGeom prst="star5">
+ <a:avLst/>
+ </a:prstGeom>
+
+example of drawingml custom shape (equal to star5 preset):
+
+ <avLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main">
+ <gd name="adj" fmla="val 19098" />
+ <gd name="hf" fmla="val 105146" />
+ <gd name="vf" fmla="val 110557" />
+ </avLst>
+ <gdLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main">
+ <gd name="a" fmla="pin 0 adj 50000" />
+ <gd name="swd2" fmla="*/ wd2 hf 100000" />
+ <gd name="shd2" fmla="*/ hd2 vf 100000" />
+ <gd name="svc" fmla="*/ vc vf 100000" />
+ <gd name="dx1" fmla="cos swd2 1080000" />
+ <gd name="dx2" fmla="cos swd2 18360000" />
+ <gd name="dy1" fmla="sin shd2 1080000" />
+ <gd name="dy2" fmla="sin shd2 18360000" />
+ <gd name="x1" fmla="+- hc 0 dx1" />
+ <gd name="x2" fmla="+- hc 0 dx2" />
+ <gd name="x3" fmla="+- hc dx2 0" />
+ <gd name="x4" fmla="+- hc dx1 0" />
+ <gd name="y1" fmla="+- svc 0 dy1" />
+ <gd name="y2" fmla="+- svc 0 dy2" />
+ <gd name="iwd2" fmla="*/ swd2 a 50000" />
+ <gd name="ihd2" fmla="*/ shd2 a 50000" />
+ <gd name="sdx1" fmla="cos iwd2 20520000" />
+ <gd name="sdx2" fmla="cos iwd2 3240000" />
+ <gd name="sdy1" fmla="sin ihd2 3240000" />
+ <gd name="sdy2" fmla="sin ihd2 20520000" />
+ <gd name="sx1" fmla="+- hc 0 sdx1" />
+ <gd name="sx2" fmla="+- hc 0 sdx2" />
+ <gd name="sx3" fmla="+- hc sdx2 0" />
+ <gd name="sx4" fmla="+- hc sdx1 0" />
+ <gd name="sy1" fmla="+- svc 0 sdy1" />
+ <gd name="sy2" fmla="+- svc 0 sdy2" />
+ <gd name="sy3" fmla="+- svc ihd2 0" />
+ <gd name="yAdj" fmla="+- svc 0 ihd2" />
+ </gdLst>
+ <ahLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main">
+ <ahXY gdRefY="adj" minY="0" maxY="50000">
+ <pos x="hc" y="yAdj" />
+ </ahXY>
+ </ahLst>
+ <cxnLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main">
+ <cxn ang="3cd4">
+ <pos x="hc" y="t" />
+ </cxn>
+ <cxn ang="cd2">
+ <pos x="x1" y="y1" />
+ </cxn>
+ <cxn ang="cd4">
+ <pos x="x2" y="y2" />
+ </cxn>
+ <cxn ang="cd4">
+ <pos x="x3" y="y2" />
+ </cxn>
+ <cxn ang="0">
+ <pos x="x4" y="y1" />
+ </cxn>
+ </cxnLst>
+ <rect l="sx1" t="sy1" r="sx4" b="sy3" xmlns="http://schemas.openxmlformats.org/drawingml/2006/main" />
+ <pathLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main">
+ <path>
+ <moveTo>
+ <pt x="x1" y="y1" />
+ </moveTo>
+ <lnTo>
+ <pt x="sx2" y="sy1" />
+ </lnTo>
+ <lnTo>
+ <pt x="hc" y="t" />
+ </lnTo>
+ <lnTo>
+ <pt x="sx3" y="sy1" />
+ </lnTo>
+ <lnTo>
+ <pt x="x4" y="y1" />
+ </lnTo>
+ <lnTo>
+ <pt x="sx4" y="sy2" />
+ </lnTo>
+ <lnTo>
+ <pt x="x3" y="y2" />
+ </lnTo>
+ <lnTo>
+ <pt x="hc" y="sy3" />
+ </lnTo>
+ <lnTo>
+ <pt x="x2" y="y2" />
+ </lnTo>
+ <lnTo>
+ <pt x="sx1" y="sy2" />
+ </lnTo>
+ <close />
+ </path>
+ </pathLst>
+
+we needed to extend our custom shapes for missing features and so 5
+new segment commands were added. G command for arcto drawingml record
+and H I J K commands for darken, darkenless, lighten, lightenless
+records. the commands are save into ODF in special namespace drawooo,
+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.
+
+the drawingml also contains new presets (compared to binary/VML) and
+so we now have code with these presets - they are basicallly
+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)
+wotk.
+
+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 cxx files by running generatePresetsCXX.pl - it uses
+ debug output from the custom-shapes.log file and prepares the C++
+ source code
+
+ * check generated source code files customshapepresets[123456].cxx
+ and move them to oox/source/drawingml/
+
+ * build oox with new source files and test
+
+while importing presets, we also set the name of the custom shape 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
+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,
+but that can be fixed quickly. when fixed, we can use it to
+test powerpoint odp export and see how complete it is regarding
+custom shapes. OpenXML SDK tools might help when fixing
+cshape-all.pptx
+http://www.microsoft.com/en-us/download/details.aspx?id=30425
+
+FUTURE WORK: because we have to make sure that all the roundtrips
+like PPTX --> ODP --> PPTX work correctly and doesn't loose data.
+the only problematic part is probably saving custom shapes (ie. not
+presets) to PPTX. that part of code predates work on custom shapes
+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 loose any
+data. presets should already survive PPTX --> ODP --> PPTX roundtrip