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

Justin Luth justin_luth at sil.org
Wed May 16 09:25:10 UTC 2018


 sw/qa/extras/ooxmlexport/data/tdf117504_numberingIndent.docx |binary
 sw/qa/extras/ooxmlexport/ooxmlexport12.cxx                   |    6 ++++++
 writerfilter/source/dmapper/DomainMapper_Impl.cxx            |   11 +++++++++++
 writerfilter/source/dmapper/DomainMapper_Impl.hxx            |    4 ++--
 4 files changed, 19 insertions(+), 2 deletions(-)

New commits:
commit 8920d865ee148518bf71f71ce1866b24cc17c07e
Author: Justin Luth <justin_luth at sil.org>
Date:   Thu May 10 15:36:11 2018 +0300

    tdf#117504 ooxmlimport: check paragraph props for actual style
    
    m_sCurrentParaStyleName sounds like a nice idea, and has been
    around since the initial fork, but by the time finishParagraph()
    rolls around, the chances that it is still accurate are rather low.
    Anything that contains a paragraph (like comments, textboxes,
    shapes, tables, flys etc) might have modified that value.
    
    This fix queries the current paragraph itself to see if
    PROP_PARA_STYLE_NAME is set, which it typically is by
    lcl_startParagraphGroup() except when IsInShape().
    If it isn't specified, then fallback to the previous result, which
    still may not be accurate, but at least it won't be a regression.
    
    It is too late in the development cycle to look into fully
    eliminating m_sCurrentParaStyleName. I hope to investigate that
    in the 6.2 development cycle.
    
    Change-Id: I124688d864f553dd5778b3593f511cc41d31c262
    Reviewed-on: https://gerrit.libreoffice.org/54085
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Justin Luth <justin_luth at sil.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/sw/qa/extras/ooxmlexport/data/tdf117504_numberingIndent.docx b/sw/qa/extras/ooxmlexport/data/tdf117504_numberingIndent.docx
new file mode 100644
index 000000000000..091718984540
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf117504_numberingIndent.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx
index 878fd2ebf0de..4fda4e47a930 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx
@@ -725,6 +725,12 @@ DECLARE_OOXMLEXPORT_TEST(testObjectCrossReference, "object_cross_reference.odt")
     CPPUNIT_ASSERT_EQUAL(sal_uInt16(21), nIndex);
 }
 
+DECLARE_OOXMLEXPORT_TEST(testTdf117504_numberingIndent, "tdf117504_numberingIndent.docx")
+{
+    OUString sName = getProperty<OUString>(getParagraph(1), "NumberingStyleName");
+    CPPUNIT_ASSERT_MESSAGE("Paragraph has numbering style", !sName.isEmpty());
+}
+
 DECLARE_OOXMLEXPORT_TEST(testWatermark, "watermark.docx")
 {
     uno::Reference<drawing::XShape> xShape(getShape(1), uno::UNO_QUERY);
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 3cd7492538a5..f2274f0c646a 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -647,6 +647,17 @@ uno::Sequence< style::TabStop > DomainMapper_Impl::GetCurrentTabStopAndClear()
     return comphelper::containerToSequence(aRet);
 }
 
+const OUString DomainMapper_Impl::GetCurrentParaStyleName()
+{
+    // use saved currParaStyleName as a fallback, in case no particular para style name applied.
+    OUString sName = m_sCurrentParaStyleName;
+    PropertyMapPtr pParaContext = GetTopContextOfType(CONTEXT_PARAGRAPH);
+    if ( pParaContext && pParaContext->isSet(PROP_PARA_STYLE_NAME) )
+        pParaContext->getProperty(PROP_PARA_STYLE_NAME)->second >>= sName;
+
+    return sName;
+}
+
 /*-------------------------------------------------------------------------
     returns a the value from the current paragraph style - if available
     TODO: What about parent styles?
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 482300c13a4c..dc229c28b614 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -474,7 +474,7 @@ private:
     PropertyMapPtr           m_pLastCharacterContext;
 
     ::std::vector<DeletableTabStop> m_aCurrentTabStops;
-    OUString                        m_sCurrentParaStyleName;
+    OUString                        m_sCurrentParaStyleName; //highly inaccurate. Overwritten by "overlapping" paragraphs like comments, flys.
     bool                            m_bInStyleSheetImport; //in import of fonts, styles, lists or lfos
     bool                            m_bInAnyTableImport; //in import of fonts, styles, lists or lfos
     bool                            m_bInHeaderFooterImport;
@@ -693,7 +693,7 @@ public:
     css::uno::Sequence<css::style::TabStop> GetCurrentTabStopAndClear();
 
     void            SetCurrentParaStyleName(const OUString& sStringValue) {m_sCurrentParaStyleName = sStringValue;}
-    const OUString& GetCurrentParaStyleName() const {return m_sCurrentParaStyleName;}
+    const OUString  GetCurrentParaStyleName();
 
     css::uno::Any GetPropertyFromStyleSheet(PropertyIds eId);
     void        SetStyleSheetImport( bool bSet ) { m_bInStyleSheetImport = bSet;}


More information about the Libreoffice-commits mailing list