Kaydet (Commit) aa852c88 authored tarafından Justin Luth's avatar Justin Luth Kaydeden (comit) Miklos Vajna

fdo#68963 recognize __RefHeading__ bookmarks as TOC in .doc files

LibreOffice recognizes MS Office Table Of Contents, but LO files
saved as .doc didn't show the Cross-Refence heading - it was blank.
Now bookmarks using the LO naming convention are also imported
as TOC bookmarks from .doc files.

Testcase included.

Change-Id: Icae5c0de31856ccc75ede9a97c0ea046dd97325f
Reviewed-on: https://gerrit.libreoffice.org/14018Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.co.uk>
üst b4f6b26b
This diff was suppressed by a .gitattributes entry.
...@@ -516,6 +516,13 @@ DECLARE_WW8IMPORT_TEST(testLayoutHanging, "fdo68967.doc") ...@@ -516,6 +516,13 @@ DECLARE_WW8IMPORT_TEST(testLayoutHanging, "fdo68967.doc")
// This must not hang in layout // This must not hang in layout
} }
DECLARE_WW8IMPORT_TEST(testfdo68963, "fdo68963.doc")
{
// The problem was that the text was not displayed.
CPPUNIT_ASSERT ( OUString("") != parseDump("/root/page/body/tab/row[2]/cell[1]/txt/Special", "rText") );
CPPUNIT_ASSERT_EQUAL( OUString("Topic 1"), parseDump("/root/page/body/tab/row[2]/cell[1]/txt/Special", "rText") );
}
CPPUNIT_PLUGIN_IMPLEMENT(); CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -917,7 +917,7 @@ SwFltBookmark::SwFltBookmark( const OUString& rNa, const OUString& rVa, ...@@ -917,7 +917,7 @@ SwFltBookmark::SwFltBookmark( const OUString& rNa, const OUString& rVa,
// otherwise: Src Charset from argument for aName // otherwise: Src Charset from argument for aName
// Src Charset from filter for aVal ( Text ) // Src Charset from filter for aVal ( Text )
if ( IsTOCBookmark() ) if ( IsTOCBookmark() && ! rNa.startsWith(IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix()) )
{ {
maName = IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix(); maName = IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix();
maName += rNa; maName += rNa;
......
...@@ -102,7 +102,18 @@ namespace ...@@ -102,7 +102,18 @@ namespace
// #120879# - helper method to identify a bookmark name to match the internal TOC bookmark naming convention // #120879# - helper method to identify a bookmark name to match the internal TOC bookmark naming convention
bool IsTOCBookmarkName( const ::rtl::OUString& rName ) bool IsTOCBookmarkName( const ::rtl::OUString& rName )
{ {
return rName.startsWith("_Toc"); return rName.startsWith("_Toc") || rName.startsWith(IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix());
}
::rtl::OUString EnsureTOCBookmarkName( const ::rtl::OUString& rName )
{
OUString sTmp = rName;
if ( IsTOCBookmarkName ( rName ) )
{
if ( ! rName.startsWith(IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix()) )
sTmp = IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix() + rName;
}
return sTmp;
} }
} }
...@@ -216,7 +227,7 @@ long SwWW8ImplReader::Read_Book(WW8PLCFManResult*) ...@@ -216,7 +227,7 @@ long SwWW8ImplReader::Read_Book(WW8PLCFManResult*)
const OUString sOrigName = BookmarkToWriter(*pName); const OUString sOrigName = BookmarkToWriter(*pName);
pReffedStck->NewAttr( aStart, pReffedStck->NewAttr( aStart,
SwFltBookmark( sOrigName, aVal, pB->GetHandle(), IsTOCBookmarkName( sOrigName ) )); SwFltBookmark( EnsureTOCBookmarkName( sOrigName ), aVal, pB->GetHandle(), IsTOCBookmarkName( sOrigName ) ));
return 0; return 0;
} }
...@@ -2062,8 +2073,7 @@ eF_ResT SwWW8ImplReader::Read_F_PgRef( WW8FieldDesc*, OUString& rStr ) ...@@ -2062,8 +2073,7 @@ eF_ResT SwWW8ImplReader::Read_F_PgRef( WW8FieldDesc*, OUString& rStr )
OUString sBookmarkName; OUString sBookmarkName;
if ( IsTOCBookmarkName( sName ) ) if ( IsTOCBookmarkName( sName ) )
{ {
sBookmarkName = IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix(); sBookmarkName = EnsureTOCBookmarkName(sName);
sBookmarkName += sName;
// track <sBookmarkName> as referenced TOC bookmark. // track <sBookmarkName> as referenced TOC bookmark.
pReffedStck->aReferencedTOCBookmarks.insert( sBookmarkName ); pReffedStck->aReferencedTOCBookmarks.insert( sBookmarkName );
} }
...@@ -2089,8 +2099,7 @@ eF_ResT SwWW8ImplReader::Read_F_PgRef( WW8FieldDesc*, OUString& rStr ) ...@@ -2089,8 +2099,7 @@ eF_ResT SwWW8ImplReader::Read_F_PgRef( WW8FieldDesc*, OUString& rStr )
OUString sPageRefBookmarkName; OUString sPageRefBookmarkName;
if ( IsTOCBookmarkName( sName ) ) if ( IsTOCBookmarkName( sName ) )
{ {
sPageRefBookmarkName = IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix(); sPageRefBookmarkName = EnsureTOCBookmarkName(sName);
sPageRefBookmarkName += sName;
// track <sPageRefBookmarkName> as referenced TOC bookmark. // track <sPageRefBookmarkName> as referenced TOC bookmark.
pReffedStck->aReferencedTOCBookmarks.insert( sPageRefBookmarkName ); pReffedStck->aReferencedTOCBookmarks.insert( sPageRefBookmarkName );
} }
...@@ -3388,9 +3397,7 @@ eF_ResT SwWW8ImplReader::Read_F_Hyperlink( WW8FieldDesc* /*pF*/, OUString& rStr ...@@ -3388,9 +3397,7 @@ eF_ResT SwWW8ImplReader::Read_F_Hyperlink( WW8FieldDesc* /*pF*/, OUString& rStr
// #120879# add cross reference bookmark name prefix, if it matches internal TOC bookmark naming convention // #120879# add cross reference bookmark name prefix, if it matches internal TOC bookmark naming convention
if ( IsTOCBookmarkName( sMark ) ) if ( IsTOCBookmarkName( sMark ) )
{ {
OUString sTmp = IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix(); sMark = EnsureTOCBookmarkName(sMark);
sTmp += sMark;
sMark = sTmp;
// track <sMark> as referenced TOC bookmark. // track <sMark> as referenced TOC bookmark.
pReffedStck->aReferencedTOCBookmarks.insert( sMark ); pReffedStck->aReferencedTOCBookmarks.insert( sMark );
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment