Upload
others
View
25
Download
0
Embed Size (px)
Citation preview
3 / 15 FOSDEM 2014 | Miklos Vajna
What is a filter problem?
● Filters map between an input/output stream and the document model
● A given filter: given file format● If a feature in a file format is not
roundtripped perfectly through the document model
4 / 15 FOSDEM 2014 | Miklos Vajna
Case #0: feature is already in core
● RTF import, groupshape support
6 / 15 FOSDEM 2014 | Miklos Vajna
Case #2: Import the result of the feature in the filter
● E.g. Table styles, document themes● SmartArt import● On import, apply the result of that as
direct formatting● Better, than nothing, but no real editing
can be performed
8 / 15 FOSDEM 2014 | Miklos Vajna
Case #3: Just preserve it
● If a feature is completely unsupported by core, it makes sense to first just preserve it
● Use case:● Long document● Full of complicated features● Just want to correct a typo
9 / 15 FOSDEM 2014 | Miklos Vajna
We do it for ODF already
● css::xml::ParaUserDefinedAttributesSupplier● css::xml::TextUserDefinedAttributesSupplier● css::xml::UserDefinedAttributesSupplier● “The idea behind this property is that a
parser can throw away all attributes that it cannot handle by itself […] can be written back without loss.”
● WW8 as well: SwTOXBase::maMSTOCExpression
10 / 15 FOSDEM 2014 | Miklos Vajna
Why a new API?
● Need separate storage● ODF foreign format→
– Would need manual mapping anyway
● Need a more flexible data structure● UserDefinedAttributes is just a stringstring map● We want to store nested structures as well
11 / 15 FOSDEM 2014 | Miklos Vajna
The InteropGrabBag API
● New SfxPoolItem: SfxGrabBagItem● Writer: RES_{CHR,PAR}ATR_GRABBAG, etc.● UNO: InteropGrabBag property
● Type: css::beans::PropertyValues– Effectively a stringany map
12 / 15 FOSDEM 2014 | Miklos Vajna
A set of bags
● Each UNO object may implement it, currently supported:● css::document::OfficeDocument● css::drawing::Shape● css::style::CharacterProperties● css::style::ParagraphProperties● css::style::Style● css::text::BaseFrameProperties
13 / 15 FOSDEM 2014 | Miklos Vajna
The danger of hidden properties
● Problem: e.g. paragraph border is not supported, hidden “big black border” property
● User copy&pastes it elsewhere● Result: pasted paragraph still has that
property, probably not wanted● Solution: clear InteropGrabBag on
copying / when object is altered
14 / 15 FOSDEM 2014 | Miklos Vajna
Just for Writer?
● The API is generic to be used in Calc, Impress, etc.
● Currently mostly implemented for Writer only
● Just for OOXML?● It's the only user ATM● Different properties can happy coexist
– Most of current keys are prefixed with OOX anyway