[Libreoffice-commits] core.git: Branch 'private/Rosemary/change-tracking' - include/xmloff sw/source xmloff/source

Rosemary Sebastian rosemary.seb8 at gmail.com
Mon Jul 11 14:30:25 UTC 2016


 include/xmloff/XMLTrackedChangesImportContext.hxx     |   12 ++++++-
 include/xmloff/txtimp.hxx                             |    9 ++++-
 sw/source/filter/xml/XMLRedlineImportHelper.cxx       |   22 ++++++++++---
 sw/source/filter/xml/XMLRedlineImportHelper.hxx       |    6 +++
 sw/source/filter/xml/swxml.cxx                        |   14 ++++----
 sw/source/filter/xml/xmltexti.cxx                     |   14 +++++++-
 sw/source/filter/xml/xmltexti.hxx                     |    5 ++-
 xmloff/source/text/XMLChangeInfoContext.cxx           |    4 --
 xmloff/source/text/XMLChangedRegionImportContext.cxx  |   14 --------
 xmloff/source/text/XMLChangedRegionImportContext.hxx  |    6 ---
 xmloff/source/text/XMLTrackedChangesImportContext.cxx |   30 +++++++++++++++---
 xmloff/source/text/txtimp.cxx                         |   13 ++++++-
 xmloff/source/text/txtparai.cxx                       |    9 ++++-
 xmloff/source/text/txtparai.hxx                       |    4 +-
 14 files changed, 112 insertions(+), 50 deletions(-)

New commits:
commit 56043029a387283dba933ab94bdd454aaa74dcc6
Author: Rosemary Sebastian <rosemary.seb8 at gmail.com>
Date:   Mon Jul 11 19:58:40 2016 +0530

    WIP Insert redline into document
    
    Change-Id: I477ef0dc0e62b83059dc5877746c16071a88507b

diff --git a/include/xmloff/XMLTrackedChangesImportContext.hxx b/include/xmloff/XMLTrackedChangesImportContext.hxx
index c3a4414..f19052a 100644
--- a/include/xmloff/XMLTrackedChangesImportContext.hxx
+++ b/include/xmloff/XMLTrackedChangesImportContext.hxx
@@ -57,6 +57,15 @@ public:
     /// redline date
     OUString sDate;
 
+    /// redline date
+    OUString sStart;
+
+    /// redline date
+    OUString sEnd;
+
+    /// redline date
+    OUString sType;
+
     /// merge-last-paragraph flag
     bool bMergeLastPara;
 
@@ -79,7 +88,8 @@ public:
     void SetChangeInfo(const OUString& rType,
                        const OUString& rAuthor,
                        const OUString& rComment,
-                       const OUString& rDate);
+                       const OUString& rDate,
+                       const sal_uInt32);
 
     /// create redline XText/XTextCursor on demand and register with
     /// XMLTextImportHelper
diff --git a/include/xmloff/txtimp.hxx b/include/xmloff/txtimp.hxx
index 92f2bf9..12825dd 100644
--- a/include/xmloff/txtimp.hxx
+++ b/include/xmloff/txtimp.hxx
@@ -389,6 +389,8 @@ private:
     std::shared_ptr<BackpatcherImpl> m_xBackpatcherImpl;
     static std::shared_ptr<BackpatcherImpl> MakeBackpatcherImpl();
 
+    sal_Int16            nParaIdx = 0;
+    bool                 bInsertRedline = false;
 protected:
     virtual SvXMLImportContext *CreateTableChildContext(
                 SvXMLImport& rImport,
@@ -665,7 +667,8 @@ public:
             /// date+time
             const css::util::DateTime& rDateTime,
             /// merge last paras
-            bool bMergeLastParagraph);
+            bool bMergeLastParagraph,
+            const sal_uInt32 nStartParaPos);
 
     virtual css::uno::Reference< css::text::XTextCursor> RedlineCreateText(
             /// needed to get the document
@@ -673,6 +676,10 @@ public:
             /// ID used to RedlineAdd() call
             const OUString& rId);
 
+    virtual bool CheckRedlineExists(
+        /// ID used to RedlineAdd() call
+        const OUString& rId);
+
     virtual void RedlineSetCursor(
         /// ID used to RedlineAdd() call
         const OUString& rId,
diff --git a/sw/source/filter/xml/XMLRedlineImportHelper.cxx b/sw/source/filter/xml/XMLRedlineImportHelper.cxx
index 0952c46..9bd69be 100644
--- a/sw/source/filter/xml/XMLRedlineImportHelper.cxx
+++ b/sw/source/filter/xml/XMLRedlineImportHelper.cxx
@@ -195,6 +195,7 @@ public:
     OUString sComment;              // change comment string
     util::DateTime aDateTime;       // change DateTime
     bool bMergeLastParagraph;   // the SwRangeRedline::IsDelLastPara flag
+    sal_uInt32 nStartParagraphPos;
 
     // each position can may be either empty, an XTextRange, or an SwNodeIndex
 
@@ -319,9 +320,9 @@ XMLRedlineImportHelper::~XMLRedlineImportHelper()
                           "now deleted");
             }
         }
