diff options
author | Kurt Zenker <kz@openoffice.org> | 2009-09-11 14:29:45 +0000 |
---|---|---|
committer | Kurt Zenker <kz@openoffice.org> | 2009-09-11 14:29:45 +0000 |
commit | a9ae22ff697308a1569504e460f028e70ca8b652 (patch) | |
tree | 786e4286cd54640c9e76234c86366ec91597fd69 | |
parent | 58b135a8ce92463eb5d9fc95241e147213fe9ed2 (diff) |
CWS-TOOLING: integrate CWS odfmetadata3
2009-09-11 Michael Stahl merge DEV300_m58
2009-09-07 Michael Stahl SwFmtFld::Modify(): do nothing on RES_OBJECTDYING
2009-08-27 Michael Stahl #i91565#, #i91566#: TextPortionEnumerationTest.java: add test document
2009-08-27 Michael Stahl #i91565#, #i91566#: add complex test: TextPortionEnumerationTest.java
2009-08-27 Michael Stahl CLiteral::initialize(): zero-length literals probably not an error
2009-08-27 Michael Stahl #i91565#, #i91566#: offapi: new InContentMetadata and MetadataField services
adapt TextPortion for InContentMetadata
2009-08-27 Michael Stahl #i91564#: xmloff: load/store xml:id and RDFa for text:bookmark(-start).
2009-08-27 Michael Stahl #i91564#: sw core: add support for xml:id at bookmarks:
sw::mark::Bookmark: derive from Metadatable.
SwHistoryBookmark, SaveBookmark: store a MetadatableUndo.
ndcopy.cxx: lcl_CopyBookmarks(): copy the xml:id.
SwXBookmark: derive from MetadatableMixin.
2009-08-27 Michael Stahl #i91565#, #i91566#: xmloff: refactor ruby import so nested meta(-field) works:
remove XMLRubyHint_Impl.
XMLImpRubyContext_Impl::~XMLImpRubyContext_Impl(): insert ruby directly.
2009-08-27 Michael Stahl #i91565#, #i91566#: xmloff: fix text:meta(-field) import/export:
new XMLTextParagraphExport::exportTextField() overload for XTextField.
CreateAndInsertMark(): set xml:id after insertion.
fix meta(-field) service names, bugs etc.
2009-08-27 Michael Stahl #i91565#, #i91566#: sw text formatting: paint background of meta(-field) body:
SwFont: add member m_nMetaCount.
txttypes.hxx: add POR_META.
atrstck.cxx: handle RES_TXTATR_META(FIELD).
itrform2.cxx: SwTxtFormatter::WhichTxtPor(): create new class SwMetaPortion.
2009-08-27 Michael Stahl #i91566#: sw text formatting: display meta-field prefix and suffix:
SwAttrIter::GetAttr(): replace with call to GetTxtAttrForCharAt().
SwTxtFormatter::NewExtraPortion(): handle meta-field prefix.
SwTxtFormatter: new member m_nHintEndIndex.
SwTxtFormatter::WhichFirstPortion(): call TryNewNoLengthPortion().
SwTxtFormatter::TryNewNoLengthPortion(): new; handle suffix of meta-field.
SwTxtFormatter::UnderFlow(): UGLY HACK: decrement m_nHintEndIndex.
SwFldPortion: add flag m_bNoLength: portion has zero length (for suffix).
2009-08-27 Michael Stahl #i91565#, #i91566#: extend text:meta(-field) uno wrapper with XText interface:
unoobj.hxx: new CursorType CURSOR_META.
unoobj2.cxx: refactor SwXText implementation to ensure that when the SwXText
belongs to a SwXMeta, content is always inserted inside the meta(-field).
unoobj.cxx: new SwXTextCursor::ForceIntoMeta(): cursor stays in meta(-field).
unometa.hxx: SwXMeta implements XText, forwarding to a member SwXMetaText.
DocInsertStringSplitCR(), SwX*::attachToRange(), SwX*::DeleteAndInsert():
use FORCEHINTEXPAND hack to ensure insert into the meta(-field) at the end.
2009-08-27 Michael Stahl #i91565#, #i91566#: add text:meta(-field) uno wrapper to sw:
fmtmeta.hxx, fmtatr2.cxx: new class sw::MetaField, new sw::MetaFieldManager.
doc.hxx, docnew.cxx: new SwDoc::GetMetaFieldManager().
unocoll.hxx,.cxx: new SW_SERVICE_FIELDTYPE_METAFIELD, SW_SERVICE_TYPE_META.
unomap.hxx,.cxx: new PROPERTY_MAP_METAFIELD.
unoprnms.hxx: new UNO_NAME_META.
unoport.hxx: new PORTION_META; add "InContentMetadata" prop to SwXTextPortion.
new unometa.hxx: new class SwXMeta and SwXMetaField.
unofield.cxx: SwXFieldEnumeration: include meta-fields.
unoportenum.cxx: handle RES_TXTATR_META(FIELD) by using a portion list stack.
unotext.cxx: SwXText::insertTextContent(): handle meta(-field) as attribute.
2009-08-27 Michael Stahl #i91565#, #i91566#: ndhints.cxx: remove sort number from SwTxtAttrNesting
2009-08-27 Michael Stahl #i91565#, #i91566#: add support for hints with end and CH_TXTATR to sw core:
doc.hxx, docedt.cxx: replace SwDoc::Delete(), DeleteAndJoin(), ReplaceRange()
with wrappers that split at left-overlapped end+CH_TXTATR hints.
txatbase.hxx: new member SwTxtAttr::m_bHasDummyChar.
ndtxt.hxx: rename SwTxtNode::GetTxtAttr() to GetTxtAttrForCharAt().
ndtxt.cxx: SwTxtNode::CopyText(): copy end+CH_TXTATR hints iff copy CH_TXTATR.
txtatr2.cxx, thints.cxx: SwTxtMeta gets a CH_TXTATR.
2009-08-27 Michael Stahl #i91565#, #i91566#: add text:meta(-field) to sw core:
txatbase.hxx: new member SwTxtAttr::m_bNesting.
hintids.hxx: new ids RES_TXTATR_META, RES_TXTATR_METAFIELD.
txtatr.hxx: new base class SwTxtAttrNesting.
new hint SwTxtMeta.
SwTxtRuby derives from SwTxtAttrNesting.
txtinet.hxx: SwTxtINetFmt derives from SwTxtAttrNesting.
new header fmtmeta.hxx: new pool item SwFmtMeta. new class sw::Meta.
ndhints.hxx, thints.cxx: new method SwpHints::TryInsertNesting().
thints.cxx: refactoring: BuildPortions() no longer handles Ruby/Hyperlink,
but TryInsertNesting(), which also handles meta(-field).
SwTxtNode::InsertItem(): check if the hint is actually inserted.
ndhints.cxx: sort nesting hints based on sort number.
ndtxt.cxx: lcl_CopyHint(): handle copy of meta/meta-field.
2009-08-27 Michael Stahl enable expanding hints with m_bLockExpandFlag set:
add new InsertFlag: INS_FORCEHINTEXPAND.
add new SetAttrMode: SETATTR_FORCEHINTEXPAND.
rename SwEditShell::Insert() to Insert2() because changed signature fails
to compile when SwWrtShell tries to overwrite these non-virtual members...
SwWrtShell::Insert() sets FOCEHINTEXPAND if range was selected/deleted.
adapt SwUndoInsert to store flags.
2009-08-27 Michael Stahl change formal parameters of item insertion methods to type SetAttrMode
2009-08-27 Michael Stahl fix incorrect resetting of text attributes in SwUndoInsSection, SwUndoInserts
2009-08-27 Michael Stahl clean up SwTxtNode::CutImpl() and lcl_CopyHint()
2009-08-27 Michael Stahl rename SwDoc::Copy() to CopyRange(), and _Copy() to CopyImpl()
2009-08-27 Michael Stahl rename SwNodes::Move() to MoveRange(), and remove unused parameter
2009-08-27 Michael Stahl rename SwDoc::Move() to MoveRange()/MoveNodeRange()
2009-08-27 Michael Stahl rename SwDoc::Insert() to InsertString(), and remove sal_Unicode variant
2009-08-27 Michael Stahl rename SwDoc::Insert() to InsertPoolItem()/InsertItemSet()/InsertSwSection()
2009-08-27 Michael Stahl rename SwDoc::Replace() to ReplaceRange()
2009-08-27 Michael Stahl remove SwDoc::Overwrite() sal_Unicode variant
2009-08-27 Michael Stahl split up SwDoc::DeleteAndJoin(): factor out DeleteAndJoinWithRedline()
2009-08-27 Michael Stahl rename overloaded SwDoc::Delete() to DeleteRange()/DeleteTOXMark()
2009-08-27 Michael Stahl rename SwTxtNode::Copy() to CopyText()
2009-08-27 Michael Stahl rename SwTxtNode::Cut() to CutText(), and _Cut() to CutImpl()
2009-08-27 Michael Stahl rename SwTxtNode::Delete() to DeleteAttribute()/DeleteAttributes()
2009-08-27 Michael Stahl rename SwTxtNode::Replace() to ReplaceText(), and remove the xub_Unicode variant
2009-08-27 Michael Stahl rename SwTxtNode::Erase() to EraseText()
2009-08-27 Michael Stahl rename SwTxtNode::Insert() to InsertText(), and remove the xub_Unicode variant
2009-08-27 Michael Stahl clean up SwTxtNode::Update()
2009-08-27 Michael Stahl remove SwTxtAttr::RemoveFromPool() and make destructor non-public,
to be invoked by new method SwTxtAttr::Destroy()
2009-08-27 Michael Stahl ensure that SwDoc::Insert() for item (set) returns success indicator:
replace SwRegHistory constructor with method InsertItems(), returning bool.
refactor InsAttr() so that it checks if InsertItems() succeeds.
2009-08-27 Michael Stahl move SwXTextPortionEnumeration from unoobj.hxx to unoport.hxx
2009-08-27 Michael Stahl add missing SolarMutex in SwXTextPortion methods
2009-08-27 Michael Stahl SwXTextPortion: new member m_xTextField (so the TextField property need not
be returned indirectly via SwUnoCursorHelper).
factor out function CreateSwXTextField().
2009-08-27 Michael Stahl SwXTextPortion: remove PORTION_CONTROL_CHAR and implementation of XTextField
2009-08-27 Michael Stahl remove obsolete hint SwTxtHardBlank and formats SwFmtHardBlank/SwFmtSoftHyph
2009-08-27 Michael Stahl clean up SwTxtAttr and friends:
remove many accessor methods for obsolete (due to autofmt) char format items.
remove unused flag SwTxtAttr::m_bDontMergeAttr.
MakeRedlineTxtAttr() now dedicated function, no longer calls MakeTxtAttr().
2009-08-27 Michael Stahl remove obsolete attribute SwTxt2Lines
2009-08-27 Michael Stahl SwXTextPortionEnumeration: finish refactoring CreatePortions
change ExportHints so it always returns a text portion for hint w/ CH_TXTATR.
remove special case for handling end of paragraph.
unfortunately had to refactor the fieldmarks export as well (got in the way).
2009-08-27 Michael Stahl SwXTextPortionEnumeration: refactor CreatePortions: frames export
extract function ExportFrames() from CreatePortions().
remove (un)dead code that calls evil MovePara(fnParaCurr, fnParaEnd)
2009-08-27 Michael Stahl clean up SwXParaFrameEnumeration
2009-08-27 Michael Stahl CollectFrameAtNode: replace SwDependArr with STL based FrameDependList_t
2009-08-27 Michael Stahl SwXTextPortionEnumeration: tweak refmark/toxmark export
so ExportHints returns the portion for point marks
2009-08-27 Michael Stahl clean up SwXTextPortionEnumeration:
prefix members, remove casts, replace SvWeirdArray with STL, etc.
make CreatePortions() method a function, and remove lots of members.
extract fieldmarks function from CreatePortions.
2009-08-27 Michael Stahl remove FOREACHUNOPAM_START/END macros
2009-08-27 Michael Stahl clean up SwXTextPortion:
prefix members, remove casts, etc.
remove SwXRubyPortion: replace it with another SwXTextPortion constructor
2009-08-27 Michael Stahl #i102541# SwXReferenceMark::InsertRefMark(): use flag SETATTR_DONTEXPAND
2009-08-27 Michael Stahl rename SwTxtNode::Insert to SwTxtNode::InsertHint, and
fix constness in SwTxtNode::InsertItem
2009-08-27 Michael Stahl turn SwTxtNode::MakeTxtAttr() methods into global functions in ndhints.hxx
2009-08-27 Michael Stahl remove obsolete sw/inc/bookmrk.hxx
2009-08-27 Michael Stahl pam.cxx: fix ComparePosition functions (returned wrong result in one case)
2009-08-27 Michael Stahl #i103613# only import RDF metadata on normal open of a document
2009-09-11 kz CWS-TOOLING: integrate CWS impress176
2009-09-08 20:18:24 +0200 sj r275957 : fixed warning (shadowed variable)
2009-09-08 18:02:05 +0200 cl r275948 : #i104315# added missing tab pages
2009-09-08 17:35:18 +0200 cl r275947 : #i104866# fixed angle import
2009-09-08 17:32:53 +0200 cl r275946 : #i104841# fixed angle import
2009-09-08 17:01:25 +0200 cl r275943 : #i103935# fixed the SID_EVENTCONFIG mess
2009-09-08 14:32:57 +0200 sj r275928 : #i104685# only comments
2009-09-07 12:37:36 +0200 sj r275886 : #i104683# fixed import of bold/italic attributes for normal text shapes
2009-09-04 15:07:46 +0200 sj r275808 : #104689# fixed bullet color problem
2009-09-03 15:25:07 +0200 sj r275753 : #160200# added vertical alignment of table cells
2009-09-11 kz CWS-TOOLING: integrate CWS dv14
2009-09-10 15:16:32 +0200 sg r276035 : #160513# updated wfs scheme to accept ports
2009-09-10 07:41:47 +0200 dv r276019 : #i104942# Better renaming algorithmen
2009-08-31 13:41:11 +0200 dv r275604 : #160505# Setting APP1PRODUCTNAME must not overwrite APP1PRODUCTDEF
2009-09-11 kz CWS-TOOLING: integrate CWS jl131
2009-09-02 16:42:40 +0200 jl r275720 : #i97896#
2009-08-31 13:01:53 +0200 jl r275599 : CWS-TOOLING: rebase CWS jl131 to trunk@275331 (milestone: DEV300:m56)
2009-07-31 14:35:30 +0200 jl r274531 : CWS-TOOLING: rebase CWS jl131 to trunk@274203 (milestone: DEV300:m53)
2009-07-23 14:20:32 +0200 jl r274272 : #i79839# better error text when trying to modify shared layer without having write permission, eg. unopkg add --shared, unopkg remove --shared, unopkg reinstall --shared
2009-07-22 16:38:02 +0200 jl r274252 : #i97896# localize error message for lock file
2009-07-22 16:37:22 +0200 jl r274251 : #i80462# unprecise wording in updatedialog
2009-07-22 16:36:06 +0200 jl r274250 : #i97896# localize error message for lock file
2009-07-22 16:35:20 +0200 jl r274249 : #i97896# localize error message for lock file
2009-07-22 15:07:30 +0200 jl r274242 : #i98873# minimum java version is 1.5 since OOo 3.0
2009-09-11 kz CWS-TOOLING: integrate CWS changehc
2009-08-31 19:38:50 +0200 pl r275633 : remove dbug printf
2009-08-31 17:41:50 +0200 pl r275623 : CWS-TOOLING: rebase CWS changehc to trunk@275331 (milestone: DEV300:m56)
2009-07-15 19:45:46 +0200 pl r274028 : #i35482# use HC flag to decide high contrast mode
2009-07-15 17:40:52 +0200 pl r274020 : #i35482# use HC flag to decide high contrast mode
2009-07-15 17:39:50 +0200 pl r274019 : #i35482# update autohc correctly in MergeSystemSettings
2009-07-15 17:38:57 +0200 pl r274018 : #i35482# update autohc correctly in MergeSystemSettings
2009-09-11 kz CWS-TOOLING: integrate CWS notes10
2009-08-24 07:25:57 +0200 mod r275287 : 2009-07-26 02:38:32 +0200 mod r274343 : #i#i103645#
2009-07-26 02:01:53 +0200 mod r274342 : #i103645#
2009-07-26 01:52:42 +0200 mod r274341 : #i103490#
2009-07-22 08:31:48 +0200 mod r274215 : #i103373#
2009-07-15 00:55:11 +0200 mod r273987 : #i101419#
2009-07-14 07:07:55 +0200 mod r273956 : #i101419#
2009-07-14 07:07:43 +0200 mod r273955 : #i101419#
2009-07-14 07:02:10 +0200 mod r273954 : changes from notes9
2009-07-14 06:14:25 +0200 mod r273953 : #i103476#
2009-09-11 kz CWS-TOOLING: integrate CWS ab70
2009-09-10 15:12:54 +0200 jsk r276034 : #i85434# - mandatory automatic update test
2009-09-10 15:11:06 +0200 jsk r276033 : #i85434# - mandatory automatic update test
2009-09-02 09:49:24 +0200 ab r275698 : #i85434# Dialog Import
2009-09-11 kz CWS-TOOLING: integrate CWS hb32bugs02
2009-09-02 Henning Brinkmann #i102420# revert changes
2009-08-26 Henning Brinkmann merged DEV300_m56
2009-08-19 Henning Brinkmann merged DEV300_m55
2009-08-14 Henning Brinkmann merged changes from wntmsci12
2009-08-12 Henning Brinkmann Implemented NoSpaceEdit constructor and destructor in .cxx to allow compile with debug on wntmsci12.
2009-08-12 Henning Brinkmann Added some SW_DLLPUBLIC to make compilable on wntmsci12.
2009-08-11 Henning Brinkmann #i102420# dbg_out: surround output for SwNodes with <nodes-array>.
2009-08-10 Henning Brinkmann #i102420# rewritten debug output for SwNodes.
2009-08-07 Henning Brinkmann #i102420# debug _MoveNodes: output the destination, too. Break after two iterations.
2009-08-07 Henning Brinkmann #i102420# _MoveNodes: Additionally check if destination index is inside source => false
Check if current range was already handled => loop
Debug output current range
2009-08-06 Henning Brinkmann merged DEV300_m54
2009-08-06 Henning Brinkmann added master fix
2009-08-06 Henning Brinkmann debug output for SwNodeRange
2009-08-04 Henning Brinkmann #i102844# robustness: check for NULL pointer to prevent crash
2009-08-03 Henning Brinkmann #i103475# applied patch and verified
2009-08-03 Henning Brinkmann Removed code preventing build of sw with DEBUG.
2009-09-11 convert-repo update tags
2009-09-10 kz CWS-TOOLING: integrate CWS os2port06dev300
2009-09-05 22:49:00 +0200 ydario r275858 : #i99588# applied os2port06 diff to DEV300 tree.
2009-09-10 kz CWS-TOOLING: integrate CWS mingwport23
2009-08-29 07:07:53 +0200 tono r275555 : i#104522: mingw port graphite
2009-08-29 07:07:26 +0200 tono r275554 : i#104522: mingw port printf format fix
2009-09-10 kz CWS-TOOLING: integrate CWS mh232
2009-08-26 03:52:57 +0200 mh r275385 : #i102182# FreeBSD patch
2009-08-26 03:43:20 +0200 mh r275384 : #i101333# patch for FreeBSD
2009-08-26 03:11:20 +0200 mh r275383 : #i39230
2009-08-26 03:07:51 +0200 mh r275382 : #i39230# more space for initials field
2009-08-26 02:41:19 +0200 mh r275380 : #i39230# use vos::osecurity for reading the user name
2009-08-18 22:06:00 +0200 mh r275130 : #i104243#, line ending problem with newer perl
2009-08-18 21:53:21 +0200 mh r275129 : #i39230# read initials via getpwnam
2009-08-18 21:34:05 +0200 mh r275128 : enable CAIROCANVAS for Linux and Mac, #i88613#
2009-08-17 18:02:59 +0200 mh r275067 : #i95498# make compile with gcc3
2009-09-10 kz CWS-TOOLING: integrate CWS tkr24
2009-09-07 14:31:06 +0200 is r275898 : #160081# adding NO_LICENSE_INTO_COPYRIGHT
2009-09-10 releng #i10000# change KeyMapping to SingletonRef<framework::KeyMapping>
2009-09-11 convert-repo update tags
2009-09-10 kz CWS-TOOLING: integrate CWS os2port06dev300
2009-09-05 22:49:00 +0200 ydario r275858 : #i99588# applied os2port06 diff to DEV300 tree.
2009-09-10 kz CWS-TOOLING: integrate CWS mingwport23
2009-08-29 07:07:53 +0200 tono r275555 : i#104522: mingw port graphite
2009-08-29 07:07:26 +0200 tono r275554 : i#104522: mingw port printf format fix
2009-09-10 kz CWS-TOOLING: integrate CWS mh232
2009-08-26 03:52:57 +0200 mh r275385 : #i102182# FreeBSD patch
2009-08-26 03:43:20 +0200 mh r275384 : #i101333# patch for FreeBSD
2009-08-26 03:11:20 +0200 mh r275383 : #i39230
2009-08-26 03:07:51 +0200 mh r275382 : #i39230# more space for initials field
2009-08-26 02:41:19 +0200 mh r275380 : #i39230# use vos::osecurity for reading the user name
2009-08-18 22:06:00 +0200 mh r275130 : #i104243#, line ending problem with newer perl
2009-08-18 21:53:21 +0200 mh r275129 : #i39230# read initials via getpwnam
2009-08-18 21:34:05 +0200 mh r275128 : enable CAIROCANVAS for Linux and Mac, #i88613#
2009-08-17 18:02:59 +0200 mh r275067 : #i95498# make compile with gcc3
2009-09-10 kz CWS-TOOLING: integrate CWS tkr24
2009-09-07 14:31:06 +0200 is r275898 : #160081# adding NO_LICENSE_INTO_COPYRIGHT
2009-09-10 releng #i10000# change KeyMapping to SingletonRef<framework::KeyMapping>
-rw-r--r-- | xmloff/inc/txtflde.hxx | 2 | ||||
-rw-r--r-- | xmloff/inc/xmloff/txtparae.hxx | 9 | ||||
-rw-r--r-- | xmloff/source/core/xmlimp.cxx | 1 | ||||
-rw-r--r-- | xmloff/source/text/XMLTextMarkImportContext.cxx | 165 | ||||
-rw-r--r-- | xmloff/source/text/XMLTextMarkImportContext.hxx | 26 | ||||
-rw-r--r-- | xmloff/source/text/txtflde.cxx | 15 | ||||
-rw-r--r-- | xmloff/source/text/txtparae.cxx | 57 | ||||
-rw-r--r-- | xmloff/source/text/txtparai.cxx | 256 | ||||
-rw-r--r-- | xmloff/source/text/txtparaimphint.hxx | 23 |
9 files changed, 300 insertions, 254 deletions
diff --git a/xmloff/inc/txtflde.hxx b/xmloff/inc/txtflde.hxx index 15062560da24..a06bbeab8326 100644 --- a/xmloff/inc/txtflde.hxx +++ b/xmloff/inc/txtflde.hxx @@ -191,7 +191,7 @@ public: /// to be called for every field during style export. void ExportFieldAutoStyle(const ::com::sun::star::uno::Reference < ::com::sun::star::text::XTextField > & rTextField, - sal_Bool bProgress ); + const sal_Bool bProgress, const sal_Bool bRecursive ); /// export field declarations. /// to be called once at beginning of document body. diff --git a/xmloff/inc/xmloff/txtparae.hxx b/xmloff/inc/xmloff/txtparae.hxx index a7c7df50ee64..5bb042c5c0ce 100644 --- a/xmloff/inc/xmloff/txtparae.hxx +++ b/xmloff/inc/xmloff/txtparae.hxx @@ -69,6 +69,7 @@ namespace com { namespace sun { namespace star namespace container { class XEnumerationAccess; class XEnumeration; class XIndexAccess; } namespace text { class XTextContent; class XTextRange; class XText; class XFootnote; class XTextFrame; class XTextSection; + class XTextField; class XDocumentIndex; class XTextShapesSupplier; } } } } @@ -330,6 +331,12 @@ protected: ::com::sun::star::text::XTextRange > & rTextRange, sal_Bool bAutoStyles, sal_Bool bProgress ); + void exportTextField( + const ::com::sun::star::uno::Reference < + ::com::sun::star::text::XTextField> & xTextField, + const sal_Bool bAutoStyles, const sal_Bool bProgress, + const sal_Bool bRecursive ); + void exportAnyTextFrame( const ::com::sun::star::uno::Reference < ::com::sun::star::text::XTextContent > & rTextContent, @@ -490,7 +497,7 @@ protected: /// export a text:meta void exportMeta( const ::com::sun::star::uno::Reference< - ::com::sun::star::beans::XPropertySet> & i_xMeta, + ::com::sun::star::beans::XPropertySet> & i_xPortion, sal_Bool i_bAutoStyles, sal_Bool i_isProgress ); public: diff --git a/xmloff/source/core/xmlimp.cxx b/xmloff/source/core/xmlimp.cxx index 28c970a94066..975cb5432eb7 100644 --- a/xmloff/source/core/xmlimp.cxx +++ b/xmloff/source/core/xmlimp.cxx @@ -1894,6 +1894,7 @@ void SvXMLImport::SetXmlId(uno::Reference<uno::XInterface> const & i_xIfc, } } } catch (uno::Exception &) { + OSL_ENSURE(false, "SvXMLImport::SetXmlId: exception?"); } } } diff --git a/xmloff/source/text/XMLTextMarkImportContext.cxx b/xmloff/source/text/XMLTextMarkImportContext.cxx index 1091636c9d3f..5e6f47ed5b6a 100644 --- a/xmloff/source/text/XMLTextMarkImportContext.cxx +++ b/xmloff/source/text/XMLTextMarkImportContext.cxx @@ -47,6 +47,7 @@ #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/container/XNamed.hpp> +#include <com/sun/star/rdf/XMetadatable.hpp> #include <com/sun/star/text/XFormField.hpp> @@ -111,9 +112,10 @@ XMLTextMarkImportContext::XMLTextMarkImportContext( SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrefix, - const OUString& rLocalName ) : - SvXMLImportContext(rImport, nPrefix, rLocalName), - rHelper(rHlp) + const OUString& rLocalName ) + : SvXMLImportContext(rImport, nPrefix, rLocalName) + , m_rHelper(rHlp) + , m_bHaveAbout(false) { } @@ -139,19 +141,24 @@ static SvXMLEnumMapEntry __READONLY_DATA lcl_aMarkTypeMap[] = void XMLTextMarkImportContext::StartElement( const Reference<XAttributeList> & xAttrList) { - if (!FindName(GetImport(), xAttrList, sBookmarkName, m_XmlId, &sFieldName)) - sBookmarkName=OUString(); + if (!FindName(GetImport(), xAttrList)) + { + m_sBookmarkName = OUString(); + } if (IsXMLToken(GetLocalName(), XML_FIELDMARK_END)) - sBookmarkName=rHelper.FindActiveBookmarkName(); + { + m_sBookmarkName = m_rHelper.FindActiveBookmarkName(); + } if (IsXMLToken(GetLocalName(), XML_FIELDMARK_START) || IsXMLToken(GetLocalName(), XML_FIELDMARK)) { - if (sBookmarkName.getLength()==0) - sBookmarkName=::rtl::OUString::createFromAscii("Unknown"); - rHelper.pushFieldCtx( sBookmarkName, sFieldName ); + if (m_sBookmarkName.getLength() == 0) + { + m_sBookmarkName = ::rtl::OUString::createFromAscii("Unknown"); + } + m_rHelper.pushFieldCtx( m_sBookmarkName, m_sFieldName ); } - } void XMLTextMarkImportContext::EndElement() @@ -167,7 +174,7 @@ void XMLTextMarkImportContext::EndElement() const OUString sAPI_formfieldmark( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.FormFieldmark")); - if (sBookmarkName.getLength()>0) + if (m_sBookmarkName.getLength() > 0) { sal_uInt16 nTmp; if (SvXMLUnitConverter::convertEnum(nTmp, GetLocalName(), @@ -178,34 +185,42 @@ void XMLTextMarkImportContext::EndElement() case TypeReference: // export point reference mark CreateAndInsertMark(GetImport(), - sAPI_reference_mark, - sBookmarkName, - rHelper.GetCursorAsRange()->getStart(), - ::rtl::OUString()); + sAPI_reference_mark, + m_sBookmarkName, + m_rHelper.GetCursorAsRange()->getStart(), + ::rtl::OUString()); break; case TypeFieldmark: case TypeBookmark: { - bool bImportAsField=((lcl_MarkType)nTmp==TypeFieldmark && sFieldName.compareToAscii("msoffice.field.FORMCHECKBOX")==0); // for now only import FORMCHECKBOX boxes + bool bImportAsField=((lcl_MarkType)nTmp==TypeFieldmark && m_sFieldName.compareToAscii("msoffice.field.FORMCHECKBOX")==0); // for now only import FORMCHECKBOX boxes // export point bookmark - Reference<XInterface> xIfc=CreateAndInsertMark(GetImport(), + const Reference<XInterface> xContent( + CreateAndInsertMark(GetImport(), (bImportAsField?sAPI_formfieldmark:sAPI_bookmark), - sBookmarkName, - rHelper.GetCursorAsRange()->getStart(), - m_XmlId); + m_sBookmarkName, + m_rHelper.GetCursorAsRange()->getStart(), + m_sXmlId) ); + if (m_bHaveAbout) + { + const Reference<com::sun::star::rdf::XMetadatable> + xMeta( xContent, UNO_QUERY); + GetImport().AddRDFa(xMeta, + m_sAbout, m_sProperty, m_sContent, m_sDatatype); + } if ((lcl_MarkType)nTmp==TypeFieldmark) { - if (xIfc.is() && bImportAsField) { + if (xContent.is() && bImportAsField) { // setup fieldmark... - Reference< ::com::sun::star::text::XFormField> xFormField(xIfc, UNO_QUERY); + Reference< ::com::sun::star::text::XFormField> xFormField(xContent, UNO_QUERY); xFormField->setType(1); // Checkbox... - if (xFormField.is() && rHelper.hasCurrentFieldCtx()) { + if (xFormField.is() && m_rHelper.hasCurrentFieldCtx()) { // xFormField->setDescription(::rtl::OUString::createFromAscii("HELLO CHECKBOX")); // xFormField->setRes(1); - rHelper.setCurrentFieldParamsTo(xFormField); + m_rHelper.setCurrentFieldParamsTo(xFormField); } } - rHelper.popFieldCtx(); + m_rHelper.popFieldCtx(); } } break; @@ -213,9 +228,9 @@ void XMLTextMarkImportContext::EndElement() case TypeFieldmarkStart: case TypeBookmarkStart: // save XTextRange for later construction of bookmark - rHelper.InsertBookmarkStartRange( - sBookmarkName, rHelper.GetCursorAsRange()->getStart(), - m_XmlId); + m_rHelper.InsertBookmarkStartRange( + m_sBookmarkName, m_rHelper.GetCursorAsRange()->getStart(), + m_sXmlId); break; case TypeFieldmarkEnd: @@ -223,18 +238,18 @@ void XMLTextMarkImportContext::EndElement() { // get old range, and construct Reference<XTextRange> xStartRange; - if (rHelper.FindAndRemoveBookmarkStartRange(sBookmarkName, - xStartRange, m_XmlId)) + if (m_rHelper.FindAndRemoveBookmarkStartRange(m_sBookmarkName, + xStartRange, m_sXmlId)) { Reference<XTextRange> xEndRange( - rHelper.GetCursorAsRange()->getStart()); + m_rHelper.GetCursorAsRange()->getStart()); // check if beginning and end are in same XText if (xStartRange->getText() == xEndRange->getText()) { // create range for insertion Reference<XTextCursor> xInsertionCursor = - rHelper.GetText()->createTextCursorByRange( + m_rHelper.GetText()->createTextCursorByRange( xEndRange); xInsertionCursor->gotoRange(xStartRange, sal_True); @@ -247,30 +262,39 @@ void XMLTextMarkImportContext::EndElement() Reference<XTextRange> xInsertionRange( xInsertionCursor, UNO_QUERY); - bool bImportAsField=((lcl_MarkType)nTmp==TypeFieldmarkEnd && rHelper.hasCurrentFieldCtx()); + bool bImportAsField=((lcl_MarkType)nTmp==TypeFieldmarkEnd && m_rHelper.hasCurrentFieldCtx()); if (bImportAsField) { - ::rtl::OUString currentFieldType=rHelper.getCurrentFieldType(); + ::rtl::OUString currentFieldType = + m_rHelper.getCurrentFieldType(); bImportAsField=currentFieldType.compareToAscii("msoffice.field.FORMTEXT")==0; // for now only import FORMTEXT boxes } // insert reference - Reference<XInterface> xIfc=CreateAndInsertMark(GetImport(), + const Reference<XInterface> xContent( + CreateAndInsertMark(GetImport(), (bImportAsField?sAPI_fieldmark:sAPI_bookmark), - sBookmarkName, - xInsertionRange, - m_XmlId); + m_sBookmarkName, + xInsertionRange, + m_sXmlId) ); + if (m_bHaveAbout) + { + const Reference<com::sun::star::rdf::XMetadatable> + xMeta( xContent, UNO_QUERY); + GetImport().AddRDFa(xMeta, + m_sAbout, m_sProperty, m_sContent, m_sDatatype); + } if ((lcl_MarkType)nTmp==TypeFieldmarkEnd) { - if (xIfc.is() && bImportAsField) { + if (xContent.is() && bImportAsField) { // setup fieldmark... - Reference< ::com::sun::star::text::XFormField> xFormField(xIfc, UNO_QUERY); + Reference< ::com::sun::star::text::XFormField> xFormField(xContent, UNO_QUERY); xFormField->setType(0); // Text - if (xFormField.is() && rHelper.hasCurrentFieldCtx()) { - rHelper.setCurrentFieldParamsTo(xFormField); + if (xFormField.is() && m_rHelper.hasCurrentFieldCtx()) { + m_rHelper.setCurrentFieldParamsTo(xFormField); // xFormField->setDescription(::rtl::OUString::createFromAscii("HELLO")); } } - rHelper.popFieldCtx(); + m_rHelper.popFieldCtx(); } } // else: beginning/end in different XText -> ignore! @@ -296,11 +320,12 @@ SvXMLImportContext *XMLTextMarkImportContext::CreateChildContext( USHORT nPrefix const ::rtl::OUString& rLocalName, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& ) { - return new XMLFieldParamImportContext(GetImport(), rHelper, nPrefix, rLocalName); + return new XMLFieldParamImportContext(GetImport(), m_rHelper, + nPrefix, rLocalName); } -Reference<XInterface> XMLTextMarkImportContext::CreateAndInsertMark( +Reference<XTextContent> XMLTextMarkImportContext::CreateAndInsertMark( SvXMLImport& rImport, const OUString& sServiceName, const OUString& sMarkName, @@ -337,9 +362,6 @@ Reference<XInterface> XMLTextMarkImportContext::CreateAndInsertMark( } } - // xml:id for RDF metadata - rImport.SetXmlId(xIfc, i_rXmlId); - // cast to XTextContent and attach to document const Reference<XTextContent> xTextContent(xIfc, UNO_QUERY); if (xTextContent.is()) @@ -350,6 +372,11 @@ Reference<XInterface> XMLTextMarkImportContext::CreateAndInsertMark( // collapsing of the given XTextRange. rImport.GetTextImport()->GetText()->insertTextContent(rRange, xTextContent, sal_True); + + // xml:id for RDF metadata -- after insertion! + rImport.SetXmlId(xIfc, i_rXmlId); + + return xTextContent; } catch (com::sun::star::lang::IllegalArgumentException &) { @@ -358,44 +385,60 @@ Reference<XInterface> XMLTextMarkImportContext::CreateAndInsertMark( } } } - return xIfc; + return 0; } sal_Bool XMLTextMarkImportContext::FindName( SvXMLImport& rImport, - const Reference<XAttributeList> & xAttrList, - OUString& sName, - OUString& o_rXmlId, - ::rtl::OUString *pFieldName) + const Reference<XAttributeList> & xAttrList) { sal_Bool bNameOK = sal_False; // find name attribute first - sal_Int16 nLength = xAttrList->getLength(); + const sal_Int16 nLength = xAttrList->getLength(); for(sal_Int16 nAttr = 0; nAttr < nLength; nAttr++) { OUString sLocalName; - sal_uInt16 nPrefix = rImport.GetNamespaceMap(). + const sal_uInt16 nPrefix = rImport.GetNamespaceMap(). GetKeyByAttrName( xAttrList->getNameByIndex(nAttr), &sLocalName ); if ( (XML_NAMESPACE_TEXT == nPrefix) && IsXMLToken(sLocalName, XML_NAME) ) { - sName = xAttrList->getValueByIndex(nAttr); + m_sBookmarkName = xAttrList->getValueByIndex(nAttr); bNameOK = sal_True; } else if ( (XML_NAMESPACE_XML == nPrefix) && IsXMLToken(sLocalName, XML_ID) ) { - o_rXmlId = xAttrList->getValueByIndex(nAttr); + m_sXmlId = xAttrList->getValueByIndex(nAttr); + } + else if ( XML_NAMESPACE_XHTML == nPrefix ) + { + // RDFa + if ( IsXMLToken( sLocalName, XML_ABOUT) ) + { + m_sAbout = xAttrList->getValueByIndex(nAttr); + m_bHaveAbout = true; + } + else if ( IsXMLToken( sLocalName, XML_PROPERTY) ) + { + m_sProperty = xAttrList->getValueByIndex(nAttr); + } + else if ( IsXMLToken( sLocalName, XML_CONTENT) ) + { + m_sContent = xAttrList->getValueByIndex(nAttr); + } + else if ( IsXMLToken( sLocalName, XML_DATATYPE) ) + { + m_sDatatype = xAttrList->getValueByIndex(nAttr); + } } -//FIXME: RDFa (text:bookmark-start) - else if ( pFieldName!=NULL && - (XML_NAMESPACE_FIELD == nPrefix) && + else if ( (XML_NAMESPACE_FIELD == nPrefix) && IsXMLToken(sLocalName, XML_TYPE) ) { - *pFieldName = xAttrList->getValueByIndex(nAttr); + m_sFieldName = xAttrList->getValueByIndex(nAttr); } } diff --git a/xmloff/source/text/XMLTextMarkImportContext.hxx b/xmloff/source/text/XMLTextMarkImportContext.hxx index 4491524e9ec2..0269a3b4622d 100644 --- a/xmloff/source/text/XMLTextMarkImportContext.hxx +++ b/xmloff/source/text/XMLTextMarkImportContext.hxx @@ -39,6 +39,7 @@ namespace com { namespace sun { namespace star { namespace text { class XTextRange; + class XTextContent; } namespace xml { namespace sax { class XAttributeList; @@ -75,10 +76,16 @@ public: class XMLTextMarkImportContext : public SvXMLImportContext { - XMLTextImportHelper& rHelper; - ::rtl::OUString m_XmlId; - ::rtl::OUString sBookmarkName; - ::rtl::OUString sFieldName; + XMLTextImportHelper & m_rHelper; + ::rtl::OUString m_sBookmarkName; + ::rtl::OUString m_sFieldName; + ::rtl::OUString m_sXmlId; + // RDFa + bool m_bHaveAbout; + ::rtl::OUString m_sAbout; + ::rtl::OUString m_sProperty; + ::rtl::OUString m_sContent; + ::rtl::OUString m_sDatatype; public: @@ -90,7 +97,6 @@ public: sal_uInt16 nPrfx, const ::rtl::OUString& rLocalName ); - protected: virtual void StartElement( @@ -103,7 +109,8 @@ protected: const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList ); public: - static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > CreateAndInsertMark( + static ::com::sun::star::uno::Reference< + ::com::sun::star::text::XTextContent > CreateAndInsertMark( SvXMLImport& rImport, const ::rtl::OUString& sServiceName, const ::rtl::OUString& sMarkName, @@ -111,13 +118,10 @@ public: ::com::sun::star::text::XTextRange> & rRange, const ::rtl::OUString& i_rXmlId = ::rtl::OUString()); - static sal_Bool FindName( + sal_Bool FindName( SvXMLImport& rImport, const ::com::sun::star::uno::Reference< - ::com::sun::star::xml::sax::XAttributeList> & xAttrList, - ::rtl::OUString& sName, - ::rtl::OUString& o_rXmlId, - ::rtl::OUString *pFieldName=NULL); + ::com::sun::star::xml::sax::XAttributeList> & xAttrList); }; #endif diff --git a/xmloff/source/text/txtflde.cxx b/xmloff/source/text/txtflde.cxx index 873a4a42f02c..198938fdc8f6 100644 --- a/xmloff/source/text/txtflde.cxx +++ b/xmloff/source/text/txtflde.cxx @@ -148,7 +148,7 @@ static sal_Char __READONLY_DATA FIELD_SERVICE_BIBLIOGRAPHY[] = "Bibliography"; static sal_Char __READONLY_DATA FIELD_SERVICE_SCRIPT[] = "Script"; static sal_Char __READONLY_DATA FIELD_SERVICE_ANNOTATION[] = "Annotation"; static sal_Char __READONLY_DATA FIELD_SERVICE_COMBINED_CHARACTERS[] = "CombinedCharacters"; -static sal_Char __READONLY_DATA FIELD_SERVICE_META[] = "MetaField"; +static sal_Char __READONLY_DATA FIELD_SERVICE_META[] = "MetadataField"; static sal_Char __READONLY_DATA FIELD_SERVICE_MEASURE[] = "Measure"; static sal_Char __READONLY_DATA FIELD_SERVICE_TABLE_FORMULA[] = "TableFormula"; static sal_Char __READONLY_DATA FIELD_SERVICE_DROP_DOWN[] = "DropDown"; @@ -263,7 +263,7 @@ XMLTextFieldExport::XMLTextFieldExport( SvXMLExport& rExp, XMLPropertyState* pCombinedCharState) : rExport(rExp), pUsedMasters(NULL), - sServicePrefix(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextField.")), + sServicePrefix(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.textfield.")), sFieldMasterPrefix(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.FieldMaster.")), sPresentationServicePrefix(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.TextField.")), @@ -645,7 +645,7 @@ sal_Bool XMLTextFieldExport::IsStringField( return !bRet; } - case FIELD_ID_META://FIXME ?????? no idea... + case FIELD_ID_META: return 0 > GetIntProperty(sPropertyNumberFormat, xPropSet); case FIELD_ID_DATABASE_DISPLAY: @@ -740,7 +740,8 @@ sal_Bool XMLTextFieldExport::IsStringField( /// export the styles needed by the given field. Called on first pass /// through document void XMLTextFieldExport::ExportFieldAutoStyle( - const Reference<XTextField> & rTextField, sal_Bool bProgress ) + const Reference<XTextField> & rTextField, const sal_Bool bProgress, + const sal_Bool bRecursive ) { // get property set Reference<XPropertySet> xPropSet(rTextField, UNO_QUERY); @@ -835,7 +836,10 @@ void XMLTextFieldExport::ExportFieldAutoStyle( case FIELD_ID_META: // recurse into content (does not export element, so can be done first) - ExportMetaField(xPropSet, true, bProgress); + if (bRecursive) + { + ExportMetaField(xPropSet, true, bProgress); + } // fall-through: for the meta-field itself! case FIELD_ID_DOCINFO_PRINT_TIME: case FIELD_ID_DOCINFO_PRINT_DATE: @@ -2263,7 +2267,6 @@ void XMLTextFieldExport::ExportMacro( GetExport().Characters(rContent); } -// FIXME: this is untested void XMLTextFieldExport::ExportMetaField( const Reference<XPropertySet> & i_xMeta, bool i_bAutoStyles, sal_Bool i_bProgress ) diff --git a/xmloff/source/text/txtparae.cxx b/xmloff/source/text/txtparae.cxx index 6a3b66ec58ee..2c160eabd334 100644 --- a/xmloff/source/text/txtparae.cxx +++ b/xmloff/source/text/txtparae.cxx @@ -1461,8 +1461,8 @@ bool XMLTextParagraphExport::collectTextAutoStylesOptimized( sal_Bool bIsProgres { Any aAny = xTextFieldsEnum->nextElement(); Reference< XTextField > xTextField = *(Reference<XTextField>*)aAny.getValue(); - exportTextField( xTextField->getAnchor(), bAutoStyles, - bIsProgress ); + exportTextField( xTextField, bAutoStyles, bIsProgress, + !xAutoStylesSupp.is() ); try { Reference < XPropertySet > xSet( xTextField, UNO_QUERY ); @@ -1470,8 +1470,11 @@ bool XMLTextParagraphExport::collectTextAutoStylesOptimized( sal_Bool bIsProgres Any a = xSet->getPropertyValue( ::rtl::OUString::createFromAscii("TextRange") ); a >>= xText; if ( xText.is() ) + { exportText( xText, sal_True, bIsProgress, bExportContent ); - GetExport().GetTextParagraphExport()->collectTextAutoStyles( xText ); + GetExport().GetTextParagraphExport() + ->collectTextAutoStyles( xText ); + } } catch (Exception&) { @@ -2145,7 +2148,7 @@ void XMLTextParagraphExport::exportTextRangeEnumeration( sal_Bool bAutoStyles, sal_Bool bIsProgress, sal_Bool bPrvChrIsSpc ) { - static OUString sMeta(RTL_CONSTASCII_USTRINGPARAM("Meta")); // FIXME + static OUString sMeta(RTL_CONSTASCII_USTRINGPARAM("InContentMetadata")); sal_Bool bPrevCharIsSpace = bPrvChrIsSpc; while( rTextEnum->hasMoreElements() ) @@ -2305,7 +2308,8 @@ void XMLTextParagraphExport::exportTextRangeEnumeration( } } - DBG_ASSERT( !bOpenRuby, "Red Alert: Ruby still open!" ); +// now that there are nested enumerations for meta(-field), this may be valid! +// DBG_ASSERT( !bOpenRuby, "Red Alert: Ruby still open!" ); } void XMLTextParagraphExport::exportTable( @@ -2326,21 +2330,29 @@ void XMLTextParagraphExport::exportTextField( DBG_ASSERT( xTxtFld.is(), "text field missing" ); if( xTxtFld.is() ) { - if( bAutoStyles ) - { - pFieldExport->ExportFieldAutoStyle( xTxtFld, bIsProgress ); - } - else - { - pFieldExport->ExportField( xTxtFld, bIsProgress ); - } + exportTextField(xTxtFld, bAutoStyles, bIsProgress, sal_True); } else { // write only characters GetExport().Characters(rTextRange->getString()); } + } +} +void XMLTextParagraphExport::exportTextField( + const Reference < XTextField > & xTextField, + const sal_Bool bAutoStyles, const sal_Bool bIsProgress, + const sal_Bool bRecursive ) +{ + if ( bAutoStyles ) + { + pFieldExport->ExportFieldAutoStyle( xTextField, bIsProgress, + bRecursive ); + } + else + { + pFieldExport->ExportField( xTextField, bIsProgress ); } } @@ -2385,9 +2397,12 @@ void XMLTextParagraphExport::exportTextMark( nElement = *(sal_Bool *)rPropSet->getPropertyValue(sIsStart).getValue() ? 1 : 2; } - // bookmark, bookmark-start: xml:id for RDF metadata + // bookmark, bookmark-start: xml:id and RDFa for RDF metadata if( nElement < 2 ) { GetExport().AddAttributeXmlId(xName); + const uno::Reference<text::XTextContent> xTextContent( + xName, uno::UNO_QUERY_THROW); + GetExport().AddAttributesRDFa(xTextContent); } // export element @@ -3664,11 +3679,12 @@ void XMLTextParagraphExport::exportRuby( } } -// FIXME: this is untested void XMLTextParagraphExport::exportMeta( - const Reference<XPropertySet> & i_xMeta, + const Reference<XPropertySet> & i_xPortion, sal_Bool i_bAutoStyles, sal_Bool i_isProgress) { + static OUString sMeta(RTL_CONSTASCII_USTRINGPARAM("InContentMetadata")); + bool doExport(!i_bAutoStyles); // do not export element if autostyles // check version >= 1.2 switch (GetExport().getDefaultVersion()) { @@ -3677,13 +3693,14 @@ void XMLTextParagraphExport::exportMeta( default: break; } - const Reference < XEnumerationAccess > xEA( i_xMeta, UNO_QUERY_THROW ); - const Reference < XEnumeration > xTextEnum( xEA->createEnumeration() ); + const Reference< XTextContent > xTextContent( + i_xPortion->getPropertyValue(sMeta), UNO_QUERY_THROW); + const Reference< XEnumerationAccess > xEA( xTextContent, UNO_QUERY_THROW ); + const Reference< XEnumeration > xTextEnum( xEA->createEnumeration() ); if (doExport) { - const Reference<rdf::XMetadatable> xMeta( i_xMeta, UNO_QUERY_THROW ); - const Reference<XTextContent> xTextContent( i_xMeta, UNO_QUERY_THROW ); + const Reference<rdf::XMetadatable> xMeta(xTextContent, UNO_QUERY_THROW); // text:meta with neither xml:id nor RDFa is invalid xMeta->ensureMetadataReference(); diff --git a/xmloff/source/text/txtparai.cxx b/xmloff/source/text/txtparai.cxx index 6fb213f43642..dda2c3d49030 100644 --- a/xmloff/source/text/txtparai.cxx +++ b/xmloff/source/text/txtparai.cxx @@ -190,6 +190,11 @@ public: const OUString& rLocalName, XMLHints_Impl& rHnts, const Reference<xml::sax::XAttributeList> & xAttrList); + + static sal_Bool FindName( + SvXMLImport& rImport, + const Reference<xml::sax::XAttributeList> & xAttrList, + OUString& rName); }; TYPEINIT1( XMLStartReferenceContext_Impl, SvXMLImportContext ); @@ -203,11 +208,8 @@ XMLStartReferenceContext_Impl::XMLStartReferenceContext_Impl( SvXMLImportContext(rImport, nPrefix, rLocalName) { OUString sName; - OUString dummy; - // borrow FindName from XMLTextMarkImportContext, where bookmarks - // and point references are handled. - if (XMLTextMarkImportContext::FindName(GetImport(), xAttrList, sName, dummy)) + if (FindName(GetImport(), xAttrList, sName)) { XMLHint_Impl* pHint = new XMLReferenceHint_Impl( sName, rImport.GetTextImport()->GetCursor()->getStart() ); @@ -219,6 +221,33 @@ XMLStartReferenceContext_Impl::XMLStartReferenceContext_Impl( } } +sal_Bool XMLStartReferenceContext_Impl::FindName( + SvXMLImport& rImport, + const Reference<xml::sax::XAttributeList> & xAttrList, + OUString& rName) +{ + sal_Bool bNameOK( sal_False ); + + // find name attribute first + const sal_Int16 nLength( xAttrList->getLength() ); + for (sal_Int16 nAttr = 0; nAttr < nLength; nAttr++) + { + OUString sLocalName; + const sal_uInt16 nPrefix = rImport.GetNamespaceMap(). + GetKeyByAttrName( xAttrList->getNameByIndex(nAttr), + &sLocalName ); + + if ( (XML_NAMESPACE_TEXT == nPrefix) && + IsXMLToken(sLocalName, XML_NAME) ) + { + rName = xAttrList->getValueByIndex(nAttr); + bNameOK = sal_True; + } + } + + return bNameOK; +} + // --------------------------------------------------------------------- /** import end of reference (<text:reference-end>) */ @@ -247,10 +276,9 @@ XMLEndReferenceContext_Impl::XMLEndReferenceContext_Impl( SvXMLImportContext(rImport, nPrefix, rLocalName) { OUString sName; - OUString dummy; - // borrow from XMLTextMarkImportContext - if (XMLTextMarkImportContext::FindName(GetImport(), xAttrList, sName, dummy)) + // borrow from XMLStartReferenceContext_Impl + if (XMLStartReferenceContext_Impl::FindName(GetImport(), xAttrList, sName)) { // search for reference start sal_uInt16 nCount = rHints.Count(); @@ -511,9 +539,44 @@ void XMLImpRubyBaseContext_Impl::Characters( const OUString& rChars ) // --------------------------------------------------------------------- +class XMLImpRubyContext_Impl : public SvXMLImportContext +{ + XMLHints_Impl& rHints; + + sal_Bool& rIgnoreLeadingSpace; + + Reference < XTextRange > m_xStart; + OUString m_sStyleName; + OUString m_sTextStyleName; + OUString m_sText; + +public: + + TYPEINFO(); + + XMLImpRubyContext_Impl( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const OUString& rLName, + const Reference< xml::sax::XAttributeList > & xAttrList, + XMLHints_Impl& rHnts, + sal_Bool& rIgnLeadSpace ); + + virtual ~XMLImpRubyContext_Impl(); + + virtual SvXMLImportContext *CreateChildContext( + sal_uInt16 nPrefix, const OUString& rLocalName, + const Reference< xml::sax::XAttributeList > & xAttrList ); + + void SetTextStyleName( const OUString& s ) { m_sTextStyleName = s; } + void AppendText( const OUString& s ) { m_sText += s; } +}; + +// --------------------------------------------------------------------- + class XMLImpRubyTextContext_Impl : public SvXMLImportContext { - XMLRubyHint_Impl *pHint; + XMLImpRubyContext_Impl & m_rRubyContext; public: @@ -524,7 +587,7 @@ public: sal_uInt16 nPrfx, const OUString& rLName, const Reference< xml::sax::XAttributeList > & xAttrList, - XMLRubyHint_Impl *pHint ); + XMLImpRubyContext_Impl & rParent ); virtual ~XMLImpRubyTextContext_Impl(); @@ -538,9 +601,9 @@ XMLImpRubyTextContext_Impl::XMLImpRubyTextContext_Impl( sal_uInt16 nPrfx, const OUString& rLName, const Reference< xml::sax::XAttributeList > & xAttrList, - XMLRubyHint_Impl *pHt ) : - SvXMLImportContext( rImport, nPrfx, rLName ), - pHint( pHt ) + XMLImpRubyContext_Impl & rParent ) + : SvXMLImportContext( rImport, nPrfx, rLName ) + , m_rRubyContext( rParent ) { sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; for( sal_Int16 i=0; i < nAttrCount; i++ ) @@ -555,7 +618,7 @@ XMLImpRubyTextContext_Impl::XMLImpRubyTextContext_Impl( if( XML_NAMESPACE_TEXT == nPrefix && IsXMLToken( aLocalName, XML_STYLE_NAME ) ) { - pHint->SetTextStyleName( rValue ); + m_rRubyContext.SetTextStyleName( rValue ); break; } } @@ -567,37 +630,11 @@ XMLImpRubyTextContext_Impl::~XMLImpRubyTextContext_Impl() void XMLImpRubyTextContext_Impl::Characters( const OUString& rChars ) { - pHint->AppendText( rChars ); + m_rRubyContext.AppendText( rChars ); } // --------------------------------------------------------------------- -class XMLImpRubyContext_Impl : public SvXMLImportContext -{ - XMLHints_Impl& rHints; - XMLRubyHint_Impl *pHint; - - sal_Bool& rIgnoreLeadingSpace; - -public: - - TYPEINFO(); - - XMLImpRubyContext_Impl( - SvXMLImport& rImport, - sal_uInt16 nPrfx, - const OUString& rLName, - const Reference< xml::sax::XAttributeList > & xAttrList, - XMLHints_Impl& rHnts, - sal_Bool& rIgnLeadSpace ); - - virtual ~XMLImpRubyContext_Impl(); - - virtual SvXMLImportContext *CreateChildContext( - sal_uInt16 nPrefix, const OUString& rLocalName, - const Reference< xml::sax::XAttributeList > & xAttrList ); -}; - TYPEINIT1( XMLImpRubyContext_Impl, SvXMLImportContext ); XMLImpRubyContext_Impl::XMLImpRubyContext_Impl( @@ -609,9 +646,8 @@ XMLImpRubyContext_Impl::XMLImpRubyContext_Impl( sal_Bool& rIgnLeadSpace ) : SvXMLImportContext( rImport, nPrfx, rLName ), rHints( rHnts ), - pHint( new XMLRubyHint_Impl( - GetImport().GetTextImport()->GetCursorAsRange()->getStart() ) ), rIgnoreLeadingSpace( rIgnLeadSpace ) + , m_xStart( GetImport().GetTextImport()->GetCursorAsRange()->getStart() ) { sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; for( sal_Int16 i=0; i < nAttrCount; i++ ) @@ -626,18 +662,22 @@ XMLImpRubyContext_Impl::XMLImpRubyContext_Impl( if( XML_NAMESPACE_TEXT == nPrefix && IsXMLToken( aLocalName, XML_STYLE_NAME ) ) { - pHint->SetStyleName( rValue ); + m_sStyleName = rValue; break; } } - rHints.Insert( pHint, rHints.Count() ); } XMLImpRubyContext_Impl::~XMLImpRubyContext_Impl() { - if( pHint ) - pHint->SetEnd( GetImport().GetTextImport() - ->GetCursorAsRange()->getStart() ); + const UniReference < XMLTextImportHelper > xTextImport( + GetImport().GetTextImport()); + const Reference < XTextCursor > xAttrCursor( + xTextImport->GetText()->createTextCursorByRange( m_xStart )); + xAttrCursor->gotoRange(xTextImport->GetCursorAsRange()->getStart(), + sal_True); + xTextImport->SetRuby( GetImport(), xAttrCursor, + m_sStyleName, m_sTextStyleName, m_sText ); } SvXMLImportContext *XMLImpRubyContext_Impl::CreateChildContext( @@ -657,7 +697,7 @@ SvXMLImportContext *XMLImpRubyContext_Impl::CreateChildContext( pContext = new XMLImpRubyTextContext_Impl( GetImport(), nPrefix, rLocalName, xAttrList, - pHint ); + *this ); else pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName ); @@ -672,7 +712,6 @@ SvXMLImportContext *XMLImpRubyContext_Impl::CreateChildContext( // --------------------------------------------------------------------- /** for text:meta and text:meta-field -//FIXME not tested */ class XMLMetaImportContextBase : public SvXMLImportContext { @@ -691,19 +730,21 @@ public: XMLMetaImportContextBase( SvXMLImport& i_rImport, - sal_uInt16 i_nPrefix, + const sal_uInt16 i_nPrefix, const OUString& i_rLocalName, - const Reference< xml::sax::XAttributeList > & i_xAttrList, XMLHints_Impl& i_rHints, sal_Bool & i_rIgnoreLeadingSpace ); virtual ~XMLMetaImportContextBase(); + virtual void StartElement( + const Reference<xml::sax::XAttributeList> & i_xAttrList); + virtual void EndElement(); virtual SvXMLImportContext *CreateChildContext( sal_uInt16 i_nPrefix, const OUString& i_rLocalName, - const Reference< xml::sax::XAttributeList > & i_xAttrList ); + const Reference< xml::sax::XAttributeList > & i_xAttrList); virtual void Characters( const OUString& i_rChars ); @@ -718,33 +759,36 @@ TYPEINIT1( XMLMetaImportContextBase, SvXMLImportContext ); XMLMetaImportContextBase::XMLMetaImportContextBase( SvXMLImport& i_rImport, - sal_uInt16 i_nPrefix, + const sal_uInt16 i_nPrefix, const OUString& i_rLocalName, - const Reference< xml::sax::XAttributeList > & i_xAttrList, XMLHints_Impl& i_rHints, sal_Bool & i_rIgnoreLeadingSpace ) : SvXMLImportContext( i_rImport, i_nPrefix, i_rLocalName ) , m_rHints( i_rHints ) , m_rIgnoreLeadingSpace( i_rIgnoreLeadingSpace ) - , m_xStart() + , m_xStart( GetImport().GetTextImport()->GetCursorAsRange()->getStart() ) +{ +} + +XMLMetaImportContextBase::~XMLMetaImportContextBase() +{ +} + +void XMLMetaImportContextBase::StartElement( + const Reference<xml::sax::XAttributeList> & i_xAttrList) { const sal_Int16 nAttrCount(i_xAttrList.is() ? i_xAttrList->getLength() : 0); - for ( sal_Int16 i=0; i < nAttrCount; i++ ) + for ( sal_Int16 i = 0; i < nAttrCount; ++i ) { const OUString& rAttrName( i_xAttrList->getNameByIndex( i ) ); const OUString& rValue( i_xAttrList->getValueByIndex( i ) ); OUString sLocalName; - sal_uInt16 nPrefix = + const sal_uInt16 nPrefix( GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, - &sLocalName ); + &sLocalName )); ProcessAttribute(nPrefix, sLocalName, rValue); } - m_xStart = GetImport().GetTextImport()->GetCursorAsRange()->getStart(); -} - -XMLMetaImportContextBase::~XMLMetaImportContextBase() -{ } void XMLMetaImportContextBase::EndElement() @@ -764,41 +808,15 @@ void XMLMetaImportContextBase::EndElement() const Reference<XTextRange> xInsertionRange(xInsertionCursor, UNO_QUERY); InsertMeta(xInsertionRange); -//FIXME -#if 0 - Reference<XMultiServiceFactory> xFactory(rImport.GetModel(), UNO_QUERY); - if ( xFactory.is() ) - { - Reference<XInterface> xIfc = xFactory->createInstance(sServiceName); - - // xml:id for RDF metadata - rImport.SetXmlId(xIfc, i_rXmlId); - - // cast to XTextContent and attach to document - Reference<XTextContent> xTextContent(xIfc, UNO_QUERY); - if (xTextContent.is()) - { - try - { - rImport.GetTextImport()->GetText()->insertTextContent( - xInsertionRange, xTextContent, sal_True); - } - catch (com::sun::star::lang::IllegalArgumentException &) - { - OSL_ENSURE(false, "XMLMetaImportContext::EndElement: iae"); - } - } - } -#endif } SvXMLImportContext * XMLMetaImportContextBase::CreateChildContext( sal_uInt16 i_nPrefix, const OUString& i_rLocalName, const Reference< xml::sax::XAttributeList > & i_xAttrList ) { - const SvXMLTokenMap& rTokenMap = - GetImport().GetTextImport()->GetTextPElemTokenMap(); - sal_uInt16 nToken = rTokenMap.Get( i_nPrefix, i_rLocalName ); + const SvXMLTokenMap& rTokenMap( + GetImport().GetTextImport()->GetTextPElemTokenMap() ); + const sal_uInt16 nToken( rTokenMap.Get( i_nPrefix, i_rLocalName ) ); return XMLImpSpanContext_Impl::CreateChildContext( GetImport(), i_nPrefix, i_rLocalName, i_xAttrList, nToken, m_rHints, m_rIgnoreLeadingSpace ); @@ -812,8 +830,7 @@ void XMLMetaImportContextBase::Characters( const OUString& i_rChars ) void XMLMetaImportContextBase::ProcessAttribute(sal_uInt16 const i_nPrefix, OUString const & i_rLocalName, OUString const & i_rValue) { - if ( (XML_NAMESPACE_XML == i_nPrefix) && - IsXMLToken(i_rLocalName, XML_ID) ) + if ( (XML_NAMESPACE_XML == i_nPrefix) && IsXMLToken(i_rLocalName, XML_ID) ) { m_XmlId = i_rValue; } @@ -822,9 +839,7 @@ void XMLMetaImportContextBase::ProcessAttribute(sal_uInt16 const i_nPrefix, // --------------------------------------------------------------------- -/** text:meta -//FIXME not tested - */ +/** text:meta */ class XMLMetaImportContext : public XMLMetaImportContextBase { // RDFa @@ -839,9 +854,8 @@ public: XMLMetaImportContext( SvXMLImport& i_rImport, - sal_uInt16 i_nPrefix, + const sal_uInt16 i_nPrefix, const OUString& i_rLocalName, - const Reference< xml::sax::XAttributeList > & i_xAttrList, XMLHints_Impl& i_rHints, sal_Bool & i_rIgnoreLeadingSpace ); @@ -855,13 +869,12 @@ TYPEINIT1( XMLMetaImportContext, XMLMetaImportContextBase ); XMLMetaImportContext::XMLMetaImportContext( SvXMLImport& i_rImport, - sal_uInt16 i_nPrefix, + const sal_uInt16 i_nPrefix, const OUString& i_rLocalName, - const Reference< xml::sax::XAttributeList > & i_xAttrList, XMLHints_Impl& i_rHints, sal_Bool & i_rIgnoreLeadingSpace ) : XMLMetaImportContextBase( i_rImport, i_nPrefix, i_rLocalName, - i_xAttrList, i_rHints, i_rIgnoreLeadingSpace ) + i_rHints, i_rIgnoreLeadingSpace ) , m_bHaveAbout(false) { } @@ -929,9 +942,7 @@ void XMLMetaImportContext::InsertMeta( // --------------------------------------------------------------------- -/** text:meta-field -//FIXME not tested - */ +/** text:meta-field */ class XMLMetaFieldImportContext : public XMLMetaImportContextBase { OUString m_DataStyleName; @@ -941,9 +952,8 @@ public: XMLMetaFieldImportContext( SvXMLImport& i_rImport, - sal_uInt16 i_nPrefix, + const sal_uInt16 i_nPrefix, const OUString& i_rLocalName, - const Reference< xml::sax::XAttributeList > & i_xAttrList, XMLHints_Impl& i_rHints, sal_Bool & i_rIgnoreLeadingSpace ); @@ -957,21 +967,20 @@ TYPEINIT1( XMLMetaFieldImportContext, XMLMetaImportContextBase ); XMLMetaFieldImportContext::XMLMetaFieldImportContext( SvXMLImport& i_rImport, - sal_uInt16 i_nPrefix, + const sal_uInt16 i_nPrefix, const OUString& i_rLocalName, - const Reference< xml::sax::XAttributeList > & i_xAttrList, XMLHints_Impl& i_rHints, sal_Bool & i_rIgnoreLeadingSpace ) : XMLMetaImportContextBase( i_rImport, i_nPrefix, i_rLocalName, - i_xAttrList, i_rHints, i_rIgnoreLeadingSpace ) + i_rHints, i_rIgnoreLeadingSpace ) { } void XMLMetaFieldImportContext::ProcessAttribute(sal_uInt16 const i_nPrefix, OUString const & i_rLocalName, OUString const & i_rValue) { - if( XML_NAMESPACE_STYLE == i_nPrefix && - IsXMLToken( i_rLocalName, XML_DATA_STYLE_NAME ) ) + if ( XML_NAMESPACE_STYLE == i_nPrefix && + IsXMLToken( i_rLocalName, XML_DATA_STYLE_NAME ) ) { m_DataStyleName = i_rValue; } @@ -1811,18 +1820,15 @@ SvXMLImportContext *XMLImpSpanContext_Impl::CreateChildContext( sal_False); break; -// FIXME: should test before enabling... -#if 0 case XML_TOK_TEXT_META: pContext = new XMLMetaImportContext(rImport, nPrefix, rLocalName, - xAttrList, rHints, rIgnoreLeadingSpace ); + rHints, rIgnoreLeadingSpace ); break; case XML_TOK_TEXT_META_FIELD: pContext = new XMLMetaFieldImportContext(rImport, nPrefix, rLocalName, - xAttrList, rHints, rIgnoreLeadingSpace ); + rHints, rIgnoreLeadingSpace ); break; -#endif default: // none of the above? then it's probably a text field! @@ -2190,17 +2196,6 @@ XMLParaContext::~XMLParaContext() pHHint->GetEventsContext() ); } break; - case XML_HINT_RUBY: - { - const XMLRubyHint_Impl *pRHint = - (const XMLRubyHint_Impl *)pHint; - xTxtImport->SetRuby( GetImport(), - xAttrCursor, - pRHint->GetStyleName(), - pRHint->GetTextStyleName(), - pRHint->GetText() ); - } - break; case XML_HINT_INDEX_MARK: { Reference<beans::XPropertySet> xMark( @@ -2341,7 +2336,6 @@ XMLNumberedParaContext::XMLNumberedParaContext( m_xNumRules() { ::rtl::OUString StyleName; - bool ContinuteNumbering(false); const SvXMLTokenMap& rTokenMap( i_rImport.GetTextImport()->GetTextNumberedParagraphAttrTokenMap() ); @@ -2378,8 +2372,8 @@ XMLNumberedParaContext::XMLNumberedParaContext( StyleName = rValue; break; case XML_TOK_TEXT_NUMBERED_PARAGRAPH_CONTINUE_NUMBERING: - ContinuteNumbering = IsXMLToken(rValue, XML_TRUE); -// ??? what in Fred's name is this supposed to do? + // this attribute is deprecated +// ContinuteNumbering = IsXMLToken(rValue, XML_TRUE); break; case XML_TOK_TEXT_NUMBERED_PARAGRAPH_START_VALUE: { diff --git a/xmloff/source/text/txtparaimphint.hxx b/xmloff/source/text/txtparaimphint.hxx index 2012764e38b7..f3c8da0bcf03 100644 --- a/xmloff/source/text/txtparaimphint.hxx +++ b/xmloff/source/text/txtparaimphint.hxx @@ -49,7 +49,6 @@ using namespace ::xmloff::token; #define XML_HINT_STYLE 1 #define XML_HINT_REFERENCE 2 #define XML_HINT_HYPERLINK 3 -#define XML_HINT_RUBY 4 #define XML_HINT_INDEX_MARK 5 #define XML_HINT_TEXT_FRAME 6 // --> DVO, OD 2004-07-14 #i26791# @@ -209,28 +208,6 @@ public: const OUString& GetID() const { return sID; } }; -class XMLRubyHint_Impl : public XMLHint_Impl -{ - OUString sStyleName; - OUString sTextStyleName; - OUString sText; - -public: - - XMLRubyHint_Impl( const Reference < XTextRange > & rPos ) : - XMLHint_Impl( XML_HINT_RUBY, rPos, rPos ) - { - } - - virtual ~XMLRubyHint_Impl() {} - - void SetStyleName( const OUString& s ) { sStyleName = s; } - const OUString& GetStyleName() const { return sStyleName; } - void SetTextStyleName( const OUString& s ) { sTextStyleName = s; } - const OUString& GetTextStyleName() const { return sTextStyleName; } - void AppendText( const OUString& s ) { sText += s; } - const OUString& GetText() const { return sText; } -}; class XMLTextFrameHint_Impl : public XMLHint_Impl { |