WRITER : Extend support for RDF Metadata

Michael Stahl mstahl at redhat.com
Fri Nov 15 12:43:11 PST 2013


On 15/11/13 19:03, arkarell wrote:

> I managed few days ago to implement the points 1 and 2 for text:table.
> I worked in analogy with what was done for sections.
> I used the SwTableFmt core object and the SwXTextTable UNO wrapper 
> object. But I also modified the SwXMLExport::ExportTable method in
> sw/source/filter/xml/xmltble.cxx in order to export xml:id. And it's 
> working, I can set and retrieve rdf metadata on tables !!!

wow, sounds great!

> I didn't treat any undo/copy/paste/merge, because first, as you said, 
> specifications are missing and needs could be very different,  and second
> because it doesn't seem to be already treated for yet supported 
> elements. For instance, if i set metadata on a paragraph and copy/paste 
> this paragraph,
> the rdf data are not copied.

yes... what is currently copied is just the xml:id, not the metadata.
that may still be useful, for example if you Cut and Paste in the same
document.

> My problem in my modifications is that I put some code at some place but 
> without knowledge of the purpose and links of impacted classes.
> And I'm not sure to use the good class : for instance for table support 
> in core object, why SwTableFmt and not SwTable ? Because SwSectionFmt ?

generally the UNO wrapper object is obvious, and the core object is the
one to which the UNO wrapper object has a pointer.

as you can see from code in untbl.cxx such as ...

  SwXTextTable::SwXTextTable(SwFrmFmt& rFrmFmt)
      : SwClient( &rFrmFmt )


... and SwXTextTable::attachToRange ...

                SwFrmFmt* pTblFmt = pTable->GetFrmFmt();
                lcl_FormatTable( pTblFmt );

                pTblFmt->Add(this);

... it is obvious (well it's obvious if you understand first that
SwClient/SwModify is the horribly deficient notification / observer
mechanism on which all of Writer is built) that you picked the right
class with SwTableFmt (which is a subclass of SwFrmFmt).

> Do you have some documentation to understand these objects (core, uno 
> wrapper, std or *Fmt, ...) and their relations ?

... not really ... you can look at the doxygen documentation[1] to get a
quick overview (especially useful to quickly see inheritance trees)...
and [2] is a useful article in general...  but usually for this purpose
it's a SwXFoo UNO wrapper class that is a SwClient of some core class,
which is sometimes a SwFrmFmt or subclass.  often there are several core
classes for different aspects of the entity.

things get especially tricky here if the core object is a SfxPoolItem,
like it is with SwXMeta and ::sw::Meta ... but i hope there aren't more
of these left that need an xml:id.

[1] http://docs.libreoffice.org/sw.html
[2] https://wiki.openoffice.org/wiki/Writer/Core_And_Layout



More information about the LibreOffice mailing list