-        delete pInfo;
-    }
-    aRedlineMap.clear();
+         delete pInfo;
+     }
+     aRedlineMap.clear();
 
     // set redline mode, either to info property set, or directly to
     // the document
@@ -373,7 +374,8 @@ void XMLRedlineImportHelper::Add(
     const OUString& rAuthor,
     const OUString& rComment,
     const util::DateTime& rDateTime,
-    bool bMergeLastPara)
+    bool bMergeLastPara,
+    const sal_uInt32 nStartParaPos)
 {
     // we need to do the following:
     // 1) parse type string
@@ -411,6 +413,7 @@ void XMLRedlineImportHelper::Add(
     pInfo->sComment = rComment;
     pInfo->aDateTime = rDateTime;
     pInfo->bMergeLastParagraph = bMergeLastPara;
+    pInfo->nStartParagraphPos = nStartParaPos;
 
     // ad 3)
     if (aRedlineMap.end() == aRedlineMap.find(rId))
@@ -487,6 +490,17 @@ Reference<XTextCursor> XMLRedlineImportHelper::CreateRedlineTextSection(
     return xReturn;
 }
 
+bool XMLRedlineImportHelper::Check(
+    const OUString& rId)
+{
+    RedlineMapType::iterator aFind = aRedlineMap.find(rId);
+    if (aRedlineMap.end() != aFind)
+    {
+        return true;
+    }
+    return false;
+}
+
 void XMLRedlineImportHelper::SetCursor(
     const OUString& rId,
     bool bStart,
diff --git a/sw/source/filter/xml/XMLRedlineImportHelper.hxx b/sw/source/filter/xml/XMLRedlineImportHelper.hxx
index f78866b..240c36c 100644
--- a/sw/source/filter/xml/XMLRedlineImportHelper.hxx
+++ b/sw/source/filter/xml/XMLRedlineImportHelper.hxx
@@ -76,7 +76,8 @@ public:
         const OUString& rAuthor,     // name of the author
         const OUString& rComment,    // redline comment
         const css::util::DateTime& rDateTime, // date+time
-        bool bMergeLastParagraph);      // merge last paragraph?
+        bool bMergeLastParagraph,      // merge last paragraph?
+        const sal_uInt32 nStartParaPos); // start paragraph position
 
     // create a text section for the redline, and return an
     // XText/XTextCursor that may be used to write into it.
@@ -84,6 +85,9 @@ public:
             css::uno::Reference<css::text::XTextCursor> xOldCursor, // needed to get the document
             const OUString& rId);    // ID used to RedlineAdd() call
 
