diff options
-rw-r--r-- | sw/qa/extras/ooxmlexport/data/alphabeticalIndex_AutoColumn.docx | bin | 0 -> 15891 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 19 | ||||
-rw-r--r-- | sw/source/filter/ww8/ww8atr.cxx | 37 |
3 files changed, 42 insertions, 14 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/alphabeticalIndex_AutoColumn.docx b/sw/qa/extras/ooxmlexport/data/alphabeticalIndex_AutoColumn.docx Binary files differnew file mode 100644 index 000000000000..e08e943ac2ba --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/alphabeticalIndex_AutoColumn.docx diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index db7811c1c016..337a69b0528e 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -3696,6 +3696,25 @@ DECLARE_OOXMLEXPORT_TEST(testPageref, "testPageref.docx") CPPUNIT_ASSERT(contents.match("PAGEREF _Toc355095261 \\h")); } +DECLARE_OOXMLEXPORT_TEST(testAlphabeticalIndex_AutoColumn,"alphabeticalIndex_AutoColumn.docx") +{ + // Bug :: fdo#73596 + /* + * When the columns in Index are 0; i.e not specified by the + * "\c" switch, don't write back '\c "0"' or the section breaks + * before and after the Index Context + */ + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + xmlNodeSetPtr pXmlNodes = getXPathNode(pXmlDoc,"/w:document/w:body/w:p[2]/w:r[2]/w:instrText"); + xmlNodePtr pXmlNode = pXmlNodes->nodeTab[0]; + OUString contents = OUString::createFromAscii((const char*)((pXmlNode->children[0]).content)); + CPPUNIT_ASSERT( contents.match(" INDEX \\e \"") ); + // check for section break doestn't appear for any paragraph + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:pPr/w:sectPr", 0); +} + #endif CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx index db3270c265da..7086f7e873fc 100644 --- a/sw/source/filter/ww8/ww8atr.cxx +++ b/sw/source/filter/ww8/ww8atr.cxx @@ -2058,15 +2058,6 @@ void AttributeOutputBase::StartTOX( const SwSection& rSect ) switch (pTOX->GetType()) { case TOX_INDEX: - - // Add a continuous section break - if( GetExport().AddSectionBreaksForTOX() ) - { - sal_uLong nRstLnNum = 0; - WW8_SepInfo rInfo( &GetExport( ).pDoc->GetPageDesc( 0 ), rSect.GetParent()->GetFmt() , nRstLnNum ); - GetExport( ).AttrOutput().SectionBreak( msword::PageBreak, &rInfo ); - } - eCode = ww::eINDEX; sStr = FieldString(eCode); @@ -2074,9 +2065,20 @@ void AttributeOutputBase::StartTOX( const SwSection& rSect ) const SwFmtCol& rCol = (const SwFmtCol&)( rSect.GetFmt()->GetFmtAttr( RES_COL ) ); const SwColumns& rColumns = rCol.GetColumns(); sal_Int32 nCol = rColumns.size(); - sStr += "\\c \"" + OUString::number( nCol ) + "\""; - } + if ( 0 < nCol ) + { + // Add a continuous section break + if( GetExport().AddSectionBreaksForTOX() ) + { + sal_uLong nRstLnNum = 0; + WW8_SepInfo rInfo( &GetExport( ).pDoc->GetPageDesc( 0 ), rSect.GetParent()->GetFmt() , nRstLnNum ); + GetExport( ).AttrOutput().SectionBreak( msword::PageBreak, &rInfo ); + } + + sStr += "\\c \"" + OUString::number( nCol ) + "\""; + } + } if (pTOX->GetTOXForm().IsCommaSeparated()) sStr += "\\r "; @@ -2371,9 +2373,16 @@ void AttributeOutputBase::EndTOX( const SwSection& rSect,bool bCareEnd ) if ( pTOX->GetType() == TOX_INDEX && GetExport().AddSectionBreaksForTOX() ) { - sal_uLong nRstLnNum = 0; - WW8_SepInfo rInfo( &GetExport( ).pDoc->GetPageDesc( 0 ), rSect.GetFmt() , nRstLnNum ); - GetExport( ).AttrOutput().SectionBreak( msword::PageBreak, &rInfo ); + const SwFmtCol& rCol = (const SwFmtCol&)( rSect.GetFmt()->GetFmtAttr( RES_COL ) ); + const SwColumns& rColumns = rCol.GetColumns(); + sal_Int32 nCol = rColumns.size(); + + if ( 0 < nCol ) + { + sal_uLong nRstLnNum = 0; + WW8_SepInfo rInfo( &GetExport( ).pDoc->GetPageDesc( 0 ), rSect.GetFmt() , nRstLnNum ); + GetExport( ).AttrOutput().SectionBreak( msword::PageBreak, &rInfo ); + } } } GetExport( ).bInWriteTOX = false; |