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

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Sep 28 01:53:09 PDT 2012


 sw/qa/extras/ooxmlimport/data/n782061.docx      |binary
 sw/qa/extras/ooxmlimport/ooxmlimport.cxx        |   12 ++++++++++++
 writerfilter/source/dmapper/DomainMapper.cxx    |   14 +++++++++++++-
 writerfilter/source/dmapper/StyleSheetTable.cxx |    4 ++++
 writerfilter/source/dmapper/StyleSheetTable.hxx |    3 +++
 5 files changed, 32 insertions(+), 1 deletion(-)

New commits:
commit 7a3a8a254363801bf6893b23d67f86a7461f8f3b
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Fri Sep 28 09:52:29 2012 +0100

    n#782061 testcase
    
    Change-Id: I6aa95063ac8fe825b47decc68b08a35d81e4d59d

diff --git a/sw/qa/extras/ooxmlimport/data/n782061.docx b/sw/qa/extras/ooxmlimport/data/n782061.docx
new file mode 100644
index 0000000..9d8218b
Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/n782061.docx differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 1cefa39..a83a398 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -96,6 +96,7 @@ public:
     void testN780853();
     void testN780843();
     void testShadow();
+    void testN782061();
 
     CPPUNIT_TEST_SUITE(Test);
 #if !defined(MACOSX) && !defined(WNT)
@@ -138,6 +139,7 @@ public:
     CPPUNIT_TEST(testN780853);
     CPPUNIT_TEST(testN780843);
     CPPUNIT_TEST(testShadow);
+    CPPUNIT_TEST(testN782061);
 #endif
     CPPUNIT_TEST_SUITE_END();
 
@@ -981,6 +983,16 @@ void Test::testShadow()
     CPPUNIT_ASSERT_EQUAL(sal_Int32(273), sal_Int32(aShadow.ShadowWidth));
 }
 
+void Test::testN782061()
+{
+    /*
+     * The problem was that the character escapement in the second run was -58.
+     */
+    load("n782061.docx");
+
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(-9), getProperty<sal_Int32>(getRun(getParagraph(1), 2), "CharEscapement"));
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
commit 0c8017a364efb0e8a1cab57b22257e9b319fa0a1
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Fri Sep 28 09:51:42 2012 +0100

    n#782061 DOCX import: w:position should respect w:sz in w:rPrDefault
    
    Subscript relative font size (w:position) is in percents in Writer, but
    is in half points in Word. When checking for the default font size to
    count the percent value, the mapper should search font size (w:sz) not
    only in direct character properties, but also in default character
    properties (w:rPrDefault).
    
    Change-Id: I9286d44c6498c765ddfee795d50921ef58b80071

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 52d8c1a..cfd8dad 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -2132,7 +2132,9 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType
                 if (xCharStyle.is())
                     xCharStyle->setPropertyValue(rPropNameSupplier.GetName(PROP_CHAR_HEIGHT), aVal);
             }
-            m_pImpl->deferCharacterProperty( nSprmId, uno::makeAny( nIntValue ));
+            // Make sure char sizes defined in the stylesheets don't affect char props from direct formatting.
+            if (!m_pImpl->IsStyleSheetImport())
+                m_pImpl->deferCharacterProperty( nSprmId, uno::makeAny( nIntValue ));
         }
         break;
     case NS_sprm::LN_CHpsInc:
@@ -3300,12 +3302,22 @@ void DomainMapper::processDeferredCharacterProperties( const std::map< sal_Int32
             else
             {
                 std::map< sal_Int32, uno::Any >::const_iterator font = deferredCharacterProperties.find( NS_sprm::LN_CHps );
+                PropertyMapPtr pDefaultCharProps = m_pImpl->GetStyleSheetTable()->GetDefaultCharProps();
+                PropertyMap::iterator aDefaultFont = pDefaultCharProps->find(PropertyDefinition( PROP_CHAR_HEIGHT, false ));
                 if( font != deferredCharacterProperties.end())
                 {
                     double fontSize = 0;
                     font->second >>= fontSize;
                     nEscapement = nIntValue * 100 / fontSize;
                 }
+                // TODO if not direct formatting, check the style first, not directly the default char props.
+                else if (aDefaultFont != pDefaultCharProps->end())
+                {
+                    double fHeight = 0;
+                    aDefaultFont->second >>= fHeight;
+                    // fHeight is in points, nIntValue is in half points, nEscapement is in percents.
+                    nEscapement = nIntValue * 100 / fHeight / 2;
+                }
                 else
                 { // TODO: Find out the font size. The 58/-58 values were here previous, but I have
                   // no idea what they are (they are probably some random guess that did fit whatever
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index be06d59..044b53c 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -360,6 +360,10 @@ StyleSheetTable::~StyleSheetTable()
     delete m_pImpl;
 }
 
+PropertyMapPtr StyleSheetTable::GetDefaultCharProps()
+{
+    return m_pImpl->m_pDefaultCharProps;
+}
 
 void StyleSheetTable::lcl_attribute(Id Name, Value & val)
 {
diff --git a/writerfilter/source/dmapper/StyleSheetTable.hxx b/writerfilter/source/dmapper/StyleSheetTable.hxx
index c0ee6de..d668989 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.hxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.hxx
@@ -96,6 +96,9 @@ public:
 
     OUString getOrCreateCharStyle( PropertyValueVector_t& rCharProperties );
 
+    /// Returns the default character properties.
+    PropertyMapPtr GetDefaultCharProps();
+
 private:
     // Properties
     virtual void lcl_attribute(Id Name, Value & val);


More information about the Libreoffice-commits mailing list