+    bool Check(
+        const OUString& rId);     // ID used in RedlineAdd() call
+
     // Set start or end position for a redline in the text body.
     // Accepts XTextRange objects.
     void SetCursor(
diff --git a/sw/source/filter/xml/swxml.cxx b/sw/source/filter/xml/swxml.cxx
index 95708ad..07de8e9 100644
--- a/sw/source/filter/xml/swxml.cxx
+++ b/sw/source/filter/xml/swxml.cxx
@@ -870,17 +870,17 @@ sal_uLong XMLReader::Read( SwDoc &rDoc, const OUString& rBaseURL, SwPaM &rPaM, c
 
     if( !nRet && !(IsOrganizerMode() || aOpt.IsFormatsOnly()) )
         nRet = ReadThroughComponent(
-           xStorage, xModelComp, "content.xml", "Content.xml", xContext,
-            (bOASIS ? "com.sun.star.comp.Writer.XMLOasisContentImporter"
-                    : "com.sun.star.comp.Writer.XMLContentImporter"),
+           xStorage, xModelComp, "undo.xml", nullptr, xContext,
+            (bOASIS ? "com.sun.star.comp.Writer.XMLOasisUndoImporter"
+                    : "com.sun.star.comp.Writer.XMLUndoImporter"),
            aFilterArgs, rName, true );
 
     if( !nRet && !(IsOrganizerMode() || aOpt.IsFormatsOnly()) )
         nRet = ReadThroughComponent(
-           xStorage, xModelComp, "undo.xml", nullptr, xContext,
-            (bOASIS ? "com.sun.star.comp.Writer.XMLOasisUndoImporter"
-                    : "com.sun.star.comp.Writer.XMLUndoImporter"),
-           aEmptyArgs, rName, true );
+           xStorage, xModelComp, "content.xml", "Content.xml", xContext,
+            (bOASIS ? "com.sun.star.comp.Writer.XMLOasisContentImporter"
+                    : "com.sun.star.comp.Writer.XMLContentImporter"),
+           aFilterArgs, rName, true );
 
     if( !(IsOrganizerMode() || IsBlockMode() || bInsertMode ||
           aOpt.IsFormatsOnly() ) )
diff --git a/sw/source/filter/xml/xmltexti.cxx b/sw/source/filter/xml/xmltexti.cxx
index 710f010..d103310 100644
--- a/sw/source/filter/xml/xmltexti.cxx
+++ b/sw/source/filter/xml/xmltexti.cxx
@@ -976,13 +976,14 @@ void SwXMLTextImportHelper::RedlineAdd(
     const OUString& rAuthor,
     const OUString& rComment,
     const util::DateTime& rDateTime,
-    bool bMergeLastPara)
+    bool bMergeLastPara,
+    const sal_uInt32 nStartParaPos)
 {
     // create redline helper on demand
     OSL_ENSURE(nullptr != pRedlineHelper, "helper should have been created in constructor");
     if (nullptr != pRedlineHelper)
         pRedlineHelper->Add(rType, rId, rAuthor, rComment, rDateTime,
-                            bMergeLastPara);
+                            bMergeLastPara, nStartParaPos);
 }
 
 uno::Reference<XTextCursor> SwXMLTextImportHelper::RedlineCreateText(
@@ -999,6 +1000,15 @@ uno::Reference<XTextCursor> SwXMLTextImportHelper::RedlineCreateText(
     return xRet;
 }
 
+bool SwXMLTextImportHelper::CheckRedlineExists(
+    const OUString& rId)
+{
+    if(pRedlineHelper != nullptr)
+        return pRedlineHelper->Check(rId);
+    return false;
+    // else: ignore redline (wasn't added before, else we'd have a helper)
+}
+
 void SwXMLTextImportHelper::RedlineSetCursor(
     const OUString& rId,
     bool bStart,
diff --git a/sw/source/filter/xml/xmltexti.hxx b/sw/source/filter/xml/xmltexti.hxx
index 1d19ebf..57d334f 100644
--- a/sw/source/filter/xml/xmltexti.hxx
+++ b/sw/source/filter/xml/xmltexti.hxx
@@ -91,10 +91,13 @@ public:
         const OUString& rAuthor,     /// name of the author
         const OUString& rComment,    /// redline comment
         const css::util::DateTime& rDateTime,  /// date+time
-        bool bMergeLastPara) override;           /// merge last paragraph
+        bool bMergeLastPara,           /// merge last paragraph
+        const sal_uInt32 nStartParaPos) override;
     virtual css::uno::Reference<css::text::XTextCursor> RedlineCreateText(
             css::uno::Reference<css::text::XTextCursor> & rOldCursor, /// needed to get the document
             const OUString& rId) override;    /// ID used to RedlineAdd() call
