summaryrefslogtreecommitdiff
path: root/sw/source/filter/ww8/docxattributeoutput.cxx
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2023-07-31 15:08:58 +0300
committerMike Kaganski <mike.kaganski@collabora.com>2023-08-01 10:36:30 +0200
commit38feff6a04b2785b219fabe7172c857e97ef90ae (patch)
treefff4379f2092e52483eb2c7ae34ea8fbbe65e9d2 /sw/source/filter/ww8/docxattributeoutput.cxx
parenteff5a3fe98ca5d1d28c4f5386c4af8a3be8f5703 (diff)
tdf#156548: make truncated long bookmark name unique, and use it in hyperlinks
Change-Id: I156359339ff8be85fe90cb6612eafdc6030c851f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155092 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'sw/source/filter/ww8/docxattributeoutput.cxx')
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx32
1 files changed, 17 insertions, 15 deletions
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index c97000ca3e4b..ec55455d5d3c 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -2170,11 +2170,11 @@ void DocxAttributeOutput::EndRun(const SwTextNode* pNode, sal_Int32 nPos, sal_In
DoWriteBookmarkEndIfExist(nPos);
}
-void DocxAttributeOutput::DoWriteBookmarkTagStart(std::u16string_view bookmarkName)
+void DocxAttributeOutput::DoWriteBookmarkTagStart(const OUString& bookmarkName)
{
m_pSerializer->singleElementNS(XML_w, XML_bookmarkStart,
FSNS(XML_w, XML_id), OString::number(m_nNextBookmarkId),
- FSNS(XML_w, XML_name), BookmarkToWord(bookmarkName));
+ FSNS(XML_w, XML_name), GetExport().BookmarkToWord(bookmarkName));
}
void DocxAttributeOutput::DoWriteBookmarkTagEnd(sal_Int32 const nId)
@@ -2230,7 +2230,7 @@ void DocxAttributeOutput::DoWriteBookmarkStartIfExist(sal_Int32 nRunPos)
{
DoWriteBookmarkTagStart(aIter->second);
m_rOpenedBookmarksIds[aIter->second] = m_nNextBookmarkId;
- m_sLastOpenedBookmark = BookmarkToWord(aIter->second);
+ m_sLastOpenedBookmark = GetExport().BookmarkToWord(aIter->second);
m_nNextBookmarkId++;
}
}
@@ -2259,7 +2259,7 @@ void DocxAttributeOutput::DoWriteBookmarksStart(std::vector<OUString>& rStarts,
// Output the bookmark (including MoveBookmark of the tracked moving)
bool bMove = false;
bool bFrom = false;
- OUString sBookmarkName = BookmarkToWord(bookmarkName, &bMove, &bFrom);
+ OUString sBookmarkName = GetExport().BookmarkToWord(bookmarkName, &bMove, &bFrom);
if ( bMove )
{
// TODO: redline data of MoveBookmark is restored from the first redline of the bookmark
@@ -2291,7 +2291,7 @@ void DocxAttributeOutput::DoWriteBookmarksEnd(std::vector<OUString>& rEnds)
{
bool bMove = false;
bool bFrom = false;
- BookmarkToWord(bookmarkName, &bMove, &bFrom);
+ GetExport().BookmarkToWord(bookmarkName, &bMove, &bFrom);
// Output the bookmark (including MoveBookmark of the tracked moving)
if ( bMove )
DoWriteMoveRangeTagEnd(pPos->second, bFrom);
@@ -2319,12 +2319,12 @@ void DocxAttributeOutput::DoWritePermissionTagStart(std::u16string_view permissi
{
const std::size_t separatorIndex = permissionIdAndName.find(u':');
assert(separatorIndex != std::u16string_view::npos);
- const std::u16string_view permissionId = permissionIdAndName.substr(0, separatorIndex);
- const std::u16string_view permissionName = permissionIdAndName.substr(separatorIndex + 1);
+ const OUString permissionId(permissionIdAndName.substr(0, separatorIndex));
+ const OUString permissionName(permissionIdAndName.substr(separatorIndex + 1));
m_pSerializer->singleElementNS(XML_w, XML_permStart,
- FSNS(XML_w, XML_id), BookmarkToWord(permissionId),
- FSNS(XML_w, XML_edGrp), BookmarkToWord(permissionName));
+ FSNS(XML_w, XML_id), GetExport().BookmarkToWord(permissionId),
+ FSNS(XML_w, XML_edGrp), GetExport().BookmarkToWord(permissionName));
}
else
{
@@ -2333,12 +2333,12 @@ void DocxAttributeOutput::DoWritePermissionTagStart(std::u16string_view permissi
assert(ok); (void)ok;
const std::size_t separatorIndex = permissionIdAndName.find(u':');
assert(separatorIndex != std::u16string_view::npos);
- const std::u16string_view permissionId = permissionIdAndName.substr(0, separatorIndex);
- const std::u16string_view permissionName = permissionIdAndName.substr(separatorIndex + 1);
+ const OUString permissionId(permissionIdAndName.substr(0, separatorIndex));
+ const OUString permissionName(permissionIdAndName.substr(separatorIndex + 1));
m_pSerializer->singleElementNS(XML_w, XML_permStart,
- FSNS(XML_w, XML_id), BookmarkToWord(permissionId),
- FSNS(XML_w, XML_ed), BookmarkToWord(permissionName));
+ FSNS(XML_w, XML_id), GetExport().BookmarkToWord(permissionId),
+ FSNS(XML_w, XML_ed), GetExport().BookmarkToWord(permissionName));
}
}
@@ -2360,10 +2360,10 @@ void DocxAttributeOutput::DoWritePermissionTagEnd(std::u16string_view permission
const std::size_t separatorIndex = permissionIdAndName.find(u':');
assert(separatorIndex != std::u16string_view::npos);
- const std::u16string_view permissionId = permissionIdAndName.substr(0, separatorIndex);
+ const OUString permissionId(permissionIdAndName.substr(0, separatorIndex));
m_pSerializer->singleElementNS(XML_w, XML_permEnd,
- FSNS(XML_w, XML_id), BookmarkToWord(permissionId));
+ FSNS(XML_w, XML_id), GetExport().BookmarkToWord(permissionId));
}
/// Write the start permissions
@@ -3848,6 +3848,8 @@ void DocxAttributeOutput::EndRuby(const SwTextNode& rNode, sal_Int32 nPos)
bool DocxAttributeOutput::AnalyzeURL( const OUString& rUrl, const OUString& rTarget, OUString* pLinkURL, OUString* pMark )
{
bool bBookMarkOnly = AttributeOutputBase::AnalyzeURL( rUrl, rTarget, pLinkURL, pMark );
+ if (bBookMarkOnly)
+ *pMark = GetExport().BookmarkToWord(*pMark);
if (!pMark->isEmpty() && (bBookMarkOnly || rTarget.isEmpty()))
{