[Libreoffice-commits] core.git: sw/inc sw/qa sw/source writerfilter/source

PriyankaGaikwad priyanka.gaikwad at synerzip.com
Mon Jan 13 07:21:51 PST 2014


 sw/inc/tox.hxx                                    |   18 +++++++++++++++
 sw/inc/unomap.hxx                                 |    1 
 sw/inc/unoprnms.hxx                               |    1 
 sw/qa/extras/ooxmlexport/data/TOC_field_b.docx    |binary
 sw/qa/extras/ooxmlexport/ooxmlexport.cxx          |   14 ++++++++++++
 sw/source/core/tox/tox.cxx                        |    7 ++++++
 sw/source/core/unocore/unoidx.cxx                 |   25 ++++++++++++++++++++++
 sw/source/core/unocore/unomap.cxx                 |    2 +
 sw/source/filter/ww8/ww8atr.cxx                   |    8 +++++++
 writerfilter/source/dmapper/DomainMapper_Impl.cxx |   12 +++++++---
 writerfilter/source/dmapper/PropertyIds.cxx       |    1 
 writerfilter/source/dmapper/PropertyIds.hxx       |    1 
 12 files changed, 87 insertions(+), 3 deletions(-)

New commits:
commit 5b6a41f44663590a878abed3d857d762ab3c4895
Author: PriyankaGaikwad <priyanka.gaikwad at synerzip.com>
Date:   Thu Jan 2 14:52:46 2014 +0530

    fdo#69613:Fix for TOC field flag 'b' should preserved after RT.
    
    (This is partial fix for this bug)
    
    Implementation :
     Provided import & export support for TOC field flag '\b'.
    
    XML file difference :
    Before :
    <w:instrText>
     TOC
    </w:instrText>
    
    After :
    <w:instrText>
     TOC \b "bookmark111" \o "1-9" \o "1-9" \h
    </w:instrText>
    
    Conflicts:
    	sw/inc/tox.hxx
    	sw/inc/unomap.hxx
    	sw/inc/unoprnms.hxx
    	sw/source/core/unocore/unomap.cxx
    	sw/source/filter/ww8/ww8atr.cxx
    	writerfilter/source/dmapper/DomainMapper_Impl.cxx
    	writerfilter/source/dmapper/PropertyIds.cxx
    	writerfilter/source/dmapper/PropertyIds.hxx
    Reviewed on:
    	https://gerrit.libreoffice.org/7256
    
    Change-Id: I194ba95ca8f25234c0d2a14570fd47eac518b9c5

diff --git a/sw/inc/tox.hxx b/sw/inc/tox.hxx
index c4252a1..4ded582 100644
--- a/sw/inc/tox.hxx
+++ b/sw/inc/tox.hxx
@@ -65,6 +65,7 @@ class SW_DLLPUBLIC SwTOXMark
     SwTxtTOXMark* pTxtAttr;
 
     sal_uInt16  nLevel;
+    OUString    m_aBookmarkName;
     sal_Bool    bAutoGenerated : 1;     // generated using a concordance file
     sal_Bool    bMainEntry : 1;         // main entry emphasized by character style
 
@@ -103,6 +104,8 @@ public:
     // content or user defined index
     inline void             SetLevel(sal_uInt16 nLevel);
     inline sal_uInt16           GetLevel() const;
+    inline void             SetBookmarkName( const OUString& bName);
+    inline OUString         GetBookmarkName() const;
 
     // for alphabetical index only
     inline void             SetPrimaryKey(const OUString& rStr );
@@ -400,6 +403,7 @@ namespace nsSwTOXElement
     const SwTOXElement TOX_SEQUENCE         = 128;
     const SwTOXElement TOX_TABLEADER        = 256;
     const SwTOXElement TOX_TAB_IN_TOC       = 512;
+    const SwTOXElement TOX_BOOKMARK         = 1024;
 }
 
 typedef sal_uInt16 SwTOIOptions;
@@ -443,6 +447,7 @@ class SW_DLLPUBLIC SwTOXBase : public SwClient
     SwForm      aForm;              // description of the lines
     OUString    aName;              // unique name
     OUString    aTitle;             // title
+    OUString    m_aBookmarkName;      //Bookmark Name
 
     OUString    sMainEntryCharStyle; // name of the character style applied to main index entries
 
@@ -498,12 +503,14 @@ public:
     void                DisableKeepExpression() {mbKeepExpression = sal_False;}
 
     OUString            GetTitle() const;           // Title
