LibreOffice » oox
View module in: cgit
Support for Office Open XML, the office XML-format designed by Microsoft.
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
CustomShapeProperties::pushToPropSet() and see
how custom shape properties are converted.
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:
<a:prstGeom prst="star5"> <a:avLst/> </a:prstGeom>
example of drawingml custom shape (equal to star5 preset):
we needed to extend our custom shapes for missing features and so 5
new segment commands were added.
G command for arcto drawingml record
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
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 definition from OOXML spec for LO is documented
(also a script) in
The scripts in
oox/source/drawingml/customshapes/ also generate pptx
files for single 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
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 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
Here is how LO’s enhanced custom shapes are exported:
ooxml-*- they are imported from ooxml, export as is.
Check Andras Timar’s presentation and
for further detail.
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
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 lose any
data. presets should already survive PPTX –> ODP –> PPTX roundtrip