A slide's picture placeholder can hold text the author typed instead of an image, which PowerPoint displays. Impress dropped that text on import and wrote nothing at all for such a shape on save. To reproduce, type into a picture placeholder in PowerPoint, save, open the file and save it again: the text is gone from the shape, and the shape from the file. What a placeholder is now lives in the page's presentation object list, and what represents it follows what it holds: a graphic object for a picture, an SdrObjKind::OutlineText object while it holds text, the placeholder itself while it holds nothing. It changes over when a file states such text, when that text is deleted again and the prompt comes back, and when an image is put in. Text arriving another way, through the API, is caught by the new SdrPage::onEmptyPresObjFilled and switched at the next idle, so that route needs a spinning scheduler; what a save writes is right either way. An object in text edit is left to that edit, which is where it changes over: the idle pass walks every page, so it asks each object rather than trusting the one that asked for the pass - in a shared document another view holds it. That switch is the model's own and covered by no undo step - it answers for a document the API changed, not for anything the user did. What the file says about the shape travels with it both ways, the graphic items included, so an outline a picture placeholder is clipped to is still there when a picture arrives. It is not written while the placeholder holds text: the file says text box, and a text box states no geometry to clip a picture to. PPTX writes it as the placeholder it is, with the text it holds. ODF states the class of what represents it, so the placeholder's own class travels beside it as coext:placeholder-class, and a reader that ignores the extension sees an outline placeholder with the text. Signed-off-by: Mike Kaganski <mike.kaganski@collabora.com> Change-Id: I0f3353115e56d63a4158ebaeb5689689499894bb Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/9441 Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com> Tested-by: Jenkins CPCI <releng@collaboraoffice.com> (cherry picked from commit 7921401ae48188568e1016db00bd90256d666a6a) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210329 Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org> Tested-by: Jenkins
Schemas for Validating ODF Files
Schemas that can be used for validating ODF files
subdirs:
mathml2: W3C MathML 2.0 XML Schema (needed for Math embedded objects)odf1.0,odf1.1,odf1.2: official OASIS RelaxNG schemasodf1.3: current OASIS draft ODF 1.3 RelaxNG schemalibreoffice: draft ODF schema, with additional LO extensions
The extension schema in libreoffice/ is used by all unit tests if
--with-export-validation is given, which is the default.
Notably this means that if you add a new feature to the ODF filters and you add the required unit test for the new feature, then most likely the test will fail with a complaint from the validator; in this case the schema needs to be updated to contain the new elements and attributes.
The extension schema uses the RelaxNG "include" feature to refer to the ODF
schema; this means that it only contains those parts of the schema that
actually need to be changed - this works well in many cases because the ODF
schema is quite well structured with many named patterns, but unfortunately
there are a few places where that isn't the case and large chunks needed to be
copied to override them.
In the easy case, to add an attribute you just want to search for the
corresponding element, which will have a "foo-attlist" named pattern, and then
add another attribute like this:
<rng:define name="draw-enhanced-geometry-attlist" combine="interleave"> rng:optional <rng:attribute name="drawooo:sub-view-size"> <rng:ref name="string"/> </rng:attribute> </rng:optional> </rng:define>
Currently only the features that are actually exported in the unit tests have been added to the schema; there is still some work to do here to add everything; the crashtesting script also does ODF validation of all files and now also uses the custom schema.
Unfortunately it turned out that there are a lot of extensions already for which no proposal exists [1], and in many cases not even an entry on the Wiki [2], so clearly something like this extension schema is needed.
[1] git grep TODO schema/libreoffice