+    OUString         GetBookmarkName() const;
     OUString            GetTypeName() const;        // Name
     const SwForm&       GetTOXForm() const;         // description of the lines
 
     void                SetCreate(sal_uInt16);
     void                SetTitle(const OUString& rTitle);
     void                SetTOXForm(const SwForm& rForm);
+    void  SetBookmarkName(const OUString& bName);
 
     TOXTypes            GetType() const;
 
@@ -582,6 +589,9 @@ public:
 inline OUString SwTOXMark::GetAlternativeText() const
     {   return aAltText;    }
 
+inline OUString SwTOXMark::GetBookmarkName() const
+    {   return m_aBookmarkName;    }
+
 inline const SwTOXType* SwTOXMark::GetTOXType() const
     { return (SwTOXType*)GetRegisteredIn(); }
 
@@ -593,6 +603,11 @@ inline void SwTOXMark::SetAlternativeText(const OUString& rAlt)
     aAltText = rAlt;
 }
 
+inline void SwTOXMark::SetBookmarkName(const OUString& bName)
+{
+    m_aBookmarkName = bName;
+}
+
 inline void SwTOXMark::SetLevel( sal_uInt16 nLvl )
 {
     SAL_WARN_IF( GetTOXType() && GetTOXType()->GetType() == TOX_INDEX, "sw", "Wrong type");
@@ -712,6 +727,9 @@ inline sal_uInt16 SwTOXBase::GetCreateType() const
 inline OUString SwTOXBase::GetTitle() const
     { return aTitle; }
 
+inline OUString SwTOXBase::GetBookmarkName() const
+    { return m_aBookmarkName; }
+
 inline OUString SwTOXBase::GetTypeName() const
     { return GetTOXType()->GetTypeName();  }
 
diff --git a/sw/inc/unomap.hxx b/sw/inc/unomap.hxx
index e9e63a7..f0b7259 100644
--- a/sw/inc/unomap.hxx
+++ b/sw/inc/unomap.hxx
@@ -218,6 +218,7 @@
 #define WID_TEXT_READING                        1058
 #define WID_PRIMARY_KEY_READING                 1059
 #define WID_SECONDARY_KEY_READING               1060
+#define WID_TOC_BOOKMARK                        1061
 
 // Text document
 #define WID_DOC_CHAR_COUNT                      1000
diff --git a/sw/inc/unoprnms.hxx b/sw/inc/unoprnms.hxx
index da63af3..f4fc116 100644
--- a/sw/inc/unoprnms.hxx
+++ b/sw/inc/unoprnms.hxx
@@ -123,6 +123,7 @@
 #define UNO_NAME_CHAR_COLOR "CharColor"
 #define UNO_NAME_HIDE_TAB_LEADER_AND_PAGE_NUMBERS "HideTabLeaderAndPageNumber"
 #define UNO_NAME_TAB_IN_TOC "TabInTOC"
+#define UNO_NAME_TOC_BOOKMARK "TOCBookmark"
 
 #define UNO_NAME_CHAR_FLASH "CharFlash"
 #define UNO_NAME_CHAR_KERNING "CharKerning"
diff --git a/sw/qa/extras/ooxmlexport/data/TOC_field_b.docx b/sw/qa/extras/ooxmlexport/data/TOC_field_b.docx
new file mode 100644
index 0000000..b8ff32b
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TOC_field_b.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index 6dd2669..4fe902d 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -2370,6 +2370,20 @@ DECLARE_OOXMLEXPORT_TEST(testPreserveZfield,"preserve_Z_field_TOC.docx")
    CPPUNIT_ASSERT(contents.match(" TOC \\z \\w \\f \\o \"1-3\" \\h"));
 }
 
+DECLARE_OOXMLEXPORT_TEST(testFieldFlagB,"TOC_field_b.docx")
+{
+   // This test case is to verify \b flag.
+    xmlDocPtr pXmlDoc = parseExport();
+    if (!pXmlDoc)
+        return;
+    // FIXME "p[2]" will have to be "p[1]", once the TOC import code is fixed
+    // not to insert an empty paragraph before TOC.
+    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(" TOC \\b \"bookmark111\" \\o \"1-9\" \\h"));
+}
+
 #endif
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/core/tox/tox.cxx b/sw/source/core/tox/tox.cxx
index 3e8ddd3..9dab768 100644
--- a/sw/source/core/tox/tox.cxx
+++ b/sw/source/core/tox/tox.cxx
@@ -565,6 +565,7 @@ SwTOXBase& SwTOXBase::CopyTOXBase( SwDoc* pDoc, const SwTOXBase& rSource )
     nCreateType = rSource.nCreateType;
     aTitle      = rSource.aTitle;
     aForm       = rSource.aForm;
