sw/source/filter/ww8/docxexport.cxx | 3 --- sw/source/filter/ww8/wrtw8nds.cxx | 28 ++++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 7 deletions(-)
New commits: commit e0e0109f01929024f7dd60a97616bb3b25de3b92 Author: Michael Stahl <michael.st...@cib.de> AuthorDate: Mon Oct 14 19:15:52 2019 +0200 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Wed Oct 23 13:03:36 2019 +0200 sw: WW8/RTF/DOCX export: only export actual bookmarks as bookmarks Don't export all the other cruft that happens to be represented as some IMark derived type in Writer in MSWordExportBase::GetBookmarks(). Change-Id: I4fc05e84b9fc80bb2186899c58bf140dd3779f83 Reviewed-on: https://gerrit.libreoffice.org/80915 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@cib.de> diff --git a/sw/source/filter/ww8/docxexport.cxx b/sw/source/filter/ww8/docxexport.cxx index 91a962490314..0185e98b5f0a 100644 --- a/sw/source/filter/ww8/docxexport.cxx +++ b/sw/source/filter/ww8/docxexport.cxx @@ -162,9 +162,6 @@ void DocxExport::AppendBookmarks( const SwTextNode& rNode, sal_Int32 nCurrentPos const sal_Int32 nStart = pMark->GetMarkStart().nContent.GetIndex(); const sal_Int32 nEnd = pMark->GetMarkEnd().nContent.GetIndex(); - if (dynamic_cast<sw::mark::IDateFieldmark*>(pMark)) - continue; - if ( nStart == nCurrentPos ) aStarts.push_back( pMark->GetName() ); diff --git a/sw/source/filter/ww8/wrtw8nds.cxx b/sw/source/filter/ww8/wrtw8nds.cxx index 08e29ddb1a8f..4ad6d3a721ec 100644 --- a/sw/source/filter/ww8/wrtw8nds.cxx +++ b/sw/source/filter/ww8/wrtw8nds.cxx @@ -249,7 +249,15 @@ static sal_Int32 lcl_getMinPos( sal_Int32 pos1, sal_Int32 pos2 ) sal_Int32 SwWW8AttrIter::SearchNext( sal_Int32 nStartPos ) { const OUString aText = rNd.GetText(); - sal_Int32 fieldEndPos = aText.indexOf(CH_TXT_ATR_FIELDEND, nStartPos); + sal_Int32 fieldEndPos = aText.indexOf(CH_TXT_ATR_FIELDEND, nStartPos - 1); + // HACK: for (so far) mysterious reasons the sdtContent element closes + // too late in testDateFormField() unless an empty run is exported at + // the end of the fieldmark; hence find *also* the position after the + // CH_TXT_ATR_FIELDEND here + if (0 <= fieldEndPos && fieldEndPos < nStartPos) + { + ++fieldEndPos; + } sal_Int32 fieldStartPos = aText.indexOf(CH_TXT_ATR_FIELDSTART, nStartPos); sal_Int32 formElementPos = aText.indexOf(CH_TXT_ATR_FORMELEMENT, nStartPos); @@ -1867,9 +1875,21 @@ bool MSWordExportBase::GetBookmarks( const SwTextNode& rNd, sal_Int32 nStt, { IMark* pMark = pMarkAccess->getAllMarksBegin()[i]; - if ( IDocumentMarkAccess::GetType( *pMark ) == IDocumentMarkAccess::MarkType::ANNOTATIONMARK ) - { - continue; + switch (IDocumentMarkAccess::GetType( *pMark )) + { + case IDocumentMarkAccess::MarkType::UNO_BOOKMARK: + case IDocumentMarkAccess::MarkType::DDE_BOOKMARK: + case IDocumentMarkAccess::MarkType::ANNOTATIONMARK: + case IDocumentMarkAccess::MarkType::TEXT_FIELDMARK: + case IDocumentMarkAccess::MarkType::CHECKBOX_FIELDMARK: + case IDocumentMarkAccess::MarkType::DROPDOWN_FIELDMARK: + case IDocumentMarkAccess::MarkType::DATE_FIELDMARK: + case IDocumentMarkAccess::MarkType::NAVIGATOR_REMINDER: + continue; // ignore irrelevant marks + case IDocumentMarkAccess::MarkType::BOOKMARK: + case IDocumentMarkAccess::MarkType::CROSSREF_HEADING_BOOKMARK: + case IDocumentMarkAccess::MarkType::CROSSREF_NUMITEM_BOOKMARK: + break; } // Only keep the bookmarks starting or ending in this node _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits