[Libreoffice-commits] .: 3 commits - sw/inc sw/source writerfilter/source

Cédric Bosdonnat cbosdo at kemper.freedesktop.org
Sat Nov 12 05:52:23 PST 2011


 sw/inc/IDocumentSettingAccess.hxx              |    1 +
 sw/inc/doc.hxx                                 |    1 +
 sw/source/core/doc/dbgoutsw.cxx                |    6 +++---
 sw/source/core/doc/doc.cxx                     |    5 +++++
 sw/source/core/doc/docnew.cxx                  |    1 +
 sw/source/core/text/guess.cxx                  |    8 ++++++--
 sw/source/filter/ww8/ww8par.cxx                |    1 +
 sw/source/filter/xml/xmlimp.cxx                |   10 ++++++++++
 sw/source/ui/uno/SwXDocumentSettings.cxx       |   16 +++++++++++++++-
 writerfilter/source/filter/ImportFilter.cxx    |    9 +++++++++
 writerfilter/source/rtftok/rtfdocumentimpl.cxx |    4 ++++
 11 files changed, 56 insertions(+), 6 deletions(-)

New commits:
commit 8a232f007458c9f474c6bf8fdf1f7f2c5ae467cf
Author: Cédric Bosdonnat <cedric.bosdonnat.ooo at free.fr>
Date:   Fri Nov 11 22:11:58 2011 +0100

    RTF import: Fixed unicode characters import, fdo#42109
    
    Actually implemented the \uc to skip the ANSI representation after the
    unicode value.

diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 9cc025c..7ba5249 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -2221,6 +2221,10 @@ int RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam)
                 }
             }
             break;
+        case RTF_UC:
+            if ((SAL_MIN_INT16 <= nParam) && (nParam <= SAL_MAX_INT16))
+                m_aStates.top().nUc = nParam;
+            break;
         case RTF_U:
             if ((SAL_MIN_INT16 <= nParam) && (nParam <= SAL_MAX_INT16))
             {
commit 74b6759ee81c95ae75046dd411d2bd0bd2324a8b
Author: Cédric Bosdonnat <cedric.bosdonnat.ooo at free.fr>
Date:   Thu Nov 10 16:10:25 2011 +0100

    n#707157: Word doesn't break the numberings and prefers hiding them
    
    Added a compatibility option to reproduce Word's behavior when importing
    Doc, docx and RTF files. The default behavior isn't changed.

diff --git a/sw/inc/IDocumentSettingAccess.hxx b/sw/inc/IDocumentSettingAccess.hxx
index 50e8096..d912376 100644
--- a/sw/inc/IDocumentSettingAccess.hxx
+++ b/sw/inc/IDocumentSettingAccess.hxx
@@ -83,6 +83,7 @@ namespace com { namespace sun { namespace star { namespace i18n { struct Forbidd
          COLLAPSE_EMPTY_CELL_PARA,
          SMALL_CAPS_PERCENTAGE_66,
          TAB_OVERFLOW,
+         UNBREAKABLE_NUMBERINGS,
          // COMPATIBILITY FLAGS END
 
          BROWSE_MODE,
diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx
index e4848f5..8427b17 100644
--- a/sw/inc/doc.hxx
+++ b/sw/inc/doc.hxx
@@ -579,6 +579,7 @@ private:
     bool mbTabAtLeftIndentForParagraphsInList;             // #i89181# - see above
     bool mbSmallCapsPercentage66;
     bool mbTabOverflow;
+    bool mbUnbreakableNumberings;
 
     bool mbLastBrowseMode                           : 1;
 
diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx
index bdded6f..326cfde 100644
--- a/sw/source/core/doc/doc.cxx
+++ b/sw/source/core/doc/doc.cxx
@@ -203,6 +203,7 @@ bool SwDoc::get(/*[in]*/ DocumentSettingId id) const
         case COLLAPSE_EMPTY_CELL_PARA: return mbCollapseEmptyCellPara;
         case SMALL_CAPS_PERCENTAGE_66: return mbSmallCapsPercentage66;
         case TAB_OVERFLOW: return mbTabOverflow;
+        case UNBREAKABLE_NUMBERINGS: return mbUnbreakableNumberings;
 
         case BROWSE_MODE: return mbLastBrowseMode; // Attention: normally the ViewShell has to be asked!
         case HTML_MODE: return mbHTMLMode;
@@ -341,6 +342,10 @@ void SwDoc::set(/*[in]*/ DocumentSettingId id, /*[in]*/ bool value)
         case TAB_OVERFLOW:
             mbTabOverflow = value;
             break;
+
+        case UNBREAKABLE_NUMBERINGS:
+            mbUnbreakableNumberings = value;
+            break;
          // COMPATIBILITY FLAGS END
 
         case BROWSE_MODE: //can be used temporary (load/save) when no ViewShell is avaiable
diff --git a/sw/source/core/doc/docnew.cxx b/sw/source/core/doc/docnew.cxx
index f8a0ce2..656fb20 100644
--- a/sw/source/core/doc/docnew.cxx
+++ b/sw/source/core/doc/docnew.cxx
@@ -358,6 +358,7 @@ SwDoc::SwDoc()
     mbCollapseEmptyCellPara                 = true;        // hidden
     mbSmallCapsPercentage66                 = false;        // hidden
     mbTabOverflow                           = true;
+    mbUnbreakableNumberings                 = false;
 
     //
     // COMPATIBILITY FLAGS END
diff --git a/sw/source/core/text/guess.cxx b/sw/source/core/text/guess.cxx
index bc84437..83c1758 100644
--- a/sw/source/core/text/guess.cxx
+++ b/sw/source/core/text/guess.cxx
@@ -125,8 +125,12 @@ sal_Bool SwTxtGuess::Guess( const SwTxtPortion& rPor, SwTxtFormatInfo &rInf,
         if ( nLineWidth < 0 ) nLineWidth = 0;
     }
 
+    const bool bUnbreakableNumberings = rInf.GetTxtFrm()->GetTxtNode()->
+            getIDocumentSettingAccess()->get(IDocumentSettingAccess::UNBREAKABLE_NUMBERINGS);
+
     // first check if everything fits to line
-    if ( long ( nLineWidth ) * 2 > long ( nMaxLen ) * nPorHeight )
+    if ( ( long ( nLineWidth ) * 2 > long ( nMaxLen ) * nPorHeight ) ||
+         ( bUnbreakableNumberings && rPor.IsNumberPortion() ) )
     {
         // call GetTxtSize with maximum compression (for kanas)
         rInf.GetTxtSize( &rSI, rInf.GetIdx(), nMaxLen,
@@ -134,7 +138,7 @@ sal_Bool SwTxtGuess::Guess( const SwTxtPortion& rPor, SwTxtFormatInfo &rInf,
 
         nBreakWidth = nMinSize;
 
-        if ( nBreakWidth <= nLineWidth )
+        if ( ( nBreakWidth <= nLineWidth ) || ( bUnbreakableNumberings && rPor.IsNumberPortion() ) )
         {
             // portion fits to line
             nCutPos = rInf.GetIdx() + nMaxLen;
diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index 0f8f732..50530c1 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -1580,6 +1580,7 @@ void SwWW8ImplReader::ImportDop()
     rDoc.set(IDocumentSettingAccess::INVERT_BORDER_SPACING, true);
     rDoc.set(IDocumentSettingAccess::COLLAPSE_EMPTY_CELL_PARA, true);
     rDoc.set(IDocumentSettingAccess::TAB_OVERFLOW, true);
+    rDoc.set(IDocumentSettingAccess::UNBREAKABLE_NUMBERINGS, true);
 
     //
     // COMPATIBILITY FLAGS END
diff --git a/sw/source/filter/xml/xmlimp.cxx b/sw/source/filter/xml/xmlimp.cxx
index 06b95b3..5ba8ba9 100644
--- a/sw/source/filter/xml/xmlimp.cxx
+++ b/sw/source/filter/xml/xmlimp.cxx
@@ -1192,6 +1192,7 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC
     aSet.insert(String("PrintEmptyPages", RTL_TEXTENCODING_ASCII_US));
     aSet.insert(String("SmallCapsPercentage66", RTL_TEXTENCODING_ASCII_US));
     aSet.insert(String("TabOverflow", RTL_TEXTENCODING_ASCII_US));
+    aSet.insert(String("UnbreakableNumberings", RTL_TEXTENCODING_ASCII_US));
 
     sal_Int32 nCount = aConfigProps.getLength();
     const PropertyValue* pValues = aConfigProps.getConstArray();
@@ -1222,6 +1223,7 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC
     bool bUseOldPrinterMetrics = false;
     bool bSmallCapsPercentage66 = false;
     bool bTabOverflow = false;
+    bool bUnbreakableNumberings = false;
 
     OUString sRedlineProtectionKey( RTL_CONSTASCII_USTRINGPARAM( "RedlineProtectionKey" ) );
 
@@ -1293,6 +1295,8 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC
                     bSmallCapsPercentage66 = true;
                 else if( pValues->Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("TabOverflow")) )
                     bTabOverflow = true;
+                else if( pValues->Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("UnbreakableNumberings")) )
+                    bUnbreakableNumberings = true;
             }
             catch( Exception& )
             {
@@ -1452,6 +1456,12 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC
             OUString( RTL_CONSTASCII_USTRINGPARAM("TabOverflow") ), makeAny( false ) );
     }
 
+    if ( !bUnbreakableNumberings )
+    {
+        xProps->setPropertyValue(
+            OUString( RTL_CONSTASCII_USTRINGPARAM("UnbreakableNumberings") ), makeAny( false ) );
+    }
+
     Reference < XTextDocument > xTextDoc( GetModel(), UNO_QUERY );
     Reference < XText > xText = xTextDoc->getText();
     Reference<XUnoTunnel> xTextTunnel( xText, UNO_QUERY);
diff --git a/sw/source/ui/uno/SwXDocumentSettings.cxx b/sw/source/ui/uno/SwXDocumentSettings.cxx
index bba60d9..92aeb82 100644
--- a/sw/source/ui/uno/SwXDocumentSettings.cxx
+++ b/sw/source/ui/uno/SwXDocumentSettings.cxx
@@ -124,7 +124,8 @@ enum SwDocumentSettingsPropertyHandles
     HANDLE_INVERT_BORDER_SPACING,
     HANDLE_COLLAPSE_EMPTY_CELL_PARA,
     HANDLE_SMALL_CAPS_PERCENTAGE_66,
-    HANDLE_TAB_OVERFLOW
+    HANDLE_TAB_OVERFLOW,
+    HANDLE_UNBREAKABLE_NUMBERINGS
 };
 
 MasterPropertySetInfo * lcl_createSettingsInfo()
@@ -184,6 +185,7 @@ MasterPropertySetInfo * lcl_createSettingsInfo()
         { RTL_CONSTASCII_STRINGPARAM("CollapseEmptyCellPara"), HANDLE_COLLAPSE_EMPTY_CELL_PARA, CPPUTYPE_BOOLEAN, 0, 0},
         { RTL_CONSTASCII_STRINGPARAM("SmallCapsPercentage66"), HANDLE_SMALL_CAPS_PERCENTAGE_66, CPPUTYPE_BOOLEAN, 0, 0},
         { RTL_CONSTASCII_STRINGPARAM("TabOverflow"), HANDLE_TAB_OVERFLOW, CPPUTYPE_BOOLEAN, 0, 0},
+        { RTL_CONSTASCII_STRINGPARAM("UnbreakableNumberings"), HANDLE_UNBREAKABLE_NUMBERINGS, CPPUTYPE_BOOLEAN, 0, 0},
 /*
  * As OS said, we don't have a view when we need to set this, so I have to
  * find another solution before adding them to this property set - MTG
@@ -716,6 +718,12 @@ void SwXDocumentSettings::_setSingleValue( const comphelper::PropertyInfo & rInf
             mpDoc->set(IDocumentSettingAccess::TAB_OVERFLOW, bTmp);
         }
         break;
+        case HANDLE_UNBREAKABLE_NUMBERINGS:
+        {
+            sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
+            mpDoc->set(IDocumentSettingAccess::UNBREAKABLE_NUMBERINGS, bTmp);
+        }
+        break;
         default:
             throw UnknownPropertyException();
     }
@@ -1072,6 +1080,12 @@ void SwXDocumentSettings::_getSingleValue( const comphelper::PropertyInfo & rInf
             rValue.setValue( &bTmp, ::getBooleanCppuType() );
         }
         break;
+        case HANDLE_UNBREAKABLE_NUMBERINGS:
+        {
+            sal_Bool bTmp = mpDoc->get( IDocumentSettingAccess::UNBREAKABLE_NUMBERINGS );
+            rValue.setValue( &bTmp, ::getBooleanCppuType() );
+        }
+        break;
         default:
             throw UnknownPropertyException();
     }
diff --git a/writerfilter/source/filter/ImportFilter.cxx b/writerfilter/source/filter/ImportFilter.cxx
index 2950f9f..5ac315c 100644
--- a/writerfilter/source/filter/ImportFilter.cxx
+++ b/writerfilter/source/filter/ImportFilter.cxx
@@ -28,8 +28,10 @@
 
 #include <osl/diagnose.h>
 #include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/drawing/XDrawPageSupplier.hpp>
 #include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
 #include <comphelper/mediadescriptor.hxx>
 #include <oox/core/filterdetect.hxx>
 #include <dmapper/DomainMapper.hxx>
@@ -175,6 +177,13 @@ void WriterFilter::setTargetDocument( const uno::Reference< lang::XComponent >&
    throw (lang::IllegalArgumentException, uno::RuntimeException)
 {
    m_xDstDoc = xDoc;
+
+   // Set some compatibility options that are valid for all the formats
+   uno::Reference< lang::XMultiServiceFactory > xFactory( xDoc, uno::UNO_QUERY );
+   uno::Reference< beans::XPropertySet > xSettings( xFactory->createInstance(
+               rtl::OUString::createFromAscii( "com.sun.star.document.Settings" ) ), uno::UNO_QUERY );
+
+   xSettings->setPropertyValue( rtl::OUString::createFromAscii( "UnbreakableNumberings" ), uno::makeAny( sal_True ) );
 }
 
 void WriterFilter::setSourceDocument( const uno::Reference< lang::XComponent >& xDoc )
commit 75d38d0735f17549da5e4ec038f97478236c3048
Author: Cédric Bosdonnat <cedric.bosdonnat.ooo at free.fr>
Date:   Wed Nov 9 09:57:58 2011 +0100

    sw: fixed the dbglevel>1 build: GetBuffer() -> getStr()

diff --git a/sw/source/core/doc/dbgoutsw.cxx b/sw/source/core/doc/dbgoutsw.cxx
index 12edea0..d595b51 100644
--- a/sw/source/core/doc/dbgoutsw.cxx
+++ b/sw/source/core/doc/dbgoutsw.cxx
@@ -106,15 +106,15 @@ SW_DLLPUBLIC const char * dbg_out(const String & aStr)
     aDbgOutResult = rtl::OUStringToOString(aStr, RTL_TEXTENCODING_ASCII_US);
 
     if (bDbgOutStdErr)
-        fprintf(stderr, "%s", aDbgOutResult.GetBuffer());
+        fprintf(stderr, "%s", aDbgOutResult.getStr());
 
-    return aDbgOutResult.GetBuffer();
+    return aDbgOutResult.getStr();
 }
 
 SW_DLLPUBLIC const char * dbg_out(const ::rtl::OUString & aStr)
 {
     aDbgOutResult = rtl::OUStringToOString(aStr, RTL_TEXTENCODING_ASCII_US);
-    return aDbgOutResult.GetBuffer();
+    return aDbgOutResult.getStr();
 }
 
 


More information about the Libreoffice-commits mailing list