+    m_aBookmarkName = rSource.m_aBookmarkName;
     bProtected  = rSource.bProtected;
     bFromChapter = rSource.bFromChapter;
     bFromObjectNames = rSource.bFromObjectNames;
@@ -603,12 +604,18 @@ SwTOXBase::~SwTOXBase()
 void SwTOXBase::SetTitle(const OUString& rTitle)
     {   aTitle = rTitle; }
 
+void SwTOXBase::SetBookmarkName(const OUString& bName)
+{
+     m_aBookmarkName = bName;
+}
+
 
 SwTOXBase & SwTOXBase::operator = (const SwTOXBase & rSource)
 {
     aForm = rSource.aForm;
     aName = rSource.aName;
     aTitle = rSource.aTitle;
+    m_aBookmarkName = rSource.m_aBookmarkName;
     sMainEntryCharStyle = rSource.sMainEntryCharStyle;
     for(sal_uInt16 nLevel = 0; nLevel < MAXLEVEL; nLevel++)
         aStyleNames[nLevel] = rSource.aStyleNames[nLevel];
diff --git a/sw/source/core/unocore/unoidx.cxx b/sw/source/core/unocore/unoidx.cxx
index 33942aa..06a695d 100644
--- a/sw/source/core/unocore/unoidx.cxx
+++ b/sw/source/core/unocore/unoidx.cxx
@@ -649,6 +649,13 @@ throw (beans::UnknownPropertyException, beans::PropertyVetoException,
             rTOXBase.SetLevel(lcl_AnyToInt16(rValue));
         }
         break;
+        case WID_TOC_BOOKMARK:
+        {
+           rTOXBase.SetBookmarkName(lcl_AnyToString(rValue));
+           nCreate = nsSwTOXElement::TOX_BOOKMARK;
+           rTOXBase.SetCreate(nCreate);
+        }
+        break;
         case WID_CREATE_FROM_MARKS:
             lcl_AnyToBitMask(rValue, nCreate, nsSwTOXElement::TOX_MARK);
         break;
@@ -961,6 +968,9 @@ throw (beans::UnknownPropertyException, lang::WrappedTargetException,
             case WID_LEVEL      :
                 aRet <<= static_cast<sal_Int16>(pTOXBase->GetLevel());
             break;
+            case WID_TOC_BOOKMARK  :
+               aRet <<= OUString(pTOXBase->GetBookmarkName());
+            break;
             case WID_CREATE_FROM_MARKS:
                 lcl_BitMaskToAny(aRet, nCreate, nsSwTOXElement::TOX_MARK);
             break;
@@ -1530,6 +1540,7 @@ public:
 
     sal_Bool                    m_bMainEntry;
     sal_uInt16                  m_nLevel;
+    OUString                    m_aBookmarkName;
     OUString                    m_sAltText;
     OUString                    m_sPrimaryKey;
     OUString                    m_sSecondaryKey;
@@ -2122,6 +2133,9 @@ throw (beans::UnknownPropertyException, beans::PropertyVetoException,
                 aMark.SetLevel(std::min( static_cast<sal_Int8>( MAXLEVEL ),
                             static_cast<sal_Int8>(lcl_AnyToInt16(rValue)+1)));
             break;
+            case WID_TOC_BOOKMARK :
+                aMark.SetBookmarkName(lcl_AnyToString(rValue));
+            break;
             case WID_PRIMARY_KEY  :
                 aMark.SetPrimaryKey(lcl_AnyToString(rValue));
             break;
@@ -2176,6 +2190,11 @@ throw (beans::UnknownPropertyException, beans::PropertyVetoException,
                 }
             }
             break;
+            case WID_TOC_BOOKMARK :
+            {
+                m_pImpl->m_aBookmarkName = lcl_AnyToString(rValue);
+            }
+            break;
             case WID_PRIMARY_KEY:
                 m_pImpl->m_sPrimaryKey = lcl_AnyToString(rValue);
             break;
@@ -2243,6 +2262,9 @@ throw (beans::UnknownPropertyException, lang::WrappedTargetException,
                 aRet <<= static_cast<sal_Int16>(
                             m_pImpl->m_pTOXMark->GetLevel() - 1);
             break;
+            case WID_TOC_BOOKMARK :
+                aRet <<= OUString(m_pImpl->m_pTOXMark->GetBookmarkName());
+            break;
             case WID_PRIMARY_KEY  :
                 aRet <<= OUString(m_pImpl->m_pTOXMark->GetPrimaryKey());
             break;
@@ -2284,6 +2306,9 @@ throw (beans::UnknownPropertyException, lang::WrappedTargetException,
             case WID_LEVEL:
                 aRet <<= static_cast<sal_Int16>(m_pImpl->m_nLevel);
             break;
+            case WID_TOC_BOOKMARK :
+                aRet <<= m_pImpl->m_aBookmarkName;
+            break;
             case WID_PRIMARY_KEY:
                 aRet <<= m_pImpl->m_sPrimaryKey;
             break;
diff --git a/sw/source/core/unocore/unomap.cxx b/sw/source/core/unocore/unomap.cxx
index cb371d3..e3f9d1e 100644
--- a/sw/source/core/unocore/unomap.cxx
+++ b/sw/source/core/unocore/unomap.cxx
@@ -1415,6 +1415,7 @@ const SfxItemPropertyMapEntry* SwUnoPropertyMapProvider::GetPropertyMapEntries(s
                     { OUString(UNO_NAME_CREATE_FROM_MARKS), WID_CREATE_FROM_MARKS                   ,  cppu::UnoType<bool>::get()  , PROPERTY_NONE,     0},
                     { OUString(UNO_NAME_HIDE_TAB_LEADER_AND_PAGE_NUMBERS), WID_HIDE_TABLEADER_PAGENUMBERS                   ,  cppu::UnoType<bool>::get()  , PROPERTY_NONE,     0},
                     { OUString(UNO_NAME_TAB_IN_TOC), WID_TAB_IN_TOC, cppu::UnoType<bool>::get(), PROPERTY_NONE, 0},
+                    { OUString(UNO_NAME_TOC_BOOKMARK), WID_TOC_BOOKMARK, cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0},
                     { OUString(UNO_NAME_CREATE_FROM_OUTLINE), WID_CREATE_FROM_OUTLINE                 ,  cppu::UnoType<bool>::get()  , PROPERTY_NONE,     0},
                     { OUString(UNO_NAME_CREATE_FROM_CHAPTER), WID_CREATE_FROM_CHAPTER                 ,  cppu::UnoType<bool>::get()  , PROPERTY_NONE,     0},
                     { OUString(UNO_NAME_IS_PROTECTED), WID_PROTECTED                           ,  cppu::UnoType<bool>::get()  , PROPERTY_NONE,     0},
@@ -1453,6 +1454,7 @@ const SfxItemPropertyMapEntry* SwUnoPropertyMapProvider::GetPropertyMapEntries(s
                     { OUString(UNO_NAME_CREATE_FROM_MARKS), WID_CREATE_FROM_MARKS                   ,  cppu::UnoType<bool>::get()  , PROPERTY_NONE,     0},
                     { OUString(UNO_NAME_HIDE_TAB_LEADER_AND_PAGE_NUMBERS), WID_HIDE_TABLEADER_PAGENUMBERS                   ,  cppu::UnoType<bool>::get()  , PROPERTY_NONE,     0},
                     { OUString(UNO_NAME_TAB_IN_TOC), WID_TAB_IN_TOC, cppu::UnoType<bool>::get(), PROPERTY_NONE, 0},
+                    { OUString(UNO_NAME_TOC_BOOKMARK), WID_TOC_BOOKMARK, cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0},
                     { OUString(UNO_NAME_CREATE_FROM_CHAPTER), WID_CREATE_FROM_CHAPTER                 ,  cppu::UnoType<bool>::get()  , PROPERTY_NONE,     0},
                     { OUString(UNO_NAME_IS_PROTECTED), WID_PROTECTED                           ,  cppu::UnoType<bool>::get()  , PROPERTY_NONE,     0},
                     { OUString(UNO_NAME_USE_LEVEL_FROM_SOURCE), WID_USE_LEVEL_FROM_SOURCE               ,  cppu::UnoType<bool>::get()  , PROPERTY_NONE,     0},
diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx
index b5ad57e..d2c9dac 100644
--- a/sw/source/filter/ww8/ww8atr.cxx
+++ b/sw/source/filter/ww8/ww8atr.cxx
@@ -2131,6 +2131,14 @@ void AttributeOutputBase::StartTOX( const SwSection& rSect )
                             sStr += sEntryEnd;
                         }
                     }
+                    if(nsSwTOXElement::TOX_BOOKMARK & pTOX->GetCreateType())
+                    {
+                        sStr += "\\b ";
+                        OUString bName = pTOX->GetBookmarkName();
+                        sStr += bName;
+                        sStr += sEntryEnd;
+                    }
+
                         if( nsSwTOXElement::TOX_OUTLINELEVEL & pTOX->GetCreateType() )
                         {
                             // Take the TOC value of the max level to evaluate to as
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 3b9b526..9071835 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -2699,10 +2699,12 @@ void DomainMapper_Impl::handleToc
     bool bIsTabEntry = false ;
 
     sal_Int16 nMaxLevel = 10;
+    bool bBookmark=false;
     OUString sTemplate;
     OUString sChapterNoSeparator;
     OUString sFigureSequence;
     uno::Reference< beans::XPropertySet > xTOC;
+    OUString nBookmarkName;
 
 //                  \a Builds a table of figures but does not include the captions's label and number
     if( lcl_FindInCommand( pContext->GetCommand(), 'a', sValue ))
@@ -2710,9 +2712,11 @@ void DomainMapper_Impl::handleToc
         bTableOfFigures = true;
     }
 //                  \b Uses a bookmark to specify area of document from which to build table of contents
-//                    if( lcl_FindInCommand( pContext->GetCommand(), 'b', sValue ))
-//                    { //todo: sValue contains the bookmark name - unsupported feature
-//                    }
+    if( lcl_FindInCommand( pContext->GetCommand(), 'b', sValue ))
+    {
+        bBookmark = true;
+        nBookmarkName = sValue;
+    }
     if( lcl_FindInCommand( pContext->GetCommand(), 'c', sValue ))
 //                  \c Builds a table of figures of the given label
     {
@@ -2811,6 +2815,8 @@ void DomainMapper_Impl::handleToc
                 uno::UNO_QUERY_THROW);
     if (xTOC.is())
         xTOC->setPropertyValue(rPropNameSupplier.GetName( PROP_TITLE ), uno::makeAny(OUString()));
+    if(bBookmark)
+        xTOC->setPropertyValue(rPropNameSupplier.GetName( PROP_TOC_BOOKMARK ), uno::makeAny(nBookmarkName));
     if( !bTableOfFigures && xTOC.is() )
     {
         xTOC->setPropertyValue( rPropNameSupplier.GetName( PROP_LEVEL ), uno::makeAny( nMaxLevel ) );
diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx
index 669ae07..a6bda94 100644
--- a/writerfilter/source/dmapper/PropertyIds.cxx
+++ b/writerfilter/source/dmapper/PropertyIds.cxx
@@ -362,6 +362,7 @@ OUString PropertyNameSupplier::GetName( PropertyIds eId ) const
             case PROP_HORIZONTAL_MERGE: sName = "HorizontalMerge"; break;
             case PROP_HIDE_TAB_LEADER_AND_PAGE_NUMBERS      :    sName = "HideTabLeaderAndPageNumber" ; break ;
             case PROP_TAB_IN_TOC : sName = "TabInTOC"; break ;
+            case PROP_TOC_BOOKMARK: sName = "TOCBookmark"; break;
         }
         ::std::pair<PropertyNameMap_t::iterator,bool> aInsertIt =
                 m_pImpl->aNameMap.insert( PropertyNameMap_t::value_type( eId, sName ));
diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx
index b8e6ae5..c6cf976 100644
--- a/writerfilter/source/dmapper/PropertyIds.hxx
+++ b/writerfilter/source/dmapper/PropertyIds.hxx
@@ -333,6 +333,7 @@ enum PropertyIds
         ,PROP_HORIZONTAL_MERGE
         ,PROP_HIDE_TAB_LEADER_AND_PAGE_NUMBERS
         ,PROP_TAB_IN_TOC
+        ,PROP_TOC_BOOKMARK
     };
 struct PropertyNameSupplier_Impl;
 class PropertyNameSupplier


More information about the Libreoffice-commits mailing list