+    virtual bool CheckRedlineExists(
+        const OUString& rId) override;         /// ID used to RedlineAdd() call
     virtual void RedlineSetCursor(
         const OUString& rId,         /// ID used to RedlineAdd() call
         bool bStart,                    /// start or end Cursor
diff --git a/xmloff/source/text/XMLChangeInfoContext.cxx b/xmloff/source/text/XMLChangeInfoContext.cxx
index 48ec705..f6848f7 100644
--- a/xmloff/source/text/XMLChangeInfoContext.cxx
+++ b/xmloff/source/text/XMLChangeInfoContext.cxx
@@ -89,10 +89,6 @@ SvXMLImportContext* XMLChangeInfoContext::CreateChildContext(
 
 void XMLChangeInfoContext::EndElement()
 {
-    // set values at changed region context
-    rChangedRegion.SetChangeInfo(rType, sAuthorBuffer.makeStringAndClear(),
-                                 sCommentBuffer.makeStringAndClear(),
-                                 sDateTimeBuffer.makeStringAndClear());
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/text/XMLChangedRegionImportContext.cxx b/xmloff/source/text/XMLChangedRegionImportContext.cxx
index 3622eb3..a0b2dc0 100644
--- a/xmloff/source/text/XMLChangedRegionImportContext.cxx
+++ b/xmloff/source/text/XMLChangedRegionImportContext.cxx
@@ -149,18 +149,4 @@ void XMLChangedRegionImportContext::EndElement()
     }
 }
 
-void XMLChangedRegionImportContext::SetChangeInfo(
-    const OUString& rType,
-    const OUString& rAuthor,
-    const OUString& rComment,
-    const OUString& rDate)
-{
-    util::DateTime aDateTime;
-    if (::sax::Converter::parseDateTime(aDateTime, nullptr, rDate))
-    {
-        GetImport().GetTextImport()->RedlineAdd(
-            rType, sID, rAuthor, rComment, aDateTime, bMergeLastPara);
-    }
-}
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/text/XMLChangedRegionImportContext.hxx b/xmloff/source/text/XMLChangedRegionImportContext.hxx
index d858118..398bedc 100644
--- a/xmloff/source/text/XMLChangedRegionImportContext.hxx
+++ b/xmloff/source/text/XMLChangedRegionImportContext.hxx
@@ -71,12 +71,6 @@ public:
     virtual void EndElement() override;
 
 
-    /// change info: To be called from change-info context
-    void SetChangeInfo(const OUString& rType,
-                       const OUString& rAuthor,
-                       const OUString& rComment,
-                       const OUString& rDate);
-
     /// create redline XText/XTextCursor on demand and register with
     /// XMLTextImportHelper
     void UseRedlineText();
diff --git a/xmloff/source/text/XMLTrackedChangesImportContext.cxx b/xmloff/source/text/XMLTrackedChangesImportContext.cxx
index a0f6861..ffe4659 100644
--- a/xmloff/source/text/XMLTrackedChangesImportContext.cxx
+++ b/xmloff/source/text/XMLTrackedChangesImportContext.cxx
@@ -101,6 +101,7 @@ SvXMLImportContext* XMLTrackedChangesImportContext::CreateChildContext(
     const Reference<XAttributeList> & xAttrList)
 {
     SvXMLImportContext* pContext = nullptr;
+    sal_uInt32 nStartParaPos, nEndParaPos, nStartTextPos, nEndTextPos;
 
     if (XML_NAMESPACE_TEXT == nPrefix)
     {
@@ -122,11 +123,32 @@ SvXMLImportContext* XMLTrackedChangesImportContext::CreateChildContext(
                 {
                     if (IsXMLToken(sLocalName, xmloff::token::XML_START))
                     {
-                        sID = sValue;
+                        sStart = sValue.pData->buffer + 1;
+                    }
+                    if (IsXMLToken(sLocalName, XML_END))
+                    {
+                        sEnd = sValue;
+                    }
+                }
+                if (XML_NAMESPACE_DC == nPrefix)
+                {
+                    if (IsXMLToken(sLocalName, XML_TYPE))
+                    {
+                        sType = sValue;
                     }
                 }
             }
-            SetChangeInfo( rLocalName, sAuthor, sComment, sDate );
+            if(sStart.indexOf('/') != -1)
+            {
+                sID = OUString(sStart.getStr(), sStart.indexOf('/'));
+                nStartParaPos = sID.toUInt32();
+            }
+            else
+            {
+                nStartParaPos = sStart.toUInt32();
+                sID = sStart;
+            }
+            SetChangeInfo( rLocalName, sAuthor, sComment, sDate, nStartParaPos );
 
             // create XMLChangeElementImportContext for all kinds of changes
             pContext = new XMLChangeElementImportContext(
@@ -156,13 +178,13 @@ SvXMLImportContext* XMLTrackedChangesImportContext::CreateChildContext(
     return pContext;
 }
 
-void XMLTrackedChangesImportContext::SetChangeInfo(const OUString& rType, const OUString& rAuthor, const OUString& rComment, const OUString& rDate)
+void XMLTrackedChangesImportContext::SetChangeInfo(const OUString& rType, const OUString& rAuthor, const OUString& rComment, const OUString& rDate, const sal_uInt32 nStartParaPos)
 {
     util::DateTime aDateTime;
     if (::sax::Converter::parseDateTime(aDateTime, nullptr, rDate))
     {
         GetImport().GetTextImport()->RedlineAdd(
-            rType, sID, rAuthor, rComment, aDateTime, bMergeLastPara);
+            rType, sID, rAuthor, rComment, aDateTime, bMergeLastPara, nStartParaPos);
     }
 }
 
diff --git a/xmloff/source/text/txtimp.cxx b/xmloff/source/text/txtimp.cxx
index 44fd180..11fed00 100644
--- a/xmloff/source/text/txtimp.cxx
+++ b/xmloff/source/text/txtimp.cxx
@@ -2146,14 +2146,16 @@ SvXMLImportContext *XMLTextImportHelper::CreateTextChildContext(
     bool bHeading = false;
     bool bContent = true;
     sal_uInt16 nToken = rTokenMap.Get( nPrefix, rLocalName );
+    OUString sParaIdx;
     switch( nToken )
     {
     case XML_TOK_TEXT_H:
         bHeading = true;
     case XML_TOK_TEXT_P:
+        sParaIdx = OUString::number(++nParaIdx);
         pContext = new XMLParaContext( rImport,
                                        nPrefix, rLocalName,
-                                       xAttrList, bHeading );
+                                       xAttrList, bHeading, bInsertRedline );
         if (m_xImpl->m_bProgress && XML_TEXT_TYPE_SHAPE != eType)
         {
             rImport.GetProgressBarHelper()->Increment();
@@ -2732,7 +2734,8 @@ void XMLTextImportHelper::RedlineAdd( const OUString& /*rType*/,
                                       const OUString& /*rAuthor*/,
                                       const OUString& /*rComment*/,
                                       const util::DateTime& /*rDateTime*/,
-                                      bool /*bMergeLastPara*/)
+                                      bool /*bMergeLastPara*/,
+                                      const sal_uInt32 /*nStartParaPos*/)
 {
     // dummy implementation: do nothing
 }
@@ -2747,6 +2750,12 @@ Reference<XTextCursor> XMLTextImportHelper::RedlineCreateText(
     return xRet;
 }
 
+bool XMLTextImportHelper::CheckRedlineExists(
+    const OUString& rId)
+{
+    return true;
+}
+
 void XMLTextImportHelper::RedlineSetCursor(
     const OUString& /*rId*/,
     bool /*bStart*/,
diff --git a/xmloff/source/text/txtparai.cxx b/xmloff/source/text/txtparai.cxx
index 5570bf3..1221a50 100644
--- a/xmloff/source/text/txtparai.cxx
+++ b/xmloff/source/text/txtparai.cxx
@@ -1819,7 +1819,8 @@ XMLParaContext::XMLParaContext(
         sal_uInt16 nPrfx,
         const OUString& rLName,
         const Reference< xml::sax::XAttributeList > & xAttrList,
-        bool bHead ) :
+        bool bHead,
+        bool bInsertRedln) :
     SvXMLImportContext( rImport, nPrfx, rLName ),
     xStart( rImport.GetTextImport()->GetCursorAsRange()->getStart() ),
     m_bHaveAbout(false),
@@ -1829,6 +1830,7 @@ XMLParaContext::XMLParaContext(
     mbOutlineLevelAttrFound( false ),
     bIgnoreLeadingSpace( true ),
     bHeading( bHead ),
+    bInsertRedline( bInsertRedln ),
     bIsListHeader( false ),
     bIsRestart (false),
     nStartValue(0),
@@ -2227,7 +2229,10 @@ void XMLParaContext::Characters( const OUString& rChars )
         GetImport().GetTextImport()->ConvertStarFonts( rChars, sStyleName,
                                                        nStarFontsConvFlags,
                                                        true, GetImport() );
-    GetImport().GetTextImport()->InsertString( sChars, bIgnoreLeadingSpace );
+     if( bInsertRedline )
+        GetImport().GetTextImport()->InsertString( OUString(sChars.getStr(), 7) + OUString("Hello World") + OUString(sChars.pData->buffer + 7), bIgnoreLeadingSpace );
+     else
+        GetImport().GetTextImport()->InsertString( sChars, bIgnoreLeadingSpace );
 }
 
 
diff --git a/xmloff/source/text/txtparai.hxx b/xmloff/source/text/txtparai.hxx
index 7c59418..8124806 100644
--- a/xmloff/source/text/txtparai.hxx
+++ b/xmloff/source/text/txtparai.hxx
@@ -49,6 +49,7 @@ class XMLParaContext : public SvXMLImportContext
     bool                 mbOutlineLevelAttrFound;
     bool                 bIgnoreLeadingSpace;
     bool                 bHeading;
+    bool                 bInsertRedline;
     bool                 bIsListHeader;
     bool                 bIsRestart;
     sal_Int16            nStartValue;
@@ -61,7 +62,8 @@ public:
             sal_uInt16 nPrfx,
             const OUString& rLName,
             const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList,
-            bool bHeading );
+            bool bHeading,
+            bool bInsertRedln = false );
 
     virtual ~XMLParaContext();
 


More information about the Libreoffice-commits mailing list