diff -Nru libreoffice-l10n-4.4.2/accessibility/source/standard/vclxaccessiblebox.cxx libreoffice-l10n-4.4.6~rc3/accessibility/source/standard/vclxaccessiblebox.cxx --- libreoffice-l10n-4.4.2/accessibility/source/standard/vclxaccessiblebox.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/accessibility/source/standard/vclxaccessiblebox.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -113,9 +113,8 @@ case VCLEVENT_DROPDOWN_SELECT: case VCLEVENT_LISTBOX_SELECT: case VCLEVENT_LISTBOX_FOCUSITEMCHANGED: - { - // Forward the call to the list child. + // Forward the call to the list child. VCLXAccessibleList* pList = static_cast(m_xList.get()); if ( pList == NULL ) { @@ -125,15 +124,12 @@ if ( pList != NULL ) { pList->ProcessWindowEvent (rVclWindowEvent, m_bIsDropDownBox); - if(m_bIsDropDownBox) +#if defined WNT + if (m_bIsDropDownBox) { NotifyAccessibleEvent(AccessibleEventId::VALUE_CHANGED, Any(), Any()); - Any aOldValue; - Any aNewValue; - aOldValue <<= AccessibleStateType::INDETERMINATE; - NotifyAccessibleEvent(AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue); - } +#endif } break; } @@ -185,14 +181,10 @@ if ( sText.isEmpty() ) sText = xText->getText(); pList->UpdateSelection_Acc(sText, m_bIsDropDownBox); +#if defined WNT if (m_bIsDropDownBox || ( !m_bIsDropDownBox && m_aBoxType==COMBOBOX)) NotifyAccessibleEvent(AccessibleEventId::VALUE_CHANGED, Any(), Any()); - - Any aOldValue; - Any aNewValue; - aOldValue <<= AccessibleStateType::INDETERMINATE; - NotifyAccessibleEvent(AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue); - +#endif } } break; @@ -557,7 +549,7 @@ ListBox* pListBox = static_cast< ListBox* >( GetWindow() ); if (pListBox != NULL && pListBox->GetEntryCount() > 0) { - nSelectedEntryCount = pListBox->GetSelectEntryCount(); + nSelectedEntryCount = pListBox->GetSelectEntryCount(); if ( nSelectedEntryCount == 0) rStateSet.AddState(AccessibleStateType::INDETERMINATE); } diff -Nru libreoffice-l10n-4.4.2/accessibility/source/standard/vclxaccessiblelist.cxx libreoffice-l10n-4.4.6~rc3/accessibility/source/standard/vclxaccessiblelist.cxx --- libreoffice-l10n-4.4.2/accessibility/source/standard/vclxaccessiblelist.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/accessibility/source/standard/vclxaccessiblelist.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -205,7 +205,7 @@ } -void VCLXAccessibleList::UpdateSelection_Impl_Acc(bool b_IsDropDownList) +void VCLXAccessibleList::UpdateSelection_Impl_Acc(bool bHasDropDownList) { uno::Any aOldValue, aNewValue; @@ -258,11 +258,12 @@ } } } - if (m_aBoxType == COMBOBOX && b_IsDropDownList) + + if (m_aBoxType == COMBOBOX) { //VCLXAccessibleDropDownComboBox //when in list is dropped down, xText = NULL - if (m_pListBoxHelper && m_pListBoxHelper->IsInDropDown()) + if (bHasDropDownList && m_pListBoxHelper && m_pListBoxHelper->IsInDropDown()) { if ( aNewValue.hasValue() || aOldValue.hasValue() ) { @@ -272,33 +273,15 @@ aNewValue ); NotifyListItem(aNewValue); - } } - } - else if (m_aBoxType == COMBOBOX && !b_IsDropDownList) - { - //VCLXAccessibleComboBox - NotifyAccessibleEvent( AccessibleEventId::SELECTION_CHANGED, uno::Any(), uno::Any() ); - } - else if (m_aBoxType == LISTBOX && b_IsDropDownList) - { - //VCLXAccessibleDropdownListBox - //when in list is dropped down, xText = NULL - if (m_pListBoxHelper && m_pListBoxHelper->IsInDropDown()) + else { - if ( aNewValue.hasValue() || aOldValue.hasValue() ) - { - NotifyAccessibleEvent( - AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, - aOldValue, - aNewValue ); - - NotifyListItem(aNewValue); - } + //VCLXAccessibleComboBox + NotifyAccessibleEvent( AccessibleEventId::SELECTION_CHANGED, uno::Any(), uno::Any() ); } } - else if (m_aBoxType == LISTBOX && !b_IsDropDownList) + else if (m_aBoxType == LISTBOX) { if ( aNewValue.hasValue() || aOldValue.hasValue() ) { diff -Nru libreoffice-l10n-4.4.2/accessibility/source/standard/vclxaccessibletabcontrol.cxx libreoffice-l10n-4.4.6~rc3/accessibility/source/standard/vclxaccessibletabcontrol.cxx --- libreoffice-l10n-4.4.2/accessibility/source/standard/vclxaccessibletabcontrol.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/accessibility/source/standard/vclxaccessibletabcontrol.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -377,10 +377,9 @@ Reference< XAccessible > xChild = m_aAccessibleChildren[i]; if ( !xChild.is() ) { - if ( m_pTabControl ) + sal_uInt16 nPageId = m_pTabControl ? m_pTabControl->GetPageId((sal_uInt16)i) : 0; + if (nPageId) { - sal_uInt16 nPageId = m_pTabControl->GetPageId( (sal_uInt16)i ); - xChild = new VCLXAccessibleTabPage( m_pTabControl, nPageId ); // insert into tab page list diff -Nru libreoffice-l10n-4.4.2/basic/inc/pch/precompiled_sb.hxx libreoffice-l10n-4.4.6~rc3/basic/inc/pch/precompiled_sb.hxx --- libreoffice-l10n-4.4.2/basic/inc/pch/precompiled_sb.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/basic/inc/pch/precompiled_sb.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include @@ -45,6 +44,7 @@ #include #include #include +#include #include #include #include diff -Nru libreoffice-l10n-4.4.2/basic/source/classes/sb.cxx libreoffice-l10n-4.4.6~rc3/basic/source/classes/sb.cxx --- libreoffice-l10n-4.4.2/basic/source/classes/sb.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/basic/source/classes/sb.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -109,10 +110,22 @@ DocBasicItem::~DocBasicItem() { - SolarMutexGuard g; + // tdf#90969 HACK: don't use SolarMutexGuard - there is a horrible global + // map GaDocBasicItems holding instances, and these get deleted from exit + // handlers, when the SolarMutex is already dead + tools::SolarMutex::Acquire(); - stopListening(); - mxClassModules.Clear(); // release with SolarMutex locked + try + { + stopListening(); + mxClassModules.Clear(); // release with SolarMutex locked + } + catch (...) + { + assert(false); + } + + tools::SolarMutex::Release(); } void DocBasicItem::clearDependingVarsOnDelete( StarBASIC& rDeletedBasic ) diff -Nru libreoffice-l10n-4.4.2/basic/source/classes/sbxmod.cxx libreoffice-l10n-4.4.6~rc3/basic/source/classes/sbxmod.cxx --- libreoffice-l10n-4.4.2/basic/source/classes/sbxmod.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/basic/source/classes/sbxmod.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -2152,13 +2152,8 @@ if( mpPar.Is() ) { // Enregister this as element 0, but don't reset the parent! - switch( GetType() ) { - case SbxEMPTY: - case SbxVOID: - break; - default: + if( GetType() != SbxVOID ) { mpPar->PutDirect( pThisCopy, 0 ); - break; } SetParameters( NULL ); } diff -Nru libreoffice-l10n-4.4.2/basic/source/comp/exprnode.cxx libreoffice-l10n-4.4.6~rc3/basic/source/comp/exprnode.cxx --- libreoffice-l10n-4.4.2/basic/source/comp/exprnode.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/basic/source/comp/exprnode.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -320,9 +320,9 @@ else if( nl < SbxMINLNG ) err = true, nl = SbxMINLNG; if( nr > SbxMAXLNG ) err = true, nr = SbxMAXLNG; else if( nr < SbxMINLNG ) err = true, nr = SbxMINLNG; - ll = (long) nl; lr = (long) nr; - llMod = (long) (nl < 0 ? nl - 0.5 : nl + 0.5); - lrMod = (long) (nr < 0 ? nr - 0.5 : nr + 0.5); + ll = static_cast(nl); lr = static_cast(nr); + llMod = static_cast(nl); + lrMod = static_cast(nr); if( err ) { pGen->GetParser()->Error( SbERR_MATH_OVERFLOW ); @@ -387,7 +387,7 @@ { pGen->GetParser()->Error( SbERR_ZERODIV ); nVal = HUGE_VAL; bError = true; - } else nVal = llMod % lrMod; + } else nVal = llMod - lrMod * (llMod/lrMod); eType = SbxLONG; break; case AND: nVal = (double) ( ll & lr ); eType = SbxLONG; break; diff -Nru libreoffice-l10n-4.4.2/basic/source/runtime/methods.cxx libreoffice-l10n-4.4.6~rc3/basic/source/runtime/methods.cxx --- libreoffice-l10n-4.4.2/basic/source/runtime/methods.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/basic/source/runtime/methods.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -47,7 +47,6 @@ #include "errobject.hxx" #include -#include #include #include @@ -61,6 +60,8 @@ #include #include +#include + using namespace comphelper; using namespace osl; using namespace com::sun::star; @@ -3518,6 +3519,38 @@ } } +namespace { + +// note: BASIC does not use comphelper::random, because +// Randomize(int) must be supported and should not affect non-BASIC random use +struct RandomNumberGenerator +{ + std::mt19937 global_rng; + + RandomNumberGenerator() + { + try + { + std::random_device rd; + // initialises the state of the global random number generator + // should only be called once. + // (note, a few std::variate_generator<> (like normal) have their + // own state which would need a reset as well to guarantee identical + // sequence of numbers, e.g. via myrand.distribution().reset()) + global_rng.seed(rd() ^ time(nullptr)); + } + catch (std::runtime_error& e) + { + SAL_WARN("basic", "Using std::random_device failed: " << e.what()); + global_rng.seed(time(nullptr)); + } + } +}; + +class theRandomNumberGenerator : public rtl::Static {}; + +} + RTLFUNC(Randomize) { (void)pBasic; @@ -3531,12 +3564,9 @@ if( rPar.Count() == 2 ) { nSeed = (int)rPar.Get(1)->GetInteger(); + theRandomNumberGenerator::get().global_rng.seed(nSeed); } - else - { - nSeed = (int)time(NULL); - } - comphelper::rng::reseed(nSeed); + // without parameter, no need to do anything - RNG is seeded at first use } RTLFUNC(Rnd) @@ -3550,7 +3580,9 @@ } else { - rPar.Get(0)->PutDouble(comphelper::rng::uniform_real_distribution()); + std::uniform_real_distribution dist(0.0, 1.0); + double const tmp(dist(theRandomNumberGenerator::get().global_rng)); + rPar.Get(0)->PutDouble(tmp); } } @@ -3590,8 +3622,12 @@ // attach additional parameters - everything must be parsed anyway if( nArgCount >= 4 ) { - aCmdLine += " "; - aCmdLine += rPar.Get(3)->GetOUString(); + OUString tmp = rPar.Get(3)->GetOUString().trim(); + if (!tmp.isEmpty()) + { + aCmdLine += " "; + aCmdLine += tmp; + } } else if( aCmdLine.isEmpty() ) { diff -Nru libreoffice-l10n-4.4.2/bin/lo-commit-stat libreoffice-l10n-4.4.6~rc3/bin/lo-commit-stat --- libreoffice-l10n-4.4.2/bin/lo-commit-stat 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/bin/lo-commit-stat 2015-10-27 20:55:54.000000000 +0000 @@ -17,7 +17,8 @@ my %bugzillas = ( - fdo => "https://bugs.libreoffice.org/show_bug.cgi?id=", + fdo => "https://bugs.documentfoundation.org/show_bug.cgi?id=", + tdf => "https://bugs.documentfoundation.org/show_bug.cgi?id=", bnc => "https://bugzilla.novell.com/show_bug.cgi?id=", rhbz => "https://bugzilla.redhat.com/show_bug.cgi?id=", i => "https://issues.apache.org/ooo/show_bug.cgi?id=", @@ -54,7 +55,7 @@ # print " found $bug\n"; # remove bug number from the comment; it will be added later a standardized way $bug_orig =~ s/\#/\\#/; - $line =~ s/[Rr]esolve[ds]:?\s*$bug_orig\s*//; + $line =~ s/(,\s)*[Rr](elated|esolve[ds]):?\s*$bug_orig\s*//; $line =~ s/\s*-\s*$bug_orig\s*//; $line =~ s/\(?$bug_orig\)?\s*[:,-]?\s*//; diff -Nru libreoffice-l10n-4.4.2/bin/lo-xlate-lang libreoffice-l10n-4.4.6~rc3/bin/lo-xlate-lang --- libreoffice-l10n-4.4.2/bin/lo-xlate-lang 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/bin/lo-xlate-lang 2015-10-27 20:55:54.000000000 +0000 @@ -102,7 +102,7 @@ } usage ("no mapping found for $LanguageCode\n",1) - if (!(%$LanguageMap->{$LanguageCode})); + if (!($LanguageMap->{$LanguageCode})); print $LanguageMap->{$LanguageCode}, "\n"; diff -Nru libreoffice-l10n-4.4.2/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx libreoffice-l10n-4.4.6~rc3/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx --- libreoffice-l10n-4.4.2/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -132,6 +132,12 @@ } pCppArgs[nPos] = pUnoArgs[nPos] = fpreg++; nf++; + + if (ng < ppc64::MAX_GPR_REGS) + { + ng++; + gpreg++; + } } else { diff -Nru libreoffice-l10n-4.4.2/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx libreoffice-l10n-4.4.6~rc3/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx --- libreoffice-l10n-4.4.2/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -124,6 +124,8 @@ if (pReturnType->pType->nSize > 8) pRegisters[1] = r4; } +#else + (void)r4; #endif default: break; @@ -185,45 +187,29 @@ // fill registers __asm__ __volatile__ ( - "ld 3, 0(%0)\n\t" - "ld 4, 8(%0)\n\t" - "ld 5, 16(%0)\n\t" - "ld 6, 24(%0)\n\t" - "ld 7, 32(%0)\n\t" - "ld 8, 40(%0)\n\t" - "ld 9, 48(%0)\n\t" - "ld 10, 56(%0)\n\t" - "lfd 1, 0(%1)\n\t" - "lfd 2, 8(%1)\n\t" - "lfd 3, 16(%1)\n\t" - "lfd 4, 24(%1)\n\t" - "lfd 5, 32(%1)\n\t" - "lfd 6, 40(%1)\n\t" - "lfd 7, 48(%1)\n\t" - "lfd 8, 56(%1)\n\t" - "lfd 9, 64(%1)\n\t" - "lfd 10, 72(%1)\n\t" - "lfd 11, 80(%1)\n\t" - "lfd 12, 88(%1)\n\t" - "lfd 13, 96(%1)\n\t" - : : "r" (pGPR), "r" (pFPR) - : "r0", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", - "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", "fr8", "fr9", - "fr10", "fr11", "fr12", "fr13" + "lfd 1, 0(%0)\n\t" + "lfd 2, 8(%0)\n\t" + "lfd 3, 16(%0)\n\t" + "lfd 4, 24(%0)\n\t" + "lfd 5, 32(%0)\n\t" + "lfd 6, 40(%0)\n\t" + "lfd 7, 48(%0)\n\t" + "lfd 8, 56(%0)\n\t" + "lfd 9, 64(%0)\n\t" + "lfd 10, 72(%0)\n\t" + "lfd 11, 80(%0)\n\t" + "lfd 12, 88(%0)\n\t" + "lfd 13, 96(%0)\n\t" + : : "r" (pFPR) + : "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", "fr8", "fr9", + "fr10", "fr11", "fr12", "fr13" ); // tell gcc that r3 to r11 are not available to it for doing the TOC and exception munge on the func call register sal_uInt64 r3 asm("r3"); register sal_uInt64 r4 asm("r4"); - register sal_uInt64 r5 asm("r5"); - register sal_uInt64 r6 asm("r6"); - register sal_uInt64 r7 asm("r7"); - register sal_uInt64 r8 asm("r8"); - register sal_uInt64 r9 asm("r9"); - register sal_uInt64 r10 asm("r10"); - register sal_uInt64 r11 asm("r11"); - (*pFunc)(r3, r4, r5, r6, r7, r8, r9, r10); + (*pFunc)(pGPR[0], pGPR[1], pGPR[2], pGPR[3], pGPR[4], pGPR[5], pGPR[6], pGPR[7]); // get return value __asm__ __volatile__ ( @@ -243,16 +229,20 @@ // The value in %xmm register is already prepared to be retrieved as a float, // thus we treat float and double the same -#define INSERT_FLOAT( pSV, nr, pFPR, pDS, bOverflow ) \ - if ( nr < ppc64::MAX_SSE_REGS ) \ +#define INSERT_FLOAT( pSV, nr, pFPR, nGPR, pDS, bOverflow ) \ + if ( nGPR < ppc64::MAX_GPR_REGS ) \ + ++nGPR; \ + if ( nr < ppc64::MAX_SSE_REGS ) \ pFPR[nr++] = *reinterpret_cast( pSV ); \ else \ bOverflow = true; \ if (bOverflow) \ *pDS++ = *reinterpret_cast( pSV ); // verbatim! -#define INSERT_DOUBLE( pSV, nr, pFPR, pDS, bOverflow ) \ - if ( nr < ppc64::MAX_SSE_REGS ) \ +#define INSERT_DOUBLE( pSV, nr, pFPR, nGPR, pDS, bOverflow ) \ + if ( nGPR < ppc64::MAX_GPR_REGS ) \ + ++nGPR; \ + if ( nr < ppc64::MAX_SSE_REGS ) \ pFPR[nr++] = *reinterpret_cast( pSV ); \ else \ bOverflow = true; \ @@ -377,7 +367,6 @@ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr )) { -// uno_copyAndConvertData( pCppArgs[nPos] = alloca( 8 ), pUnoArgs[nPos], pParamTypeDescr, uno_copyAndConvertData( pCppArgs[nPos] = pStack, pUnoArgs[nPos], pParamTypeDescr, pThis->getBridge()->getUno2Cpp() ); switch (pParamTypeDescr->eTypeClass) @@ -385,7 +374,7 @@ case typelib_TypeClass_HYPER: case typelib_TypeClass_UNSIGNED_HYPER: #if OSL_DEBUG_LEVEL > 2 - fprintf(stderr, "hyper is %lx\n", pCppArgs[nPos]); + fprintf(stderr, "hyper is %lx\n", pCppArgs[nPos]); #endif INSERT_INT64( pCppArgs[nPos], nGPR, pGPR, pStack, bOverflow ); break; @@ -393,7 +382,7 @@ case typelib_TypeClass_UNSIGNED_LONG: case typelib_TypeClass_ENUM: #if OSL_DEBUG_LEVEL > 2 - fprintf(stderr, "long is %x\n", pCppArgs[nPos]); + fprintf(stderr, "long is %x\n", pCppArgs[nPos]); #endif INSERT_INT32( pCppArgs[nPos], nGPR, pGPR, pStack, bOverflow ); break; @@ -407,10 +396,12 @@ INSERT_INT8( pCppArgs[nPos], nGPR, pGPR, pStack, bOverflow ); break; case typelib_TypeClass_FLOAT: - INSERT_FLOAT( pCppArgs[nPos], nFPR, pFPR, pStack, bOverflow ); - break; + INSERT_FLOAT( pCppArgs[nPos], nFPR, pFPR, nGPR, pStack, bOverflow ); + break; case typelib_TypeClass_DOUBLE: - INSERT_DOUBLE( pCppArgs[nPos], nFPR, pFPR, pStack, bOverflow ); + INSERT_DOUBLE( pCppArgs[nPos], nFPR, pFPR, nGPR, pStack, bOverflow ); + break; + default: break; } diff -Nru libreoffice-l10n-4.4.2/chart2/source/controller/dialogs/DataBrowser.cxx libreoffice-l10n-4.4.6~rc3/chart2/source/controller/dialogs/DataBrowser.cxx --- libreoffice-l10n-4.4.2/chart2/source/controller/dialogs/DataBrowser.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/chart2/source/controller/dialogs/DataBrowser.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -48,6 +48,7 @@ #include #include +#include #include #include @@ -667,12 +668,19 @@ aResult = aText; else if( aAny>>=fDouble ) { - sal_Int32 nLabelColor; - bool bColorChanged = false; - sal_Int32 nDateNumberFormat = DiagramHelper::getDateNumberFormat( Reference< util::XNumberFormatsSupplier >( m_xChartDoc, uno::UNO_QUERY) ); if( ! ::rtl::math::isNan( fDouble ) && m_spNumberFormatterWrapper.get() ) + { + // If a numberformat was available here we could directly + // obtain the corresponding edit format in + // getDateTimeInputNumberFormat() instead of doing the + // guess work. + sal_Int32 nNumberFormat = DiagramHelper::getDateTimeInputNumberFormat( + Reference< util::XNumberFormatsSupplier >( m_xChartDoc, uno::UNO_QUERY), fDouble ); + sal_Int32 nLabelColor; + bool bColorChanged = false; aResult = m_spNumberFormatterWrapper->getFormattedString( - nDateNumberFormat, fDouble, nLabelColor, bColorChanged ); + nNumberFormat, fDouble, nLabelColor, bColorChanged ); + } } } else @@ -1092,18 +1100,14 @@ return m_apDataBrowserModel->getNumberFormatKey( lcl_getColumnInData( nCol ), lcl_getRowInData( nRow )); } -bool DataBrowser::isDateString( const OUString& aInputString, double& fOutDateValue ) +bool DataBrowser::isDateTimeString( const OUString& aInputString, double& fOutDateTimeValue ) { sal_uInt32 nNumberFormat=0; SvNumberFormatter* pSvNumberFormatter = m_spNumberFormatterWrapper.get() ? m_spNumberFormatterWrapper->getSvNumberFormatter() : 0; - if( !aInputString.isEmpty() && pSvNumberFormatter && pSvNumberFormatter->IsNumberFormat( aInputString, nNumberFormat, fOutDateValue ) ) + if( !aInputString.isEmpty() && pSvNumberFormatter && pSvNumberFormatter->IsNumberFormat( aInputString, nNumberFormat, fOutDateTimeValue ) ) { - Reference< util::XNumberFormatsSupplier > xNumberFormatsSupplier( m_xChartDoc, uno::UNO_QUERY ); - Reference< util::XNumberFormats > xNumberFormats; - if( xNumberFormatsSupplier.is() ) - xNumberFormats = Reference< util::XNumberFormats >( xNumberFormatsSupplier->getNumberFormats() ); - if( DiagramHelper::isDateNumberFormat( nNumberFormat, xNumberFormats ) ) - return true; + short nType = pSvNumberFormatter->GetType( nNumberFormat); + return (nType & util::NumberFormat::DATE) || (nType & util::NumberFormat::TIME); } return false; } @@ -1145,10 +1149,10 @@ case DataBrowserModel::TEXTORDATE: { OUString aText( m_aTextEditField.GetText() ); - double fDateValue = 0.0; + double fValue = 0.0; bChangeValid = false; - if( isDateString( aText, fDateValue ) ) - bChangeValid = m_apDataBrowserModel->setCellAny( nCol, nRow, uno::makeAny( fDateValue ) ); + if( isDateTimeString( aText, fValue ) ) + bChangeValid = m_apDataBrowserModel->setCellAny( nCol, nRow, uno::makeAny( fValue ) ); if(!bChangeValid) bChangeValid = m_apDataBrowserModel->setCellAny( nCol, nRow, uno::makeAny( aText ) ); } diff -Nru libreoffice-l10n-4.4.2/chart2/source/controller/dialogs/DataBrowser.hxx libreoffice-l10n-4.4.6~rc3/chart2/source/controller/dialogs/DataBrowser.hxx --- libreoffice-l10n-4.4.2/chart2/source/controller/dialogs/DataBrowser.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/chart2/source/controller/dialogs/DataBrowser.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -85,7 +85,7 @@ */ double GetCellNumber( long nRow, sal_uInt16 nColumnId ) const; - bool isDateString( const OUString& aInputString, double& fOutDateValue ); + bool isDateTimeString( const OUString& aInputString, double& fOutDateTimeValue ); // Window virtual void Resize() SAL_OVERRIDE; diff -Nru libreoffice-l10n-4.4.2/chart2/source/inc/DiagramHelper.hxx libreoffice-l10n-4.4.6~rc3/chart2/source/inc/DiagramHelper.hxx --- libreoffice-l10n-4.4.2/chart2/source/inc/DiagramHelper.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/chart2/source/inc/DiagramHelper.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -244,6 +244,7 @@ static bool isSupportingDateAxis( const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XDiagram >& xDiagram ); static bool isDateNumberFormat( sal_Int32 nNumberFormat, const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormats >& xNumberFormats ); static sal_Int32 getDateNumberFormat( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier >& xNumberFormatsSupplier ); + static sal_Int32 getDateTimeInputNumberFormat( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier >& xNumberFormatsSupplier, double fNumber ); static sal_Int32 getPercentNumberFormat( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier >& xNumberFormatsSupplier ); diff -Nru libreoffice-l10n-4.4.2/chart2/source/tools/DiagramHelper.cxx libreoffice-l10n-4.4.6~rc3/chart2/source/tools/DiagramHelper.cxx --- libreoffice-l10n-4.4.2/chart2/source/tools/DiagramHelper.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/chart2/source/tools/DiagramHelper.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1190,6 +1190,55 @@ return nRet; } +sal_Int32 DiagramHelper::getDateTimeInputNumberFormat( const Reference< util::XNumberFormatsSupplier >& xNumberFormatsSupplier, double fNumber ) +{ + sal_Int32 nRet = 0; + + // Get the most detailed date/time format according to fNumber. + NumberFormatterWrapper aNumberFormatterWrapper( xNumberFormatsSupplier ); + SvNumberFormatter* pNumFormatter = aNumberFormatterWrapper.getSvNumberFormatter(); + if (!pNumFormatter) + SAL_WARN("chart2", "DiagramHelper::getDateTimeInputNumberFormat - no SvNumberFormatter"); + else + { + // Categorize the format according to the implementation of + // SvNumberFormatter::GetEditFormat(), making assumptions about what + // would be time only. + /* TODO: implement a method at SvNumberFormatter that does this and + * call instead, if Chart isn't able transport the proper format of the + * Axis, which of course would be much better.. */ + short nType; + if (0.0 <= fNumber && fNumber < 1.0) + { + // Clearly a time. + nType = util::NumberFormat::TIME; + nRet = pNumFormatter->GetFormatIndex( NF_TIME_HHMM, LANGUAGE_SYSTEM); + } + else if (fabs( fNumber) * 24 < 0x7fff) + { + // Assuming time within 32k hours or 3.7 years. + nType = util::NumberFormat::TIME; + nRet = pNumFormatter->GetFormatIndex( NF_TIME_HH_MMSS, LANGUAGE_SYSTEM); + } + else if (rtl::math::approxFloor( fNumber) != fNumber) + { + // Date+Time. + nType = util::NumberFormat::DATETIME; + nRet = pNumFormatter->GetFormatIndex( NF_DATETIME_SYS_DDMMYYYY_HHMMSS, LANGUAGE_SYSTEM); + } + else + { + // Date only. + nType = util::NumberFormat::DATE; + nRet = pNumFormatter->GetFormatIndex( NF_DATE_SYS_DDMMYYYY, LANGUAGE_SYSTEM); + } + + // Obtain the corresponding edit format. + nRet = pNumFormatter->GetEditFormat( fNumber, nRet, nType, LANGUAGE_SYSTEM, NULL); + } + return nRet; +} + sal_Int32 DiagramHelper::getPercentNumberFormat( const Reference< util::XNumberFormatsSupplier >& xNumberFormatsSupplier ) { sal_Int32 nRet=-1; diff -Nru libreoffice-l10n-4.4.2/chart2/source/view/main/VDataSeries.cxx libreoffice-l10n-4.4.6~rc3/chart2/source/view/main/VDataSeries.cxx --- libreoffice-l10n-4.4.2/chart2/source/view/main/VDataSeries.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/chart2/source/view/main/VDataSeries.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -522,9 +522,13 @@ { double aValue; - fMax = fMin = aValuesX[0]; + sal_Int32 i = 0; + while ( i < aValuesX.getLength() && ::rtl::math::isNan( aValuesX[i] ) ) + i++; + if ( i < aValuesX.getLength() ) + fMax = fMin = aValuesX[i++]; - for (sal_Int32 i = 1; i < aValuesX.getLength(); i++) + for ( ; i < aValuesX.getLength(); i++) { aValue = aValuesX[i]; if ( aValue > fMax) diff -Nru libreoffice-l10n-4.4.2/chart2/source/view/main/VLegend.cxx libreoffice-l10n-4.4.6~rc3/chart2/source/view/main/VLegend.cxx --- libreoffice-l10n-4.4.2/chart2/source/view/main/VLegend.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/chart2/source/view/main/VLegend.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -390,7 +390,7 @@ nSumHeight += aRowHeights[nR]; sal_Int32 nRemainingSpace = rAvailableSpace.Height - nSumHeight; - if( nRemainingSpace<0 ) + if( nRemainingSpace < -100 ) // 1mm tolerance for OOXML interop tdf#90404 { //remove entries that are too big for( sal_Int32 nR=nNumberOfRows; nR--; ) @@ -418,7 +418,7 @@ } nNumberOfRows = static_cast(aRowHeights.size()); } - if( nRemainingSpace > 0 ) + if( nRemainingSpace >= -100 ) // 1mm tolerance for OOXML interop tdf#90404 { sal_Int32 nNormalSpacingHeight = 2*nYPadding+(nNumberOfRows-1)*nYOffset; if( nRemainingSpace < nNormalSpacingHeight ) diff -Nru libreoffice-l10n-4.4.2/configure.ac libreoffice-l10n-4.4.6~rc3/configure.ac --- libreoffice-l10n-4.4.2/configure.ac 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/configure.ac 2015-10-27 20:55:54.000000000 +0000 @@ -9,7 +9,7 @@ # several non-alphanumeric characters, those are split off and used only for the # ABOUTBOXPRODUCTVERSIONSUFFIX in openoffice.lst. Why that is necessary, no idea. -AC_INIT([LibreOffice],[4.4.2.2],[],[],[http://documentfoundation.org/]) +AC_INIT([LibreOffice],[4.4.6.3],[],[],[http://documentfoundation.org/]) AC_PREREQ([2.59]) @@ -2724,7 +2724,7 @@ AC_MSG_CHECKING([what Mac OS X SDK to use]) - for _macosx_sdk in $with_macosx_sdk 10.8 10.9 10.10; do + for _macosx_sdk in $with_macosx_sdk 10.8 10.9 10.10 10.11; do MACOSX_SDK_PATH=`xcrun --sdk macosx${_macosx_sdk} --show-sdk-path 2> /dev/null` if test -d "$MACOSX_SDK_PATH"; then with_macosx_sdk="${_macosx_sdk}" @@ -2752,8 +2752,11 @@ 10.10) MACOSX_SDK_VERSION=101000 ;; + 10.11) + MACOSX_SDK_VERSION=101100 + ;; *) - AC_MSG_ERROR([with-macosx-sdk $with_macosx_sdk is not a supported value, supported values are 10.8--10]) + AC_MSG_ERROR([with-macosx-sdk $with_macosx_sdk is not a supported value, supported values are 10.8--11]) ;; esac @@ -2782,8 +2785,11 @@ 10.10) MAC_OS_X_VERSION_MIN_REQUIRED="101000" ;; + 10.11) + MAC_OS_X_VERSION_MIN_REQUIRED="101100" + ;; *) - AC_MSG_ERROR([with-macosx-version-min-required $with_macosx_version_min_required is not a supported value, supported values are 10.8--10]) + AC_MSG_ERROR([with-macosx-version-min-required $with_macosx_version_min_required is not a supported value, supported values are 10.8--11]) ;; esac @@ -2816,8 +2822,11 @@ 10.10) MAC_OS_X_VERSION_MAX_ALLOWED="101000" ;; + 10.11) + MAC_OS_X_VERSION_MAX_ALLOWED="101100" + ;; *) - AC_MSG_ERROR([with-macosx-version-max-allowed $with_macosx_version_max_allowed is not a supported value, supported values are 10.8--10]) + AC_MSG_ERROR([with-macosx-version-max-allowed $with_macosx_version_max_allowed is not a supported value, supported values are 10.8--11]) ;; esac @@ -8519,7 +8528,7 @@ dnl =================================================================== dnl Check for system mdds dnl =================================================================== -libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds >= 0.10.3], ["-I${WORKDIR}/UnpackedTarball/mdds/include"]) +libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds >= 0.11.2], ["-I${WORKDIR}/UnpackedTarball/mdds/include"]) dnl =================================================================== dnl Check for system glm @@ -10056,7 +10065,7 @@ if test "$test_gtk" = "yes"; then if test "$ENABLE_GTK" = "TRUE"; then - PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.4 gdk-pixbuf-xlib-2.0 >= 2.2 ,,AC_MSG_ERROR([requirements to build the gtk-plugin not met. Use --disable-gtk or install the missing packages])) + PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.4 gdk-pixbuf-2.0 >= 2.2 ,,AC_MSG_ERROR([requirements to build the gtk-plugin not met. Use --disable-gtk or install the missing packages])) GTK_CFLAGS=$(printf '%s' "$GTK_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g") PKG_CHECK_MODULES(GTHREAD, gthread-2.0,,AC_MSG_ERROR([requirements to build the gtk-plugin not met. Use --disable-gtk or install the missing packages])) BUILD_TYPE="$BUILD_TYPE GTK" diff -Nru libreoffice-l10n-4.4.2/connectivity/source/commontools/FValue.cxx libreoffice-l10n-4.4.6~rc3/connectivity/source/commontools/FValue.cxx --- libreoffice-l10n-4.4.2/connectivity/source/commontools/FValue.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/connectivity/source/commontools/FValue.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -886,6 +886,9 @@ { switch(getTypeKind()) { + case DataType::SQLNULL: + assert(rValue == Any()); + break; case DataType::CHAR: case DataType::VARCHAR: case DataType::DECIMAL: @@ -965,7 +968,7 @@ break; default: SAL_WARN( "connectivity.commontools","ORowSetValue::makeAny(): UNSPUPPORTED TYPE!"); - rValue = makeAny(); + rValue = getAny(); break; } } diff -Nru libreoffice-l10n-4.4.2/connectivity/source/drivers/calc/CConnection.cxx libreoffice-l10n-4.4.6~rc3/connectivity/source/drivers/calc/CConnection.cxx --- libreoffice-l10n-4.4.2/connectivity/source/drivers/calc/CConnection.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/connectivity/source/drivers/calc/CConnection.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -31,6 +31,7 @@ #include "calc/CPreparedStatement.hxx" #include "calc/CStatement.hxx" #include +#include #include #include #include @@ -165,13 +166,17 @@ ::dbtools::throwGenericSQLException( sError, *this, aErrorDetails ); } osl_atomic_increment(&m_nDocCount); + m_pCloseListener.reset(new utl::CloseVeto(m_xDoc, true)); return m_xDoc; } void OCalcConnection::releaseDoc() { if ( osl_atomic_decrement(&m_nDocCount) == 0 ) - ::comphelper::disposeComponent( m_xDoc ); + { + m_pCloseListener.reset(); // dispose m_xDoc + m_xDoc.clear(); + } } void OCalcConnection::disposing() @@ -179,7 +184,8 @@ ::osl::MutexGuard aGuard(m_aMutex); m_nDocCount = 0; - ::comphelper::disposeComponent( m_xDoc ); + m_pCloseListener.reset(); // dispose m_xDoc + m_xDoc.clear(); OConnection::disposing(); } diff -Nru libreoffice-l10n-4.4.2/connectivity/source/drivers/mork/MNSFolders.cxx libreoffice-l10n-4.4.6~rc3/connectivity/source/drivers/mork/MNSFolders.cxx --- libreoffice-l10n-4.4.2/connectivity/source/drivers/mork/MNSFolders.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/connectivity/source/drivers/mork/MNSFolders.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -63,28 +63,32 @@ const size_t NB_PRODUCTS = 3; const size_t NB_CANDIDATES = 4; + // The order (index) of entries in DefaultProductDir and + // ProductRootEnvironmentVariable *must* match the constants + // (minus 1) in offapi/com/sun/star/mozilla/MozillaProductType.idl + // DO NOT CHANGE THE ORDER; ADD ONLY TO THE END static const char* DefaultProductDir[NB_PRODUCTS][NB_CANDIDATES] = { #if defined(XP_WIN) - { "Thunderbird/", "Mozilla/Thunderbird/", NULL, NULL }, { "Mozilla/SeaMonkey/", NULL, NULL, NULL }, - { "Mozilla/Firefox/", NULL, NULL, NULL } + { "Mozilla/Firefox/", NULL, NULL, NULL }, + { "Thunderbird/", "Mozilla/Thunderbird/", NULL, NULL } #elif defined(MACOSX) - { "../Thunderbird/", NULL, NULL, NULL }, { "../Mozilla/SeaMonkey/", NULL, NULL, NULL }, - { "Firefox/", NULL, NULL, NULL } + { "Firefox/", NULL, NULL, NULL }, + { "../Thunderbird/", NULL, NULL, NULL } #else - { ".thunderbird/", ".mozilla-thunderbird/", ".mozilla/thunderbird/", ".icedove/" }, { ".mozilla/seamonkey/", NULL, NULL, NULL }, - { ".mozilla/firefox/", NULL, NULL, NULL } + { ".mozilla/firefox/", NULL, NULL, NULL }, + { ".thunderbird/", ".mozilla-thunderbird/", ".mozilla/thunderbird/", ".icedove/" } #endif }; static const char* ProductRootEnvironmentVariable[NB_PRODUCTS] = { - "MOZILLA_THUNDERBIRD_PROFILE_ROOT", "MOZILLA_PROFILE_ROOT", "MOZILLA_FIREFOX_PROFILE_ROOT", + "MOZILLA_THUNDERBIRD_PROFILE_ROOT", }; diff -Nru libreoffice-l10n-4.4.2/connectivity/source/drivers/mork/MNSProfileDiscover.cxx libreoffice-l10n-4.4.6~rc3/connectivity/source/drivers/mork/MNSProfileDiscover.cxx --- libreoffice-l10n-4.4.2/connectivity/source/drivers/mork/MNSProfileDiscover.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/connectivity/source/drivers/mork/MNSProfileDiscover.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -46,11 +46,12 @@ sal_Int32 ProfileAccess::LoadProductsInfo() { - //load SeaMonkey 2 profiles to m_ProductProfileList - sal_Int32 count = LoadXPToolkitProfiles(MozillaProductType_Mozilla); - + //tdf#39279: LO should search Thunderbird first then Seamonkey and finally Firefox //load thunderbird profiles to m_ProductProfileList - count += LoadXPToolkitProfiles(MozillaProductType_Thunderbird); + sal_Int32 count = LoadXPToolkitProfiles(MozillaProductType_Thunderbird); + + //load SeaMonkey 2 profiles to m_ProductProfileList + count += LoadXPToolkitProfiles(MozillaProductType_Mozilla); //load firefox profiles to m_ProductProfileList //firefox profile does not containt address book, but maybe others need them diff -Nru libreoffice-l10n-4.4.2/connectivity/source/drivers/mozab/bootstrap/MNSFolders.cxx libreoffice-l10n-4.4.6~rc3/connectivity/source/drivers/mozab/bootstrap/MNSFolders.cxx --- libreoffice-l10n-4.4.2/connectivity/source/drivers/mozab/bootstrap/MNSFolders.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/connectivity/source/drivers/mozab/bootstrap/MNSFolders.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -63,28 +63,32 @@ const size_t NB_PRODUCTS = 3; const size_t NB_CANDIDATES = 4; + // The order (index) of entries in DefaultProductDir and + // ProductRootEnvironmentVariable *must* match the constants + // (minus 1) in offapi/com/sun/star/mozilla/MozillaProductType.idl + // DO NOT CHANGE THE ORDER; ADD ONLY TO THE END static const char* DefaultProductDir[NB_PRODUCTS][NB_CANDIDATES] = { #if defined(XP_WIN) - { "Thunderbird/", "Mozilla/Thunderbird/", NULL, NULL }, { "Mozilla/SeaMonkey/", NULL, NULL, NULL }, - { "Mozilla/Firefox/", NULL, NULL, NULL } + { "Mozilla/Firefox/", NULL, NULL, NULL }, + { "Thunderbird/", "Mozilla/Thunderbird/", NULL, NULL } #elif defined(MACOSX) - { "../Thunderbird/", NULL, NULL, NULL }, { "../Mozilla/SeaMonkey/", NULL, NULL, NULL }, - { "Firefox/", NULL, NULL, NULL } + { "Firefox/", NULL, NULL, NULL }, + { "../Thunderbird/", NULL, NULL, NULL } #else - { ".thunderbird/", ".mozilla-thunderbird/", ".mozilla/thunderbird/", ".icedove/" }, { ".mozilla/seamonkey/", NULL, NULL, NULL }, - { ".mozilla/firefox/", NULL, NULL, NULL } + { ".mozilla/firefox/", NULL, NULL, NULL }, + { ".thunderbird/", ".mozilla-thunderbird/", ".mozilla/thunderbird/", ".icedove/" } #endif }; static const char* ProductRootEnvironmentVariable[NB_PRODUCTS] = { - "MOZILLA_THUNDERBIRD_PROFILE_ROOT", "MOZILLA_PROFILE_ROOT", "MOZILLA_FIREFOX_PROFILE_ROOT", + "MOZILLA_THUNDERBIRD_PROFILE_ROOT", }; diff -Nru libreoffice-l10n-4.4.2/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx libreoffice-l10n-4.4.6~rc3/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx --- libreoffice-l10n-4.4.2/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -125,11 +125,12 @@ sal_Int32 ProfileAccess::LoadProductsInfo() { - //load SeaMonkey 2 profiles to m_ProductProfileList - sal_Int32 count = LoadXPToolkitProfiles(MozillaProductType_Mozilla); - + //tdf#39279: LO should search Thunderbird first then Seamonkey and finally Firefox //load thunderbird profiles to m_ProductProfileList - count += LoadXPToolkitProfiles(MozillaProductType_Thunderbird); + sal_Int32 count = LoadXPToolkitProfiles(MozillaProductType_Thunderbird); + + //load SeaMonkey 2 profiles to m_ProductProfileList + count += LoadXPToolkitProfiles(MozillaProductType_Mozilla); //load firefox profiles to m_ProductProfileList //firefox profile does not containt address book, but maybe others need them diff -Nru libreoffice-l10n-4.4.2/connectivity/source/inc/calc/CConnection.hxx libreoffice-l10n-4.4.6~rc3/connectivity/source/inc/calc/CConnection.hxx --- libreoffice-l10n-4.4.2/connectivity/source/inc/calc/CConnection.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/connectivity/source/inc/calc/CConnection.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -23,9 +23,11 @@ #include "file/FConnection.hxx" #include -namespace com { namespace sun { namespace star { namespace sheet { - class XSpreadsheetDocument; -} } } } +namespace com { namespace sun { namespace star { + namespace sheet { class XSpreadsheetDocument; } +} } } + +namespace utl { class CloseVeto; } namespace connectivity @@ -37,6 +39,8 @@ { // the spreadsheet document: ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSpreadsheetDocument > m_xDoc; + /// close listener that vetoes so nobody disposes m_xDoc + ::std::unique_ptr< ::utl::CloseVeto> m_pCloseListener; OUString m_sPassword; OUString m_aFileName; oslInterlockedCount m_nDocCount; diff -Nru libreoffice-l10n-4.4.2/cppcanvas/source/mtfrenderer/emfplus.cxx libreoffice-l10n-4.4.6~rc3/cppcanvas/source/mtfrenderer/emfplus.cxx --- libreoffice-l10n-4.4.2/cppcanvas/source/mtfrenderer/emfplus.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/cppcanvas/source/mtfrenderer/emfplus.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1289,7 +1289,7 @@ rState.isFillColorSet = true; // extract UseBrush EMFPBrush* brush = static_cast( aObjects [brushIndexOrColor & 0xff] ); - SAL_INFO("cppcanvas.emf", "EMF+\tbrush fill slot: " << brushIndexOrColor << " (type: " << brush->GetType () << ")"); + SAL_INFO("cppcanvas.emf", "EMF+\tbrush fill slot: " << brushIndexOrColor << " (type: " << (brush ? brush->GetType() : -1) << ")"); // give up in case something wrong happened if( !brush ) diff -Nru libreoffice-l10n-4.4.2/cui/source/dialogs/about.cxx libreoffice-l10n-4.4.6~rc3/cui/source/dialogs/about.cxx --- libreoffice-l10n-4.4.2/cui/source/dialogs/about.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/cui/source/dialogs/about.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -240,9 +240,14 @@ osl_getProcessLocale( &pLocale ); - if ( pLocale && pLocale->Language && pLocale->Country ) + if ( pLocale && pLocale->Language ) { - pLocaleStr = OUString(pLocale->Language) + "_" + OUString(pLocale->Country); + if (pLocale->Country && rtl_uString_getLength( pLocale->Country) > 0) + pLocaleStr = OUString(pLocale->Language) + "_" + OUString(pLocale->Country); + else + pLocaleStr = OUString(pLocale->Language); + if (pLocale->Variant && rtl_uString_getLength( pLocale->Variant) > 0) + pLocaleStr += OUString(pLocale->Variant); } return pLocaleStr; diff -Nru libreoffice-l10n-4.4.2/cui/source/tabpages/tparea.cxx libreoffice-l10n-4.4.6~rc3/cui/source/tabpages/tparea.cxx --- libreoffice-l10n-4.4.2/cui/source/tabpages/tparea.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/cui/source/tabpages/tparea.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1457,28 +1457,35 @@ m_pLbHatchBckgrdColor->SelectEntry( rColorItem.GetColorValue() ); } - if (SfxItemState::DONTCARE != rAttrs->GetItemState(XATTR_FILLGRADIENT)) + SfxItemState const eGradState(rAttrs->GetItemState(XATTR_FILLGRADIENT)); + XFillGradientItem const* pGradientItem(nullptr); + if (SfxItemState::DONTCARE != eGradState) { - XFillGradientItem const& rGradientItem( - static_cast( - rAttrs->Get(XATTR_FILLGRADIENT)) ); - OUString const aString( rGradientItem.GetName() ); - XGradient const aGradient( rGradientItem.GetGradientValue() ); - + pGradientItem = &static_cast( + rAttrs->Get(XATTR_FILLGRADIENT)); + OUString const aString( pGradientItem->GetName() ); + XGradient const aGradient( pGradientItem->GetGradientValue() ); m_pLbGradient->SelectEntryByList(pGradientList, aString, aGradient); } - if (!m_pLbGradient->GetSelectEntryCount()) + if (!m_pLbGradient->GetSelectEntryCount() + && (SfxItemState::DEFAULT == eGradState + || (pGradientItem && pGradientItem->GetName().isEmpty()))) { // avoid relying on pool default - cannot export that m_pLbGradient->SelectEntryPos(0); // anything better than nothing isMissingGradient = true; } - if (SfxItemState::DONTCARE != rAttrs->GetItemState(XATTR_FILLHATCH)) + SfxItemState const eHatchState(rAttrs->GetItemState(XATTR_FILLHATCH)); + XFillHatchItem const* pHatch(nullptr); + if (SfxItemState::DONTCARE != eHatchState) { - m_pLbHatching->SelectEntry( static_cast( - rAttrs->Get(XATTR_FILLHATCH)).GetName() ); - } - if (!m_pLbHatching->GetSelectEntryCount()) + pHatch = &static_cast( + rAttrs->Get(XATTR_FILLHATCH)); + m_pLbHatching->SelectEntry(pHatch->GetName()); + } + if (!m_pLbHatching->GetSelectEntryCount() + && (SfxItemState::DEFAULT == eHatchState + || (pHatch && pHatch->GetName().isEmpty()))) { // avoid relying on pool default - cannot export that m_pLbHatching->SelectEntryPos(0); // anything better than nothing isMissingHatching = true; @@ -1489,14 +1496,17 @@ rAttrs->Get(XATTR_FILLBACKGROUND)).GetValue() ); } - if (SfxItemState::DONTCARE != rAttrs->GetItemState(XATTR_FILLBITMAP)) + SfxItemState const eBitmapState(rAttrs->GetItemState(XATTR_FILLBITMAP)); + XFillBitmapItem const* pBitmapItem(nullptr); + if (SfxItemState::DONTCARE != eBitmapState) { - XFillBitmapItem const& rBitmapItem( - static_cast( - rAttrs->Get(XATTR_FILLBITMAP))); - m_pLbBitmap->SelectEntry(rBitmapItem.GetName()); - } - if (!m_pLbBitmap->GetSelectEntryCount()) + pBitmapItem = &static_cast( + rAttrs->Get(XATTR_FILLBITMAP)); + m_pLbBitmap->SelectEntry(pBitmapItem->GetName()); + } + if (!m_pLbBitmap->GetSelectEntryCount() + && (SfxItemState::DEFAULT == eBitmapState + || (pBitmapItem && pBitmapItem->GetName().isEmpty()))) { // avoid relying on pool default - cannot export that m_pLbBitmap->SelectEntryPos(0); // anything better than nothing isMissingBitmap = true; diff -Nru libreoffice-l10n-4.4.2/cui/source/tabpages/tpshadow.cxx libreoffice-l10n-4.4.6~rc3/cui/source/tabpages/tpshadow.cxx --- libreoffice-l10n-4.4.2/cui/source/tabpages/tpshadow.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/cui/source/tabpages/tpshadow.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -210,7 +210,6 @@ } } - m_pCtlXRectPreview->SetRectangleAttributes(rSet); // aLbShadowColor nPos = m_pLbShadowColor->GetSelectEntryPos(); m_pLbShadowColor->Clear(); @@ -223,6 +222,14 @@ else m_pLbShadowColor->SelectEntryPos( nPos ); + SfxItemSet rAttribs( rSet ); + // rSet contains shadow attributes too, but we want + // to use it for updating rectangle attributes only, + // so set the shadow to none here + SdrOnOffItem aItem( makeSdrShadowItem( false )); + rAttribs.Put( aItem ); + + m_pCtlXRectPreview->SetRectangleAttributes( rAttribs ); ModifyShadowHdl_Impl( this ); } nPageType = PT_SHADOW; diff -Nru libreoffice-l10n-4.4.2/cui/uiconfig/ui/numberingformatpage.ui libreoffice-l10n-4.4.6~rc3/cui/uiconfig/ui/numberingformatpage.ui --- libreoffice-l10n-4.4.2/cui/uiconfig/ui/numberingformatpage.ui 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/cui/uiconfig/ui/numberingformatpage.ui 2015-10-27 20:55:54.000000000 +0000 @@ -355,6 +355,7 @@ True True + True liststore1 0 diff -Nru libreoffice-l10n-4.4.2/cui/uiconfig/ui/select_persona_dialog.ui libreoffice-l10n-4.4.6~rc3/cui/uiconfig/ui/select_persona_dialog.ui --- libreoffice-l10n-4.4.2/cui/uiconfig/ui/select_persona_dialog.ui 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/cui/uiconfig/ui/select_persona_dialog.ui 2015-10-27 20:55:54.000000000 +0000 @@ -76,6 +76,7 @@ True 3 True + True @@ -108,7 +109,7 @@ True False - 12 + 6 True @@ -202,7 +203,7 @@ True False - 12 + 6 True diff -Nru libreoffice-l10n-4.4.2/dbaccess/source/ui/app/AppController.cxx libreoffice-l10n-4.4.6~rc3/dbaccess/source/ui/app/AppController.cxx --- libreoffice-l10n-4.4.2/dbaccess/source/ui/app/AppController.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/dbaccess/source/ui/app/AppController.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -401,7 +401,7 @@ aFilter, getStrippedDatabaseName(), OUString(), - OUString()); + boost::none); // add to recent document list if ( aURL.GetProtocol() == INET_PROT_FILE ) diff -Nru libreoffice-l10n-4.4.2/debian/changelog libreoffice-l10n-4.4.6~rc3/debian/changelog --- libreoffice-l10n-4.4.2/debian/changelog 2015-04-10 09:09:55.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/debian/changelog 2015-11-02 20:24:29.000000000 +0000 @@ -1,3 +1,54 @@ +libreoffice-l10n (1:4.4.6~rc3-0ubuntu1) vivid-security; urgency=medium + + * new upstream rc + + -- Bjoern Michaelsen Wed, 28 Oct 2015 03:10:01 +0100 + +libreoffice-l10n (1:4.4.6~rc2-0ubuntu1) vivid; urgency=medium + + * new upstream rc + * remove obsolete patches + + -- Bjoern Michaelsen Fri, 16 Oct 2015 12:06:28 +0100 + +libreoffice-l10n (1:4.4.5~rc2-0ubuntu2) vivid; urgency=medium + + * add ww8 pstatus import fix + + -- Bjoern Michaelsen Fri, 18 Sep 2015 08:30:48 +0200 + +libreoffice-l10n (1:4.4.5~rc2-0ubuntu1) vivid; urgency=medium + + * new upstream rc + + -- Bjoern Michaelsen Fri, 24 Jul 2015 16:55:34 +0200 + +libreoffice-l10n (1:4.4.4~rc3-0ubuntu1) vivid; urgency=medium + + * new upstream rc + + -- Bjoern Michaelsen Tue, 23 Jun 2015 22:39:04 +0200 + +libreoffice-l10n (1:4.4.4~rc2-0ubuntu2) vivid; urgency=medium + + * new upstream rc + + -- Bjoern Michaelsen Mon, 15 Jun 2015 08:47:37 +0200 + +libreoffice-l10n (1:4.4.3-0ubuntu1) vivid; urgency=medium + + * new upstream release + * Fix mailmerge without libreoffice-base scenario + * add upstream hack to prevent crash on exit (LP: #1418551) + + -- Bjoern Michaelsen Thu, 28 May 2015 19:47:04 +0200 + +libreoffice-l10n (1:4.4.2-0ubuntu2) vivid; urgency=medium + + * add missing Replaces: (LP: #1443667) + + -- Bjoern Michaelsen Wed, 22 Apr 2015 16:29:01 +0100 + libreoffice-l10n (1:4.4.2-0ubuntu1) vivid; urgency=medium * new upstream release diff -Nru libreoffice-l10n-4.4.2/debian/patches/g_strdup_printf_format.diff libreoffice-l10n-4.4.6~rc3/debian/patches/g_strdup_printf_format.diff --- libreoffice-l10n-4.4.2/debian/patches/g_strdup_printf_format.diff 2015-04-10 08:54:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/debian/patches/g_strdup_printf_format.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -diff --git a/vcl/unx/gtk/a11y/atktextattributes.cxx b/vcl/unx/gtk/a11y/atktextattributes.cxx -index bc286d0..6a2d9c4 100644 ---- a/vcl/unx/gtk/a11y/atktextattributes.cxx -+++ b/vcl/unx/gtk/a11y/atktextattributes.cxx -@@ -1235,7 +1235,7 @@ attribute_set_new_from_extended_attributes( - - pSet = attribute_set_prepend( pSet, - atk_text_attribute_register( sPropertyName.getStr() ), -- g_strdup_printf( sPropertyValue.getStr() ) ); -+ g_strdup_printf( "%s", sPropertyValue.getStr() ) ); - } - while ( nIndex >= 0 && nIndex < sExtendedAttrs.getLength() ); - diff -Nru libreoffice-l10n-4.4.2/debian/patches/mailmerge-base.diff libreoffice-l10n-4.4.6~rc3/debian/patches/mailmerge-base.diff --- libreoffice-l10n-4.4.2/debian/patches/mailmerge-base.diff 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/debian/patches/mailmerge-base.diff 2015-10-28 02:10:57.000000000 +0000 @@ -0,0 +1,162 @@ +From: Bjoern Michaelsen +Date: Tue, 19 May 2015 13:58:13 +0200 +Subject: [PATCH] check for and handle missing base in mail merge (related: + fdo#33266) + +Change-Id: I3e362a873c28026cbecf005c07def1295aa920e0 + +Conflicts: + sw/source/uibase/app/apphdl.cxx + +--- + include/svtools/restartdialog.hxx | 5 +++- + svtools/source/dialogs/restartdialog.cxx | 3 +++ + svtools/uiconfig/ui/restartdialog.ui | 15 +++++++++++ + sw/source/uibase/app/apphdl.cxx | 45 +++++++++++++++++++++++++++++++- + 4 files changed, 66 insertions(+), 2 deletions(-) + +diff --git a/include/svtools/restartdialog.hxx b/include/svtools/restartdialog.hxx +--- a/include/svtools/restartdialog.hxx ++++ b/include/svtools/restartdialog.hxx +@@ -29,9 +29,12 @@ enum RestartReason { + RESTART_REASON_PDF_AS_STANDARD_JOB_FORMAT, + // For the modified default print job format to take effect, + // %PRODUCTNAME must be restarted. +- RESTART_REASON_BIBLIOGRAPHY_INSTALL ++ RESTART_REASON_BIBLIOGRAPHY_INSTALL, + // "For the bibliography to work properly, + // %PRODUCTNAME must be restarted." ++ RESTART_REASON_MAILMERGE_INSTALL ++ // "For the mail merge to work properly, ++ // %PRODUCTNAME must be restarted." + }; + + // Must be called with the solar mutex locked: +diff --git a/svtools/source/dialogs/restartdialog.cxx b/svtools/source/dialogs/restartdialog.cxx +--- a/svtools/source/dialogs/restartdialog.cxx ++++ b/svtools/source/dialogs/restartdialog.cxx +@@ -40,6 +40,9 @@ public: + case svtools::RESTART_REASON_BIBLIOGRAPHY_INSTALL: + get(reason_, "reason_bibliography_install"); + break; ++ case svtools::RESTART_REASON_MAILMERGE_INSTALL: ++ get(reason_, "reason_mailmerge_install"); ++ break; + default: + assert(false); // this cannot happen + } +diff --git a/svtools/uiconfig/ui/restartdialog.ui b/svtools/uiconfig/ui/restartdialog.ui +--- a/svtools/uiconfig/ui/restartdialog.ui ++++ b/svtools/uiconfig/ui/restartdialog.ui +@@ -101,6 +101,21 @@ + + + ++ ++ False ++ True ++ 0 ++ For the mail merge to work properly, %PRODUCTNAME must be restarted. ++ True ++ 50 ++ ++ ++ False ++ True ++ 2 ++ ++ ++ + + True + False +diff --git a/sw/source/uibase/app/apphdl.cxx b/sw/source/uibase/app/apphdl.cxx +--- a/sw/source/uibase/app/apphdl.cxx ++++ b/sw/source/uibase/app/apphdl.cxx +@@ -21,17 +21,19 @@ + + #include + ++#include + #include + #include + #include + #include +-#include + #include + #include + #include + #include + #include ++#include + #include ++#include + #include + #include + #include +@@ -92,7 +94,9 @@ + #include + #include + #include ++#include + #include ++#include + #include + + #include +@@ -115,6 +119,24 @@ using namespace ::com::sun::star; + + #include + ++namespace ++{ ++ static bool lcl_hasAllComponentsAvailable() ++ { ++ try ++ { ++ return css::sdb::TextConnectionSettings::create(comphelper::getProcessComponentContext()).is(); ++ } ++ catch (css::uno::Exception & e) ++ { ++ SAL_INFO( ++ "sw.core", ++ "assuming Base to be missing; caught " << e.Message); ++ return false; ++ } ++ } ++} ++ + SFX_IMPL_INTERFACE(SwModule, SfxModule, SW_RES(RID_SW_NAME) ) + + void SwModule::InitInterface_Impl() +@@ -277,6 +299,27 @@ SwMailMergeWizardExecutor::~SwMailMergeWizardExecutor() + + void SwMailMergeWizardExecutor::ExecuteMailMergeWizard( const SfxItemSet * pArgs ) + { ++ if(!lcl_hasAllComponentsAvailable()) ++ { ++ try ++ { ++ using namespace org::freedesktop::PackageKit; ++ using namespace svtools; ++ css::uno::Reference< XSyncDbusSessionHelper > xSyncDbusSessionHelper(SyncDbusSessionHelper::create(comphelper::getProcessComponentContext())); ++ css::uno::Sequence< OUString > vPackages(1); vPackages[0] = "libreoffice-base"; ++ OUString sInteraction; ++ xSyncDbusSessionHelper->InstallPackageNames(0, vPackages, sInteraction); ++ SolarMutexGuard aGuard; ++ executeRestartDialog(comphelper::getProcessComponentContext(), NULL, RESTART_REASON_MAILMERGE_INSTALL); ++ } ++ catch (const css::uno::Exception & e) ++ { ++ SAL_INFO( ++ "sw.core", ++ "trying to install LibreOffice Base, caught " << e.Message); ++ } ++ return; ++ } + if ( m_pView ) + { + OSL_FAIL("SwMailMergeWizardExecutor::ExecuteMailMergeWizard: Already executing the wizard!" ); +-- +1.9.1 + diff -Nru libreoffice-l10n-4.4.2/debian/patches/series libreoffice-l10n-4.4.6~rc3/debian/patches/series --- libreoffice-l10n-4.4.2/debian/patches/series 2015-04-10 08:54:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/debian/patches/series 2015-10-28 02:10:57.000000000 +0000 @@ -26,6 +26,6 @@ disable-icontest-build.diff hppa-is-32bit.diff gcj-no-bitness-check.diff -g_strdup_printf_format.diff lp-753627-readd-updated-Ubuntu-brand-palette-colors.diff kubuntu_breeze-icons.diff +mailmerge-base.diff diff -Nru libreoffice-l10n-4.4.2/debian/patches/split-evoab.diff libreoffice-l10n-4.4.6~rc3/debian/patches/split-evoab.diff --- libreoffice-l10n-4.4.2/debian/patches/split-evoab.diff 2015-04-10 08:54:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/debian/patches/split-evoab.diff 2015-10-28 02:10:57.000000000 +0000 @@ -31,16 +31,16 @@ ); End diff --git a/postprocess/CustomTarget_registry.mk b/postprocess/CustomTarget_registry.mk -index 181c782..33f4640 100644 +index e12640f..ec17244 100644 --- a/postprocess/CustomTarget_registry.mk +++ b/postprocess/CustomTarget_registry.mk -@@ -333,8 +333,9 @@ ifeq ($(DISABLE_NEON),$(false)) - postprocess_FILES_main += $(postprocess_MOD)/org/openoffice/ucb/Configuration-neon.xcu +@@ -333,8 +333,9 @@ postprocess_FILES_main += $(postprocess_MOD)/org/openoffice/ucb/Configuration-ne + endif endif ifeq ($(ENABLE_EVOAB2),TRUE) -+postprocess_XCDS += evoab.xcd -postprocess_FILES_main += $(call gb_XcuModuleTarget_get_target,connectivity/registry/evoab2)/org/openoffice/Office/DataAccess/Drivers-evoab2.xcu -postprocess_FILES_main += $(postprocess_MOD)/org/openoffice/Office/DataAccess-evoab2.xcu ++postprocess_XCDS += evoab.xcd +postprocess_FILES_evoab += $(call gb_XcuModuleTarget_get_target,connectivity/registry/evoab2)/org/openoffice/Office/DataAccess/Drivers-evoab2.xcu +postprocess_FILES_evoab += $(postprocess_MOD)/org/openoffice/Office/DataAccess-evoab2.xcu postprocess_DRIVERS += evoab diff -Nru libreoffice-l10n-4.4.2/debian/rules libreoffice-l10n-4.4.6~rc3/debian/rules --- libreoffice-l10n-4.4.2/debian/rules 2015-04-10 08:54:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/debian/rules 2015-10-28 02:10:57.000000000 +0000 @@ -11,8 +11,8 @@ DEB_DISTRIBUTION = $(call dpkg_late_eval,DEB_DISTRIBUTION,dpkg-parsechangelog | sed -n -e 's/^Distribution: //p') BASE_VERSION:=$(shell echo $(DEB_VERSION) | cut -d: -f1):$(DEB_VERSION_UPSTREAM) BINARY_VERSION=$(DEB_VERSION) -HELP_L10N_VIRTUAL_VERSION:=4.3 -OOVER:=4.3 +HELP_L10N_VIRTUAL_VERSION:=4.4 +OOVER:=4.4 NEXT_OOVER:=$(shell echo "$(OOVER) + 0.1" | bc) ARCH_INDEP_PACKAGES := $(shell dh_listpackages -i) diff -Nru libreoffice-l10n-4.4.2/desktop/source/deployment/gui/dp_gui_extlistbox.cxx libreoffice-l10n-4.4.6~rc3/desktop/source/deployment/gui/dp_gui_extlistbox.cxx --- libreoffice-l10n-4.4.2/desktop/source/deployment/gui/dp_gui_extlistbox.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/desktop/source/deployment/gui/dp_gui_extlistbox.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1041,7 +1041,6 @@ //access to m_nActive must be guarded if ( !m_bInCheckMode && m_bHasActive && ( m_nActive >= nPos ) ) m_nActive += 1; - guard.clear(); if ( IsReallyVisible() ) @@ -1178,6 +1177,7 @@ void ExtensionBox_Impl::checkEntries() { long nNewPos = -1; + long nChangedActivePos = -1; long nPos = 0; bool bNeedsUpdate = false; @@ -1201,15 +1201,19 @@ } else { // remove entry from list + if (nPos < nNewPos) { + --nNewPos; + } + if (nPos < nChangedActivePos) { + --nChangedActivePos; + } if ( nPos < m_nActive ) m_nActive -= 1; - else if ( ( nPos == m_nActive ) && ( nPos == (long) m_vEntries.size() - 1 ) ) + else if ( nPos == m_nActive ) { - m_nActive -= 1; - if (m_nActive == -1) - { - m_bHasActive = false; - } + nChangedActivePos = nPos; + m_nActive = -1; + m_bHasActive = false; } m_vRemovedEntries.push_back( *iIndex ); m_vEntries.erase( iIndex ); @@ -1225,6 +1229,9 @@ if ( nNewPos != - 1) selectEntry( nNewPos ); + else if (nChangedActivePos != -1) { + selectEntry(nChangedActivePos); + } if ( bNeedsUpdate ) { diff -Nru libreoffice-l10n-4.4.2/download.lst libreoffice-l10n-4.4.6~rc3/download.lst --- libreoffice-l10n-4.4.2/download.lst 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/download.lst 2015-10-27 20:55:54.000000000 +0000 @@ -27,7 +27,7 @@ export COLLADA2GLTF_TARBALL := 4b87018f7fff1d054939d19920b751a0-collada2gltf-master-cb1d97788a.tar.bz2 export CPPUNIT_MD5SUM := d1c6bdd5a76c66d2c38331e2d287bc01 export CPPUNIT_TARBALL := cppunit-1.13.2.tar.gz -export CT2N_TARBALL := 451ccf439a36a568653b024534669971-ConvertTextToNumber-1.3.2.oxt +export CT2N_TARBALL := 1f467e5bb703f12cbbb09d5cf67ecf4a-converttexttonumber-1-5-0.oxt export CURL_MD5SUM := e6d1f9d1b59da5062109ffe14e0569a4 export CURL_TARBALL := curl-7.36.0.tar.bz2 export DBGHELP_DLL := 13fbc2e8b37ddf28181dd6d8081c2b8e-dbghelp.dll @@ -115,8 +115,8 @@ export OPENCOLLADA_MD5SUM := 4ca8a6ef0afeefc864e9ef21b9f14bd6 export OPENCOLLADA_TARBALL := OpenCOLLADA-master-6509aa13af.tar.bz2 export OPENLDAP_TARBALL := 804c6cb5698db30b75ad0ff1c25baefd-openldap-2.4.31.tgz -export OPENSSL_MD5SUM := f7175c9cd3c39bb1907ac8bba9df8ed3 -export OPENSSL_TARBALL := openssl-1.0.1j.tar.gz +export OPENSSL_MD5SUM := a06c547dac9044161a477211049f60ef +export OPENSSL_TARBALL := openssl-1.0.2a.tar.gz export ORCUS_TARBALL := 7681383be6ce489d84c1c74f4e7f9643-liborcus-0.7.0.tar.bz2 export PAGEMAKER_MD5SUM := 795cc7a59ace4db2b12586971d668671 export PAGEMAKER_TARBALL := libpagemaker-0.0.2.tar.bz2 diff -Nru libreoffice-l10n-4.4.2/drawinglayer/source/attribute/fillgradientattribute.cxx libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/fillgradientattribute.cxx --- libreoffice-l10n-4.4.2/drawinglayer/source/attribute/fillgradientattribute.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/fillgradientattribute.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -142,6 +142,10 @@ bool FillGradientAttribute::operator==(const FillGradientAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpFillGradientAttribute == mpFillGradientAttribute; } diff -Nru libreoffice-l10n-4.4.2/drawinglayer/source/attribute/fillgraphicattribute.cxx libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/fillgraphicattribute.cxx --- libreoffice-l10n-4.4.2/drawinglayer/source/attribute/fillgraphicattribute.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/fillgraphicattribute.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -120,6 +120,10 @@ bool FillGraphicAttribute::operator==(const FillGraphicAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpFillGraphicAttribute == mpFillGraphicAttribute; } diff -Nru libreoffice-l10n-4.4.2/drawinglayer/source/attribute/fillhatchattribute.cxx libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/fillhatchattribute.cxx --- libreoffice-l10n-4.4.2/drawinglayer/source/attribute/fillhatchattribute.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/fillhatchattribute.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -131,6 +131,10 @@ bool FillHatchAttribute::operator==(const FillHatchAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpFillHatchAttribute == mpFillHatchAttribute; } diff -Nru libreoffice-l10n-4.4.2/drawinglayer/source/attribute/lineattribute.cxx libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/lineattribute.cxx --- libreoffice-l10n-4.4.2/drawinglayer/source/attribute/lineattribute.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/lineattribute.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -118,6 +118,10 @@ bool LineAttribute::operator==(const LineAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpLineAttribute == mpLineAttribute; } diff -Nru libreoffice-l10n-4.4.2/drawinglayer/source/attribute/linestartendattribute.cxx libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/linestartendattribute.cxx --- libreoffice-l10n-4.4.2/drawinglayer/source/attribute/linestartendattribute.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/linestartendattribute.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -110,6 +110,10 @@ bool LineStartEndAttribute::operator==(const LineStartEndAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpLineStartEndAttribute == mpLineStartEndAttribute; } diff -Nru libreoffice-l10n-4.4.2/drawinglayer/source/attribute/sdrfillattribute.cxx libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/sdrfillattribute.cxx --- libreoffice-l10n-4.4.2/drawinglayer/source/attribute/sdrfillattribute.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/sdrfillattribute.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -126,6 +126,10 @@ bool SdrFillAttribute::operator==(const SdrFillAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpSdrFillAttribute == mpSdrFillAttribute; } diff -Nru libreoffice-l10n-4.4.2/drawinglayer/source/attribute/sdrfillgraphicattribute.cxx libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/sdrfillgraphicattribute.cxx --- libreoffice-l10n-4.4.2/drawinglayer/source/attribute/sdrfillgraphicattribute.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/sdrfillgraphicattribute.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -161,6 +161,10 @@ bool SdrFillGraphicAttribute::operator==(const SdrFillGraphicAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpSdrFillGraphicAttribute == mpSdrFillGraphicAttribute; } diff -Nru libreoffice-l10n-4.4.2/drawinglayer/source/attribute/sdrlightingattribute3d.cxx libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/sdrlightingattribute3d.cxx --- libreoffice-l10n-4.4.2/drawinglayer/source/attribute/sdrlightingattribute3d.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/sdrlightingattribute3d.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -102,6 +102,10 @@ bool SdrLightingAttribute::operator==(const SdrLightingAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpSdrLightingAttribute == mpSdrLightingAttribute; } diff -Nru libreoffice-l10n-4.4.2/drawinglayer/source/attribute/sdrlineattribute.cxx libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/sdrlineattribute.cxx --- libreoffice-l10n-4.4.2/drawinglayer/source/attribute/sdrlineattribute.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/sdrlineattribute.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -142,6 +142,10 @@ bool SdrLineAttribute::operator==(const SdrLineAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpSdrLineAttribute == mpSdrLineAttribute; } diff -Nru libreoffice-l10n-4.4.2/drawinglayer/source/attribute/sdrlinestartendattribute.cxx libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/sdrlinestartendattribute.cxx --- libreoffice-l10n-4.4.2/drawinglayer/source/attribute/sdrlinestartendattribute.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/sdrlinestartendattribute.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -144,6 +144,10 @@ bool SdrLineStartEndAttribute::operator==(const SdrLineStartEndAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpSdrLineStartEndAttribute == mpSdrLineStartEndAttribute; } diff -Nru libreoffice-l10n-4.4.2/drawinglayer/source/attribute/sdrsceneattribute3d.cxx libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/sdrsceneattribute3d.cxx --- libreoffice-l10n-4.4.2/drawinglayer/source/attribute/sdrsceneattribute3d.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/sdrsceneattribute3d.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -123,6 +123,10 @@ bool SdrSceneAttribute::operator==(const SdrSceneAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpSdrSceneAttribute == mpSdrSceneAttribute; } diff -Nru libreoffice-l10n-4.4.2/drawinglayer/source/attribute/sdrshadowattribute.cxx libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/sdrshadowattribute.cxx --- libreoffice-l10n-4.4.2/drawinglayer/source/attribute/sdrshadowattribute.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/sdrshadowattribute.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -109,6 +109,10 @@ bool SdrShadowAttribute::operator==(const SdrShadowAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return mpSdrShadowAttribute == rCandidate.mpSdrShadowAttribute; } diff -Nru libreoffice-l10n-4.4.2/drawinglayer/source/attribute/strokeattribute.cxx libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/strokeattribute.cxx --- libreoffice-l10n-4.4.2/drawinglayer/source/attribute/strokeattribute.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/drawinglayer/source/attribute/strokeattribute.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -110,6 +110,10 @@ bool StrokeAttribute::operator==(const StrokeAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpStrokeAttribute == mpStrokeAttribute; } diff -Nru libreoffice-l10n-4.4.2/editeng/source/editeng/editattr.cxx libreoffice-l10n-4.4.6~rc3/editeng/source/editeng/editattr.cxx --- libreoffice-l10n-4.4.2/editeng/source/editeng/editattr.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/editeng/source/editeng/editattr.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -221,7 +221,6 @@ { Color aColor = static_cast(GetItem())->GetValue(); rFont.SetColor( aColor); - //fprintf(stderr, "Called SetFont with Color %d\n", aColor.GetColor()); } // class EditCharAttribBackgroundColor @@ -238,14 +237,11 @@ void EditCharAttribBackgroundColor::SetFont( SvxFont& rFont, OutputDevice* ) { Color aColor = static_cast(GetItem())->GetValue(); - rFont.SetFillColor( aColor); rFont.SetTransparent(false); - + rFont.SetFillColor(aColor); } - // class EditCharAttribLanguage - EditCharAttribLanguage::EditCharAttribLanguage( const SvxLanguageItem& rAttr, sal_uInt16 _nStart, sal_uInt16 _nEnd ) : EditCharAttrib( rAttr, _nStart, _nEnd ) { diff -Nru libreoffice-l10n-4.4.2/editeng/source/editeng/editobj.cxx libreoffice-l10n-4.4.6~rc3/editeng/source/editeng/editobj.cxx --- libreoffice-l10n-4.4.2/editeng/source/editeng/editobj.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/editeng/source/editeng/editobj.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -978,11 +978,18 @@ { editeng::Section& rSecAttr = *itCurAttr; // serious bug: will cause duplicate attributes to be exported - assert(rSecAttr.maAttributes.end() == std::find_if( + auto iter(std::find_if( rSecAttr.maAttributes.begin(), rSecAttr.maAttributes.end(), [&pItem](SfxPoolItem const*const pIt) { return pIt->Which() == pItem->Which(); })); - rSecAttr.maAttributes.push_back(pItem); + if (rSecAttr.maAttributes.end() == iter) + { + rSecAttr.maAttributes.push_back(pItem); + } + else + { + SAL_WARN("editeng", "GetAllSections(): duplicate attribute suppressed"); + } } } } diff -Nru libreoffice-l10n-4.4.2/editeng/source/editeng/impedit3.cxx libreoffice-l10n-4.4.6~rc3/editeng/source/editeng/impedit3.cxx --- libreoffice-l10n-4.4.2/editeng/source/editeng/impedit3.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/editeng/source/editeng/impedit3.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -3473,7 +3473,8 @@ } } - if ( GetStatus().DoOnlineSpelling() && !pPortion->GetNode()->GetWrongList()->empty() && pTextPortion->GetLen() ) + const WrongList* const pWrongList = pPortion->GetNode()->GetWrongList(); + if ( GetStatus().DoOnlineSpelling() && pWrongList && !pWrongList->empty() && pTextPortion->GetLen() ) { {//#105750# adjust LinePos for superscript or subscript text short _nEsc = aTmpFont.GetEscapement(); diff -Nru libreoffice-l10n-4.4.2/editeng/source/items/flditem.cxx libreoffice-l10n-4.4.6~rc3/editeng/source/items/flditem.cxx --- libreoffice-l10n-4.4.2/editeng/source/items/flditem.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/editeng/source/items/flditem.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -117,7 +117,7 @@ return new SvxPageField(); case text::textfield::Type::PAGES: return new SvxPagesField(); - case text::textfield::Type::PAGE_TITLE: + case text::textfield::Type::PAGE_NAME: return new SvxPageTitleField(); case text::textfield::Type::DOCINFO_TITLE: return new SvxFileField(); diff -Nru libreoffice-l10n-4.4.2/editeng/source/items/textitem.cxx libreoffice-l10n-4.4.6~rc3/editeng/source/items/textitem.cxx --- libreoffice-l10n-4.4.2/editeng/source/items/textitem.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/editeng/source/items/textitem.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1809,9 +1809,12 @@ { } -SvxBackgroundColorItem:: SvxBackgroundColorItem( SvStream& rStrm, const sal_uInt16 Id ) : - SvxColorItem( rStrm, Id ) +SvxBackgroundColorItem::SvxBackgroundColorItem(SvStream& rStrm, const sal_uInt16 nId) + : SvxColorItem(nId) { + Color aColor; + aColor.Read(rStrm); + SetValue(aColor); } SvxBackgroundColorItem::SvxBackgroundColorItem( const SvxBackgroundColorItem& rCopy ) : @@ -1821,34 +1824,79 @@ SfxPoolItem* SvxBackgroundColorItem::Clone( SfxItemPool * ) const { - return new SvxBackgroundColorItem( *this ); + return new SvxBackgroundColorItem(*this); } +SvStream& SvxBackgroundColorItem::Store(SvStream& rStrm, sal_uInt16) const +{ + GetValue().Write(rStrm); + return rStrm; +} SfxPoolItem* SvxBackgroundColorItem::Create(SvStream& rStrm, sal_uInt16 ) const { return new SvxBackgroundColorItem( rStrm, Which() ); } +bool SvxBackgroundColorItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const +{ + nMemberId &= ~CONVERT_TWIPS; + Color aColor = SvxColorItem::GetValue(); -// class SvxColorItem ---------------------------------------------------- + switch( nMemberId ) + { + case MID_GRAPHIC_TRANSPARENT: + { + rVal <<= Bool2Any (aColor.GetTransparency() == 0xff); + break; + } + default: + { + rVal <<= (sal_Int32)(aColor.GetColor()); + break; + } + } + return true; +} +bool SvxBackgroundColorItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId ) +{ + nMemberId &= ~CONVERT_TWIPS; + sal_Int32 nColor = 0; + Color aColor = SvxColorItem::GetValue(); + + switch( nMemberId ) + { + case MID_GRAPHIC_TRANSPARENT: + { + aColor.SetTransparency( Any2Bool( rVal ) ? 0xff : 0 ); + SvxColorItem::SetValue( aColor ); + break; + } + default: + { + if(!(rVal >>= nColor)) + return false; + SvxColorItem::SetValue( Color(nColor) ); + break; + } + } + return true; +} + +// class SvxColorItem ---------------------------------------------------- SvxColorItem::SvxColorItem( const sal_uInt16 nId ) : SfxPoolItem( nId ), mColor( COL_BLACK ) { } - - SvxColorItem::SvxColorItem( const Color& rCol, const sal_uInt16 nId ) : SfxPoolItem( nId ), mColor( rCol ) { } - - SvxColorItem::SvxColorItem( SvStream &rStrm, const sal_uInt16 nId ) : SfxPoolItem( nId ) { @@ -1857,21 +1905,16 @@ mColor = aColor; } - - SvxColorItem::SvxColorItem( const SvxColorItem &rCopy ) : SfxPoolItem( rCopy ), mColor( rCopy.mColor ) { } - - SvxColorItem::~SvxColorItem() { } - sal_uInt16 SvxColorItem::GetVersion( sal_uInt16 nFFVer ) const { DBG_ASSERT( SOFFICE_FILEFORMAT_31==nFFVer || @@ -1881,8 +1924,6 @@ return SOFFICE_FILEFORMAT_50 >= nFFVer ? VERSION_USEAUTOCOLOR : 0; } - - bool SvxColorItem::operator==( const SfxPoolItem& rAttr ) const { DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" ); @@ -1890,16 +1931,12 @@ return mColor == static_cast( rAttr ).mColor; } - - bool SvxColorItem::QueryValue( uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) const { rVal <<= (sal_Int32)(mColor.GetColor()); return true; } - - bool SvxColorItem::PutValue( const uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) { sal_Int32 nColor = 0; @@ -1910,15 +1947,11 @@ return true; } - - SfxPoolItem* SvxColorItem::Clone( SfxItemPool * ) const { return new SvxColorItem( *this ); } - - SvStream& SvxColorItem::Store( SvStream& rStrm , sal_uInt16 nItemVersion ) const { if( VERSION_USEAUTOCOLOR == nItemVersion && @@ -1929,15 +1962,11 @@ return rStrm; } - - SfxPoolItem* SvxColorItem::Create(SvStream& rStrm, sal_uInt16 /*nVer*/ ) const { return new SvxColorItem( rStrm, Which() ); } - - bool SvxColorItem::GetPresentation ( SfxItemPresentation /*ePres*/, diff -Nru libreoffice-l10n-4.4.2/editeng/source/misc/acorrcfg.cxx libreoffice-l10n-4.4.6~rc3/editeng/source/misc/acorrcfg.cxx --- libreoffice-l10n-4.4.2/editeng/source/misc/acorrcfg.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/editeng/source/misc/acorrcfg.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -321,6 +321,7 @@ } } PutProperties(aNames, aValues); + ClearModified(); } void SvxBaseAutoCorrCfg::Notify( const Sequence& /* aPropertyNames */) @@ -640,6 +641,7 @@ } } PutProperties(aNames, aValues); + ClearModified(); } void SvxSwAutoCorrCfg::Notify( const Sequence& /* aPropertyNames */ ) diff -Nru libreoffice-l10n-4.4.2/editeng/source/misc/svxacorr.cxx libreoffice-l10n-4.4.6~rc3/editeng/source/misc/svxacorr.cxx --- libreoffice-l10n-4.4.2/editeng/source/misc/svxacorr.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/editeng/source/misc/svxacorr.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -439,69 +439,79 @@ bool SvxAutoCorrect::FnChgOrdinalNumber( - SvxAutoCorrDoc& rDoc, const OUString& rTxt, - sal_Int32 nSttPos, sal_Int32 nEndPos, - LanguageType eLang ) + SvxAutoCorrDoc& rDoc, const OUString& rTxt, + sal_Int32 nSttPos, sal_Int32 nEndPos, + LanguageType eLang) { -// 1st, 2nd, 3rd, 4 - 0th -// 201th or 201st -// 12th or 12nd - CharClass& rCC = GetCharClass( eLang ); + // 1st, 2nd, 3rd, 4 - 0th + // 201th or 201st + // 12th or 12nd bool bChg = false; - for( ; nSttPos < nEndPos; ++nSttPos ) - if( !lcl_IsInAsciiArr( sImplSttSkipChars, rTxt[ nSttPos ] )) - break; - for( ; nSttPos < nEndPos; --nEndPos ) - if( !lcl_IsInAsciiArr( sImplEndSkipChars, rTxt[ nEndPos - 1 ] )) - break; - - - // Get the last number in the string to check - sal_Int32 nNumEnd = nEndPos; - bool foundEnd = false; - bool validNumber = true; - sal_Int32 i = nEndPos; - - while ( i > nSttPos ) + // In some languages ordinal suffixes should never be + // changed to superscript. Let's break for those languages. + switch (eLang) { - i--; - bool isDigit = rCC.isDigit( rTxt, i ); - if ( foundEnd ) - validNumber |= isDigit; + case LANGUAGE_SWEDISH: + case LANGUAGE_SWEDISH_FINLAND: + break; + default: + CharClass& rCC = GetCharClass(eLang); + + for (; nSttPos < nEndPos; ++nSttPos) + if (!lcl_IsInAsciiArr(sImplSttSkipChars, rTxt[nSttPos])) + break; + for (; nSttPos < nEndPos; --nEndPos) + if (!lcl_IsInAsciiArr(sImplEndSkipChars, rTxt[nEndPos - 1])) + break; + + + // Get the last number in the string to check + sal_Int32 nNumEnd = nEndPos; + bool foundEnd = false; + bool validNumber = true; + sal_Int32 i = nEndPos; - if ( isDigit && !foundEnd ) + while (i > nSttPos) { - foundEnd = true; - nNumEnd = i; - } - } + i--; + bool isDigit = rCC.isDigit(rTxt, i); + if (foundEnd) + validNumber |= isDigit; - if ( foundEnd && validNumber ) { - sal_Int32 nNum = rTxt.copy( nSttPos, nNumEnd - nSttPos + 1 ).toInt32( ); + if (isDigit && !foundEnd) + { + foundEnd = true; + nNumEnd = i; + } + } - // Check if the characters after that number correspond to the ordinal suffix - uno::Reference< i18n::XOrdinalSuffix > xOrdSuffix - = i18n::OrdinalSuffix::create( comphelper::getProcessComponentContext() ); + if (foundEnd && validNumber) { + sal_Int32 nNum = rTxt.copy(nSttPos, nNumEnd - nSttPos + 1).toInt32(); - uno::Sequence< OUString > aSuffixes = xOrdSuffix->getOrdinalSuffix( nNum, rCC.getLanguageTag().getLocale( ) ); - for ( sal_Int32 nSuff = 0; nSuff < aSuffixes.getLength(); nSuff++ ) - { - OUString sSuffix( aSuffixes[ nSuff ] ); - OUString sEnd = rTxt.copy( nNumEnd + 1, nEndPos - nNumEnd - 1 ); + // Check if the characters after that number correspond to the ordinal suffix + uno::Reference< i18n::XOrdinalSuffix > xOrdSuffix + = i18n::OrdinalSuffix::create(comphelper::getProcessComponentContext()); - if ( sSuffix == sEnd ) + uno::Sequence< OUString > aSuffixes = xOrdSuffix->getOrdinalSuffix(nNum, rCC.getLanguageTag().getLocale()); + for (sal_Int32 nSuff = 0; nSuff < aSuffixes.getLength(); nSuff++) { - // Check if the ordinal suffix has to be set as super script - if ( rCC.isLetter( sSuffix ) ) + OUString sSuffix(aSuffixes[nSuff]); + OUString sEnd = rTxt.copy(nNumEnd + 1, nEndPos - nNumEnd - 1); + + if (sSuffix == sEnd) { - // Do the change - SvxEscapementItem aSvxEscapementItem( DFLT_ESC_AUTO_SUPER, - DFLT_ESC_PROP, SID_ATTR_CHAR_ESCAPEMENT ); - rDoc.SetAttr( nNumEnd + 1 , nEndPos, - SID_ATTR_CHAR_ESCAPEMENT, - aSvxEscapementItem); - bChg = true; + // Check if the ordinal suffix has to be set as super script + if (rCC.isLetter(sSuffix)) + { + // Do the change + SvxEscapementItem aSvxEscapementItem(DFLT_ESC_AUTO_SUPER, + DFLT_ESC_PROP, SID_ATTR_CHAR_ESCAPEMENT); + rDoc.SetAttr(nNumEnd + 1, nEndPos, + SID_ATTR_CHAR_ESCAPEMENT, + aSvxEscapementItem); + bChg = true; + } } } } diff -Nru libreoffice-l10n-4.4.2/editeng/source/uno/unofield.cxx libreoffice-l10n-4.4.6~rc3/editeng/source/uno/unofield.cxx --- libreoffice-l10n-4.4.2/editeng/source/uno/unofield.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/editeng/source/uno/unofield.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -504,6 +504,9 @@ case text::textfield::Type::PRESENTATION_DATE_TIME: pData = new SvxDateTimeField(); break; + case text::textfield::Type::PAGE_NAME: + pData = new SvxPageTitleField(); + break; }; return pData; @@ -606,6 +609,8 @@ return OUString("Footer"); case text::textfield::Type::PRESENTATION_DATE_TIME: return OUString("DateTime"); + case text::textfield::Type::PAGE_NAME: + return OUString("PageName"); default: return OUString("Unknown"); } @@ -853,6 +858,10 @@ pServices[2] = "com.sun.star.presentation.TextField.DateTime"; pServices[3] = "com.sun.star.presentation.textfield.DateTime"; break; + case text::textfield::Type::PAGE_NAME: + pServices[2] = "com.sun.star.text.TextField.PageName"; + pServices[3] = "com.sun.star.text.textfield.PageName"; + break; default: aSeq.realloc(0); } diff -Nru libreoffice-l10n-4.4.2/embedserv/source/embed/docholder.cxx libreoffice-l10n-4.4.6~rc3/embedserv/source/embed/docholder.cxx --- libreoffice-l10n-4.4.2/embedserv/source/embed/docholder.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/embedserv/source/embed/docholder.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -363,7 +363,7 @@ LoadDocInFrame( sal_True ); uno::Reference< frame::XDesktop2 > xDesktop = frame::Desktop::create(comphelper::getComponentContext(m_xFactory)); - xDesktop->getFrames()->append( uno::Reference(m_xFrame, uno::UNO_QUERY_THROW) ); + xDesktop->getFrames()->append( uno::Reference(m_xFrame, uno::UNO_QUERY) ); // determine the menuhandle to get menutitems. if(m_xLayoutManager.is()) { @@ -694,7 +694,9 @@ catch( const uno::Exception& ) { } else { - m_xFrame->dispose(); + uno::Reference xComp(m_xFrame, uno::UNO_QUERY); + if (xComp.is()) + xComp->dispose(); } m_xFrame = uno::Reference< frame::XFrame2 >(); @@ -770,13 +772,13 @@ { uno::Reference xDesktop = frame::Desktop::create(comphelper::getComponentContext(m_xFactory)); - uno::Reference xFrame(xDesktop,uno::UNO_QUERY); + uno::Reference xFrame(xDesktop,uno::UNO_QUERY); // the frame will be registered on desktop here, later when the document // is loaded into the frame in ::show() method the terminate listener will be removed // this is so only for outplace activation if( xFrame.is() ) - m_xFrame.set( xFrame->findFrame( OUString("_blank"), 0 ), uno::UNO_QUERY_THROW ); + m_xFrame.set( xFrame->findFrame( OUString("_blank"), 0 ), uno::UNO_QUERY ); uno::Reference< util::XCloseBroadcaster > xBroadcaster( m_xFrame, uno::UNO_QUERY ); diff -Nru libreoffice-l10n-4.4.2/extensions/source/bibliography/bibview.cxx libreoffice-l10n-4.4.6~rc3/extensions/source/bibliography/bibview.cxx --- libreoffice-l10n-4.4.2/extensions/source/bibliography/bibview.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/extensions/source/bibliography/bibview.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -115,8 +115,6 @@ m_xGeneralPage = m_pGeneralPage = new BibGeneralPage( this, m_pDatMan ); m_pGeneralPage->Show(); - Resize(); - if( HasFocus() ) // "delayed" GetFocus() because GetFocus() is initially called before GeneralPage is created m_pGeneralPage->GrabFocus(); @@ -156,12 +154,14 @@ { UpdatePages(); FormControlContainer::_loaded( _rEvent ); + Resize(); } void BibView::_reloaded( const EventObject& _rEvent ) { UpdatePages(); FormControlContainer::_loaded( _rEvent ); + Resize(); } IMPL_STATIC_LINK( BibView, CallMappingHdl, BibView*, EMPTYARG ) diff -Nru libreoffice-l10n-4.4.2/extensions/source/bibliography/datman.cxx libreoffice-l10n-4.4.6~rc3/extensions/source/bibliography/datman.cxx --- libreoffice-l10n-4.4.2/extensions/source/bibliography/datman.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/extensions/source/bibliography/datman.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -60,12 +61,12 @@ #include "bibresid.hxx" #include "bibmod.hxx" #include "bibview.hxx" -// #100312# --------- #include "bibprop.hrc" #include "toolbar.hxx" #include "toolbar.hrc" #include "bibconfig.hxx" #include "bibbeam.hxx" +#include "general.hxx" #include "bib.hrc" #include "bibliography.hrc" #include @@ -1272,6 +1273,62 @@ xPropSet->setPropertyValue( FM_PROP_CONTROLSOURCE, makeAny( rName ) ); xPropSet->setPropertyValue("NativeWidgetLook", makeAny( true ) ); + if (bForceListBox) + { + uno::Any aAny; + + //uno::Reference< beans::XPropertySet > xPropSet(xControl, UNO_QUERY); + aAny <<= (sal_Int16)1; + xPropSet->setPropertyValue("BoundColumn", aAny); + ListSourceType eSet = ListSourceType_VALUELIST; + aAny.setValue( &eSet, ::cppu::UnoType::get() ); + xPropSet->setPropertyValue("ListSourceType", aAny); + + uno::Sequence aListSource(TYPE_COUNT); + OUString* pListSourceArr = aListSource.getArray(); + //pListSourceArr[0] = "select TypeName, TypeIndex from TypeNms"; + for(sal_Int32 i = 0; i < TYPE_COUNT; ++i) + pListSourceArr[i] = OUString::number(i); + aAny.setValue(&aListSource, cppu::UnoType>::get()); + + xPropSet->setPropertyValue("ListSource", aAny); + + uno::Sequence aValues(TYPE_COUNT + 1); + OUString* pValuesArr = aValues.getArray(); + pValuesArr[0] = BIB_RESSTR(ST_TYPE_ARTICLE); + pValuesArr[1] = BIB_RESSTR(ST_TYPE_BOOK); + pValuesArr[2] = BIB_RESSTR(ST_TYPE_BOOKLET); + pValuesArr[3] = BIB_RESSTR(ST_TYPE_CONFERENCE); + pValuesArr[4] = BIB_RESSTR(ST_TYPE_INBOOK ); + pValuesArr[5] = BIB_RESSTR(ST_TYPE_INCOLLECTION); + pValuesArr[6] = BIB_RESSTR(ST_TYPE_INPROCEEDINGS); + pValuesArr[7] = BIB_RESSTR(ST_TYPE_JOURNAL ); + pValuesArr[8] = BIB_RESSTR(ST_TYPE_MANUAL ); + pValuesArr[9] = BIB_RESSTR(ST_TYPE_MASTERSTHESIS); + pValuesArr[10] = BIB_RESSTR(ST_TYPE_MISC ); + pValuesArr[11] = BIB_RESSTR(ST_TYPE_PHDTHESIS ); + pValuesArr[12] = BIB_RESSTR(ST_TYPE_PROCEEDINGS ); + pValuesArr[13] = BIB_RESSTR(ST_TYPE_TECHREPORT ); + pValuesArr[14] = BIB_RESSTR(ST_TYPE_UNPUBLISHED ); + pValuesArr[15] = BIB_RESSTR(ST_TYPE_EMAIL ); + pValuesArr[16] = BIB_RESSTR(ST_TYPE_WWW ); + pValuesArr[17] = BIB_RESSTR(ST_TYPE_CUSTOM1 ); + pValuesArr[18] = BIB_RESSTR(ST_TYPE_CUSTOM2 ); + pValuesArr[19] = BIB_RESSTR(ST_TYPE_CUSTOM3 ); + pValuesArr[20] = BIB_RESSTR(ST_TYPE_CUSTOM4 ); + pValuesArr[21] = BIB_RESSTR(ST_TYPE_CUSTOM5 ); + // empty string if an invalid value no values is set + pValuesArr[TYPE_COUNT].clear(); + + aAny.setValue(&aValues, cppu::UnoType>::get()); + + xPropSet->setPropertyValue("StringItemList", aAny); + + sal_Bool bTrue = sal_True; + aAny.setValue( &bTrue, cppu::UnoType::get() ); + xPropSet->setPropertyValue( "Dropdown", aAny ); + } + Reference< XFormComponent > aFormComp(xModel,UNO_QUERY ); Reference< XNameContainer > xNameCont( m_xForm, UNO_QUERY ); diff -Nru libreoffice-l10n-4.4.2/extensions/source/bibliography/general.cxx libreoffice-l10n-4.4.6~rc3/extensions/source/bibliography/general.cxx --- libreoffice-l10n-4.4.2/extensions/source/bibliography/general.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/extensions/source/bibliography/general.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include @@ -204,29 +203,6 @@ get(pCustom4FT, "custom4"); get(pCustom5FT, "custom5"); - aBibTypeArr[0] = BIB_RESSTR(ST_TYPE_ARTICLE); - aBibTypeArr[1] = BIB_RESSTR(ST_TYPE_BOOK); - aBibTypeArr[2] = BIB_RESSTR(ST_TYPE_BOOKLET); - aBibTypeArr[3] = BIB_RESSTR(ST_TYPE_CONFERENCE); - aBibTypeArr[4] = BIB_RESSTR(ST_TYPE_INBOOK ); - aBibTypeArr[5] = BIB_RESSTR(ST_TYPE_INCOLLECTION); - aBibTypeArr[6] = BIB_RESSTR(ST_TYPE_INPROCEEDINGS); - aBibTypeArr[7] = BIB_RESSTR(ST_TYPE_JOURNAL ); - aBibTypeArr[8] = BIB_RESSTR(ST_TYPE_MANUAL ); - aBibTypeArr[9] = BIB_RESSTR(ST_TYPE_MASTERSTHESIS); - aBibTypeArr[10] = BIB_RESSTR(ST_TYPE_MISC ); - aBibTypeArr[11] = BIB_RESSTR(ST_TYPE_PHDTHESIS ); - aBibTypeArr[12] = BIB_RESSTR(ST_TYPE_PROCEEDINGS ); - aBibTypeArr[13] = BIB_RESSTR(ST_TYPE_TECHREPORT ); - aBibTypeArr[14] = BIB_RESSTR(ST_TYPE_UNPUBLISHED ); - aBibTypeArr[15] = BIB_RESSTR(ST_TYPE_EMAIL ); - aBibTypeArr[16] = BIB_RESSTR(ST_TYPE_WWW ); - aBibTypeArr[17] = BIB_RESSTR(ST_TYPE_CUSTOM1 ); - aBibTypeArr[18] = BIB_RESSTR(ST_TYPE_CUSTOM2 ); - aBibTypeArr[19] = BIB_RESSTR(ST_TYPE_CUSTOM3 ); - aBibTypeArr[20] = BIB_RESSTR(ST_TYPE_CUSTOM4 ); - aBibTypeArr[21] = BIB_RESSTR(ST_TYPE_CUSTOM5 ); - InitFixedTexts(); sal_Int16* pMap = nFT2CtrlMap; @@ -430,7 +406,7 @@ uno::Reference< awt::XControlModel > xCtrModel; try { - bool bTypeListBox = sTypeColumnName == rName; + const bool bTypeListBox = sTypeColumnName == rName; xCtrModel = pDatMan->loadControlModel(rName, bTypeListBox); if ( xCtrModel.is() ) { @@ -440,9 +416,17 @@ { uno::Reference< beans::XPropertySetInfo > xPropInfo = xPropSet->getPropertySetInfo(); - uno::Any aAny = xPropSet->getPropertyValue( "DefaultControl" ); OUString aControlName; - aAny >>= aControlName; + if (bTypeListBox) + { + aControlName = "com.sun.star.form.control.ListBox"; + xLBModel = Reference< form::XBoundComponent >(xCtrModel, UNO_QUERY); + } + else + { + uno::Any aAny = xPropSet->getPropertyValue( "DefaultControl" ); + aAny >>= aControlName; + } OUString uProp("HelpURL"); if(xPropInfo->hasPropertyByName(uProp)) @@ -453,44 +437,6 @@ xPropSet->setPropertyValue( uProp, makeAny( sId ) ); } - if(bTypeListBox) - { - //uno::Reference< beans::XPropertySet > xPropSet(xControl, UNO_QUERY); - aAny <<= (sal_Int16)1; - xPropSet->setPropertyValue("BoundColumn", aAny); - ListSourceType eSet = ListSourceType_VALUELIST; - aAny.setValue( &eSet, ::cppu::UnoType::get() ); - xPropSet->setPropertyValue("ListSourceType", aAny); - - uno::Sequence aListSource(TYPE_COUNT); - OUString* pListSourceArr = aListSource.getArray(); - //pListSourceArr[0] = "select TypeName, TypeIndex from TypeNms"; - for(sal_Int32 i = 0; i < TYPE_COUNT; ++i) - pListSourceArr[i] = OUString::number(i); - aAny.setValue(&aListSource, ::getCppuType((uno::Sequence*)0)); - - xPropSet->setPropertyValue("ListSource", aAny); - - uno::Sequence aValues(TYPE_COUNT + 1); - OUString* pValuesArr = aValues.getArray(); - for(sal_uInt16 j = 0; j < TYPE_COUNT; j++) - pValuesArr[j] = aBibTypeArr[j]; - // empty string if an invalid value no values is set - pValuesArr[TYPE_COUNT].clear(); - - aAny.setValue(&aValues, ::getCppuType((uno::Sequence*)0)); - - xPropSet->setPropertyValue("StringItemList", aAny); - - sal_Bool bTrue = sal_True; - aAny.setValue( &bTrue, ::getBooleanCppuType() ); - xPropSet->setPropertyValue( "Dropdown", aAny ); - - aControlName = "com.sun.star.form.control.ListBox"; - xLBModel = Reference< form::XBoundComponent >(xCtrModel, UNO_QUERY); - - } - uno::Reference< XComponentContext > xContext = comphelper::getProcessComponentContext(); uno::Reference< awt::XControl > xControl( xContext->getServiceManager()->createInstanceWithContext(aControlName, xContext), UNO_QUERY); if ( xControl.is() ) diff -Nru libreoffice-l10n-4.4.2/extensions/source/bibliography/general.hxx libreoffice-l10n-4.4.6~rc3/extensions/source/bibliography/general.hxx --- libreoffice-l10n-4.4.2/extensions/source/bibliography/general.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/extensions/source/bibliography/general.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -96,7 +96,6 @@ ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > aControls[ FIELD_COUNT ]; - OUString aBibTypeArr[ TYPE_COUNT ]; OUString sErrorPrefix; OUString sTableErrorString; diff -Nru libreoffice-l10n-4.4.2/external/ct2n/ConvertTextToNumber-1.3.2-no-license.patch libreoffice-l10n-4.4.6~rc3/external/ct2n/ConvertTextToNumber-1.3.2-no-license.patch --- libreoffice-l10n-4.4.2/external/ct2n/ConvertTextToNumber-1.3.2-no-license.patch 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/external/ct2n/ConvertTextToNumber-1.3.2-no-license.patch 2015-10-27 20:55:54.000000000 +0000 @@ -4,7 +4,7 @@ @@ -5,12 +5,4 @@ xmlns:xlink="http://www.w3.org/1999/xlink"> - + - diff -Nru libreoffice-l10n-4.4.2/external/curl/ExternalProject_curl.mk libreoffice-l10n-4.4.6~rc3/external/curl/ExternalProject_curl.mk --- libreoffice-l10n-4.4.2/external/curl/ExternalProject_curl.mk 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/external/curl/ExternalProject_curl.mk 2015-10-27 20:55:54.000000000 +0000 @@ -46,9 +46,12 @@ $(if $(filter IOS,$(OS)),--with-darwinssl) \ $(if $(filter MACOSX,$(OS)),\ --with-darwinssl) \ - --without-ssl \ + --without-ssl --without-gnutls --without-polarssl --without-cyassl --without-axtls \ --without-libidn --enable-ftp --enable-ipv6 --enable-http --disable-gopher \ --disable-file --disable-ldap --disable-telnet --disable-dict --without-libssh2 \ + --without-librtmp --disable-ldaps --disable-tftp --disable-pop3 \ + --disable-imap --disable-smtp --disable-manual --without-metalink \ + --without-nghttp2 \ $(if $(CROSS_COMPILING),--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM)) \ $(if $(filter TRUE,$(DISABLE_DYNLOADING)),--disable-shared,--disable-static) \ $(if $(ENABLE_DEBUG),--enable-debug) \ diff -Nru libreoffice-l10n-4.4.2/external/firebird/firebird-macosx.patch.1 libreoffice-l10n-4.4.6~rc3/external/firebird/firebird-macosx.patch.1 --- libreoffice-l10n-4.4.2/external/firebird/firebird-macosx.patch.1 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/external/firebird/firebird-macosx.patch.1 2015-10-27 20:55:54.000000000 +0000 @@ -27,6 +27,15 @@ PLATFORM_POSTBUILD_TARGET=darwin_postbuild_target +@@ -57,7 +57,7 @@ + + LINK_TRACE = $(LIB_LINK) $(LIB_BUNDLE_OPTIONS) + +-LINK_CLIENT = $(LIB_LINK) -nodefaultlibs $(LINK_FIREBIRD_CLIENT_SYMBOLS) $(LIB_LINK_OPTIONS) $(LIB_LINK_IMPLIB)\ ++LINK_CLIENT = $(LIB_LINK) $(LINK_FIREBIRD_CLIENT_SYMBOLS) $(LIB_LINK_OPTIONS) $(LIB_LINK_IMPLIB)\ + $(LIB_CLIENT_LINK_OPTIONS) $(LIB_LINK_SONAME) + + ifeq (@VOID_PTR_SIZE@,8) diff -ur firebird.org/builds/posix/postfix.darwin firebird/builds/posix/postfix.darwin --- firebird.org/builds/posix/postfix.darwin 2013-07-12 20:55:46.000000000 +0200 +++ firebird/builds/posix/postfix.darwin 2013-07-15 12:07:36.000000000 +0200 diff -Nru libreoffice-l10n-4.4.2/external/hunspell/hunspell-1.3.3-rhbz1261421.patch libreoffice-l10n-4.4.6~rc3/external/hunspell/hunspell-1.3.3-rhbz1261421.patch --- libreoffice-l10n-4.4.2/external/hunspell/hunspell-1.3.3-rhbz1261421.patch 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/external/hunspell/hunspell-1.3.3-rhbz1261421.patch 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,191 @@ +From 97e079a23d459aeb6e64435350d7710c90dbca85 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 11 Sep 2015 13:28:52 +0100 +Subject: [PATCH] Resolves: rhbz#1261421 crash on mashing hangul korean + keyboard + +--- + src/hunspell/hunspell.cxx | 69 +++++++++++++++++++++++++++++++++++------------ + src/hunspell/hunspell.hxx | 4 ++- + src/hunspell/replist.cxx | 18 ++++++++++--- + src/hunspell/replist.hxx | 2 ++ + src/tools/hunspell.cxx | 2 +- + 6 files changed, 78 insertions(+), 24 deletions(-) + +diff --git a/src/hunspell/hunspell.cxx b/src/hunspell/hunspell.cxx +index 7fae54b..d8ef357 100644 +--- misc/hunspell-1.3.3/src/hunspell/hunspell.cxx ++++ misc/build/hunspell-1.3.3/src/hunspell/hunspell.cxx +@@ -12,6 +12,7 @@ + #endif + #include "csutil.hxx" + ++#include + #include + + Hunspell::Hunspell(const char * affpath, const char * dpath, const char * key) +@@ -349,8 +350,13 @@ int Hunspell::spell(const char * word, int * info, char ** root) + + // input conversion + RepList * rl = (pAMgr) ? pAMgr->get_iconvtable() : NULL; +- if (rl && rl->conv(word, wspace)) wl = cleanword2(cw, wspace, unicw, &nc, &captype, &abbv); +- else wl = cleanword2(cw, word, unicw, &nc, &captype, &abbv); ++ int convstatus = rl ? rl->conv(word, wspace, MAXWORDUTF8LEN) : 0; ++ if (convstatus < 0) ++ return 0; ++ else if (convstatus > 0) ++ wl = cleanword2(cw, wspace, unicw, &nc, &captype, &abbv); ++ else ++ wl = cleanword2(cw, word, unicw, &nc, &captype, &abbv); + + if (wl == 0 || maxdic == 0) return 1; + if (root) *root = NULL; +@@ -702,8 +708,13 @@ int Hunspell::suggest(char*** slst, const char * word) + + // input conversion + RepList * rl = (pAMgr) ? pAMgr->get_iconvtable() : NULL; +- if (rl && rl->conv(word, wspace)) wl = cleanword2(cw, wspace, unicw, &nc, &captype, &abbv); +- else wl = cleanword2(cw, word, unicw, &nc, &captype, &abbv); ++ int convstatus = rl ? rl->conv(word, wspace, MAXWORDUTF8LEN) : 0; ++ if (convstatus < 0) ++ return 0; ++ else if (convstatus > 0) ++ wl = cleanword2(cw, wspace, unicw, &nc, &captype, &abbv); ++ else ++ wl = cleanword2(cw, word, unicw, &nc, &captype, &abbv); + + if (wl == 0) return 0; + int ns = 0; +@@ -1020,7 +1031,7 @@ int Hunspell::suggest(char*** slst, const char * word) + // output conversion + rl = (pAMgr) ? pAMgr->get_oconvtable() : NULL; + for (int j = 0; rl && j < ns; j++) { +- if (rl->conv((*slst)[j], wspace)) { ++ if (rl->conv((*slst)[j], wspace, MAXWORDUTF8LEN) > 0) { + free((*slst)[j]); + (*slst)[j] = mystrdup(wspace); + } +@@ -1395,8 +1406,13 @@ int Hunspell::analyze(char*** slst, const char * word) + + // input conversion + RepList * rl = (pAMgr) ? pAMgr->get_iconvtable() : NULL; +- if (rl && rl->conv(word, wspace)) wl = cleanword2(cw, wspace, unicw, &nc, &captype, &abbv); +- else wl = cleanword2(cw, word, unicw, &nc, &captype, &abbv); ++ int convstatus = rl ? rl->conv(word, wspace, MAXWORDUTF8LEN) : 0; ++ if (convstatus < 0) ++ return 0; ++ else if (convstatus > 0) ++ wl = cleanword2(cw, wspace, unicw, &nc, &captype, &abbv); ++ else ++ wl = cleanword2(cw, word, unicw, &nc, &captype, &abbv); + + if (wl == 0) { + if (abbv) { +@@ -1684,12 +1700,16 @@ int Hunspell::get_langnum() const + return langnum; + } + +-int Hunspell::input_conv(const char * word, char * dest) ++int Hunspell::input_conv(const char * word, char * dest, size_t destsize) + { + RepList * rl = (pAMgr) ? pAMgr->get_iconvtable() : NULL; +- return (rl && rl->conv(word, dest)); ++ return (rl && rl->conv(word, dest, destsize) > 0); + } + ++int Hunspell::input_conv(const char * word, char * dest) ++{ ++ return input_conv(word, dest, std::numeric_limits::max()); ++} + + // return the beginning of the element (attr == NULL) or the attribute + const char * Hunspell::get_xml_pos(const char * s, const char * attr) +diff --git a/src/hunspell/hunspell.hxx b/src/hunspell/hunspell.hxx +index e62f0dd..0b5ad2e 100644 +--- misc/hunspell-1.3.3/src/hunspell/hunspell.hxx ++++ misc/build/hunspell-1.3.3/src/hunspell/hunspell.hxx +@@ -226,7 +226,9 @@ public: + + /* need for putdic */ + int input_conv(const char * word, char * dest); +- ++ // ^^-deprecated, use this-vv" ++ int input_conv(const char * word, char * dest, size_t destsize); ++ + /* experimental and deprecated functions */ + + #ifdef HUNSPELL_EXPERIMENTAL +diff --git a/src/hunspell/replist.cxx b/src/hunspell/replist.cxx +index b9b1255..bac3e06 100644 +--- misc/hunspell-1.3.3/src/hunspell/replist.cxx ++++ misc/build/hunspell-1.3.3/src/hunspell/replist.cxx +@@ -74,6 +74,7 @@ + #include + #include + #include ++#include + + #include "replist.hxx" + #include "csutil.hxx" +@@ -139,19 +140,30 @@ int RepList::add(char * pat1, char * pat2) { + return 0; + } + +-int RepList::conv(const char * word, char * dest) { ++int RepList::conv(const char * word, char * dest, size_t destsize) { + int stl = 0; + int change = 0; + for (size_t i = 0; i < strlen(word); i++) { + int n = near(word + i); + int l = match(word + i, n); + if (l) { ++ size_t replen = strlen(dat[n]->pattern2); ++ if (stl+replen >= destsize) ++ return -1; + strcpy(dest + stl, dat[n]->pattern2); +- stl += strlen(dat[n]->pattern2); ++ stl += replen; + i += l - 1; + change = 1; +- } else dest[stl++] = word[i]; ++ } else { ++ if (stl+1 >= destsize) ++ return -1; ++ dest[stl++] = word[i]; ++ } + } + dest[stl] = '\0'; + return change; + } ++ ++int RepList::conv(const char * word, char * dest) { ++ return conv(word, dest, std::numeric_limits::max()); ++} +diff --git a/src/hunspell/replist.hxx b/src/hunspell/replist.hxx +index 1e3d6e4..e418298 100644 +--- misc/hunspell-1.3.3/src/hunspell/replist.hxx ++++ misc/build/hunspell-1.3.3/src/hunspell/replist.hxx +@@ -99,5 +99,7 @@ public: + int near(const char * word); + int match(const char * word, int n); + int conv(const char * word, char * dest); ++ // ^^-deprecated, use this-vv" ++ int conv(const char * word, char * dest, size_t destsize); + }; + #endif +diff --git a/src/tools/hunspell.cxx b/src/tools/hunspell.cxx +index 6124ac4..1b50fe1 100644 +--- misc/hunspell-1.3.3/src/tools/hunspell.cxx ++++ misc/build/hunspell-1.3.3/src/tools/hunspell.cxx +@@ -524,7 +524,7 @@ int putdic(char * word, Hunspell * pMS) + + word = chenc(word, ui_enc, dic_enc[0]); + +- if(pMS->input_conv(word, buf)) word = buf; ++ if(pMS->input_conv(word, buf, MAXLNLEN)) word = buf; + + int ret; + +-- +2.4.0 + diff -Nru libreoffice-l10n-4.4.2/external/hunspell/UnpackedTarball_hunspell.mk libreoffice-l10n-4.4.6~rc3/external/hunspell/UnpackedTarball_hunspell.mk --- libreoffice-l10n-4.4.2/external/hunspell/UnpackedTarball_hunspell.mk 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/external/hunspell/UnpackedTarball_hunspell.mk 2015-10-27 20:55:54.000000000 +0000 @@ -19,6 +19,7 @@ external/hunspell/hunspell-1.3.2-literal.patch \ external/hunspell/hunspell-fdo48017-wfopen.patch \ external/hunspell/hunspell-morph-overflow.patch \ + external/hunspell/hunspell-1.3.3-rhbz1261421.patch \ )) ifeq ($(COM),MSC) diff -Nru libreoffice-l10n-4.4.2/external/icu/icu.changeset_36724.patch.1 libreoffice-l10n-4.4.6~rc3/external/icu/icu.changeset_36724.patch.1 --- libreoffice-l10n-4.4.2/external/icu/icu.changeset_36724.patch.1 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/external/icu/icu.changeset_36724.patch.1 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,37 @@ +diff -ru2 icu/source/i18n/regexcmp.cpp icu/source/i18n/regexcmp.cpp +--- icu/source/i18n/regexcmp.cpp 2013-10-04 22:48:42.000000000 +0200 ++++ icu/source/i18n/regexcmp.cpp 2015-04-10 17:59:24.568227804 +0200 +@@ -2134,4 +2134,8 @@ + int32_t minML = minMatchLength(fMatchOpenParen, patEnd); + int32_t maxML = maxMatchLength(fMatchOpenParen, patEnd); ++ if (URX_TYPE(maxML) != 0) { ++ error(U_REGEX_LOOK_BEHIND_LIMIT); ++ break; ++ } + if (maxML == INT32_MAX) { + error(U_REGEX_LOOK_BEHIND_LIMIT); +@@ -2167,4 +2171,8 @@ + int32_t minML = minMatchLength(fMatchOpenParen, patEnd); + int32_t maxML = maxMatchLength(fMatchOpenParen, patEnd); ++ if (URX_TYPE(maxML) != 0) { ++ error(U_REGEX_LOOK_BEHIND_LIMIT); ++ break; ++ } + if (maxML == INT32_MAX) { + error(U_REGEX_LOOK_BEHIND_LIMIT); +diff -ru2 icu/source/test/testdata/regextst.txt icu/source/test/testdata/regextst.txt +--- icu/source/test/testdata/regextst.txt 2013-10-04 22:48:12.000000000 +0200 ++++ icu/source/test/testdata/regextst.txt 2015-04-10 18:00:41.254717186 +0200 +@@ -1174,4 +1174,12 @@ + + ++# Bug 11370 ++# Max match length computation of look-behind expression gives result that is too big to fit in the ++# in the 24 bit operand portion of the compiled code. Expressions should fail to compile ++# (Look-behind match length must be bounded. This case is treated as unbounded, an error.) ++ ++"(?fCompiledPat->setSize(topOfBlock); ++ if (fMatchOpenParen >= topOfBlock) { ++ fMatchOpenParen = -1; ++ } ++ if (fMatchCloseParen >= topOfBlock) { ++ fMatchCloseParen = -1; ++ } + return TRUE; + } +diff -ru2 1.icu/source/i18n/regexcmp.h 2.icu/source/i18n/regexcmp.h +--- 1.icu/source/i18n/regexcmp.h 2013-10-04 22:48:44.000000000 +0200 ++++ 2.icu/source/i18n/regexcmp.h 2015-04-10 18:08:23.356622663 +0200 +@@ -183,5 +183,7 @@ + // of the slot reserved for a state save + // at the start of the most recently processed +- // parenthesized block. ++ // parenthesized block. Updated when processing ++ // a close to the location for the corresponding open. ++ + int32_t fMatchCloseParen; // The position in the pattern of the first + // location after the most recently processed +diff -ru2 1.icu/source/test/testdata/regextst.txt 2.icu/source/test/testdata/regextst.txt +--- 1.icu/source/test/testdata/regextst.txt 2015-04-10 18:07:53.411434706 +0200 ++++ 2.icu/source/test/testdata/regextst.txt 2015-04-10 18:09:19.386974352 +0200 +@@ -1174,4 +1174,13 @@ + + ++# Bug 11369 ++# Incorrect optimization of patterns with a zero length quantifier {0} ++ ++"(.|b)(|b){0}\$(?#xxx){3}(?>\D*)" "AAAAABBBBBCCCCCDDDDEEEEE" ++"(|b)ab(c)" "<0><1>ab<2>c" ++"(|b){0}a{3}(D*)" "<0>aaa<2>" ++"(|b){0,1}a{3}(D*)" "<0><1>aaa<2>" ++"((|b){0})a{3}(D*)" "<0><1>aaa<3>" ++ + # Bug 11370 + # Max match length computation of look-behind expression gives result that is too big to fit in the +@@ -1182,4 +1191,5 @@ + "(?fFrameSize+=RESTACKFRAME_HDRCOUNT; ++ allocateStackData(RESTACKFRAME_HDRCOUNT); + + // + // Optimization pass 1: NOPs, back-references, and case-folding +@@ -368,9 +368,9 @@ + // the start of an ( grouping. + //4 NOP Resreved, will be replaced by a save if there are + // OR | operators at the top level +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_STATE_SAVE, 2), *fStatus); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_JMP, 3), *fStatus); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_FAIL, 0), *fStatus); ++ appendOp(URX_STATE_SAVE, 2); ++ appendOp(URX_JMP, 3); ++ appendOp(URX_FAIL, 0); + + // Standard open nonCapture paren action emits the two NOPs and + // sets up the paren stack frame. +@@ -393,7 +393,7 @@ + } + + // add the END operation to the compiled pattern. +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_END, 0), *fStatus); ++ appendOp(URX_END, 0); + + // Terminate the pattern compilation state machine. + returnVal = FALSE; +@@ -415,14 +415,13 @@ + int32_t savePosition = fParenStack.popi(); + int32_t op = (int32_t)fRXPat->fCompiledPat->elementAti(savePosition); + U_ASSERT(URX_TYPE(op) == URX_NOP); // original contents of reserved location +- op = URX_BUILD(URX_STATE_SAVE, fRXPat->fCompiledPat->size()+1); ++ op = buildOp(URX_STATE_SAVE, fRXPat->fCompiledPat->size()+1); + fRXPat->fCompiledPat->setElementAt(op, savePosition); + + // Append an JMP operation into the compiled pattern. The operand for + // the JMP will eventually be the location following the ')' for the + // group. This will be patched in later, when the ')' is encountered. +- op = URX_BUILD(URX_JMP, 0); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_JMP, 0); + + // Push the position of the newly added JMP op onto the parentheses stack. + // This registers if for fixup when this block's close paren is encountered. +@@ -431,7 +430,7 @@ + // Append a NOP to the compiled pattern. This is the slot reserved + // for a SAVE in the event that there is yet another '|' following + // this one. +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_NOP, 0), *fStatus); ++ appendOp(URX_NOP, 0); + fParenStack.push(fRXPat->fCompiledPat->size()-1, *fStatus); + } + break; +@@ -457,12 +456,10 @@ + // END_CAPTURE is encountered. + { + fixLiterals(); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_NOP, 0), *fStatus); +- int32_t varsLoc = fRXPat->fFrameSize; // Reserve three slots in match stack frame. +- fRXPat->fFrameSize += 3; +- int32_t cop = URX_BUILD(URX_START_CAPTURE, varsLoc); +- fRXPat->fCompiledPat->addElement(cop, *fStatus); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_NOP, 0), *fStatus); ++ appendOp(URX_NOP, 0); ++ int32_t varsLoc = allocateStackData(3); // Reserve three slots in match stack frame. ++ appendOp(URX_START_CAPTURE, varsLoc); ++ appendOp(URX_NOP, 0); + + // On the Parentheses stack, start a new frame and add the postions + // of the two NOPs. Depending on what follows in the pattern, the +@@ -487,8 +484,8 @@ + // is an '|' alternation within the parens. + { + fixLiterals(); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_NOP, 0), *fStatus); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_NOP, 0), *fStatus); ++ appendOp(URX_NOP, 0); ++ appendOp(URX_NOP, 0); + + // On the Parentheses stack, start a new frame and add the postions + // of the two NOPs. +@@ -510,12 +507,10 @@ + // is an '|' alternation within the parens. + { + fixLiterals(); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_NOP, 0), *fStatus); +- int32_t varLoc = fRXPat->fDataSize; // Reserve a data location for saving the +- fRXPat->fDataSize += 1; // state stack ptr. +- int32_t stoOp = URX_BUILD(URX_STO_SP, varLoc); +- fRXPat->fCompiledPat->addElement(stoOp, *fStatus); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_NOP, 0), *fStatus); ++ appendOp(URX_NOP, 0); ++ int32_t varLoc = allocateData(1); // Reserve a data location for saving the state stack ptr. ++ appendOp(URX_STO_SP, varLoc); ++ appendOp(URX_NOP, 0); + + // On the Parentheses stack, start a new frame and add the postions + // of the two NOPs. Depending on what follows in the pattern, the +@@ -558,26 +553,14 @@ + // Two data slots are reserved, for saving the stack ptr and the input position. + { + fixLiterals(); +- int32_t dataLoc = fRXPat->fDataSize; +- fRXPat->fDataSize += 2; +- int32_t op = URX_BUILD(URX_LA_START, dataLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); +- +- op = URX_BUILD(URX_STATE_SAVE, fRXPat->fCompiledPat->size()+ 2); +- fRXPat->fCompiledPat->addElement(op, *fStatus); +- +- op = URX_BUILD(URX_JMP, fRXPat->fCompiledPat->size()+ 3); +- fRXPat->fCompiledPat->addElement(op, *fStatus); +- +- op = URX_BUILD(URX_LA_END, dataLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); +- +- op = URX_BUILD(URX_BACKTRACK, 0); +- fRXPat->fCompiledPat->addElement(op, *fStatus); +- +- op = URX_BUILD(URX_NOP, 0); +- fRXPat->fCompiledPat->addElement(op, *fStatus); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ int32_t dataLoc = allocateData(2); ++ appendOp(URX_LA_START, dataLoc); ++ appendOp(URX_STATE_SAVE, fRXPat->fCompiledPat->size()+ 2); ++ appendOp(URX_JMP, fRXPat->fCompiledPat->size()+ 3); ++ appendOp(URX_LA_END, dataLoc); ++ appendOp(URX_BACKTRACK, 0); ++ appendOp(URX_NOP, 0); ++ appendOp(URX_NOP, 0); + + // On the Parentheses stack, start a new frame and add the postions + // of the NOPs. +@@ -602,16 +585,10 @@ + // an alternate (transparent) region. + { + fixLiterals(); +- int32_t dataLoc = fRXPat->fDataSize; +- fRXPat->fDataSize += 2; +- int32_t op = URX_BUILD(URX_LA_START, dataLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); +- +- op = URX_BUILD(URX_STATE_SAVE, 0); // dest address will be patched later. +- fRXPat->fCompiledPat->addElement(op, *fStatus); +- +- op = URX_BUILD(URX_NOP, 0); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ int32_t dataLoc = allocateData(2); ++ appendOp(URX_LA_START, dataLoc); ++ appendOp(URX_STATE_SAVE, 0); // dest address will be patched later. ++ appendOp(URX_NOP, 0); + + // On the Parentheses stack, start a new frame and add the postions + // of the StateSave and NOP. +@@ -649,23 +626,19 @@ + fixLiterals(); + + // Allocate data space +- int32_t dataLoc = fRXPat->fDataSize; +- fRXPat->fDataSize += 4; ++ int32_t dataLoc = allocateData(4); + + // Emit URX_LB_START +- int32_t op = URX_BUILD(URX_LB_START, dataLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_LB_START, dataLoc); + + // Emit URX_LB_CONT +- op = URX_BUILD(URX_LB_CONT, dataLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); +- fRXPat->fCompiledPat->addElement(0, *fStatus); // MinMatchLength. To be filled later. +- fRXPat->fCompiledPat->addElement(0, *fStatus); // MaxMatchLength. To be filled later. +- +- // Emit the NOP +- op = URX_BUILD(URX_NOP, 0); +- fRXPat->fCompiledPat->addElement(op, *fStatus); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_LB_CONT, dataLoc); ++ appendOp(URX_RESERVED_OP, 0); // MinMatchLength. To be filled later. ++ appendOp(URX_RESERVED_OP, 0); // MaxMatchLength. To be filled later. ++ ++ // Emit the NOPs ++ appendOp(URX_NOP, 0); ++ appendOp(URX_NOP, 0); + + // On the Parentheses stack, start a new frame and add the postions + // of the URX_LB_CONT and the NOP. +@@ -705,24 +678,20 @@ + fixLiterals(); + + // Allocate data space +- int32_t dataLoc = fRXPat->fDataSize; +- fRXPat->fDataSize += 4; ++ int32_t dataLoc = allocateData(4); + + // Emit URX_LB_START +- int32_t op = URX_BUILD(URX_LB_START, dataLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_LB_START, dataLoc); + + // Emit URX_LBN_CONT +- op = URX_BUILD(URX_LBN_CONT, dataLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); +- fRXPat->fCompiledPat->addElement(0, *fStatus); // MinMatchLength. To be filled later. +- fRXPat->fCompiledPat->addElement(0, *fStatus); // MaxMatchLength. To be filled later. +- fRXPat->fCompiledPat->addElement(0, *fStatus); // Continue Loc. To be filled later. +- +- // Emit the NOP +- op = URX_BUILD(URX_NOP, 0); +- fRXPat->fCompiledPat->addElement(op, *fStatus); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_LBN_CONT, dataLoc); ++ appendOp(URX_RESERVED_OP, 0); // MinMatchLength. To be filled later. ++ appendOp(URX_RESERVED_OP, 0); // MaxMatchLength. To be filled later. ++ appendOp(URX_RESERVED_OP, 0); // Continue Loc. To be filled later. ++ ++ // Emit the NOPs ++ appendOp(URX_NOP, 0); ++ appendOp(URX_NOP, 0); + + // On the Parentheses stack, start a new frame and add the postions + // of the URX_LB_CONT and the NOP. +@@ -792,12 +761,9 @@ + + if (URX_TYPE(repeatedOp) == URX_SETREF) { + // Emit optimized code for [char set]+ +- int32_t loopOpI = URX_BUILD(URX_LOOP_SR_I, URX_VAL(repeatedOp)); +- fRXPat->fCompiledPat->addElement(loopOpI, *fStatus); +- frameLoc = fRXPat->fFrameSize; +- fRXPat->fFrameSize++; +- int32_t loopOpC = URX_BUILD(URX_LOOP_C, frameLoc); +- fRXPat->fCompiledPat->addElement(loopOpC, *fStatus); ++ appendOp(URX_LOOP_SR_I, URX_VAL(repeatedOp)); ++ frameLoc = allocateStackData(1); ++ appendOp(URX_LOOP_C, frameLoc); + break; + } + +@@ -805,7 +771,7 @@ + URX_TYPE(repeatedOp) == URX_DOTANY_ALL || + URX_TYPE(repeatedOp) == URX_DOTANY_UNIX) { + // Emit Optimized code for .+ operations. +- int32_t loopOpI = URX_BUILD(URX_LOOP_DOT_I, 0); ++ int32_t loopOpI = buildOp(URX_LOOP_DOT_I, 0); + if (URX_TYPE(repeatedOp) == URX_DOTANY_ALL) { + // URX_LOOP_DOT_I operand is a flag indicating ". matches any" mode. + loopOpI |= 1; +@@ -813,11 +779,9 @@ + if (fModeFlags & UREGEX_UNIX_LINES) { + loopOpI |= 2; + } +- fRXPat->fCompiledPat->addElement(loopOpI, *fStatus); +- frameLoc = fRXPat->fFrameSize; +- fRXPat->fFrameSize++; +- int32_t loopOpC = URX_BUILD(URX_LOOP_C, frameLoc); +- fRXPat->fCompiledPat->addElement(loopOpC, *fStatus); ++ appendOp(loopOpI); ++ frameLoc = allocateStackData(1); ++ appendOp(URX_LOOP_C, frameLoc); + break; + } + +@@ -831,18 +795,15 @@ + // Zero length match is possible. + // Emit the code sequence that can handle it. + insertOp(topLoc); +- frameLoc = fRXPat->fFrameSize; +- fRXPat->fFrameSize++; ++ frameLoc = allocateStackData(1); + +- int32_t op = URX_BUILD(URX_STO_INP_LOC, frameLoc); ++ int32_t op = buildOp(URX_STO_INP_LOC, frameLoc); + fRXPat->fCompiledPat->setElementAt(op, topLoc); + +- op = URX_BUILD(URX_JMP_SAV_X, topLoc+1); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_JMP_SAV_X, topLoc+1); + } else { + // Simpler code when the repeated body must match something non-empty +- int32_t jmpOp = URX_BUILD(URX_JMP_SAV, topLoc); +- fRXPat->fCompiledPat->addElement(jmpOp, *fStatus); ++ appendOp(URX_JMP_SAV, topLoc); + } + } + break; +@@ -854,8 +815,7 @@ + // 3. ... + { + int32_t topLoc = blockTopLoc(FALSE); +- int32_t saveStateOp = URX_BUILD(URX_STATE_SAVE, topLoc); +- fRXPat->fCompiledPat->addElement(saveStateOp, *fStatus); ++ appendOp(URX_STATE_SAVE, topLoc); + } + break; + +@@ -869,7 +829,7 @@ + // Insert the state save into the compiled pattern, and we're done. + { + int32_t saveStateLoc = blockTopLoc(TRUE); +- int32_t saveStateOp = URX_BUILD(URX_STATE_SAVE, fRXPat->fCompiledPat->size()); ++ int32_t saveStateOp = buildOp(URX_STATE_SAVE, fRXPat->fCompiledPat->size()); + fRXPat->fCompiledPat->setElementAt(saveStateOp, saveStateLoc); + } + break; +@@ -888,14 +848,12 @@ + int32_t jmp1_loc = blockTopLoc(TRUE); + int32_t jmp2_loc = fRXPat->fCompiledPat->size(); + +- int32_t jmp1_op = URX_BUILD(URX_JMP, jmp2_loc+1); ++ int32_t jmp1_op = buildOp(URX_JMP, jmp2_loc+1); + fRXPat->fCompiledPat->setElementAt(jmp1_op, jmp1_loc); + +- int32_t jmp2_op = URX_BUILD(URX_JMP, jmp2_loc+2); +- fRXPat->fCompiledPat->addElement(jmp2_op, *fStatus); ++ appendOp(URX_JMP, jmp2_loc+2); + +- int32_t save_op = URX_BUILD(URX_STATE_SAVE, jmp1_loc+1); +- fRXPat->fCompiledPat->addElement(save_op, *fStatus); ++ appendOp(URX_STATE_SAVE, jmp1_loc+1); + } + break; + +@@ -935,12 +893,10 @@ + + if (URX_TYPE(repeatedOp) == URX_SETREF) { + // Emit optimized code for a [char set]* +- int32_t loopOpI = URX_BUILD(URX_LOOP_SR_I, URX_VAL(repeatedOp)); ++ int32_t loopOpI = buildOp(URX_LOOP_SR_I, URX_VAL(repeatedOp)); + fRXPat->fCompiledPat->setElementAt(loopOpI, topLoc); +- dataLoc = fRXPat->fFrameSize; +- fRXPat->fFrameSize++; +- int32_t loopOpC = URX_BUILD(URX_LOOP_C, dataLoc); +- fRXPat->fCompiledPat->addElement(loopOpC, *fStatus); ++ dataLoc = allocateStackData(1); ++ appendOp(URX_LOOP_C, dataLoc); + break; + } + +@@ -948,7 +904,7 @@ + URX_TYPE(repeatedOp) == URX_DOTANY_ALL || + URX_TYPE(repeatedOp) == URX_DOTANY_UNIX) { + // Emit Optimized code for .* operations. +- int32_t loopOpI = URX_BUILD(URX_LOOP_DOT_I, 0); ++ int32_t loopOpI = buildOp(URX_LOOP_DOT_I, 0); + if (URX_TYPE(repeatedOp) == URX_DOTANY_ALL) { + // URX_LOOP_DOT_I operand is a flag indicating . matches any mode. + loopOpI |= 1; +@@ -957,10 +913,8 @@ + loopOpI |= 2; + } + fRXPat->fCompiledPat->setElementAt(loopOpI, topLoc); +- dataLoc = fRXPat->fFrameSize; +- fRXPat->fFrameSize++; +- int32_t loopOpC = URX_BUILD(URX_LOOP_C, dataLoc); +- fRXPat->fCompiledPat->addElement(loopOpC, *fStatus); ++ dataLoc = allocateStackData(1); ++ appendOp(URX_LOOP_C, dataLoc); + break; + } + } +@@ -969,30 +923,29 @@ + // The optimizations did not apply. + + int32_t saveStateLoc = blockTopLoc(TRUE); +- int32_t jmpOp = URX_BUILD(URX_JMP_SAV, saveStateLoc+1); ++ int32_t jmpOp = buildOp(URX_JMP_SAV, saveStateLoc+1); + + // Check for minimum match length of zero, which requires + // extra loop-breaking code. + if (minMatchLength(saveStateLoc, fRXPat->fCompiledPat->size()-1) == 0) { + insertOp(saveStateLoc); +- dataLoc = fRXPat->fFrameSize; +- fRXPat->fFrameSize++; ++ dataLoc = allocateStackData(1); + +- int32_t op = URX_BUILD(URX_STO_INP_LOC, dataLoc); ++ int32_t op = buildOp(URX_STO_INP_LOC, dataLoc); + fRXPat->fCompiledPat->setElementAt(op, saveStateLoc+1); +- jmpOp = URX_BUILD(URX_JMP_SAV_X, saveStateLoc+2); ++ jmpOp = buildOp(URX_JMP_SAV_X, saveStateLoc+2); + } + + // Locate the position in the compiled pattern where the match will continue + // after completing the *. (4 or 5 in the comment above) + int32_t continueLoc = fRXPat->fCompiledPat->size()+1; + +- // Put together the save state op store it into the compiled code. +- int32_t saveStateOp = URX_BUILD(URX_STATE_SAVE, continueLoc); ++ // Put together the save state op and store it into the compiled code. ++ int32_t saveStateOp = buildOp(URX_STATE_SAVE, continueLoc); + fRXPat->fCompiledPat->setElementAt(saveStateOp, saveStateLoc); + + // Append the URX_JMP_SAV or URX_JMPX operation to the compiled pattern. +- fRXPat->fCompiledPat->addElement(jmpOp, *fStatus); ++ appendOp(jmpOp); + } + break; + +@@ -1006,10 +959,9 @@ + { + int32_t jmpLoc = blockTopLoc(TRUE); // loc 1. + int32_t saveLoc = fRXPat->fCompiledPat->size(); // loc 3. +- int32_t jmpOp = URX_BUILD(URX_JMP, saveLoc); +- int32_t stateSaveOp = URX_BUILD(URX_STATE_SAVE, jmpLoc+1); ++ int32_t jmpOp = buildOp(URX_JMP, saveLoc); + fRXPat->fCompiledPat->setElementAt(jmpOp, jmpLoc); +- fRXPat->fCompiledPat->addElement(stateSaveOp, *fStatus); ++ appendOp(URX_STATE_SAVE, jmpLoc+1); + } + break; + +@@ -1078,9 +1030,9 @@ + + // First the STO_SP before the start of the loop + insertOp(topLoc); +- int32_t varLoc = fRXPat->fDataSize; // Reserve a data location for saving the +- fRXPat->fDataSize += 1; // state stack ptr. +- int32_t op = URX_BUILD(URX_STO_SP, varLoc); ++ ++ int32_t varLoc = allocateData(1); // Reserve a data location for saving the ++ int32_t op = buildOp(URX_STO_SP, varLoc); + fRXPat->fCompiledPat->setElementAt(op, topLoc); + + int32_t loopOp = (int32_t)fRXPat->fCompiledPat->popi(); +@@ -1089,8 +1041,7 @@ + fRXPat->fCompiledPat->push(loopOp, *fStatus); + + // Then the LD_SP after the end of the loop +- op = URX_BUILD(URX_LD_SP, varLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_LD_SP, varLoc); + } + + break; +@@ -1126,55 +1077,49 @@ + // scanned a ".", match any single character. + { + fixLiterals(FALSE); +- int32_t op; + if (fModeFlags & UREGEX_DOTALL) { +- op = URX_BUILD(URX_DOTANY_ALL, 0); ++ appendOp(URX_DOTANY_ALL, 0); + } else if (fModeFlags & UREGEX_UNIX_LINES) { +- op = URX_BUILD(URX_DOTANY_UNIX, 0); ++ appendOp(URX_DOTANY_UNIX, 0); + } else { +- op = URX_BUILD(URX_DOTANY, 0); ++ appendOp(URX_DOTANY, 0); + } +- fRXPat->fCompiledPat->addElement(op, *fStatus); + } + break; + + case doCaret: + { + fixLiterals(FALSE); +- int32_t op = 0; + if ( (fModeFlags & UREGEX_MULTILINE) == 0 && (fModeFlags & UREGEX_UNIX_LINES) == 0) { +- op = URX_CARET; ++ appendOp(URX_CARET, 0); + } else if ((fModeFlags & UREGEX_MULTILINE) != 0 && (fModeFlags & UREGEX_UNIX_LINES) == 0) { +- op = URX_CARET_M; ++ appendOp(URX_CARET_M, 0); + } else if ((fModeFlags & UREGEX_MULTILINE) == 0 && (fModeFlags & UREGEX_UNIX_LINES) != 0) { +- op = URX_CARET; // Only testing true start of input. ++ appendOp(URX_CARET, 0); // Only testing true start of input. + } else if ((fModeFlags & UREGEX_MULTILINE) != 0 && (fModeFlags & UREGEX_UNIX_LINES) != 0) { +- op = URX_CARET_M_UNIX; ++ appendOp(URX_CARET_M_UNIX, 0); + } +- fRXPat->fCompiledPat->addElement(URX_BUILD(op, 0), *fStatus); + } + break; + + case doDollar: + { + fixLiterals(FALSE); +- int32_t op = 0; + if ( (fModeFlags & UREGEX_MULTILINE) == 0 && (fModeFlags & UREGEX_UNIX_LINES) == 0) { +- op = URX_DOLLAR; ++ appendOp(URX_DOLLAR, 0); + } else if ((fModeFlags & UREGEX_MULTILINE) != 0 && (fModeFlags & UREGEX_UNIX_LINES) == 0) { +- op = URX_DOLLAR_M; ++ appendOp(URX_DOLLAR_M, 0); + } else if ((fModeFlags & UREGEX_MULTILINE) == 0 && (fModeFlags & UREGEX_UNIX_LINES) != 0) { +- op = URX_DOLLAR_D; ++ appendOp(URX_DOLLAR_D, 0); + } else if ((fModeFlags & UREGEX_MULTILINE) != 0 && (fModeFlags & UREGEX_UNIX_LINES) != 0) { +- op = URX_DOLLAR_MD; ++ appendOp(URX_DOLLAR_MD, 0); + } +- fRXPat->fCompiledPat->addElement(URX_BUILD(op, 0), *fStatus); + } + break; + + case doBackslashA: + fixLiterals(FALSE); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_CARET, 0), *fStatus); ++ appendOp(URX_CARET, 0); + break; + + case doBackslashB: +@@ -1186,7 +1131,7 @@ + #endif + fixLiterals(FALSE); + int32_t op = (fModeFlags & UREGEX_UWORD)? URX_BACKSLASH_BU : URX_BACKSLASH_B; +- fRXPat->fCompiledPat->addElement(URX_BUILD(op, 1), *fStatus); ++ appendOp(op, 1); + } + break; + +@@ -1199,63 +1144,59 @@ + #endif + fixLiterals(FALSE); + int32_t op = (fModeFlags & UREGEX_UWORD)? URX_BACKSLASH_BU : URX_BACKSLASH_B; +- fRXPat->fCompiledPat->addElement(URX_BUILD(op, 0), *fStatus); ++ appendOp(op, 0); + } + break; + + case doBackslashD: + fixLiterals(FALSE); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_BACKSLASH_D, 1), *fStatus); ++ appendOp(URX_BACKSLASH_D, 1); + break; + + case doBackslashd: + fixLiterals(FALSE); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_BACKSLASH_D, 0), *fStatus); ++ appendOp(URX_BACKSLASH_D, 0); + break; + + case doBackslashG: + fixLiterals(FALSE); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_BACKSLASH_G, 0), *fStatus); ++ appendOp(URX_BACKSLASH_G, 0); + break; + + case doBackslashS: + fixLiterals(FALSE); +- fRXPat->fCompiledPat->addElement( +- URX_BUILD(URX_STAT_SETREF_N, URX_ISSPACE_SET), *fStatus); ++ appendOp(URX_STAT_SETREF_N, URX_ISSPACE_SET); + break; + + case doBackslashs: + fixLiterals(FALSE); +- fRXPat->fCompiledPat->addElement( +- URX_BUILD(URX_STATIC_SETREF, URX_ISSPACE_SET), *fStatus); ++ appendOp(URX_STATIC_SETREF, URX_ISSPACE_SET); + break; + + case doBackslashW: + fixLiterals(FALSE); +- fRXPat->fCompiledPat->addElement( +- URX_BUILD(URX_STAT_SETREF_N, URX_ISWORD_SET), *fStatus); ++ appendOp(URX_STAT_SETREF_N, URX_ISWORD_SET); + break; + + case doBackslashw: + fixLiterals(FALSE); +- fRXPat->fCompiledPat->addElement( +- URX_BUILD(URX_STATIC_SETREF, URX_ISWORD_SET), *fStatus); ++ appendOp(URX_STATIC_SETREF, URX_ISWORD_SET); + break; + + case doBackslashX: + fixLiterals(FALSE); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_BACKSLASH_X, 0), *fStatus); ++ appendOp(URX_BACKSLASH_X, 0); + break; + + + case doBackslashZ: + fixLiterals(FALSE); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_DOLLAR, 0), *fStatus); ++ appendOp(URX_DOLLAR, 0); + break; + + case doBackslashz: + fixLiterals(FALSE); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_BACKSLASH_Z, 0), *fStatus); ++ appendOp(URX_BACKSLASH_Z, 0); + break; + + case doEscapeError: +@@ -1315,13 +1256,11 @@ + U_ASSERT(groupNum > 0); // Shouldn't happen. '\0' begins an octal escape sequence, + // and shouldn't enter this code path at all. + fixLiterals(FALSE); +- int32_t op; + if (fModeFlags & UREGEX_CASE_INSENSITIVE) { +- op = URX_BUILD(URX_BACKREF_I, groupNum); ++ appendOp(URX_BACKREF_I, groupNum); + } else { +- op = URX_BUILD(URX_BACKREF, groupNum); ++ appendOp(URX_BACKREF, groupNum); + } +- fRXPat->fCompiledPat->addElement(op, *fStatus); + } + break; + +@@ -1342,22 +1281,18 @@ + { + // Emit the STO_SP + int32_t topLoc = blockTopLoc(TRUE); +- int32_t stoLoc = fRXPat->fDataSize; +- fRXPat->fDataSize++; // Reserve the data location for storing save stack ptr. +- int32_t op = URX_BUILD(URX_STO_SP, stoLoc); ++ int32_t stoLoc = allocateData(1); // Reserve the data location for storing save stack ptr. ++ int32_t op = buildOp(URX_STO_SP, stoLoc); + fRXPat->fCompiledPat->setElementAt(op, topLoc); + + // Emit the STATE_SAVE +- op = URX_BUILD(URX_STATE_SAVE, fRXPat->fCompiledPat->size()+2); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_STATE_SAVE, fRXPat->fCompiledPat->size()+2); + + // Emit the JMP +- op = URX_BUILD(URX_JMP, topLoc+1); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_JMP, topLoc+1); + + // Emit the LD_SP +- op = URX_BUILD(URX_LD_SP, stoLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_LD_SP, stoLoc); + } + break; + +@@ -1377,23 +1312,20 @@ + insertOp(topLoc); + + // emit STO_SP loc +- int32_t stoLoc = fRXPat->fDataSize; +- fRXPat->fDataSize++; // Reserve the data location for storing save stack ptr. +- int32_t op = URX_BUILD(URX_STO_SP, stoLoc); ++ int32_t stoLoc = allocateData(1); // Reserve the data location for storing save stack ptr. ++ int32_t op = buildOp(URX_STO_SP, stoLoc); + fRXPat->fCompiledPat->setElementAt(op, topLoc); + + // Emit the SAVE_STATE 5 + int32_t L7 = fRXPat->fCompiledPat->size()+1; +- op = URX_BUILD(URX_STATE_SAVE, L7); ++ op = buildOp(URX_STATE_SAVE, L7); + fRXPat->fCompiledPat->setElementAt(op, topLoc+1); + + // Append the JMP operation. +- op = URX_BUILD(URX_JMP, topLoc+1); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_JMP, topLoc+1); + + // Emit the LD_SP loc +- op = URX_BUILD(URX_LD_SP, stoLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_LD_SP, stoLoc); + } + break; + +@@ -1412,19 +1344,17 @@ + insertOp(topLoc); + + // Emit the STO_SP +- int32_t stoLoc = fRXPat->fDataSize; +- fRXPat->fDataSize++; // Reserve the data location for storing save stack ptr. +- int32_t op = URX_BUILD(URX_STO_SP, stoLoc); ++ int32_t stoLoc = allocateData(1); // Reserve the data location for storing save stack ptr. ++ int32_t op = buildOp(URX_STO_SP, stoLoc); + fRXPat->fCompiledPat->setElementAt(op, topLoc); + + // Emit the SAVE_STATE + int32_t continueLoc = fRXPat->fCompiledPat->size()+1; +- op = URX_BUILD(URX_STATE_SAVE, continueLoc); ++ op = buildOp(URX_STATE_SAVE, continueLoc); + fRXPat->fCompiledPat->setElementAt(op, topLoc+1); + + // Emit the LD_SP +- op = URX_BUILD(URX_LD_SP, stoLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_LD_SP, stoLoc); + } + break; + +@@ -1481,8 +1411,8 @@ + // is an '|' alternation within the parens. + { + fixLiterals(FALSE); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_NOP, 0), *fStatus); +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_NOP, 0), *fStatus); ++ appendOp(URX_NOP, 0); ++ appendOp(URX_NOP, 0); + + // On the Parentheses stack, start a new frame and add the postions + // of the two NOPs (a normal non-capturing () frame, except for the +@@ -1819,7 +1749,6 @@ + // + //------------------------------------------------------------------------------ + void RegexCompile::fixLiterals(UBool split) { +- int32_t op = 0; // An op from/for the compiled pattern. + + // If no literal characters have been scanned but not yet had code generated + // for them, nothing needs to be done. +@@ -1858,23 +1787,23 @@ + // Single character, emit a URX_ONECHAR op to match it. + if ((fModeFlags & UREGEX_CASE_INSENSITIVE) && + u_hasBinaryProperty(lastCodePoint, UCHAR_CASE_SENSITIVE)) { +- op = URX_BUILD(URX_ONECHAR_I, lastCodePoint); ++ appendOp(URX_ONECHAR_I, lastCodePoint); + } else { +- op = URX_BUILD(URX_ONECHAR, lastCodePoint); ++ appendOp(URX_ONECHAR, lastCodePoint); + } +- fRXPat->fCompiledPat->addElement(op, *fStatus); + } else { + // Two or more chars, emit a URX_STRING to match them. ++ if (fLiteralChars.length() > 0x00ffffff || fRXPat->fLiteralText.length() > 0x00ffffff) { ++ error(U_REGEX_PATTERN_TOO_BIG); ++ } + if (fModeFlags & UREGEX_CASE_INSENSITIVE) { +- op = URX_BUILD(URX_STRING_I, fRXPat->fLiteralText.length()); ++ appendOp(URX_STRING_I, fRXPat->fLiteralText.length()); + } else { + // TODO here: add optimization to split case sensitive strings of length two + // into two single char ops, for efficiency. +- op = URX_BUILD(URX_STRING, fRXPat->fLiteralText.length()); ++ appendOp(URX_STRING, fRXPat->fLiteralText.length()); + } +- fRXPat->fCompiledPat->addElement(op, *fStatus); +- op = URX_BUILD(URX_STRING_LEN, fLiteralChars.length()); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_STRING_LEN, fLiteralChars.length()); + + // Add this string into the accumulated strings of the compiled pattern. + fRXPat->fLiteralText.append(fLiteralChars); +@@ -1884,8 +1813,58 @@ + } + + ++int32_t RegexCompile::buildOp(int32_t type, int32_t val) { ++ if (U_FAILURE(*fStatus)) { ++ return 0; ++ } ++ if (type < 0 || type > 255) { ++ U_ASSERT(FALSE); ++ error(U_REGEX_INTERNAL_ERROR); ++ type = URX_RESERVED_OP; ++ } ++ if (val > 0x00ffffff) { ++ U_ASSERT(FALSE); ++ error(U_REGEX_INTERNAL_ERROR); ++ val = 0; ++ } ++ if (val < 0) { ++ if (!(type == URX_RESERVED_OP_N || type == URX_RESERVED_OP)) { ++ U_ASSERT(FALSE); ++ error(U_REGEX_INTERNAL_ERROR); ++ return -1; ++ } ++ if (URX_TYPE(val) != 0xff) { ++ U_ASSERT(FALSE); ++ error(U_REGEX_INTERNAL_ERROR); ++ return -1; ++ } ++ type = URX_RESERVED_OP_N; ++ } ++ return (type << 24) | val; ++} ++ + ++//------------------------------------------------------------------------------ ++// ++// appendOp() Append a new instruction onto the compiled pattern ++// Includes error checking, limiting the size of the ++// pattern to lengths that can be represented in the ++// 24 bit operand field of an instruction. ++// ++//------------------------------------------------------------------------------ ++void RegexCompile::appendOp(int32_t op) { ++ if (U_FAILURE(*fStatus)) { ++ return; ++ } ++ fRXPat->fCompiledPat->addElement(op, *fStatus); ++ if ((fRXPat->fCompiledPat->size() > 0x00fffff0) && U_SUCCESS(*fStatus)) { ++ error(U_REGEX_PATTERN_TOO_BIG); ++ } ++} + ++void RegexCompile::appendOp(int32_t type, int32_t val) { ++ appendOp(buildOp(type, val)); ++} + + + //------------------------------------------------------------------------------ +@@ -1901,7 +1880,7 @@ + UVector64 *code = fRXPat->fCompiledPat; + U_ASSERT(where>0 && where < code->size()); + +- int32_t nop = URX_BUILD(URX_NOP, 0); ++ int32_t nop = buildOp(URX_NOP, 0); + code->insertElementAt(nop, where, *fStatus); + + // Walk through the pattern, looking for any ops with targets that +@@ -1922,7 +1901,7 @@ + // Target location for this opcode is after the insertion point and + // needs to be incremented to adjust for the insertion. + opValue++; +- op = URX_BUILD(opType, opValue); ++ op = buildOp(opType, opValue); + code->setElementAt(op, loc); + } + } +@@ -1947,6 +1926,58 @@ + } + + ++//------------------------------------------------------------------------------ ++// ++// allocateData() Allocate storage in the matcher's static data area. ++// Return the index for the newly allocated data. ++// The storage won't actually exist until we are running a match ++// operation, but the storage indexes are inserted into various ++// opcodes while compiling the pattern. ++// ++//------------------------------------------------------------------------------ ++int32_t RegexCompile::allocateData(int32_t size) { ++ if (U_FAILURE(*fStatus)) { ++ return 0; ++ } ++ if (size <= 0 || size > 0x100 || fRXPat->fDataSize < 0) { ++ error(U_REGEX_INTERNAL_ERROR); ++ return 0; ++ } ++ int32_t dataIndex = fRXPat->fDataSize; ++ fRXPat->fDataSize += size; ++ if (fRXPat->fDataSize >= 0x00fffff0) { ++ error(U_REGEX_INTERNAL_ERROR); ++ } ++ return dataIndex; ++} ++ ++ ++//------------------------------------------------------------------------------ ++// ++// allocateStackData() Allocate space in the back-tracking stack frame. ++// Return the index for the newly allocated data. ++// The frame indexes are inserted into various ++// opcodes while compiling the pattern, meaning that frame ++// size must be restricted to the size that will fit ++// as an operand (24 bits). ++// ++//------------------------------------------------------------------------------ ++int32_t RegexCompile::allocateStackData(int32_t size) { ++ if (U_FAILURE(*fStatus)) { ++ return 0; ++ } ++ if (size <= 0 || size > 0x100 || fRXPat->fFrameSize < 0) { ++ error(U_REGEX_INTERNAL_ERROR); ++ return 0; ++ } ++ int32_t dataIndex = fRXPat->fFrameSize; ++ fRXPat->fFrameSize += size; ++ if (fRXPat->fFrameSize >= 0x00fffff0) { ++ error(U_REGEX_PATTERN_TOO_BIG); ++ } ++ return dataIndex; ++} ++ + + //------------------------------------------------------------------------------ + // +@@ -1989,7 +2020,7 @@ + theLoc--; + } + if (reserveLoc) { +- int32_t nop = URX_BUILD(URX_NOP, 0); ++ int32_t nop = buildOp(URX_NOP, 0); + fRXPat->fCompiledPat->insertElementAt(nop, theLoc, *fStatus); + } + } +@@ -2064,8 +2095,7 @@ + U_ASSERT(URX_TYPE(captureOp) == URX_START_CAPTURE); + + int32_t frameVarLocation = URX_VAL(captureOp); +- int32_t endCaptureOp = URX_BUILD(URX_END_CAPTURE, frameVarLocation); +- fRXPat->fCompiledPat->addElement(endCaptureOp, *fStatus); ++ appendOp(URX_END_CAPTURE, frameVarLocation); + } + break; + case atomic: +@@ -2076,8 +2106,7 @@ + int32_t stoOp = (int32_t)fRXPat->fCompiledPat->elementAti(fMatchOpenParen+1); + U_ASSERT(URX_TYPE(stoOp) == URX_STO_SP); + int32_t stoLoc = URX_VAL(stoOp); +- int32_t ldOp = URX_BUILD(URX_LD_SP, stoLoc); +- fRXPat->fCompiledPat->addElement(ldOp, *fStatus); ++ appendOp(URX_LD_SP, stoLoc); + } + break; + +@@ -2086,8 +2115,7 @@ + int32_t startOp = (int32_t)fRXPat->fCompiledPat->elementAti(fMatchOpenParen-5); + U_ASSERT(URX_TYPE(startOp) == URX_LA_START); + int32_t dataLoc = URX_VAL(startOp); +- int32_t op = URX_BUILD(URX_LA_END, dataLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_LA_END, dataLoc); + } + break; + +@@ -2097,19 +2125,16 @@ + int32_t startOp = (int32_t)fRXPat->fCompiledPat->elementAti(fMatchOpenParen-1); + U_ASSERT(URX_TYPE(startOp) == URX_LA_START); + int32_t dataLoc = URX_VAL(startOp); +- int32_t op = URX_BUILD(URX_LA_END, dataLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); +- op = URX_BUILD(URX_BACKTRACK, 0); +- fRXPat->fCompiledPat->addElement(op, *fStatus); +- op = URX_BUILD(URX_LA_END, dataLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_LA_END, dataLoc); ++ appendOp(URX_BACKTRACK, 0); ++ appendOp(URX_LA_END, dataLoc); + + // Patch the URX_SAVE near the top of the block. + // The destination of the SAVE is the final LA_END that was just added. + int32_t saveOp = (int32_t)fRXPat->fCompiledPat->elementAti(fMatchOpenParen); + U_ASSERT(URX_TYPE(saveOp) == URX_STATE_SAVE); + int32_t dest = fRXPat->fCompiledPat->size()-1; +- saveOp = URX_BUILD(URX_STATE_SAVE, dest); ++ saveOp = buildOp(URX_STATE_SAVE, dest); + fRXPat->fCompiledPat->setElementAt(saveOp, fMatchOpenParen); + } + break; +@@ -2122,10 +2147,8 @@ + int32_t startOp = (int32_t)fRXPat->fCompiledPat->elementAti(fMatchOpenParen-4); + U_ASSERT(URX_TYPE(startOp) == URX_LB_START); + int32_t dataLoc = URX_VAL(startOp); +- int32_t op = URX_BUILD(URX_LB_END, dataLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); +- op = URX_BUILD(URX_LA_END, dataLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_LB_END, dataLoc); ++ appendOp(URX_LA_END, dataLoc); + + // Determine the min and max bounds for the length of the + // string that the pattern can match. +@@ -2161,8 +2184,7 @@ + int32_t startOp = (int32_t)fRXPat->fCompiledPat->elementAti(fMatchOpenParen-5); + U_ASSERT(URX_TYPE(startOp) == URX_LB_START); + int32_t dataLoc = URX_VAL(startOp); +- int32_t op = URX_BUILD(URX_LBN_END, dataLoc); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(URX_LBN_END, dataLoc); + + // Determine the min and max bounds for the length of the + // string that the pattern can match. +@@ -2187,7 +2209,7 @@ + + // Insert the pattern location to continue at after a successful match + // as the last operand of the URX_LBN_CONT +- op = URX_BUILD(URX_RELOC_OPRND, fRXPat->fCompiledPat->size()); ++ int32_t op = buildOp(URX_RELOC_OPRND, fRXPat->fCompiledPat->size()); + fRXPat->fCompiledPat->setElementAt(op, fMatchOpenParen-1); + } + break; +@@ -2228,7 +2250,7 @@ + case 0: + { + // Set of no elements. Always fails to match. +- fRXPat->fCompiledPat->addElement(URX_BUILD(URX_BACKTRACK, 0), *fStatus); ++ appendOp(URX_BACKTRACK, 0); + delete theSet; + } + break; +@@ -2249,8 +2271,7 @@ + // Put it into the compiled pattern as a set. + int32_t setNumber = fRXPat->fSets->size(); + fRXPat->fSets->addElement(theSet, *fStatus); +- int32_t setOp = URX_BUILD(URX_SETREF, setNumber); +- fRXPat->fCompiledPat->addElement(setOp, *fStatus); ++ appendOp(URX_SETREF, setNumber); + } + } + } +@@ -2289,13 +2310,10 @@ + // counterLoc --> Loop counter + // +1 --> Input index (for breaking non-progressing loops) + // (Only present if unbounded upper limit on loop) +- int32_t counterLoc = fRXPat->fFrameSize; +- fRXPat->fFrameSize++; +- if (fIntervalUpper < 0) { +- fRXPat->fFrameSize++; +- } ++ int32_t dataSize = fIntervalUpper < 0 ? 2 : 1; ++ int32_t counterLoc = allocateStackData(dataSize); + +- int32_t op = URX_BUILD(InitOp, counterLoc); ++ int32_t op = buildOp(InitOp, counterLoc); + fRXPat->fCompiledPat->setElementAt(op, topOfBlock); + + // The second operand of CTR_INIT is the location following the end of the loop. +@@ -2303,7 +2321,7 @@ + // compilation of something later on causes the code to grow and the target + // position to move. + int32_t loopEnd = fRXPat->fCompiledPat->size(); +- op = URX_BUILD(URX_RELOC_OPRND, loopEnd); ++ op = buildOp(URX_RELOC_OPRND, loopEnd); + fRXPat->fCompiledPat->setElementAt(op, topOfBlock+1); + + // Followed by the min and max counts. +@@ -2312,8 +2330,7 @@ + + // Apend the CTR_LOOP op. The operand is the location of the CTR_INIT op. + // Goes at end of the block being looped over, so just append to the code so far. +- op = URX_BUILD(LoopOp, topOfBlock); +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(LoopOp, topOfBlock); + + if ((fIntervalLow & 0xff000000) != 0 || + (fIntervalUpper > 0 && (fIntervalUpper & 0xff000000) != 0)) { +@@ -2366,7 +2383,7 @@ + // + int32_t endOfSequenceLoc = fRXPat->fCompiledPat->size()-1 + + fIntervalUpper + (fIntervalUpper-fIntervalLow); +- int32_t saveOp = URX_BUILD(URX_STATE_SAVE, endOfSequenceLoc); ++ int32_t saveOp = buildOp(URX_STATE_SAVE, endOfSequenceLoc); + if (fIntervalLow == 0) { + insertOp(topOfBlock); + fRXPat->fCompiledPat->setElementAt(saveOp, topOfBlock); +@@ -2379,13 +2396,10 @@ + // it was put there when it was originally encountered. + int32_t i; + for (i=1; ifCompiledPat->addElement(saveOp, *fStatus); +- } +- if (i > fIntervalLow) { +- fRXPat->fCompiledPat->addElement(saveOp, *fStatus); ++ if (i >= fIntervalLow) { ++ appendOp(saveOp); + } +- fRXPat->fCompiledPat->addElement(op, *fStatus); ++ appendOp(op); + } + return TRUE; + } +@@ -3516,7 +3530,7 @@ + int32_t operandAddress = URX_VAL(op); + U_ASSERT(operandAddress>=0 && operandAddressfCompiledPat->setElementAt(op, dst); + dst++; + break; +@@ -3531,7 +3545,7 @@ + break; + } + where = fRXPat->fGroupMap->elementAti(where-1); +- op = URX_BUILD(opType, where); ++ op = buildOp(opType, where); + fRXPat->fCompiledPat->setElementAt(op, dst); + dst++; + +@@ -3883,7 +3897,7 @@ + //------------------------------------------------------------------------------ + // + // scanNamedChar +- // Get a UChar32 from a \N{UNICODE CHARACTER NAME} in the pattern. ++// Get a UChar32 from a \N{UNICODE CHARACTER NAME} in the pattern. + // + // The scan position will be at the 'N'. On return + // the scan position should be just after the '}' +diff -ur icu.org/source/i18n/regexcmp.h icu/source/i18n/regexcmp.h +--- icu.org/source/i18n/regexcmp.h 2015-04-10 23:48:23.154187249 +0200 ++++ icu/source/i18n/regexcmp.h 2015-04-10 23:50:28.471988065 +0200 +@@ -103,6 +103,13 @@ + void fixLiterals(UBool split=FALSE); // Generate code for pending literal characters. + void insertOp(int32_t where); // Open up a slot for a new op in the + // generated code at the specified location. ++ void appendOp(int32_t op); // Append a new op to the compiled pattern. ++ void appendOp(int32_t type, int32_t val); // Build & append a new op to the compiled pattern. ++ int32_t buildOp(int32_t type, int32_t val); // Construct a new pcode instruction. ++ int32_t allocateData(int32_t size); // Allocate space in the matcher data area. ++ // Return index of the newly allocated data. ++ int32_t allocateStackData(int32_t size); // Allocate space in the match back-track stack frame. ++ // Return offset index in the frame. + int32_t minMatchLength(int32_t start, + int32_t end); + int32_t maxMatchLength(int32_t start, +diff -ur icu.org/source/i18n/regeximp.h icu/source/i18n/regeximp.h +--- icu.org/source/i18n/regeximp.h 2015-04-10 23:48:23.156187261 +0200 ++++ icu/source/i18n/regeximp.h 2015-04-10 23:50:28.471988065 +0200 +@@ -1,5 +1,5 @@ + // +-// Copyright (C) 2002-2013 International Business Machines Corporation ++// Copyright (C) 2002-2014 International Business Machines Corporation + // and others. All rights reserved. + // + // file: regeximp.h +@@ -241,7 +241,6 @@ + // + // Convenience macros for assembling and disassembling a compiled operation. + // +-#define URX_BUILD(type, val) (int32_t)((type << 24) | (val)) + #define URX_TYPE(x) ((uint32_t)(x) >> 24) + #define URX_VAL(x) ((x) & 0xffffff) + +diff -ur icu.org/source/test/intltest/regextst.cpp icu/source/test/intltest/regextst.cpp +--- icu.org/source/test/intltest/regextst.cpp 2015-04-10 23:48:23.111186974 +0200 ++++ icu/source/test/intltest/regextst.cpp 2015-04-10 23:51:24.497346079 +0200 +@@ -135,6 +135,9 @@ + case 22: name = "Bug10459"; + if (exec) Bug10459(); + break; ++ case 23: name = "TestBug11371"; ++ if (exec) TestBug11371(); ++ break; + + default: name = ""; + break; //needed to end loop +@@ -5267,5 +5270,49 @@ + utext_close(utext_txt); + } + ++void RegexTest::TestBug11371() { ++ if (quick) { ++ logln("Skipping test. Runs in exhuastive mode only."); ++ return; ++ } ++ UErrorCode status = U_ZERO_ERROR; ++ UnicodeString patternString; ++ ++ for (int i=0; i<8000000; i++) { ++ patternString.append(UnicodeString("()")); ++ } ++ LocalPointer compiledPat(RegexPattern::compile(patternString, 0, status)); ++ if (status != U_REGEX_PATTERN_TOO_BIG) { ++ errln("File %s, line %d expected status=U_REGEX_PATTERN_TOO_BIG; got %s.", ++ __FILE__, __LINE__, u_errorName(status)); ++ } ++ ++ status = U_ZERO_ERROR; ++ patternString = "("; ++ for (int i=0; i<20000000; i++) { ++ patternString.append(UnicodeString("A++")); ++ } ++ patternString.append(UnicodeString("){0}B++")); ++ LocalPointer compiledPat2(RegexPattern::compile(patternString, 0, status)); ++ if (status != U_REGEX_PATTERN_TOO_BIG) { ++ errln("File %s, line %d expected status=U_REGEX_PATTERN_TOO_BIG; got %s.", ++ __FILE__, __LINE__, u_errorName(status)); ++ } ++ ++ // Pattern with too much string data, such that string indexes overflow operand data field size ++ // in compiled instruction. ++ status = U_ZERO_ERROR; ++ patternString = ""; ++ while (patternString.length() < 0x00ffffff) { ++ patternString.append(UnicodeString("stuff and things dont you know, these are a few of my favorite strings\n")); ++ } ++ patternString.append(UnicodeString("X? trailing string")); ++ LocalPointer compiledPat3(RegexPattern::compile(patternString, 0, status)); ++ if (status != U_REGEX_PATTERN_TOO_BIG) { ++ errln("File %s, line %d expected status=U_REGEX_PATTERN_TOO_BIG; got %s.", ++ __FILE__, __LINE__, u_errorName(status)); ++ } ++} ++ + #endif /* !UCONFIG_NO_REGULAR_EXPRESSIONS */ + +diff -ur icu.org/source/test/intltest/regextst.h icu/source/test/intltest/regextst.h +--- icu.org/source/test/intltest/regextst.h 2015-04-10 23:48:23.107186948 +0200 ++++ icu/source/test/intltest/regextst.h 2015-04-10 23:51:51.749520224 +0200 +@@ -48,6 +48,7 @@ + virtual void Bug9283(); + virtual void CheckInvBufSize(); + virtual void Bug10459(); ++ virtual void TestBug11371(); + + // The following functions are internal to the regexp tests. + virtual void assertUText(const char *expected, UText *actual, const char *file, int line); diff -Nru libreoffice-l10n-4.4.2/external/icu/UnpackedTarball_icu.mk libreoffice-l10n-4.4.6~rc3/external/icu/UnpackedTarball_icu.mk --- libreoffice-l10n-4.4.2/external/icu/UnpackedTarball_icu.mk 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/external/icu/UnpackedTarball_icu.mk 2015-10-27 20:55:54.000000000 +0000 @@ -27,6 +27,9 @@ external/icu/icu4c-icu11131.patch.1 \ external/icu/icu4c-scriptrun.patch \ external/icu/icu4c-icu11451.patch.1 \ + external/icu/icu.changeset_36724.patch.1 \ + external/icu/icu.changeset_36727.patch.1 \ + external/icu/icu.changeset_36801.patch.1 \ )) # vim: set noet sw=4 ts=4: diff -Nru libreoffice-l10n-4.4.2/external/jfreereport/patches/libformula-minutes_truncation.patch.1 libreoffice-l10n-4.4.6~rc3/external/jfreereport/patches/libformula-minutes_truncation.patch.1 --- libreoffice-l10n-4.4.2/external/jfreereport/patches/libformula-minutes_truncation.patch.1 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/external/jfreereport/patches/libformula-minutes_truncation.patch.1 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,17 @@ +Seulement dans jfreereport_libformula: bin +Seulement dans jfreereport_libformula: build.log +Seulement dans jfreereport_libformula: dist +diff -ur jfreereport_libformula.org/source/org/pentaho/reporting/libraries/formula/function/datetime/MinuteFunction.java jfreereport_libformula/source/org/pentaho/reporting/libraries/formula/function/datetime/MinuteFunction.java +--- jfreereport_libformula.org/source/org/pentaho/reporting/libraries/formula/function/datetime/MinuteFunction.java 2015-07-13 15:55:31.752539618 +0200 ++++ jfreereport_libformula/source/org/pentaho/reporting/libraries/formula/function/datetime/MinuteFunction.java 2015-07-13 15:56:27.084394065 +0200 +@@ -74,7 +74,7 @@ + + // Multiply the minutes with 60 to get the minutes as ints + final BigDecimal minutes = minutesFraction.multiply(MINUTES); +- final BigDecimal minutesAsInt = minutes.setScale(0, BigDecimal.ROUND_HALF_UP); ++ final BigDecimal minutesAsInt = NumberUtil.performIntRounding(minutes); + return new TypeValuePair(NumberType.GENERIC_NUMBER, minutesAsInt); + } +-} +\ Pas de fin de ligne à la fin du fichier ++} diff -Nru libreoffice-l10n-4.4.2/external/jfreereport/UnpackedTarball_jfreereport_libformula.mk libreoffice-l10n-4.4.6~rc3/external/jfreereport/UnpackedTarball_jfreereport_libformula.mk --- libreoffice-l10n-4.4.2/external/jfreereport/UnpackedTarball_jfreereport_libformula.mk 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/external/jfreereport/UnpackedTarball_jfreereport_libformula.mk 2015-10-27 20:55:54.000000000 +0000 @@ -18,6 +18,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,jfreereport_libformula,\ external/jfreereport/patches/common_build.patch \ external/jfreereport/patches/libformula-time-notz.patch \ + external/jfreereport/patches/libformula-minutes_truncation.patch.1 \ )) # vim: set noet sw=4 ts=4: diff -Nru libreoffice-l10n-4.4.2/external/openssl/openssl-1.0.1g-msvc2012-winxp.patch.1 libreoffice-l10n-4.4.6~rc3/external/openssl/openssl-1.0.1g-msvc2012-winxp.patch.1 --- libreoffice-l10n-4.4.2/external/openssl/openssl-1.0.1g-msvc2012-winxp.patch.1 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/external/openssl/openssl-1.0.1g-msvc2012-winxp.patch.1 2015-10-27 20:55:54.000000000 +0000 @@ -1,7 +1,7 @@ --- openssl.org/util/pl/VC-32.pl 2014-05-18 23:41:39.336594400 +0200 +++ openssl/util/pl/VC-32.pl 2014-05-18 23:47:40.055279300 +0200 -@@ -49,7 +49,7 @@ - $lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib +@@ -48,7 +48,7 @@ + my $f = $shlib || $fips ?' /MD':' /MT'; $opt_cflags=$f.' /Ox'; $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG'; - $lflags="/nologo /subsystem:console /opt:ref"; @@ -9,12 +9,12 @@ *::perlasm_compile_target = sub { my ($target,$source,$bname)=@_; -@@ -131,7 +131,7 @@ +@@ -135,7 +135,7 @@ $ff = "/fixed"; $opt_cflags=$f.' -Ox -O2 -Ob2'; $dbg_cflags=$f.'d -Od -DDEBUG -D_DEBUG'; - $lflags="/nologo /subsystem:console /opt:ref"; + $lflags="/nologo /subsystem:console,5.01 /opt:ref"; } + $lib_cflag='-Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib $mlflags=''; - diff -Nru libreoffice-l10n-4.4.2/external/openssl/openssl-3650-masm.patch.1 libreoffice-l10n-4.4.6~rc3/external/openssl/openssl-3650-masm.patch.1 --- libreoffice-l10n-4.4.2/external/openssl/openssl-3650-masm.patch.1 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/external/openssl/openssl-3650-masm.patch.1 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,35 @@ +diff --git a/crypto/perlasm/x86masm.pl b/crypto/perlasm/x86masm.pl +index 1741342..917d0f8 100644 +--- a/crypto/perlasm/x86masm.pl ++++ b/crypto/perlasm/x86masm.pl +@@ -18,10 +18,10 @@ sub ::generic + + if ($opcode =~ /lea/ && @arg[1] =~ s/.*PTR\s+(\(.*\))$/OFFSET $1/) # no [] + { $opcode="mov"; } +- elsif ($opcode !~ /movq/) ++ elsif ($opcode !~ /mov[dq]$/) + { # fix xmm references +- $arg[0] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[1]=~/\bxmm[0-7]\b/i); +- $arg[1] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[0]=~/\bxmm[0-7]\b/i); ++ $arg[0] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[-1]=~/\bxmm[0-7]\b/i); ++ $arg[-1] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[0]=~/\bxmm[0-7]\b/i); + } + + &::emit($opcode,@arg); +@@ -160,13 +160,13 @@ sub ::public_label + { push(@out,"PUBLIC\t".&::LABEL($_[0],$nmdecor.$_[0])."\n"); } + + sub ::data_byte +-{ push(@out,("DB\t").join(',',@_)."\n"); } ++{ push(@out,("DB\t").join(',',splice(@_,0,16))."\n") while(@_); } + + sub ::data_short +-{ push(@out,("DW\t").join(',',@_)."\n"); } ++{ push(@out,("DW\t").join(',',splice(@_,0,8))."\n") while(@_); } + + sub ::data_word +-{ push(@out,("DD\t").join(',',@_)."\n"); } ++{ push(@out,("DD\t").join(',',splice(@_,0,4))."\n") while(@_); } + + sub ::align + { push(@out,"ALIGN\t$_[0]\n"); } diff -Nru libreoffice-l10n-4.4.2/external/openssl/opensslmingw.patch libreoffice-l10n-4.4.6~rc3/external/openssl/opensslmingw.patch --- libreoffice-l10n-4.4.2/external/openssl/opensslmingw.patch 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/external/openssl/opensslmingw.patch 2015-10-27 20:55:54.000000000 +0000 @@ -1,37 +1,47 @@ --- misc/openssl-0.9.8v/Makefile.shared 2008-09-17 17:56:40.000000000 +0200 +++ misc/build/openssl-0.9.8v/Makefile.shared 2009-03-30 11:52:53.684538000 +0200 -@@ -254,13 +254,17 @@ +@@ -278,7 +278,7 @@ + link_a.cygwin: + @ $(CALC_VERSIONS); \ + INHIBIT_SYMLINKS=yes; \ +- SHLIB=cyg$(LIBNAME); SHLIB_SOVER=-$(LIBVERSION); SHLIB_SUFFIX=.dll; \ ++ SHLIB=cyg$(LIBNAME); SHLIB_SOVER=; SHLIB_SUFFIX=.dll; \ + dll_name=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; extras=; \ base=-Wl,--enable-auto-image-base; \ if expr $(PLATFORM) : 'mingw' > /dev/null; then \ - SHLIB=$(LIBNAME)eay32; \ -- base=; [ $(LIBNAME) = "crypto" ] && base=-Wl,--image-base,0x63000000; \ -+ base=; \ -+ if test $(LIBNAME) = "crypto"; then \ -+ SHLIB=libeay32; \ -+ base=-Wl,--image-base,0x63000000; \ -+ fi; \ +@@ -289,7 +289,11 @@ + SHLIB_SOVER=32; \ + extras="$(LIBNAME).def"; \ + $(PERL) util/mkdef.pl 32 $$SHLIB > $$extras; \ +- base=; [ $(LIBNAME) = "crypto" ] && base=-Wl,--image-base,0x63000000; \ ++ base=; \ ++ if test $(LIBNAME) = "crypto"; then \ ++ SHLIB=libeay32; \ ++ base=-Wl,--image-base,0x63000000; \ ++ fi; \ fi; \ - SHLIB_SUFFIX=.dll; \ -- SHLIB_SOVER=-$(LIBVERSION); \ -+ SHLIB_SOVER=; \ + dll_name=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \ + $(PERL) util/mkrc.pl $$dll_name | \ +@@ -297,7 +301,7 @@ + extras="$$extras rc.o"; \ ALLSYMSFLAGS='-Wl,--whole-archive'; \ NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \ -- SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \ -+ SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--export-all-symbols -Wl,--out-implib,lib$(LIBNAME).dll.a"; \ - [ -f apps/$$SHLIB$$SHLIB_SUFFIX ] && rm apps/$$SHLIB$$SHLIB_SUFFIX; \ - [ -f test/$$SHLIB$$SHLIB_SUFFIX ] && rm test/$$SHLIB$$SHLIB_SUFFIX; \ +- SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-s,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a $$extras"; \ ++ SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-s,-Bsymbolic -Wl,--export-all-symbols -Wl,--out-implib,lib$(LIBNAME).dll.a $$extras"; \ + [ -f apps/$$dll_name ] && rm apps/$$dll_name; \ + [ -f test/$$dll_name ] && rm test/$$dll_name; \ $(LINK_SO_A) || exit 1; \ --- misc/openssl-0.9.8v/e_os2.h 2005-12-19 03:57:07.000000000 +0900 +++ misc/build/openssl-0.9.8v/e_os2.h 2009-04-04 23:07:15.324250000 +0900 -@@ -264,7 +264,7 @@ - # define OPENSSL_IMPLEMENT_GLOBAL(type,name) \ - extern type _hide_##name; \ - type *_shadow_##name(void) { return &_hide_##name; } \ -- static type _hide_##name -+ type _hide_##name - # define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) - # define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) - #else +@@ -287,7 +287,7 @@ + # ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION + # define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) \ + type *_shadow_##name(void) \ +- { static type _hide_##name=value; return &_hide_##name; } ++ { type _hide_##name=value; return &_hide_##name; } + # define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) + # define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) + # else --- misc/openssl-0.9.8v/ms/mingw32.bat 2006-05-05 15:19:32.000000000 +0200 +++ misc/build/openssl-0.9.8v/ms/mingw32.bat 2009-03-30 11:54:10.000000000 +0200 @@ -79,15 +79,41 @@ @@ -43,33 +53,33 @@ if errorlevel 1 goto end echo Generating the DLLs and input libraries --dllwrap --dllname libeay32.dll --output-lib out/libeay32.a --def ms/libeay32.def out/libcrypto.a -lwsock32 -lgdi32 +-dllwrap --dllname libeay32.dll --output-lib out/libeay32.a --def ms/libeay32.def out/libcrypto.a -lws2_32 -lgdi32 +mv out/libcrypto.a out/libcrypto_static.a +mv out/libssl.a out/libssl_static.a +dlltool --dllname libeay32.dll --output-lib out/libcrypto.a --input-def ms/libeay32.def if errorlevel 1 goto end -dllwrap --dllname libssl32.dll --output-lib out/libssl32.a --def ms/ssleay32.def out/libssl.a out/libeay32.a -+gcc --shared --enable-pseudo-reloc -Wl,-Map,out/libeay32.map ms/libeay32.def -o out/libeay32.dll out/libcrypto_static.a -lwsock32 -lgdi32 ++gcc --shared --enable-pseudo-reloc -Wl,-Map,out/libeay32.map ms/libeay32.def -o out/libeay32.dll out/libcrypto_static.a -lws2_32 -lgdi32 if errorlevel 1 goto end +dlltool --dllname ssleay32.dll --output-lib out/libssl.a --input-def ms/ssleay32.def +if errorlevel 1 goto end +if "%MINGW_SHARED_GXXLIB%"=="TRUE" goto shared_gxxlib +if "%MINGW_SHARED_GCCLIB%"=="TRUE" goto shared_gcclib -+gcc --shared --enable-pseudo-reloc -Wl,-Map,out/libeay32.map ms/libeay32.def -o out/libeay32.dll out/libcrypto_static.a -lwsock32 -lgdi32 ++gcc --shared --enable-pseudo-reloc -Wl,-Map,out/libeay32.map ms/libeay32.def -o out/libeay32.dll out/libcrypto_static.a -lws2_32 -lgdi32 +if errorlevel 1 goto end +gcc --shared --enable-pseudo-reloc -Wl,-Map,out/ssleay32.map -Lout ms/ssleay32.def -o out/ssleay32.dll out/libssl_static.a -lcrypto +if errorlevel 1 goto end +goto finished + +:shared_gcclib -+gcc --shared -shared-libgcc --enable-pseudo-reloc -Wl,-Map,out/libeay32.map ms/libeay32.def -o out/libeay32.dll out/libcrypto_static.a -lwsock32 -lgdi32 ++gcc --shared -shared-libgcc --enable-pseudo-reloc -Wl,-Map,out/libeay32.map ms/libeay32.def -o out/libeay32.dll out/libcrypto_static.a -lws2_32 -lgdi32 +if errorlevel 1 goto end +gcc --shared -shared-libgcc --enable-pseudo-reloc -Wl,-Map,out/ssleay32.map -Lout ms/ssleay32.def -o out/ssleay32.dll out/libssl_static.a -lcrypto +if errorlevel 1 goto end +goto finished + +:shared_gxxlib -+gcc --shared -shared-libgcc --enable-pseudo-reloc -Wl,-Map,out/libeay32.map ms/libeay32.def -o out/libeay32.dll out/libcrypto_static.a -lwsock32 -lgdi32 %MINGW_SHARED_LIBSTDSPP% ++gcc --shared -shared-libgcc --enable-pseudo-reloc -Wl,-Map,out/libeay32.map ms/libeay32.def -o out/libeay32.dll out/libcrypto_static.a -lws2_32 -lgdi32 %MINGW_SHARED_LIBSTDSPP% +if errorlevel 1 goto end +gcc --shared -shared-libgcc --enable-pseudo-reloc -Wl,-Map,out/ssleay32.map -Lout ms/ssleay32.def -o out/ssleay32.dll out/libssl_static.a -lcrypto %MINGW_SHARED_LIBSTDSPP% +if errorlevel 1 goto end diff -Nru libreoffice-l10n-4.4.2/external/openssl/opensslosxppc.patch libreoffice-l10n-4.4.6~rc3/external/openssl/opensslosxppc.patch --- libreoffice-l10n-4.4.2/external/openssl/opensslosxppc.patch 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/external/openssl/opensslosxppc.patch 2015-10-27 20:55:54.000000000 +0000 @@ -2,7 +2,7 @@ --- a/openssl/Configure +++ b/openssl/Configure -@@ -577,8 +577,8 @@ +@@ -620,8 +620,8 @@ ##### MacOS X (a.k.a. Rhapsody or Darwin) setup "rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown):MACOSX_RHAPSODY::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}::", @@ -12,4 +12,4 @@ +"darwin64-ppc-cc","cc:-m64 -O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc64_asm}:osx64:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", "darwin-i386-cc","cc:-arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:".eval{my $asm=$x86_asm;$asm=~s/cast\-586\.o//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", "debug-darwin-i386-cc","cc:-arch i386 -g3 -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", - "darwin64-x86_64-cc","cc:-arch x86_64 -O3 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", + "darwin64-x86_64-cc","cc:-arch x86_64 -O3 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", diff -Nru libreoffice-l10n-4.4.2/external/openssl/opensslsol.patch libreoffice-l10n-4.4.6~rc3/external/openssl/opensslsol.patch --- libreoffice-l10n-4.4.2/external/openssl/opensslsol.patch 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/external/openssl/opensslsol.patch 2015-10-27 20:55:54.000000000 +0000 @@ -1,81 +1,33 @@ --- misc/openssl-0.9.8v/Configure Mon Nov 9 15:14:26 2009 +++ build/openssl-0.9.8v/Configure Fri Mar 26 16:01:32 2010 -@@ -212,8 +212,8 @@ - "solaris64-x86_64-gcc","gcc:-m64 -O3 -Wall -DL_ENDIAN -DMD32_REG_T=int::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:solaris-shared:-fPIC:-m64 -shared -static-libgcc:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", +@@ -228,8 +228,8 @@ + "solaris64-x86_64-gcc","gcc:-m64 -O3 -Wall -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:solaris-shared:-fPIC:-m64 -shared -static-libgcc:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64", #### Solaris x86 with Sun C setups --"solaris-x86-cc","cc:-fast -O -Xa::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", --"solaris64-x86_64-cc","cc:-fast -xarch=amd64 -xstrconst -Xa -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:solaris-shared:-KPIC:-xarch=amd64 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", -+"solaris-x86-cc","cc:-O -Xa::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", -+"solaris64-x86_64-cc","cc:-xarch=amd64 -xstrconst -Xa -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:solaris-shared:-KPIC:-xarch=amd64 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", +-"solaris-x86-cc","cc:-fast -xarch=generic -O -Xa::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", +-"solaris64-x86_64-cc","cc:-fast -xarch=amd64 -xstrconst -Xa -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:solaris-shared:-KPIC:-xarch=amd64 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64", ++"solaris-x86-cc","cc:-xarch=generic -O -Xa::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", ++"solaris64-x86_64-cc","cc:-xarch=amd64 -xstrconst -Xa -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:solaris-shared:-KPIC:-xarch=amd64 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64", #### SPARC Solaris with GNU C setups "solaris-sparcv7-gcc","gcc:-O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", --- misc/openssl-0.9.8v/Makefile.shared Wed Sep 17 17:56:40 2008 +++ build/openssl-0.9.8v/Makefile.shared Fri Mar 26 16:04:41 2010 -@@ -93,7 +93,7 @@ +@@ -95,7 +95,7 @@ LDCMD="$${LDCMD:-$(CC)}"; LDFLAGS="$${LDFLAGS:-$(CFLAGS)}"; \ - LIBPATH=`for x in $$LIBDEPS; do if echo $$x | grep '^ *-L' > /dev/null 2>&1; then echo $$x | sed -e 's/^ *-L//'; fi; done | uniq`; \ + LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \ LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \ - LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \ + LD_LIBRARY_PATH=$$LD_LIBRARY_PATH \ $${LDCMD} $${LDFLAGS} -o $${APPNAME:=$(APPNAME)} $(OBJECTS) $${LIBDEPS} ) LINK_SO= \ -@@ -103,7 +103,7 @@ +@@ -105,7 +105,7 @@ SHAREDFLAGS="$${SHAREDFLAGS:-$(CFLAGS) $(SHARED_LDFLAGS)}"; \ - LIBPATH=`for x in $$LIBDEPS; do if echo $$x | grep '^ *-L' > /dev/null 2>&1; then echo $$x | sed -e 's/^ *-L//'; fi; done | uniq`; \ + LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \ LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \ - LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \ + LD_LIBRARY_PATH=$$LD_LIBRARY_PATH \ $${SHAREDCMD} $${SHAREDFLAGS} \ -o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \ $$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS \ ---- misc/openssl-0.9.8v/config Tue Mar 9 18:08:24 2010 -+++ build/openssl-0.9.8v/config Fri Mar 26 16:07:55 2010 -@@ -399,28 +399,25 @@ - # this is where the translation occurs into SSLeay terms - # --------------------------------------------------------------------------- - --GCCVER=`(gcc -dumpversion) 2>/dev/null` --if [ "$GCCVER" != "" ]; then -- # then strip off whatever prefix egcs prepends the number with... -- # Hopefully, this will work for any future prefixes as well. -- GCCVER=`echo $GCCVER | LC_ALL=C sed 's/^[a-zA-Z]*\-//'` -- # Since gcc 3.1 gcc --version behaviour has changed. gcc -dumpversion -- # does give us what we want though, so we use that. We just just the -- # major and minor version numbers. -- # peak single digit before and after first dot, e.g. 2.95.1 gives 29 -- GCCVER=`echo $GCCVER | sed 's/\([0-9]\)\.\([0-9]\).*/\1\2/'` -+if [ -z "$CC" ];then -+ GCCVER=`(gcc -dumpversion) 2>/dev/null` -+ if [ "$GCCVER" != "" ]; then -+ CC=gcc -+ # then strip off whatever prefix egcs prepends the number with... -+ # Hopefully, this will work for any future prefixes as well. -+ GCCVER=`echo $GCCVER | LC_ALL=C sed 's/^[a-zA-Z]*\-//'` -+ # Since gcc 3.1 gcc --version behaviour has changed. gcc -dumpversion -+ # does give us what we want though, so we use that. We just just the -+ # major and minor version numbers. -+ # peak single digit before and after first dot, e.g. 2.95.1 gives 29 -+ GCCVER=`echo $GCCVER | sed 's/\([0-9]\)\.\([0-9]\).*/\1\2/'` -+ else -+ CC=cc -+ fi -+else -+ CC=`echo $CC | sed 's/^[^ ]*\/\(..\).*/\1/'` - fi - --# Only set CC if not supplied already --if [ -z "$CC" ]; then --# figure out if gcc is available and if so we use it otherwise --# we fallback to whatever cc does on the system -- if [ "$GCCVER" != "" ]; then -- CC=gcc -- else -- CC=cc -- fi --fi - GCCVER=${GCCVER:-0} - if [ "$SYSTEM" = "HP-UX" ];then - # By default gcc is a ILP32 compiler (with long long == 64). diff -Nru libreoffice-l10n-4.4.2/external/openssl/opensslwnt.patch libreoffice-l10n-4.4.6~rc3/external/openssl/opensslwnt.patch --- libreoffice-l10n-4.4.2/external/openssl/opensslwnt.patch 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/external/openssl/opensslwnt.patch 2015-10-27 20:55:54.000000000 +0000 @@ -1,8 +1,8 @@ --- misc/openssl-0.9.8v/crypto/x509v3/v3_pci.c 2007-03-05 01:06:47.000000000 +0100 +++ build/openssl-0.9.8v/crypto/x509v3/v3_pci.c 2010-03-26 12:04:20.961547300 +0100 -@@ -2,7 +2,7 @@ - /* Contributed to the OpenSSL Project 2004 - * by Richard Levitte (richard@levitte.org) +@@ -3,7 +3,7 @@ + * Contributed to the OpenSSL Project 2004 by Richard Levitte + * (richard@levitte.org) */ -/* Copyright (c) 2004 Kungliga Tekniska Högskolan +/* Copyright (c) 2004 Kungliga Tekniska Hoegskolan @@ -11,9 +11,9 @@ * --- misc/openssl-0.9.8v/crypto/x509v3/v3_pcia.c 2004-12-28 01:21:33.000000000 +0100 +++ build/openssl-0.9.8v/crypto/x509v3/v3_pcia.c 2010-03-26 12:04:20.961547300 +0100 -@@ -2,7 +2,7 @@ - /* Contributed to the OpenSSL Project 2004 - * by Richard Levitte (richard@levitte.org) +@@ -3,7 +3,7 @@ + * Contributed to the OpenSSL Project 2004 by Richard Levitte + * (richard@levitte.org) */ -/* Copyright (c) 2004 Kungliga Tekniska Högskolan +/* Copyright (c) 2004 Kungliga Tekniska Hoegskolan @@ -45,7 +45,7 @@ +%1 util\mkdef.pl 32 ssleay > ms\ssleay32.def --- misc/openssl-0.9.8v/util/mk1mf.pl 2009-09-20 14:46:42.000000000 +0200 +++ build/openssl-0.9.8v/util/mk1mf.pl 2010-03-26 12:04:20.977172300 +0100 -@@ -128,7 +128,7 @@ +@@ -163,7 +163,7 @@ $inc_def="outinc"; $tmp_def="tmp"; @@ -54,7 +54,7 @@ $mkdir="-mkdir" unless defined $mkdir; ($ssl,$crypto)=("ssl","crypto"); -@@ -290,6 +290,11 @@ +@@ -343,6 +343,11 @@ chop; ($key,$val)=/^([^=]+)=(.*)/; @@ -66,7 +66,7 @@ if ($key eq "RELATIVE_DIRECTORY") { if ($lib ne "") -@@ -529,7 +529,7 @@ +@@ -469,7 +474,7 @@ # Set your compiler options PLATFORM=$platform CC=$bin_dir${cc} @@ -75,27 +75,27 @@ APP_CFLAG=$app_cflag LIB_CFLAG=$lib_cflag SHLIB_CFLAG=$shl_cflag -@@ -544,7 +544,7 @@ +@@ -484,7 +489,7 @@ LINK=$link LFLAGS=$lflags -RSC=$rsc +RSC=$rsc \$(SOLARINC) - # The output directory for everything intersting + # The output directory for everything interesting OUT_D=$out_dir -@@ -730,7 +735,7 @@ +@@ -665,7 +670,7 @@ printf OUT < + @@ -40,6 +41,7 @@ + diff -Nru libreoffice-l10n-4.4.2/extras/source/autocorr/lang/en-GB/SentenceExceptList.xml libreoffice-l10n-4.4.6~rc3/extras/source/autocorr/lang/en-GB/SentenceExceptList.xml --- libreoffice-l10n-4.4.2/extras/source/autocorr/lang/en-GB/SentenceExceptList.xml 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/extras/source/autocorr/lang/en-GB/SentenceExceptList.xml 2015-10-27 20:55:54.000000000 +0000 @@ -23,6 +23,7 @@ + @@ -40,6 +41,7 @@ + diff -Nru libreoffice-l10n-4.4.2/extras/source/autocorr/lang/en-US/SentenceExceptList.xml libreoffice-l10n-4.4.6~rc3/extras/source/autocorr/lang/en-US/SentenceExceptList.xml --- libreoffice-l10n-4.4.2/extras/source/autocorr/lang/en-US/SentenceExceptList.xml 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/extras/source/autocorr/lang/en-US/SentenceExceptList.xml 2015-10-27 20:55:54.000000000 +0000 @@ -23,6 +23,7 @@ + @@ -40,6 +41,7 @@ + diff -Nru libreoffice-l10n-4.4.2/extras/source/autocorr/lang/en-ZA/SentenceExceptList.xml libreoffice-l10n-4.4.6~rc3/extras/source/autocorr/lang/en-ZA/SentenceExceptList.xml --- libreoffice-l10n-4.4.2/extras/source/autocorr/lang/en-ZA/SentenceExceptList.xml 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/extras/source/autocorr/lang/en-ZA/SentenceExceptList.xml 2015-10-27 20:55:54.000000000 +0000 @@ -35,6 +35,7 @@ + @@ -56,6 +57,7 @@ + Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/eps/fail/short-1.eps and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/eps/fail/short-1.eps differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/met/fail/crash-1.met and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/met/fail/crash-1.met differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/met/fail/hang-1.met and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/met/fail/hang-1.met differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/met/fail/hang-2.met and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/met/fail/hang-2.met differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/met/pass/hang-2.met and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/met/pass/hang-2.met differ diff -Nru libreoffice-l10n-4.4.2/filter/qa/cppunit/data/pbm/fail/crash-1.pbm libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/pbm/fail/crash-1.pbm --- libreoffice-l10n-4.4.2/filter/qa/cppunit/data/pbm/fail/crash-1.pbm 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/pbm/fail/crash-1.pbm 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,6 @@ +P3 +30000000000000000000000000000000 1 +255 +103 79 59 + 95 7P 55 + 87 67 51 Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/pbm/fail/hang-1.pbm and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/pbm/fail/hang-1.pbm differ diff -Nru libreoffice-l10n-4.4.2/filter/qa/cppunit/data/pbm/indeterminate/.gitignore libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/pbm/indeterminate/.gitignore --- libreoffice-l10n-4.4.2/filter/qa/cppunit/data/pbm/indeterminate/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/pbm/indeterminate/.gitignore 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1 @@ +*.ppm-* Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/pbm/pass/rhbz160429-1.pbm and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/pbm/pass/rhbz160429-1.pbm differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/pcx/fail/hang-1.pcx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/pcx/fail/hang-1.pcx differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/pict/fail/exception-1.pct and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/pict/fail/exception-1.pct differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/pict/fail/hang-1.pct and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/pict/fail/hang-1.pct differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/psd/pass/hang-1.psd and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/psd/pass/hang-1.psd differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/ras/fail/crash-1.ras and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/ras/fail/crash-1.ras differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/ras/fail/CVE-2008-1097-1.ras and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/ras/fail/CVE-2008-1097-1.ras differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/ras/fail/hang-1.ras and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/ras/fail/hang-1.ras differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/ras/pass/CVE-2008-1097-1.ras and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/ras/pass/CVE-2008-1097-1.ras differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/crash-1.tiff and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/crash-1.tiff differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/crash-2.tiff and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/crash-2.tiff differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/crash-3.tiff and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/crash-3.tiff differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/crash-4.tiff and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/crash-4.tiff differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/crash-5.tiff and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/crash-5.tiff differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/crash-6.tiff and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/crash-6.tiff differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/crash-7.tiff and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/crash-7.tiff differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/hang-10.tiff and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/hang-10.tiff differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/hang-1.tiff and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/hang-1.tiff differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/hang-2.tiff and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/hang-2.tiff differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/hang-4.tiff and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/hang-4.tiff differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/hang-5.tiff and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/hang-5.tiff differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/hang-6.tiff and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/hang-6.tiff differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/hang-7.tiff and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/hang-7.tiff differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/hang-8.tiff and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/hang-8.tiff differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/hang-9.tiff and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/hang-9.tiff differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/filter/qa/cppunit/data/tiff/fail/loop.tif and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/data/tiff/fail/loop.tif differ diff -Nru libreoffice-l10n-4.4.2/filter/qa/cppunit/filters-ppm-test.cxx libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/filters-ppm-test.cxx --- libreoffice-l10n-4.4.2/filter/qa/cppunit/filters-ppm-test.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/qa/cppunit/filters-ppm-test.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -62,6 +62,10 @@ testDir(OUString(), getURLFromSrc("/filter/qa/cppunit/data/ppm/"), OUString()); + + testDir(OUString(), + getURLFromSrc("/filter/qa/cppunit/data/pbm/"), + OUString()); } CPPUNIT_TEST_SUITE_REGISTRATION(PpmFilterTest); diff -Nru libreoffice-l10n-4.4.2/filter/source/graphicfilter/ieps/ieps.cxx libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/ieps/ieps.cxx --- libreoffice-l10n-4.4.2/filter/source/graphicfilter/ieps/ieps.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/ieps/ieps.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -52,7 +52,7 @@ |* *************************************************************************/ -static sal_uInt8* ImplSearchEntry( sal_uInt8* pSource, sal_uInt8* pDest, sal_uLong nComp, sal_uLong nSize ) +static sal_uInt8* ImplSearchEntry( sal_uInt8* pSource, sal_uInt8 const * pDest, sal_uLong nComp, sal_uLong nSize ) { while ( nComp-- >= nSize ) { @@ -71,7 +71,7 @@ // SecurityCount is the buffersize of the buffer in which we will parse for a number -static long ImplGetNumber( sal_uInt8 **pBuf, int& nSecurityCount ) +static long ImplGetNumber( sal_uInt8 **pBuf, sal_uInt32& nSecurityCount ) { bool bValid = true; bool bNegative = false; @@ -504,7 +504,7 @@ if ( pDest ) { pDest += 16; - int nCount = 4; + sal_uInt32 nCount = 4; long nNumber = ImplGetNumber( &pDest, nCount ); if ( nCount && ( (sal_uInt32)nNumber < 10 ) ) { @@ -595,162 +595,163 @@ { rStream.Seek( nPSStreamPos ); sal_uInt8* pBuf = new sal_uInt8[ nPSSize ]; - if ( pBuf ) - { - sal_uInt32 nBufStartPos = rStream.Tell(); - sal_uInt32 nBytesRead = rStream.Read( pBuf, nPSSize ); - if ( nBytesRead == nPSSize ) + + sal_uInt32 nBufStartPos = rStream.Tell(); + sal_uInt32 nBytesRead = rStream.Read( pBuf, nPSSize ); + if ( nBytesRead == nPSSize ) + { + sal_uInt32 nSecurityCount = 32; + // if there is no tiff/wmf preview, we will parse for an preview in + // the eps prolog + if (!bHasPreview && nBytesRead >= nSecurityCount) { - int nSecurityCount = 32; - if ( !bHasPreview ) // if there is no tiff/wmf preview, we will parse for an preview in the eps prolog + sal_uInt8* pDest = ImplSearchEntry( pBuf, reinterpret_cast("%%BeginPreview:"), nBytesRead - nSecurityCount, 15 ); + if ( pDest ) { - sal_uInt8* pDest = ImplSearchEntry( pBuf, (sal_uInt8*)"%%BeginPreview:", nBytesRead - 32, 15 ); - if ( pDest ) + pDest += 15; + long nWidth = ImplGetNumber( &pDest, nSecurityCount ); + long nHeight = ImplGetNumber( &pDest, nSecurityCount ); + long nBitDepth = ImplGetNumber( &pDest, nSecurityCount ); + long nScanLines = ImplGetNumber( &pDest, nSecurityCount ); + pDest = ImplSearchEntry( pDest, (sal_uInt8*)"%", 16, 1 ); // go to the first Scanline + if ( nSecurityCount && pDest && nWidth && nHeight && ( ( nBitDepth == 1 ) || ( nBitDepth == 8 ) ) && nScanLines ) { - pDest += 15; - long nWidth = ImplGetNumber( &pDest, nSecurityCount ); - long nHeight = ImplGetNumber( &pDest, nSecurityCount ); - long nBitDepth = ImplGetNumber( &pDest, nSecurityCount ); - long nScanLines = ImplGetNumber( &pDest, nSecurityCount ); - pDest = ImplSearchEntry( pDest, (sal_uInt8*)"%", 16, 1 ); // go to the first Scanline - if ( nSecurityCount && pDest && nWidth && nHeight && ( ( nBitDepth == 1 ) || ( nBitDepth == 8 ) ) && nScanLines ) - { - rStream.Seek( nBufStartPos + ( pDest - pBuf ) ); + rStream.Seek( nBufStartPos + ( pDest - pBuf ) ); - Bitmap aBitmap( Size( nWidth, nHeight ), 1 ); - BitmapWriteAccess* pAcc = aBitmap.AcquireWriteAccess(); - if ( pAcc ) + Bitmap aBitmap( Size( nWidth, nHeight ), 1 ); + BitmapWriteAccess* pAcc = aBitmap.AcquireWriteAccess(); + if ( pAcc ) + { + int nBitsLeft; + bool bIsValid = true; + sal_uInt8 nDat = 0; + char nByte; + for ( long y = 0; bIsValid && ( y < nHeight ); y++ ) { - int nBitsLeft; - bool bIsValid = true; - sal_uInt8 nDat = 0; - char nByte; - for ( long y = 0; bIsValid && ( y < nHeight ); y++ ) + nBitsLeft = 0; + for ( long x = 0; x < nWidth; x++ ) { - nBitsLeft = 0; - for ( long x = 0; x < nWidth; x++ ) + if ( --nBitsLeft < 0 ) { - if ( --nBitsLeft < 0 ) + while ( bIsValid && ( nBitsLeft != 7 ) ) { - while ( bIsValid && ( nBitsLeft != 7 ) ) + rStream.ReadChar( nByte ); + switch ( nByte ) { - rStream.ReadChar( nByte ); - switch ( nByte ) + case 0x0a : + if ( --nScanLines < 0 ) + bIsValid = false; + case 0x09 : + case 0x0d : + case 0x20 : + case 0x25 : + break; + default: { - case 0x0a : - if ( --nScanLines < 0 ) - bIsValid = false; - case 0x09 : - case 0x0d : - case 0x20 : - case 0x25 : - break; - default: + if ( nByte >= '0' ) { - if ( nByte >= '0' ) + if ( nByte > '9' ) { - if ( nByte > '9' ) - { - nByte &=~0x20; // case none sensitive for hexadecimal values - nByte -= ( 'A' - 10 ); - if ( nByte > 15 ) - bIsValid = false; - } - else - nByte -= '0'; - nBitsLeft += 4; - nDat <<= 4; - nDat |= ( nByte ^ 0xf ); // in epsi a zero bit represents white color + nByte &=~0x20; // case none sensitive for hexadecimal values + nByte -= ( 'A' - 10 ); + if ( nByte > 15 ) + bIsValid = false; } else - bIsValid = false; + nByte -= '0'; + nBitsLeft += 4; + nDat <<= 4; + nDat |= ( nByte ^ 0xf ); // in epsi a zero bit represents white color } - break; + else + bIsValid = false; } + break; } } - if ( nBitDepth == 1 ) - pAcc->SetPixelIndex( y, x, static_cast(nDat >> nBitsLeft) & 1 ); - else - { - pAcc->SetPixelIndex( y, x, nDat ? 1 : 0 ); // nBitDepth == 8 - nBitsLeft = 0; - } } - } - if ( bIsValid ) - { - VirtualDevice aVDev; - GDIMetaFile aMtf; - Size aSize; - aVDev.EnableOutput( false ); - aMtf.Record( &aVDev ); - aSize = aBitmap.GetPrefSize(); - if( !aSize.Width() || !aSize.Height() ) - aSize = Application::GetDefaultDevice()->PixelToLogic( aBitmap.GetSizePixel(), MAP_100TH_MM ); + if ( nBitDepth == 1 ) + pAcc->SetPixelIndex( y, x, static_cast(nDat >> nBitsLeft) & 1 ); else - aSize = OutputDevice::LogicToLogic( aSize, aBitmap.GetPrefMapMode(), MAP_100TH_MM ); - aVDev.DrawBitmap( Point(), aSize, aBitmap ); - aMtf.Stop(); - aMtf.WindStart(); - aMtf.SetPrefMapMode( MAP_100TH_MM ); - aMtf.SetPrefSize( aSize ); - aGraphic = aMtf; - bHasPreview = bRetValue = true; + { + pAcc->SetPixelIndex( y, x, nDat ? 1 : 0 ); // nBitDepth == 8 + nBitsLeft = 0; + } } - aBitmap.ReleaseAccess( pAcc ); } + if ( bIsValid ) + { + VirtualDevice aVDev; + GDIMetaFile aMtf; + Size aSize; + aVDev.EnableOutput( false ); + aMtf.Record( &aVDev ); + aSize = aBitmap.GetPrefSize(); + if( !aSize.Width() || !aSize.Height() ) + aSize = Application::GetDefaultDevice()->PixelToLogic( aBitmap.GetSizePixel(), MAP_100TH_MM ); + else + aSize = OutputDevice::LogicToLogic( aSize, aBitmap.GetPrefMapMode(), MAP_100TH_MM ); + aVDev.DrawBitmap( Point(), aSize, aBitmap ); + aMtf.Stop(); + aMtf.WindStart(); + aMtf.SetPrefMapMode( MAP_100TH_MM ); + aMtf.SetPrefSize( aSize ); + aGraphic = aMtf; + bHasPreview = bRetValue = true; + } + aBitmap.ReleaseAccess( pAcc ); } } } + } - sal_uInt8* pDest = ImplSearchEntry( pBuf, (sal_uInt8*)"%%BoundingBox:", nBytesRead, 14 ); - if ( pDest ) + sal_uInt8* pDest = ImplSearchEntry( pBuf, (sal_uInt8*)"%%BoundingBox:", nBytesRead, 14 ); + if ( pDest ) + { + nSecurityCount = 100; + long nNumb[4]; + nNumb[0] = nNumb[1] = nNumb[2] = nNumb[3] = 0; + pDest += 14; + for ( int i = 0; ( i < 4 ) && nSecurityCount; i++ ) { - nSecurityCount = 100; - long nNumb[4]; - nNumb[0] = nNumb[1] = nNumb[2] = nNumb[3] = 0; - pDest += 14; - for ( int i = 0; ( i < 4 ) && nSecurityCount; i++ ) - { - nNumb[ i ] = ImplGetNumber( &pDest, nSecurityCount ); - } - if ( nSecurityCount) - { - bGraphicLinkCreated = true; - GfxLink aGfxLink( pBuf, nPSSize, GFX_LINK_TYPE_EPS_BUFFER, true ) ; - GDIMetaFile aMtf; - - long nWidth = nNumb[2] - nNumb[0] + 1; - long nHeight = nNumb[3] - nNumb[1] + 1; + nNumb[ i ] = ImplGetNumber( &pDest, nSecurityCount ); + } + if ( nSecurityCount) + { + bGraphicLinkCreated = true; + GfxLink aGfxLink( pBuf, nPSSize, GFX_LINK_TYPE_EPS_BUFFER, true ) ; + GDIMetaFile aMtf; - // if there is no preview -> try with gs to make one - if( !bHasPreview ) - { - bHasPreview = RenderAsEMF(pBuf, nBytesRead, aGraphic); - if (!bHasPreview) - bHasPreview = RenderAsBMP(pBuf, nBytesRead, aGraphic); - } + long nWidth = nNumb[2] - nNumb[0] + 1; + long nHeight = nNumb[3] - nNumb[1] + 1; - // if there is no preview -> make a red box - if( !bHasPreview ) - { - MakePreview(pBuf, nBytesRead, nWidth, nHeight, - aGraphic); - } + // if there is no preview -> try with gs to make one + if( !bHasPreview ) + { + bHasPreview = RenderAsEMF(pBuf, nBytesRead, aGraphic); + if (!bHasPreview) + bHasPreview = RenderAsBMP(pBuf, nBytesRead, aGraphic); + } - aMtf.AddAction( (MetaAction*)( new MetaEPSAction( Point(), Size( nWidth, nHeight ), - aGfxLink, aGraphic.GetGDIMetaFile() ) ) ); - CreateMtfReplacementAction( aMtf, rStream, nOrigPos, nPSSize, nPosWMF, nSizeWMF, nPosTIFF, nSizeTIFF ); - aMtf.WindStart(); - aMtf.SetPrefMapMode( MAP_POINT ); - aMtf.SetPrefSize( Size( nWidth, nHeight ) ); - rGraphic = aMtf; - bRetValue = true; + // if there is no preview -> make a red box + if( !bHasPreview ) + { + MakePreview(pBuf, nBytesRead, nWidth, nHeight, + aGraphic); } + + aMtf.AddAction( (MetaAction*)( new MetaEPSAction( Point(), Size( nWidth, nHeight ), + aGfxLink, aGraphic.GetGDIMetaFile() ) ) ); + CreateMtfReplacementAction( aMtf, rStream, nOrigPos, nPSSize, nPosWMF, nSizeWMF, nPosTIFF, nSizeTIFF ); + aMtf.WindStart(); + aMtf.SetPrefMapMode( MAP_POINT ); + aMtf.SetPrefSize( Size( nWidth, nHeight ) ); + rGraphic = aMtf; + bRetValue = true; } } } + if ( !bGraphicLinkCreated ) delete[] pBuf; } diff -Nru libreoffice-l10n-4.4.2/filter/source/graphicfilter/ios2met/ios2met.cxx libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/ios2met/ios2met.cxx --- libreoffice-l10n-4.4.2/filter/source/graphicfilter/ios2met/ios2met.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/ios2met/ios2met.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -208,7 +208,7 @@ struct OSPalette { OSPalette * pSucc; sal_uInt32 * p0RGB; // May be NULL! - sal_uInt16 nSize; + size_t nSize; }; struct OSArea { @@ -743,12 +743,13 @@ } if (pPaletteStack->p0RGB==NULL || nIndex>=pPaletteStack->nSize) { sal_uInt32 * pOld0RGB=pPaletteStack->p0RGB; - sal_uInt16 i,nOldSize=pPaletteStack->nSize; + size_t nOldSize = pPaletteStack->nSize; if (pOld0RGB==NULL) nOldSize=0; pPaletteStack->nSize=2*(nIndex+1); if (pPaletteStack->nSize<256) pPaletteStack->nSize=256; pPaletteStack->p0RGB = new sal_uInt32[pPaletteStack->nSize]; - for (i=0; inSize; i++) { + for (size_t i=0; i < pPaletteStack->nSize; ++i) + { if (ip0RGB[i]=pOld0RGB[i]; else if (i==0) pPaletteStack->p0RGB[i]=0x00ffffff; else pPaletteStack->p0RGB[i]=0; @@ -1190,18 +1191,37 @@ void OS2METReader::ReadPolygons() { - sal_uInt32 i,j,nNumPolys, nNumPoints; tools::PolyPolygon aPolyPoly; Polygon aPoly; Point aPoint; - sal_uInt8 nFlags; - pOS2MET->ReadUChar( nFlags ).ReadUInt32( nNumPolys ); - for (i=0; iReadUInt32( nNumPoints ); - if (i==0) nNumPoints++; + sal_uInt8 nFlags(0); + sal_uInt32 nNumPolys(0); + pOS2MET->ReadUChar(nFlags).ReadUInt32(nNumPolys); + + if (nNumPolys > SAL_MAX_UINT16) + { + pOS2MET->SetError(SVSTREAM_FILEFORMAT_ERROR); + ErrorCode=11; + return; + } + + for (sal_uInt32 i=0; iReadUInt32(nNumPoints); + sal_uInt32 nLimit = SAL_MAX_UINT16; + if (i==0) --nLimit; + if (nNumPoints > nLimit) + { + pOS2MET->SetError(SVSTREAM_FILEFORMAT_ERROR); + ErrorCode=11; + return; + } + if (i==0) ++nNumPoints; aPoly.SetSize((short)nNumPoints); - for (j=0; jpSucc=pFontList; pFontList=pF; @@ -2269,7 +2288,13 @@ nMaxPos=nPos+(sal_uLong)nFieldSize; pOS2MET->SeekRel(2); nPos+=2; while (nPosGetError()==0) { - pOS2MET->ReadUChar( nByte ); nLen =((sal_uInt16)nByte) & 0x00ff; + pOS2MET->ReadUChar( nByte ); + sal_uInt16 nLen = ((sal_uInt16)nByte) & 0x00ff; + if (nLen == 0) + { + pOS2MET->SetError(SVSTREAM_FILEFORMAT_ERROR); + ErrorCode=4; + } pOS2MET->ReadUChar( nTripType ); switch (nTripType) { case 0x02: @@ -2321,7 +2346,8 @@ break; } } - nPos+=nLen; pOS2MET->Seek(nPos); + nPos+=nLen; + pOS2MET->Seek(nPos); } } @@ -2653,21 +2679,34 @@ pOS2MET->ReadUInt16(nFieldType); pOS2MET->SeekRel(3); - nPos+=8; nFieldSize-=8; - if (pOS2MET->GetError()) break; - if (pOS2MET->IsEof()) { + if (pOS2MET->GetError()) + break; + + if (nFieldType==EndDocumnMagic) + break; + + if (pOS2MET->IsEof() || nFieldSize < 8) + { pOS2MET->SetError(SVSTREAM_FILEFORMAT_ERROR); ErrorCode=8; break; } - if (nFieldType==EndDocumnMagic) break; + nPos+=8; nFieldSize-=8; + + if (nFieldSize > pOS2MET->remainingSize()) + { + pOS2MET->SetError(SVSTREAM_FILEFORMAT_ERROR); + ErrorCode=8; + break; + } ReadField(nFieldType, nFieldSize); + nPos += nFieldSize; - nPos+=(sal_uLong)nFieldSize; - if (pOS2MET->Tell()>nPos) { + if (pOS2MET->Tell() > nPos) + { pOS2MET->SetError(SVSTREAM_FILEFORMAT_ERROR); ErrorCode=9; break; diff -Nru libreoffice-l10n-4.4.2/filter/source/graphicfilter/ipbm/ipbm.cxx libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/ipbm/ipbm.cxx --- libreoffice-l10n-4.4.2/filter/source/graphicfilter/ipbm/ipbm.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/ipbm/ipbm.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -37,7 +37,7 @@ sal_uLong mnMode; // 0->PBM, 1->PGM, 2->PPM Bitmap maBmp; BitmapWriteAccess* mpAcc; - sal_uLong mnWidth, mnHeight; // dimensions in pixel + sal_Int32 mnWidth, mnHeight; // dimensions in pixel sal_uLong mnCol; sal_uLong mnMaxVal; // max value in the bool ImplCallback( sal_uInt16 nPercent ); @@ -99,7 +99,7 @@ if ( ( mbStatus = ImplReadHeader() ) == false ) return false; - if ( ( mnMaxVal == 0 ) || ( mnWidth == 0 ) || ( mnHeight == 0 ) ) + if ( ( mnMaxVal == 0 ) || ( mnWidth <= 0 ) || ( mnHeight <= 0 ) ) return false; // 0->PBM, 1->PGM, 2->PPM @@ -107,7 +107,8 @@ { case 0 : maBmp = Bitmap( Size( mnWidth, mnHeight ), 1 ); - if ( ( mpAcc = maBmp.AcquireWriteAccess() ) == 0 ) + mpAcc = maBmp.AcquireWriteAccess(); + if (!mpAcc || mpAcc->Width() != mnWidth || mpAcc->Height() != mnHeight) return false; mpAcc->SetPaletteEntryCount( 2 ); mpAcc->SetPaletteColor( 0, BitmapColor( 0xff, 0xff, 0xff ) ); @@ -195,7 +196,7 @@ } while ( bFinished == false ) { - if ( mrPBM.GetError() ) + if (!mrPBM.good()) return false; mrPBM.ReadUChar( nDat ); @@ -233,17 +234,41 @@ nDat -= '0'; if ( nCount == 0 ) { + if (mnWidth > SAL_MAX_INT32 / 10) + { + return false; + } mnWidth *= 10; + if (nDat > SAL_MAX_INT32 - mnWidth) + { + return false; + } mnWidth += nDat; } else if ( nCount == 1 ) { + if (mnHeight > SAL_MAX_INT32 / 10) + { + return false; + } mnHeight *= 10; + if (nDat > SAL_MAX_INT32 - mnHeight) + { + return false; + } mnHeight += nDat; } else if ( nCount == 2 ) { + if (mnMaxVal > std::numeric_limits::max() / 10) + { + return false; + } mnMaxVal *= 10; + if (nDat > std::numeric_limits::max() - mnMaxVal) + { + return false; + } mnMaxVal += nDat; } } @@ -258,8 +283,8 @@ bool bPara, bFinished = false; sal_uInt8 nDat = 0, nCount; sal_uLong nGrey, nRGB[3]; - sal_uLong nWidth = 0; - sal_uLong nHeight = 0; + sal_Int32 nWidth = 0; + sal_Int32 nHeight = 0; if ( mbRaw ) { diff -Nru libreoffice-l10n-4.4.2/filter/source/graphicfilter/ipcx/ipcx.cxx libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/ipcx/ipcx.cxx --- libreoffice-l10n-4.4.2/filter/source/graphicfilter/ipcx/ipcx.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/ipcx/ipcx.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -230,7 +230,7 @@ nCount = 0; for ( ny = 0; ny < nHeight; ny++ ) { - if (m_rPCX.GetError() || m_rPCX.IsEof()) + if (!m_rPCX.good()) { nStatus = false; break; @@ -256,7 +256,7 @@ nx--; nCount--; } - while ( nx > 0 ) + while (nx > 0 && m_rPCX.good()) { m_rPCX.ReadUChar( nDat ); if ( ( nDat & 0xc0 ) == 0xc0 ) diff -Nru libreoffice-l10n-4.4.2/filter/source/graphicfilter/ipict/ipict.cxx libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/ipict/ipict.cxx --- libreoffice-l10n-4.4.2/filter/source/graphicfilter/ipict/ipict.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/ipict/ipict.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -832,8 +832,7 @@ // read and write Bitmap bits: if ( nPixelSize == 1 || nPixelSize == 2 || nPixelSize == 4 || nPixelSize == 8 ) { - sal_uInt8 nByteCountAsByte, nFlagCounterByte; - sal_uInt16 nByteCount, nSrcBPL, nDestBPL; + sal_uInt16 nSrcBPL, nDestBPL; size_t nCount; if ( nPixelSize == 1 ) nSrcBPL = ( nWidth + 7 ) >> 3; @@ -859,6 +858,7 @@ } else { + sal_uInt16 nByteCount(0); if ( nRowBytes > 250 ) { pPict->ReadUInt16( nByteCount ); @@ -866,14 +866,16 @@ } else { + sal_uInt8 nByteCountAsByte(0); pPict->ReadUChar( nByteCountAsByte ); nByteCount = ( (sal_uInt16)nByteCountAsByte ) & 0x00ff; nDataSize += 1 + (sal_uLong)nByteCount; } - while ( nByteCount ) + while (pPict->good() && nByteCount) { - pPict->ReadUChar( nFlagCounterByte ); + sal_uInt8 nFlagCounterByte(0); + pPict->ReadUChar(nFlagCounterByte); if ( ( nFlagCounterByte & 0x80 ) == 0 ) { nCount = ( (sal_uInt16)nFlagCounterByte ) + 1; @@ -1837,6 +1839,7 @@ void PictReader::ReadPict( SvStream & rStreamPict, GDIMetaFile & rGDIMetaFile ) { + try { sal_uInt16 nOpcode; sal_uInt8 nOneByteOpcode; sal_uLong nSize, nPercent, nLastPercent; @@ -1929,6 +1932,10 @@ pPict->SetNumberFormatInt(nOrigNumberFormat); if (pPict->GetError()) pPict->Seek(nOrigPos); + } catch (...) + { + rStreamPict.SetError(SVSTREAM_FILEFORMAT_ERROR); + } } namespace pict { diff -Nru libreoffice-l10n-4.4.2/filter/source/graphicfilter/ipsd/ipsd.cxx libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/ipsd/ipsd.cxx --- libreoffice-l10n-4.4.2/filter/source/graphicfilter/ipsd/ipsd.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/ipsd/ipsd.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -172,9 +172,6 @@ bool PSDReader::ImplReadHeader() { - sal_uInt16 nCompression; - sal_uInt32 nColorLength, nResourceLength, nLayerMaskLength; - mpFileHeader = new PSDFileHeader; if ( !mpFileHeader ) @@ -197,6 +194,7 @@ mnDestBitDepth = ( nDepth == 16 ) ? 8 : nDepth; + sal_uInt32 nColorLength(0); m_rPSD.ReadUInt32( nColorLength ); if ( mpFileHeader->nMode == PSD_CMYK ) { @@ -277,7 +275,10 @@ default: return false; } - m_rPSD.ReadUInt32( nResourceLength ); + sal_uInt32 nResourceLength(0); + m_rPSD.ReadUInt32(nResourceLength); + if (nResourceLength > m_rPSD.remainingSize()) + return false; sal_uInt32 nLayerPos = m_rPSD.Tell() + nResourceLength; // this is a loop over the resource entries to get the resolution info @@ -298,8 +299,8 @@ if ( nResEntryLen & 1 ) nResEntryLen++; // the resource entries are padded sal_uInt32 nCurrentPos = m_rPSD.Tell(); - if ( ( nResEntryLen + nCurrentPos ) > nLayerPos ) // check if size - break; // is possible + if (nResEntryLen > (nLayerPos - nCurrentPos)) // check if size + break; // is possible switch( nUniqueID ) { case 0x3ed : // UID for the resolution info @@ -314,10 +315,12 @@ m_rPSD.Seek( nCurrentPos + nResEntryLen ); // set the stream to the next } // resource entry m_rPSD.Seek( nLayerPos ); + sal_uInt32 nLayerMaskLength(0); m_rPSD.ReadUInt32( nLayerMaskLength ); m_rPSD.SeekRel( nLayerMaskLength ); - m_rPSD.ReadUInt16( nCompression ); + sal_uInt16 nCompression(0); + m_rPSD.ReadUInt16(nCompression); if ( nCompression == 0 ) { mbCompression = false; @@ -333,12 +336,10 @@ return true; } - - bool PSDReader::ImplReadBody() { sal_uLong nX, nY; - char nRunCount = 0; + signed char nRunCount = 0; signed char nBitCount = -1; sal_uInt8 nDat = 0, nDummy, nRed, nGreen, nBlue; BitmapColor aBitmapColor; @@ -353,7 +354,11 @@ if ( nBitCount == -1 ) { if ( mbCompression ) // else nRunCount = 0 -> so we use only single raw packets - m_rPSD.ReadChar( nRunCount ); + { + char nTmp(0); + m_rPSD.ReadChar(nTmp); + nRunCount = nTmp; + } } if ( nRunCount & 0x80 ) // a run length packet { @@ -406,7 +411,11 @@ while ( nY < mpFileHeader->nRows ) { if ( mbCompression ) // else nRunCount = 0 -> so we use only single raw packets - m_rPSD.ReadChar( nRunCount ); + { + char nTmp(0); + m_rPSD.ReadChar(nTmp); + nRunCount = nTmp; + } if ( nRunCount & 0x80 ) // a run length packet { @@ -455,7 +464,12 @@ while ( nY < mpFileHeader->nRows ) { if ( mbCompression ) // else nRunCount = 0 -> so we use only single raw packets - m_rPSD.ReadChar( nRunCount ); + { + char nTmp(0); + m_rPSD.ReadChar(nTmp); + nRunCount = nTmp; + } + if ( nRunCount & 0x80 ) // a run length packet { @@ -496,7 +510,12 @@ while ( nY < mpFileHeader->nRows ) { if ( mbCompression ) - m_rPSD.ReadChar( nRunCount ); + { + char nTmp(0); + m_rPSD.ReadChar(nTmp); + nRunCount = nTmp; + } + if ( nRunCount & 0x80 ) // a run length packet { m_rPSD.ReadUChar( nGreen ); @@ -538,7 +557,12 @@ while ( nY < mpFileHeader->nRows ) { if ( mbCompression ) - m_rPSD.ReadChar( nRunCount ); + { + char nTmp(0); + m_rPSD.ReadChar(nTmp); + nRunCount = nTmp; + } + if ( nRunCount & 0x80 ) // a run length packet { m_rPSD.ReadUChar( nBlue ); @@ -584,7 +608,11 @@ while ( nY < mpFileHeader->nRows ) { if ( mbCompression ) // else nRunCount = 0 -> so we use only single raw packets - m_rPSD.ReadChar( nRunCount ); + { + char nTmp(0); + m_rPSD.ReadChar(nTmp); + nRunCount = nTmp; + } if ( nRunCount & 0x80 ) // a run length packet { @@ -669,7 +697,11 @@ while ( nY < mpFileHeader->nRows ) { if ( mbCompression ) // else nRunCount = 0 -> so we use only single raw packets - m_rPSD.ReadChar( nRunCount ); + { + char nTmp(0); + m_rPSD.ReadChar(nTmp); + nRunCount = nTmp; + } if ( nRunCount & 0x80 ) // a run length packet { diff -Nru libreoffice-l10n-4.4.2/filter/source/graphicfilter/iras/iras.cxx libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/iras/iras.cxx --- libreoffice-l10n-4.4.2/filter/source/graphicfilter/iras/iras.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/iras/iras.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -44,17 +44,17 @@ bool mbStatus; Bitmap maBmp; - sal_uInt32 mnWidth, mnHeight; // Bildausmass in Pixeln - sal_uInt16 mnDstBitsPerPix; - sal_uInt16 mnDstColors; - sal_uInt32 mnDepth, mnImageDatSize, mnType; - sal_uInt32 mnColorMapType, mnColorMapSize; - sal_uInt8 mnRepCount, mnRepVal; // RLE Decoding + sal_Int32 mnWidth, mnHeight; // Bildausmass in Pixeln + sal_uInt16 mnDstBitsPerPix; + sal_uInt16 mnDstColors; + sal_Int32 mnDepth, mnImageDatSize, mnType; + sal_Int32 mnColorMapType, mnColorMapSize; + sal_uInt8 mnRepCount, mnRepVal; // RLE Decoding bool mbPalette; bool ImplReadBody(BitmapWriteAccess * pAcc); bool ImplReadHeader(); - sal_uInt8 ImplGetByte(); + sal_uInt8 ImplGetByte(); public: RASReader(SvStream &rRAS); @@ -174,13 +174,11 @@ return mbStatus; } - - bool RASReader::ImplReadHeader() { - m_rRAS.ReadUInt32( mnWidth ).ReadUInt32( mnHeight ).ReadUInt32( mnDepth ).ReadUInt32( mnImageDatSize ). ReadUInt32( mnType ).ReadUInt32( mnColorMapType ).ReadUInt32( mnColorMapSize ); + m_rRAS.ReadInt32(mnWidth).ReadInt32(mnHeight).ReadInt32(mnDepth).ReadInt32(mnImageDatSize).ReadInt32(mnType).ReadInt32(mnColorMapType).ReadInt32(mnColorMapSize); - if ( mnWidth == 0 || mnHeight == 0 ) + if (mnWidth <= 0 || mnHeight <= 0 || mnImageDatSize <= 0 || !m_rRAS.good()) mbStatus = false; switch ( mnDepth ) @@ -216,35 +214,51 @@ bool RASReader::ImplReadBody(BitmapWriteAccess * pAcc) { - sal_uLong x, y; + sal_Int32 x, y; sal_uInt8 nDat = 0; sal_uInt8 nRed, nGreen, nBlue; switch ( mnDstBitsPerPix ) { case 1 : - for ( y = 0; y < mnHeight; y++ ) + for (y = 0; y < mnHeight && mbStatus; ++y) { - for ( x = 0; x < mnWidth; x++ ) + for (x = 0; x < mnWidth && mbStatus; ++x) { if (!(x & 7)) + { nDat = ImplGetByte(); + if (!m_rRAS.good()) + mbStatus = false; + } pAcc->SetPixelIndex( y, x, sal::static_int_cast< sal_uInt8 >( nDat >> ( ( x & 7 ) ^ 7 )) ); } - if (!( ( x - 1 ) & 0x8 ) ) ImplGetByte(); // WORD ALIGNMENT ??? + if (!( ( x - 1 ) & 0x8 ) ) + { + ImplGetByte(); // WORD ALIGNMENT ??? + if (!m_rRAS.good()) + mbStatus = false; + } } break; case 8 : - for ( y = 0; y < mnHeight; y++ ) + for (y = 0; y < mnHeight && mbStatus; ++y) { - for ( x = 0; x < mnWidth; x++ ) + for (x = 0; x < mnWidth && mbStatus; ++x) { nDat = ImplGetByte(); pAcc->SetPixelIndex( y, x, nDat ); + if (!m_rRAS.good()) + mbStatus = false; + } + if ( x & 1 ) + { + ImplGetByte(); // WORD ALIGNMENT ??? + if (!m_rRAS.good()) + mbStatus = false; } - if ( x & 1 ) ImplGetByte(); // WORD ALIGNMENT ??? } break; @@ -253,9 +267,9 @@ { case 24 : - for ( y = 0; y < mnHeight; y++ ) + for (y = 0; y < mnHeight && mbStatus; ++y) { - for ( x = 0; x < mnWidth; x++ ) + for (x = 0; x < mnWidth && mbStatus; ++x) { if ( mnType == RAS_TYPE_RGB_FORMAT ) { @@ -270,15 +284,22 @@ nRed = ImplGetByte(); } pAcc->SetPixel ( y, x, BitmapColor( nRed, nGreen, nBlue ) ); + if (!m_rRAS.good()) + mbStatus = false; + } + if ( x & 1 ) + { + ImplGetByte(); // WORD ALIGNMENT ??? + if (!m_rRAS.good()) + mbStatus = false; } - if ( x & 1 ) ImplGetByte(); // WORD ALIGNMENT ??? } break; case 32 : - for ( y = 0; y < mnHeight; y++ ) + for (y = 0; y < mnHeight && mbStatus; ++y) { - for ( x = 0; x < mnWidth; x++ ) + for (x = 0; x < mnWidth && mbStatus; ++x) { nDat = ImplGetByte(); // pad byte > nil if ( mnType == RAS_TYPE_RGB_FORMAT ) @@ -294,6 +315,8 @@ nRed = ImplGetByte(); } pAcc->SetPixel ( y, x, BitmapColor( nRed, nGreen, nBlue ) ); + if (!m_rRAS.good()) + mbStatus = false; } } break; @@ -307,8 +330,6 @@ return mbStatus; } - - sal_uInt8 RASReader::ImplGetByte() { sal_uInt8 nRetVal; diff -Nru libreoffice-l10n-4.4.2/filter/source/graphicfilter/itiff/ccidecom.cxx libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/itiff/ccidecom.cxx --- libreoffice-l10n-4.4.2/filter/source/graphicfilter/itiff/ccidecom.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/itiff/ccidecom.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -628,8 +628,6 @@ bool CCIDecompressor::DecompressScanline( sal_uInt8 * pTarget, sal_uLong nTargetBits, bool bLastLine ) { - sal_uInt16 i; - sal_uInt8 * pDst; bool b2D; if ( nEOLCount >= 5 ) // RTC (Return To Controller) @@ -678,8 +676,7 @@ delete[] pLastLine; nLastLineSize = ( nTargetBits + 7 ) >> 3; pLastLine = new sal_uInt8[ nLastLineSize ]; - pDst = pLastLine; - for ( i = 0; i < nLastLineSize; i++ ) *( pDst++ ) = 0x00; + memset(pLastLine, 0, nLastLineSize); } } // conditionally align start of line to next byte: @@ -706,9 +703,7 @@ // if we're in 2D mode we have to remember the line: if ( nOptions & CCI_OPTION_2D && bStatus ) { - sal_uInt8 *pSrc = pTarget; - pDst = pLastLine; - for ( i = 0; i < nLastLineSize; i++ ) *(pDst++)=*(pSrc++); + memcpy(pLastLine, pTarget, nLastLineSize); } // #i122984# @@ -891,36 +886,41 @@ } } - sal_uInt16 CCIDecompressor::CountBits(const sal_uInt8 * pData, sal_uInt16 nDataSizeBits, sal_uInt16 nBitPos, sal_uInt8 nBlackOrWhite) { - sal_uInt16 nPos,nLo; - sal_uInt8 nData; - // here the number of bits belonging together is being counted // which all have the color nBlackOrWhite (0xff oder 0x00) // from the position nBitPos on - - nPos=nBitPos; - for (;;) { - if (nPos>=nDataSizeBits) { + sal_uInt16 nPos = nBitPos; + for (;;) + { + if (nPos>=nDataSizeBits) + { nPos=nDataSizeBits; break; } - nData=pData[nPos>>3]; - nLo=nPos & 7; - if ( nLo==0 && nData==nBlackOrWhite) nPos+=8; - else { - if ( ((nData^nBlackOrWhite) & (0x80 >> nLo))!=0) break; - nPos++; + sal_uInt8 nData = pData[nPos>>3]; + sal_uInt16 nLo = nPos & 7; + if (nLo==0 && nData==nBlackOrWhite) + { + //fail on overflow attempt + if (nPos > SAL_MAX_UINT16-8) + return 0; + nPos+=8; + } + else + { + if ( ((nData^nBlackOrWhite) & (0x80 >> nLo))!=0) + break; + ++nPos; } } - if (nPos<=nBitPos) return 0; - else return nPos-nBitPos; + if (nPos<=nBitPos) + return 0; + return nPos-nBitPos; } - void CCIDecompressor::Read1DScanlineData(sal_uInt8 * pTarget, sal_uInt16 nTargetBits) { sal_uInt16 nCode,nCodeBits,nDataBits,nTgtFreeByteBits; @@ -1026,11 +1026,14 @@ while (nBitPos nOldNumSO ) && ( nDataLen < SAL_MAX_UINT32 / sizeof( sal_uInt32 ) ) ) + size_t nMaxAllocAllowed = SAL_MAX_UINT32 / sizeof(sal_uInt32); + size_t nMaxRecordsAvailable = pTIFF->remainingSize() / DataTypeSize(); + if (nDataLen > nOldNumSO && nDataLen < nMaxAllocAllowed && + (nDataLen - nOldNumSO) <= nMaxRecordsAvailable) { nNumStripOffsets = nDataLen; try { pStripOffsets = new sal_uLong[ nNumStripOffsets ]; } - catch (const std::bad_alloc &) + catch (const std::bad_alloc &) { pStripOffsets = NULL; nNumStripOffsets = 0; @@ -429,14 +434,17 @@ nNumStripByteCounts = 0; // to be on the safe side nOldNumSBC = nNumStripByteCounts; nDataLen += nOldNumSBC; - if ( ( nDataLen > nOldNumSBC ) && ( nDataLen < SAL_MAX_UINT32 / sizeof( sal_uInt32 ) ) ) + size_t nMaxAllocAllowed = SAL_MAX_UINT32 / sizeof(sal_uInt32); + size_t nMaxRecordsAvailable = pTIFF->remainingSize() / DataTypeSize(); + if (nDataLen > nOldNumSBC && nDataLen < nMaxAllocAllowed && + (nDataLen - nOldNumSBC) <= nMaxRecordsAvailable) { nNumStripByteCounts = nDataLen; try { pStripByteCounts = new sal_uLong[ nNumStripByteCounts ]; } - catch (const std::bad_alloc &) + catch (const std::bad_alloc &) { pStripByteCounts = NULL; nNumStripByteCounts = 0; @@ -544,22 +552,24 @@ { if ( nCompression == 1 || nCompression == 32771 ) { - sal_uLong ny, np, nStrip, nStripBytesPerRow; + sal_uLong nStrip, nStripBytesPerRow; if ( nCompression == 1 ) nStripBytesPerRow = nBytesPerRow; else nStripBytesPerRow = ( nBytesPerRow + 1 ) & 0xfffffffe; - for ( ny = 0; ny < nImageLength; ny++ ) + for (sal_Int32 ny = 0; ny < nImageLength; ++ny) { - for ( np = 0; np < nPlanes; np++ ) + for (sal_uLong np = 0; np < nPlanes; ++np) { nStrip = ny / GetRowsPerStrip() + np * nStripsPerPlane; if ( nStrip >= nNumStripOffsets ) return false; pTIFF->Seek( pStripOffsets[ nStrip ] + ( ny % GetRowsPerStrip() ) * nStripBytesPerRow ); + if (np >= SAL_N_ELEMENTS(pMap)) + return false; pTIFF->Read( pMap[ np ], nBytesPerRow ); - if ( pTIFF->GetError() ) + if (!pTIFF->good()) return false; MayCallback( nMinPercent + ( nMaxPercent - nMinPercent ) * ( np * nImageLength + ny) / ( nImageLength * nPlanes ) ); } @@ -569,7 +579,7 @@ } else if ( nCompression == 2 || nCompression == 3 || nCompression == 4 ) { - sal_uLong ny, np, nStrip, nOptions; + sal_uLong nStrip, nOptions; if ( nCompression == 2 ) { nOptions = CCI_OPTION_BYTEALIGNROW; @@ -598,24 +608,32 @@ nStrip = 0; if ( nStrip >= nNumStripOffsets ) return false; + sal_uLong nOffset = pStripOffsets[nStrip]; + if (nOffset > nEndOfFile) + return false; pTIFF->Seek(pStripOffsets[nStrip]); CCIDecompressor aCCIDecom( nOptions, nImageWidth ); aCCIDecom.StartDecompression( *pTIFF ); - for ( ny = 0; ny < nImageLength; ny++ ) + for (sal_Int32 ny = 0; ny < nImageLength; ++ny) { - for ( np = 0; np < nPlanes; np++ ) + for (sal_uLong np = 0; np < nPlanes; np++ ) { if ( ny / GetRowsPerStrip() + np * nStripsPerPlane > nStrip ) { nStrip=ny/GetRowsPerStrip()+np*nStripsPerPlane; if ( nStrip >= nNumStripOffsets ) return false; - pTIFF->Seek( pStripOffsets[ nStrip ] ); + nOffset = pStripOffsets[nStrip]; + if (nOffset > nEndOfFile) + return false; + pTIFF->Seek(nOffset); aCCIDecom.StartDecompression( *pTIFF ); } + if (np >= SAL_N_ELEMENTS(pMap)) + return false; if ( aCCIDecom.DecompressScanline( pMap[ np ], nImageWidth * nBitsPerSample * nSamplesPerPixel / nPlanes, np + 1 == nPlanes ) == false ) return false; if ( pTIFF->GetError() ) @@ -629,15 +647,15 @@ else if ( nCompression == 5 ) { LZWDecompressor aLZWDecom; - sal_uLong ny, np, nStrip; + sal_uLong nStrip; nStrip=0; if ( nStrip >= nNumStripOffsets ) return false; pTIFF->Seek(pStripOffsets[nStrip]); aLZWDecom.StartDecompression(*pTIFF); - for ( ny = 0; ny < nImageLength; ny++ ) + for (sal_Int32 ny = 0; ny < nImageLength; ++ny) { - for ( np = 0; np < nPlanes; np++ ) + for (sal_uLong np = 0; np < nPlanes; ++np) { if ( ny / GetRowsPerStrip() + np * nStripsPerPlane > nStrip ) { @@ -647,6 +665,8 @@ pTIFF->Seek(pStripOffsets[nStrip]); aLZWDecom.StartDecompression(*pTIFF); } + if (np >= SAL_N_ELEMENTS(pMap)) + return false; if ( ( aLZWDecom.Decompress( pMap[ np ], nBytesPerRow ) != nBytesPerRow ) || pTIFF->GetError() ) return false; MayCallback(nMinPercent+(nMaxPercent-nMinPercent)*(np*nImageLength+ny)/(nImageLength*nPlanes)); @@ -657,15 +677,15 @@ } else if ( nCompression == 32773 ) { - sal_uLong nStrip,nRecCount,nRowBytesLeft,ny,np,i; + sal_uLong nStrip,nRecCount,i; sal_uInt8 * pdst; nStrip = 0; if ( nStrip >= nNumStripOffsets ) return false; pTIFF->Seek(pStripOffsets[nStrip]); - for ( ny = 0; ny < nImageLength; ny++ ) + for (sal_Int32 ny = 0; ny < nImageLength; ++ny) { - for ( np = 0; np < nPlanes; np++ ) + for (sal_uLong np = 0; np < nPlanes; ++np) { if ( ny / GetRowsPerStrip() + np * nStripsPerPlane > nStrip ) { @@ -674,7 +694,9 @@ return false; pTIFF->Seek(pStripOffsets[nStrip]); } - nRowBytesLeft = nBytesPerRow; + sal_uLong nRowBytesLeft = nBytesPerRow; + if (np >= SAL_N_ELEMENTS(pMap)) + return false; pdst=pMap[ np ]; do { @@ -686,6 +708,8 @@ if ( nRecCount > nRowBytesLeft ) return false; pTIFF->Read(pdst,nRecCount); + if (!pTIFF->good()) + return false; pdst+=nRecCount; nRowBytesLeft-=nRecCount; } @@ -778,9 +802,9 @@ -bool TIFFReader::ConvertScanline( sal_uLong nY ) +bool TIFFReader::ConvertScanline(sal_Int32 nY) { - sal_uInt32 nRed, nGreen, nBlue, ns, nx, nVal, nByteCount; + sal_uInt32 nRed, nGreen, nBlue, ns, nVal, nByteCount; sal_uInt8 nByteVal; if ( nDstBitsPerPixel == 24 ) @@ -797,7 +821,7 @@ sal_uInt8 nLGreen = 0; sal_uInt8 nLBlue = 0; sal_uInt8 nLAlpha = 0; - for ( nx = 0; nx < nImageWidth; nx++, pt += nSamplesPerPixel ) + for (sal_Int32 nx = 0; nx < nImageWidth; nx++, pt += nSamplesPerPixel) { nLRed = nLRed + pt[ 0 ]; nLGreen = nLGreen + pt[ 1 ]; @@ -812,7 +836,7 @@ } else { - for ( nx = 0; nx < nImageWidth; nx++, pt += nSamplesPerPixel ) + for (sal_Int32 nx = 0; nx < nImageWidth; nx++, pt += nSamplesPerPixel) { pAcc->SetPixel( nY, nx, Color( pt[0], pt[1], pt[2] ) ); if (nSamplesPerPixel >= 4 && pMaskAcc) @@ -828,7 +852,7 @@ if ( nMaxSampleValue > nMinSampleValue ) { sal_uLong nMinMax = nMinSampleValue * 255 / ( nMaxSampleValue - nMinSampleValue ); - for ( nx = 0; nx < nImageWidth; nx++ ) + for (sal_Int32 nx = 0; nx < nImageWidth; ++nx) { if ( nPlanes < 3 ) { @@ -851,7 +875,7 @@ if ( nMaxSampleValue > nMinSampleValue ) { sal_uLong nMinMax = nMinSampleValue * 255 / ( nMaxSampleValue - nMinSampleValue ); - for ( nx = 0; nx < nImageWidth; nx++ ) + for (sal_Int32 nx = 0; nx < nImageWidth; ++nx) { if ( nPlanes < 3 ) { @@ -880,7 +904,7 @@ sal_uInt8 nSampLast[ 4 ] = { 0, 0, 0, 0 }; long nBlack; - for( nx = 0; nx < nImageWidth; nx++ ) + for(sal_Int32 nx = 0; nx < nImageWidth; ++nx) { // are the values being saved as difference? if( 2 == nPredictor ) @@ -933,7 +957,7 @@ if ( nPredictor == 2 ) { sal_uInt8 nLast = 0; - for ( nx = 0; nx < nImageWidth; nx++ ) + for (sal_Int32 nx = 0; nx < nImageWidth; ++nx) { nLast += nx == 0 ? BYTESWAP( (sal_uInt8)*pt++ ) : *pt++; pAcc->SetPixelIndex( nY, nx, nLast ); @@ -941,7 +965,7 @@ } else { - for ( nx = 0; nx < nImageWidth; nx++ ) + for (sal_Int32 nx = 0; nx < nImageWidth; ++nx) { sal_uInt8 nLast = *pt++; pAcc->SetPixelIndex( nY, nx, static_cast( (BYTESWAP((sal_uLong)nLast) - nMinSampleValue) * nMinMax ) ); @@ -953,7 +977,7 @@ if ( nPredictor == 2 ) { sal_uInt8 nLast = 0; - for ( nx = 0; nx < nImageWidth; nx++ ) + for (sal_Int32 nx = 0; nx < nImageWidth; ++nx) { nLast += *pt++; pAcc->SetPixelIndex( nY, nx, nLast ); @@ -961,7 +985,7 @@ } else { - for ( nx = 0; nx < nImageWidth; nx++ ) + for (sal_Int32 nx = 0; nx < nImageWidth; ++nx) { pAcc->SetPixelIndex( nY, nx, static_cast( ((sal_uLong)*pt++ - nMinSampleValue) * nMinMax ) ); @@ -978,7 +1002,7 @@ case 3 : case 2 : { - for ( nx = 0; nx < nImageWidth; nx++ ) + for (sal_Int32 nx = 0; nx < nImageWidth; ++nx) { nVal = ( GetBits( pt, nx * nBitsPerSample, nBitsPerSample ) - nMinSampleValue ) * nMinMax; pAcc->SetPixelIndex( nY, nx, static_cast(nVal)); @@ -990,7 +1014,7 @@ { if ( bByteSwap ) { - nx = 0; + sal_Int32 nx = 0; nByteCount = ( nImageWidth >> 3 ) + 1; while ( --nByteCount ) { @@ -1023,7 +1047,7 @@ } else { - nx = 7; + sal_Int32 nx = 7; nByteCount = ( nImageWidth >> 3 ) + 1; while ( --nByteCount ) { @@ -1071,7 +1095,7 @@ { sal_uLong nMinMax = ( ( 1 << 8 /*nDstBitsPerPixel*/ ) - 1 ) / ( nMaxSampleValue - nMinSampleValue ); sal_uInt8* pt = pMap[ 0 ]; - for ( nx = 0; nx < nImageWidth; nx++, pt += 2 ) + for (sal_Int32 nx = 0; nx < nImageWidth; nx++, pt += 2 ) { pAcc->SetPixelIndex( nY, nx, static_cast( ((sal_uLong)*pt - nMinSampleValue) * nMinMax) ); } @@ -1177,6 +1201,7 @@ pTIFF = &rTIFF; nMaxPos = nOrigPos = pTIFF->Tell(); + nEndOfFile = nOrigPos + pTIFF->remainingSize(); nOrigNumberFormat = pTIFF->GetNumberFormatInt(); MayCallback( 0 ); @@ -1194,10 +1219,19 @@ { sal_uInt32 nOffset = nFirstIfd; + std::vector aSeenOffsets; // calculate length of TIFF file do { - pTIFF->Seek( nOrigPos + nOffset ); + if (std::find(aSeenOffsets.begin(), aSeenOffsets.end(), nOffset) != aSeenOffsets.end()) + { + SAL_WARN("filter.tiff", "Parsing error: " << nOffset << + " already processed, format loop"); + bStatus = false; + break; + } + pTIFF->Seek(nOrigPos + nOffset); + aSeenOffsets.push_back(nOffset); if( pTIFF->GetError() ) { @@ -1226,9 +1260,19 @@ } while( nOffset ); + std::vector aSeenIfds; + for ( sal_uInt32 nNextIfd = nFirstIfd; nNextIfd && bStatus; ) { - pTIFF->Seek( nOrigPos + nNextIfd ); + if (std::find(aSeenIfds.begin(), aSeenIfds.end(), nNextIfd) != aSeenIfds.end()) + { + SAL_WARN("filter.tiff", "Parsing error: " << nNextIfd << + " already processed, format loop"); + bStatus = false; + break; + } + pTIFF->Seek(nOrigPos + nNextIfd); + aSeenIfds.push_back(nNextIfd); { bByteSwap = false; @@ -1293,6 +1337,8 @@ } if ( !nBitsPerSample || ( nBitsPerSample > 32 ) ) bStatus = false; + if (nImageWidth < 0 || nImageLength < 0) + bStatus = false; if ( bStatus ) { if ( nMaxSampleValue == 0 ) @@ -1314,7 +1360,7 @@ Size aTargetSize( nImageWidth, nImageLength ); aBitmap = Bitmap( aTargetSize, nDstBitsPerPixel ); pAcc = aBitmap.AcquireWriteAccess(); - if ( pAcc ) + if (pAcc && pAcc->Width() == nImageWidth && pAcc->Height() == nImageLength) { if ( nPlanarConfiguration == 1 ) nPlanes = 1; diff -Nru libreoffice-l10n-4.4.2/filter/source/graphicfilter/itiff/lzwdecom.cxx libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/itiff/lzwdecom.cxx --- libreoffice-l10n-4.4.2/filter/source/graphicfilter/itiff/lzwdecom.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/source/graphicfilter/itiff/lzwdecom.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -19,6 +19,8 @@ #include "lzwdecom.hxx" +#include +#include #define MAX_TABLE_SIZE 4096 @@ -161,8 +163,18 @@ return; } + unsigned char aSeenIndexes[MAX_TABLE_SIZE] = {0}; while (pTable[nCodeFirstData].nDataCount>1) + { + if (aSeenIndexes[nCodeFirstData]) + { + SAL_WARN("filter.tiff", "Loop in chain"); + bEOIFound = true; + return; + } + aSeenIndexes[nCodeFirstData] = 1; nCodeFirstData=pTable[nCodeFirstData].nPrevCode; + } pTable[nTableSize].nPrevCode=nPrevCode; pTable[nTableSize].nDataCount=pTable[nPrevCode].nDataCount+1; diff -Nru libreoffice-l10n-4.4.2/filter/source/msfilter/escherex.cxx libreoffice-l10n-4.4.6~rc3/filter/source/msfilter/escherex.cxx --- libreoffice-l10n-4.4.2/filter/source/msfilter/escherex.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/source/msfilter/escherex.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -2056,42 +2056,43 @@ { Polygon aPolygon; - sal_uInt16 i, j, k, nPoints, nBezPoints, nPolyCount = aPolyPolygon.Count(); + sal_uInt16 nPolyCount = aPolyPolygon.Count(); + sal_uInt32 nTotalPoints(0), nTotalBezPoints(0); Rectangle aRect( aPolyPolygon.GetBoundRect() ); rGeoRect = ::com::sun::star::awt::Rectangle( aRect.Left(), aRect.Top(), aRect.GetWidth(), aRect.GetHeight() ); - for ( nBezPoints = nPoints = i = 0; i < nPolyCount; i++ ) + for (sal_uInt16 i = 0; i < nPolyCount; ++i) { - k = aPolyPolygon[ i ].GetSize(); - nPoints = nPoints + k; - for ( j = 0; j < k; j++ ) + sal_uInt16 k = aPolyPolygon[ i ].GetSize(); + nTotalPoints += k; + for (sal_uInt16 j = 0; j < k; ++j) { if ( aPolyPolygon[ i ].GetFlags( j ) != POLY_CONTROL ) - nBezPoints++; + nTotalBezPoints++; } } - sal_uInt32 nVerticesBufSize = ( nPoints << 2 ) + 6; + sal_uInt32 nVerticesBufSize = ( nTotalPoints << 2 ) + 6; sal_uInt8* pVerticesBuf = new sal_uInt8[ nVerticesBufSize ]; - sal_uInt32 nSegmentBufSize = ( ( nBezPoints << 2 ) + 8 ); + sal_uInt32 nSegmentBufSize = ( ( nTotalBezPoints << 2 ) + 8 ); if ( nPolyCount > 1 ) nSegmentBufSize += ( nPolyCount << 1 ); sal_uInt8* pSegmentBuf = new sal_uInt8[ nSegmentBufSize ]; sal_uInt8* pPtr = pVerticesBuf; - *pPtr++ = (sal_uInt8)( nPoints ); // Little endian - *pPtr++ = (sal_uInt8)( nPoints >> 8 ); - *pPtr++ = (sal_uInt8)( nPoints ); - *pPtr++ = (sal_uInt8)( nPoints >> 8 ); + *pPtr++ = (sal_uInt8)( nTotalPoints ); // Little endian + *pPtr++ = (sal_uInt8)( nTotalPoints >> 8 ); + *pPtr++ = (sal_uInt8)( nTotalPoints ); + *pPtr++ = (sal_uInt8)( nTotalPoints >> 8 ); *pPtr++ = (sal_uInt8)0xf0; *pPtr++ = (sal_uInt8)0xff; - for ( j = 0; j < nPolyCount; j++ ) + for (sal_uInt16 j = 0; j < nPolyCount; ++j) { aPolygon = aPolyPolygon[ j ]; - nPoints = aPolygon.GetSize(); - for ( i = 0; i < nPoints; i++ ) // write points from polygon to buffer + sal_uInt16 nPoints = aPolygon.GetSize(); + for (sal_uInt16 i = 0; i < nPoints; ++i) // write points from polygon to buffer { Point aPoint = aPolygon[ i ]; aPoint.X() -= rGeoRect.X; @@ -2112,13 +2113,13 @@ *pPtr++ = (sal_uInt8)2; *pPtr++ = (sal_uInt8)0; - for ( j = 0; j < nPolyCount; j++ ) + for (sal_uInt16 j = 0; j < nPolyCount; ++j) { *pPtr++ = 0x0; // Polygon start *pPtr++ = 0x40; aPolygon = aPolyPolygon[ j ]; - nPoints = aPolygon.GetSize(); - for ( i = 0; i < nPoints; i++ ) // write Polyflags to Buffer + sal_uInt16 nPoints = aPolygon.GetSize(); + for (sal_uInt16 i = 0; i < nPoints; ++i) // write Polyflags to Buffer { *pPtr++ = 0; if ( bBezier ) diff -Nru libreoffice-l10n-4.4.2/filter/source/msfilter/msdffimp.cxx libreoffice-l10n-4.4.6~rc3/filter/source/msfilter/msdffimp.cxx --- libreoffice-l10n-4.4.2/filter/source/msfilter/msdffimp.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/source/msfilter/msdffimp.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -399,7 +399,8 @@ if ( aHd.nRecType == DFF_msofbtSolverContainer ) { DffRecordHeader aCRule; - while ( ( rIn.GetError() == 0 ) && ( rIn.Tell() < aHd.GetRecEndFilePos() ) ) + auto nEndPos = DffPropSet::SanitizeEndPos(rIn, aHd.GetRecEndFilePos()); + while ( ( rIn.GetError() == 0 ) && ( rIn.Tell() < nEndPos ) ) { ReadDffRecordHeader( rIn, aCRule ); if ( aCRule.nRecType == DFF_msofbtConnectorRule ) @@ -408,7 +409,8 @@ rIn >> *pRule; rContainer.aCList.push_back( pRule ); } - aCRule.SeekToEndOfRecord( rIn ); + if (!aCRule.SeekToEndOfRecord(rIn)) + break; } } return rIn; @@ -3241,12 +3243,19 @@ if ( pRecHd != NULL ) *pRecHd = aHd; else - aHd.SeekToBegOfRecord( rSt ); + { + bool bSeekSuccess = aHd.SeekToBegOfRecord(rSt); + if (!bSeekSuccess) + { + bRet = false; + break; + } + } } } if ( !bRet ) { - bool bSeekSuccess = aHd.SeekToEndOfRecord( rSt ); + bool bSeekSuccess = aHd.SeekToEndOfRecord(rSt); if (!bSeekSuccess) break; } @@ -3275,11 +3284,22 @@ if ( pRecHd ) *pRecHd = aHd; else - aHd.SeekToBegOfRecord( rStCtrl ); + { + bool bSeekSuccess = aHd.SeekToBegOfRecord(rStCtrl); + if (!bSeekSuccess) + { + bRet = false; + break; + } + } } } if ( !bRet ) - aHd.SeekToEndOfRecord( rStCtrl ); + { + bool bSeekSuccess = aHd.SeekToEndOfRecord(rStCtrl); + if (!bSeekSuccess) + break; + } } while ( rStCtrl.good() && rStCtrl.Tell() < nMaxFilePos && !bRet ); if ( !bRet ) @@ -4127,17 +4147,17 @@ SEEK_FROM_BEGINNING ) ) { sal_uInt32 nBytesLeft = maShapeRecords.Current()->nRecLen; - sal_uInt32 nUDData; - sal_uInt16 nPID; while( 5 < nBytesLeft ) { - rSt.ReadUInt16( nPID ); - if ( rSt.GetError() != 0 ) + sal_uInt16 nPID(0); + rSt.ReadUInt16(nPID); + if (!rSt.good()) break; - rSt.ReadUInt32( nUDData ); - if ( rSt.GetError() != 0 ) + sal_uInt32 nUDData(0); + rSt.ReadUInt32(nUDData); + if (!rSt.good()) break; - if ( nPID == 447 ) + if (nPID == 447) { mbRotateGranientFillWithAngle = nUDData & 0x20; break; @@ -4959,15 +4979,15 @@ && maShapeRecords.Current()->nRecLen ) { sal_uInt32 nBytesLeft = maShapeRecords.Current()->nRecLen; - sal_uInt32 nUDData; - sal_uInt16 nPID; while( 5 < nBytesLeft ) { - rSt.ReadUInt16( nPID ); - if ( rSt.GetError() != 0 ) + sal_uInt16 nPID(0); + rSt.ReadUInt16(nPID); + if (!rSt.good()) break; - rSt.ReadUInt32( nUDData ); - switch( nPID ) + sal_uInt32 nUDData(0); + rSt.ReadUInt32(nUDData); + switch (nPID) { case 0x038F: pImpRec->nXAlign = nUDData; break; case 0x0390: @@ -4997,7 +5017,7 @@ pImpRec->isHorizontalRule = true; break; } - if ( rSt.GetError() != 0 ) + if (!rSt.good()) break; nBytesLeft -= 6; } diff -Nru libreoffice-l10n-4.4.2/filter/source/msfilter/svdfppt.cxx libreoffice-l10n-4.4.6~rc3/filter/source/msfilter/svdfppt.cxx --- libreoffice-l10n-4.4.2/filter/source/msfilter/svdfppt.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/source/msfilter/svdfppt.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -706,6 +706,18 @@ } } +sal_uLong DffPropSet::SanitizeEndPos(SvStream &rIn, sal_uLong nEndRecPos) +{ + auto nStreamLen = rIn.Tell() + rIn.remainingSize(); + if (nEndRecPos > nStreamLen) + { + SAL_WARN("filter.ms", "Parsing error: " << nStreamLen << + " max end pos, but " << nEndRecPos << " claimed, truncating"); + nEndRecPos = nStreamLen; + } + return nEndRecPos; +} + /* ProcessObject is called from ImplSdPPTImport::ProcessObj to handle all application specific things, such as the import of text, animation effects, header footer and placeholder. @@ -731,7 +743,8 @@ { sal_Int16 nHeaderFooterInstance = -1; DffRecordHeader aClientDataHd; - while ( ( rSt.GetError() == 0 ) && ( rSt.Tell() < maShapeRecords.Current()->GetRecEndFilePos() ) ) + auto nEndRecPos = SanitizeEndPos(rSt, maShapeRecords.Current()->GetRecEndFilePos()); + while ( ( rSt.GetError() == 0 ) && ( rSt.Tell() < nEndRecPos ) ) { ReadDffRecordHeader( rSt, aClientDataHd ); switch ( aClientDataHd.nRecType ) @@ -769,7 +782,8 @@ } break; } - aClientDataHd.SeekToEndOfRecord( rSt ); + if (!aClientDataHd.SeekToEndOfRecord(rSt)) + break; } } if ( ( aPlaceholderAtom.nPlaceholderId == PPT_PLACEHOLDER_NOTESSLIDEIMAGE ) && ( rPersistEntry.bNotesMaster == false ) ) @@ -1342,9 +1356,8 @@ while( nCurrentEditAtomStrmPos ) { sal_uInt32 nPersistIncPos = aCurrentEditAtom.nOffsetPersistDirectory; - if ( nPersistIncPos ) + if (nPersistIncPos && rStCtrl.Seek(nPersistIncPos) == nPersistIncPos) { - rStCtrl.Seek( nPersistIncPos ); DffRecordHeader aPersistHd; ReadDffRecordHeader( rStCtrl, aPersistHd ); if ( aPersistHd.nRecType == PPT_PST_PersistPtrIncrementalBlock ) @@ -1774,8 +1787,10 @@ if ( ((SdrPowerPointImport*)this)->maShapeRecords.SeekToContent( rStCtrl, DFF_msofbtClientData, SEEK_FROM_CURRENT_AND_RESTART ) ) { DffRecordHeader aPlaceHd; + + auto nEndRecPos = SanitizeEndPos(rStCtrl, const_cast(this)->maShapeRecords.Current()->GetRecEndFilePos()); while ( ( rStCtrl.GetError() == 0 ) - && ( rStCtrl.Tell() < ((SdrPowerPointImport*)this)->maShapeRecords.Current()->GetRecEndFilePos() ) ) + && ( rStCtrl.Tell() < nEndRecPos ) ) { ReadDffRecordHeader( rStCtrl, aPlaceHd ); if ( aPlaceHd.nRecType == PPT_PST_RecolorInfoAtom ) @@ -1784,7 +1799,10 @@ break; } else - aPlaceHd.SeekToEndOfRecord( rStCtrl ); + { + if (!aPlaceHd.SeekToEndOfRecord(rStCtrl)) + break; + } } } @@ -2376,7 +2394,8 @@ } } } - aProgTagBinaryDataHd.SeekToEndOfRecord( rSt ); + if (!aProgTagBinaryDataHd.SeekToEndOfRecord(rSt)) + break; } } if ( !bRetValue ) @@ -2527,11 +2546,17 @@ while( ( pMasterPersist && pMasterPersist->aSlideAtom.nFlags & 2 ) // it is possible that a masterpage && pMasterPersist->aSlideAtom.nMasterId ) // itself is following a master colorscheme { - sal_uInt16 nNextMaster = pMasterPages->FindPage( pMasterPersist->aSlideAtom.nMasterId ); + auto nOrigMasterId = pMasterPersist->aSlideAtom.nMasterId; + sal_uInt16 nNextMaster = pMasterPages->FindPage(nOrigMasterId); if ( nNextMaster == PPTSLIDEPERSIST_ENTRY_NOTFOUND ) break; else pMasterPersist = &(*pPageList2)[ nNextMaster ]; + if (pMasterPersist->aSlideAtom.nMasterId == nOrigMasterId) + { + SAL_WARN("filter.ms", "loop in atom chain"); + break; + } } } if ( pMasterPersist ) @@ -2540,9 +2565,9 @@ } } } - // resgister current color scheme - ((SdrPowerPointImport*)this)->nPageColorsNum = nAktPageNum; - ((SdrPowerPointImport*)this)->ePageColorsKind = eAktPageKind; + // register current color scheme + const_cast(this)->nPageColorsNum = nAktPageNum; + const_cast(this)->ePageColorsKind = eAktPageKind; } rColor = aPageColors.GetColor( nNum ); return true; @@ -2551,7 +2576,7 @@ bool SdrPowerPointImport::SeekToShape( SvStream& rSt, void* pClientData, sal_uInt32 nId ) const { bool bRet = SvxMSDffManager::SeekToShape( rSt, pClientData, nId ); - if ( !bRet ) + if (!bRet && pClientData) { ProcessData& rData = *( (ProcessData*)pClientData ); PptSlidePersistEntry& rPersistEntry = rData.rPersistEntry; @@ -2632,7 +2657,9 @@ sal_Int32 nPosX = 0; sal_Int32 nPosY = 0; - while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < rComment10Hd.GetRecEndFilePos() ) ) + + auto nEndRecPos = DffPropSet::SanitizeEndPos(rStCtrl, rComment10Hd.GetRecEndFilePos()); + while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < nEndRecPos ) ) { DffRecordHeader aCommentHd; ReadDffRecordHeader( rStCtrl, aCommentHd ); @@ -2669,7 +2696,8 @@ } break; } - aCommentHd.SeekToEndOfRecord( rStCtrl ); + if (!aCommentHd.SeekToEndOfRecord(rStCtrl)) + break; } Point aPosition( nPosX, nPosY ); rMan.Scale( aPosition ); @@ -2707,7 +2735,8 @@ { rSlidePersist.pHeaderFooterEntry = new HeaderFooterEntry( pMasterPersist ); ProcessData aProcessData( rSlidePersist, (SdPage*)pRet ); - while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < aPageHd.GetRecEndFilePos() ) ) + auto nEndRecPos = SanitizeEndPos(rStCtrl, aPageHd.GetRecEndFilePos()); + while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < nEndRecPos ) ) { DffRecordHeader aHd; ReadDffRecordHeader( rStCtrl, aHd ); @@ -2728,7 +2757,8 @@ while( ( rStCtrl.GetError() == 0 ) && SeekToRec( rStCtrl, PPT_PST_Comment10, aContentDataHd.GetRecEndFilePos(), &aComment10Hd ) ) { ImportComment10( *this, rStCtrl, pRet, aComment10Hd ); - aComment10Hd.SeekToEndOfRecord( rStCtrl ); + if (!aComment10Hd.SeekToEndOfRecord(rStCtrl)) + break; } } } @@ -2742,7 +2772,8 @@ sal_uInt32 nPPDrawOfs = rStCtrl.Tell(); // importing the background object before importing the page - while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < aPPDrawHd.GetRecEndFilePos() ) ) + auto nPPEndRecPos = SanitizeEndPos(rStCtrl, aPPDrawHd.GetRecEndFilePos()); + while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < nPPEndRecPos ) ) { DffRecordHeader aEscherObjListHd; ReadDffRecordHeader( rStCtrl, aEscherObjListHd ); @@ -2760,11 +2791,17 @@ PptSlidePersistEntry* pE = &(*pPageList)[ nMasterNum ]; while( ( pE->aSlideAtom.nFlags & 4 ) && pE->aSlideAtom.nMasterId ) { - sal_uInt16 nNextMaster = pMasterPages->FindPage( pE->aSlideAtom.nMasterId ); + auto nOrigMasterId = pE->aSlideAtom.nMasterId; + sal_uInt16 nNextMaster = pMasterPages->FindPage(nOrigMasterId); if ( nNextMaster == PPTSLIDEPERSIST_ENTRY_NOTFOUND ) break; else pE = &(*pPageList)[ nNextMaster ]; + if (pE->aSlideAtom.nMasterId == nOrigMasterId) + { + SAL_WARN("filter.ms", "loop in atom chain"); + break; + } } if ( pE->nBackgroundOffset ) { @@ -2799,12 +2836,14 @@ } if ( aEscherObjListHd.nRecType == DFF_msofbtSpContainer ) break; - aEscherObjListHd.SeekToEndOfRecord( rStCtrl ); + if (!aEscherObjListHd.SeekToEndOfRecord(rStCtrl)) + break; } // now importing page rStCtrl.Seek( nPPDrawOfs ); - while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < aPPDrawHd.GetRecEndFilePos() ) ) + auto nHdEndRecPos = SanitizeEndPos(rStCtrl, aPPDrawHd.GetRecEndFilePos()); + while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < nHdEndRecPos ) ) { DffRecordHeader aEscherObjListHd; ReadDffRecordHeader( rStCtrl, aEscherObjListHd ); @@ -2816,7 +2855,8 @@ if ( SeekToRec( rStCtrl, DFF_msofbtSpContainer, aEscherObjListHd.GetRecEndFilePos(), &aShapeHd ) ) { aShapeHd.SeekToEndOfRecord( rStCtrl ); - while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < aEscherObjListHd.GetRecEndFilePos() ) ) + auto nListEndRecPos = SanitizeEndPos(rStCtrl, aEscherObjListHd.GetRecEndFilePos()); + while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < nListEndRecPos ) ) { ReadDffRecordHeader( rStCtrl, aShapeHd ); if ( ( aShapeHd.nRecType == DFF_msofbtSpContainer ) || ( aShapeHd.nRecType == DFF_msofbtSpgrContainer ) ) @@ -2837,7 +2877,9 @@ insertShapeId( nShapeId, pObj ); } } - aShapeHd.SeekToEndOfRecord( rStCtrl ); + bool bSuccess = aShapeHd.SeekToEndOfRecord(rStCtrl); + if (!bSuccess) + break; } } } @@ -2845,7 +2887,8 @@ } if ( aEscherObjListHd.nRecType == DFF_msofbtSpgrContainer ) break; - aEscherObjListHd.SeekToEndOfRecord( rStCtrl ); + if (!aEscherObjListHd.SeekToEndOfRecord(rStCtrl)) + break; } if ( rSlidePersist.pBObj ) @@ -2861,7 +2904,8 @@ } break; } - aHd.SeekToEndOfRecord( rStCtrl ); + if (!aHd.SeekToEndOfRecord(rStCtrl)) + break; } if ( rSlidePersist.pSolverContainer ) SolveSolver( *rSlidePersist.pSolverContainer ); @@ -3060,7 +3104,8 @@ void SdrEscherImport::ImportHeaderFooterContainer( DffRecordHeader& rHd, HeaderFooterEntry& rE ) { rHd.SeekToContent( rStCtrl ); - while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < rHd.GetRecEndFilePos() ) ) + auto nEndRecPos = SanitizeEndPos(rStCtrl, rHd.GetRecEndFilePos()); + while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < nEndRecPos ) ) { DffRecordHeader aHd; ReadDffRecordHeader( rStCtrl, aHd ); @@ -3080,7 +3125,8 @@ } break; } - aHd.SeekToEndOfRecord( rStCtrl ); + if (!aHd.SeekToEndOfRecord(rStCtrl)) + break; } } @@ -3168,14 +3214,16 @@ pListHd->SeekToContent( rSt ); if ( !rMan.SeekToContentOfProgTag( 9, rSt, *pListHd, aContentDataHd ) ) break; - while ( ( rSt.GetError() == 0 ) && ( rSt.Tell() < aContentDataHd.GetRecEndFilePos() ) ) + auto nEndRecPos = DffPropSet::SanitizeEndPos(rSt, aContentDataHd.GetRecEndFilePos()); + while ( ( rSt.GetError() == 0 ) && ( rSt.Tell() < nEndRecPos ) ) { ReadDffRecordHeader( rSt, aHd ); switch ( aHd.nRecType ) { case PPT_PST_ExtendedBuGraContainer : { - while ( ( rSt.GetError() == 0 ) && ( rSt.Tell() < aHd.GetRecEndFilePos() ) ) + auto nHdEndRecPos = DffPropSet::SanitizeEndPos(rSt, aHd.GetRecEndFilePos()); + while ( ( rSt.GetError() == 0 ) && ( rSt.Tell() < nHdEndRecPos ) ) { sal_uInt16 nType; DffRecordHeader aBuGraAtomHd; @@ -3216,7 +3264,8 @@ #ifdef DBG_UTIL else OSL_FAIL( "PPTExParaProv::PPTExParaProv - unknown atom interpreting the PPT_PST_ExtendedBuGraContainer (SJ)" ); #endif - aBuGraAtomHd.SeekToEndOfRecord( rSt ); + if (!aBuGraAtomHd.SeekToEndOfRecord(rSt)) + break; } if ( !aBuGraList.empty() ) bGraphics = true; @@ -3240,7 +3289,8 @@ break; #endif } - aHd.SeekToEndOfRecord( rSt ); + if (!aHd.SeekToEndOfRecord(rSt)) + break; } break; } @@ -3249,7 +3299,8 @@ { // get the extended paragraph styles on mainmaster ( graphical bullets, num ruling ... ) if ( !rMan.SeekToContentOfProgTag( 9, rSt, *pHd, aContentDataHd ) ) break; - while ( ( rSt.GetError() == 0 ) && ( rSt.Tell() < aContentDataHd.GetRecEndFilePos() ) ) + auto nEndRecPos = DffPropSet::SanitizeEndPos(rSt, aContentDataHd.GetRecEndFilePos()); + while ( ( rSt.GetError() == 0 ) && ( rSt.Tell() < nEndRecPos ) ) { ReadDffRecordHeader( rSt, aHd ); switch ( aHd.nRecType ) @@ -3258,12 +3309,12 @@ { if ( aHd.nRecInstance < PPT_STYLESHEETENTRYS ) { - sal_uInt16 nDepth, i = 0; + sal_uInt16 nDepth = 0, i = 0; rSt.ReadUInt16( nDepth ); if ( i <= 5 ) { - - while ( ( rSt.GetError() == 0 ) && ( rSt.Tell() < aHd.GetRecEndFilePos() ) && ( i < nDepth ) ) + auto nHdEndRecPos = DffPropSet::SanitizeEndPos(rSt, aHd.GetRecEndFilePos()); + while ( ( rSt.GetError() == 0 ) && ( rSt.Tell() < nHdEndRecPos ) && ( i < nDepth ) ) { bStyles = true; ReadPPTExtParaLevel( rSt, aExtParaSheet[ aHd.nRecInstance ].aExtParaLevel[ i++ ] ); @@ -3291,7 +3342,8 @@ case 0xf144 : break; } - aHd.SeekToEndOfRecord( rSt ); + if (!aHd.SeekToEndOfRecord(rSt)) + break; } break; } @@ -4025,18 +4077,20 @@ { pEnvHeader->SeekToContent( rIn ); DffRecordHeader aTxMasterStyleHd; - while ( rIn.Tell() < pEnvHeader->GetRecEndFilePos() ) + auto nEndRecPos = DffPropSet::SanitizeEndPos(rIn, pEnvHeader->GetRecEndFilePos()); + while (rIn.Tell() < nEndRecPos) { ReadDffRecordHeader( rIn, aTxMasterStyleHd ); if ( aTxMasterStyleHd.nRecType == PPT_PST_TxMasterStyleAtom ) { - sal_uInt16 nLevelAnz; - rIn.ReadUInt16( nLevelAnz ); + sal_uInt16 nLevelAnz(0); + rIn.ReadUInt16(nLevelAnz); sal_uInt16 nLev = 0; bool bFirst = true; bFoundTxMasterStyleAtom04 = true; - while ( rIn.GetError() == 0 && rIn.Tell() < aTxMasterStyleHd.GetRecEndFilePos() && nLev < nLevelAnz ) + auto nTxEndRecPos = DffPropSet::SanitizeEndPos(rIn, aTxMasterStyleHd.GetRecEndFilePos()); + while (rIn.GetError() == 0 && rIn.Tell() < nTxEndRecPos && nLev < nLevelAnz && nLev < nMaxPPTLevels) { if ( nLev ) { @@ -4067,21 +4121,29 @@ break; } else - aTxMasterStyleHd.SeekToEndOfRecord( rIn ); + { + if (!aTxMasterStyleHd.SeekToEndOfRecord(rIn)) + break; + } } } rSlideHd.SeekToContent( rIn ); + DffRecordHeader aTxMasterStyleHd; - while ( rIn.Tell() < rSlideHd.GetRecEndFilePos() ) + auto nEndRecPos = DffPropSet::SanitizeEndPos(rIn, rSlideHd.GetRecEndFilePos()); + while (rIn.Tell() < nEndRecPos) { ReadDffRecordHeader( rIn, aTxMasterStyleHd ); if ( aTxMasterStyleHd.nRecType == PPT_PST_TxMasterStyleAtom ) break; else - aTxMasterStyleHd.SeekToEndOfRecord( rIn ); + { + if (!aTxMasterStyleHd.SeekToEndOfRecord(rIn)) + break; + } } - while ( ( aTxMasterStyleHd.nRecType == PPT_PST_TxMasterStyleAtom ) && ( rIn.Tell() < rSlideHd.GetRecEndFilePos() ) ) //TODO: aTxMasterStyleHd may be used without having been properly initialized + while ( ( aTxMasterStyleHd.nRecType == PPT_PST_TxMasterStyleAtom ) && ( rIn.Tell() < nEndRecPos ) ) //TODO: aTxMasterStyleHd may be used without having been properly initialized { sal_uInt32 nInstance = aTxMasterStyleHd.nRecInstance; if ( ( nInstance < PPT_STYLESHEETENTRYS ) && @@ -4121,17 +4183,18 @@ break; } } - sal_uInt16 nLevelAnz; - rIn.ReadUInt16( nLevelAnz ); - if ( nLevelAnz > 5 ) + sal_uInt16 nLevelAnz(0); + rIn.ReadUInt16(nLevelAnz); + if (nLevelAnz > nMaxPPTLevels) { OSL_FAIL( "PPTStyleSheet::Ppt-TextStylesheet hat mehr als 5 Ebenen! (SJ)" ); - nLevelAnz = 5; + nLevelAnz = nMaxPPTLevels; } sal_uInt16 nLev = 0; bool bFirst = true; - while ( rIn.GetError() == 0 && rIn.Tell() < aTxMasterStyleHd.GetRecEndFilePos() && nLev < nLevelAnz ) + auto nTxEndRecPos = DffPropSet::SanitizeEndPos(rIn, aTxMasterStyleHd.GetRecEndFilePos()); + while ( rIn.GetError() == 0 && rIn.Tell() < nTxEndRecPos && nLev < nLevelAnz ) { if ( nLev && ( nInstance < 5 ) ) { @@ -4180,7 +4243,8 @@ } #endif } - aTxMasterStyleHd.SeekToEndOfRecord( rIn ); + if (!aTxMasterStyleHd.SeekToEndOfRecord(rIn)) + break; ReadDffRecordHeader( rIn, aTxMasterStyleHd ); } if ( !mpCharSheet[ TSS_TYPE_SUBTITLE ] ) @@ -4210,7 +4274,8 @@ { pEnvHeader2->SeekToContent( rIn ); DffRecordHeader aTxMasterStyleHd2; - while ( rIn.Tell() < pEnvHeader2->GetRecEndFilePos() ) + auto nEnvEndRecPos = DffPropSet::SanitizeEndPos(rIn, pEnvHeader2->GetRecEndFilePos()); + while (rIn.Tell() < nEnvEndRecPos) { ReadDffRecordHeader( rIn, aTxMasterStyleHd2 ); if ( aTxMasterStyleHd2.nRecType == PPT_PST_TxMasterStyleAtom ) @@ -4220,7 +4285,8 @@ sal_uInt16 nLev = 0; bool bFirst = true; - while ( rIn.GetError() == 0 && rIn.Tell() < aTxMasterStyleHd2.GetRecEndFilePos() && nLev < nLevelAnz ) + auto nTxEndRecPos = DffPropSet::SanitizeEndPos(rIn, aTxMasterStyleHd2.GetRecEndFilePos()); + while ( rIn.GetError() == 0 && rIn.Tell() < nTxEndRecPos && nLev < nLevelAnz ) { if ( nLev ) { @@ -4251,7 +4317,10 @@ break; } else - aTxMasterStyleHd2.SeekToEndOfRecord( rIn ); + { + if (!aTxMasterStyleHd2.SeekToEndOfRecord(rIn)) + break; + } } } } @@ -4737,17 +4806,18 @@ sal_uInt32 nCharIdx = 0; rRecHd.SeekToContent( rIn ); - while ( rIn.Tell() < rRecHd.GetRecEndFilePos() ) + auto nEndRecPos = DffPropSet::SanitizeEndPos(rIn, rRecHd.GetRecEndFilePos()); + while (rIn.Tell() < nEndRecPos && rIn.good()) { - sal_uInt32 nCharCount, - nFlags, i; - if ( nRecordType == PPT_PST_TextSpecInfoAtom ) { + sal_uInt32 nCharCount(0); rIn.ReadUInt32( nCharCount ); nCharIdx += nCharCount; } - rIn.ReadUInt32( nFlags ); + + sal_uInt32 nFlags(0); + rIn.ReadUInt32(nFlags); PPTTextSpecInfo* pEntry = new PPTTextSpecInfo( nCharIdx ); if ( pTextSpecDefault ) @@ -4757,7 +4827,7 @@ pEntry->nLanguage[ 1 ] = pTextSpecDefault->nLanguage[ 1 ]; pEntry->nLanguage[ 2 ] = pTextSpecDefault->nLanguage[ 2 ]; } - for ( i = 1; nFlags && i ; i <<= 1 ) + for (sal_uInt32 i = 1; nFlags && i ; i <<= 1) { sal_uInt16 nLang = 0; switch( nFlags & i ) @@ -5075,7 +5145,9 @@ if ( rExtParaHd.nRecType == PPT_PST_ExtendedParagraphAtom ) { rIn.Seek( rExtParaHd.nFilePos + 8 ); - while( ( rIn.GetError() == 0 ) && ( rIn.Tell() < rExtParaHd.GetRecEndFilePos() ) ) + + auto nEndRecPos = DffPropSet::SanitizeEndPos(rIn, rExtParaHd.GetRecEndFilePos()); + while( ( rIn.GetError() == 0 ) && ( rIn.Tell() < nEndRecPos ) ) { aStyleTextProp9.resize( aStyleTextProp9.size() + 1 ); aStyleTextProp9.back().Read( rIn ); @@ -5197,9 +5269,13 @@ PPTCharPropSet aCharPropSet( nCurrentPara ); if ( bTextPropAtom ) + { ReadCharProps( rIn, aCharPropSet, aString, nCharCount, nCharAnzRead, bTextPropAtom, nExtParaPos, aStyleTextProp9, nExtParaFlags, nBuBlip, nHasAnm, nAnmScheme ); + if (!rIn.good()) + break; + } else nCharCount = nStringLen; @@ -5266,7 +5342,7 @@ break; } } - } + } if ( !aCharPropList.empty() && ( aCharPropList.back()->mnParagraph != nCurrentPara ) ) { PPTCharPropSet* pCharPropSet = new PPTCharPropSet( *aCharPropList.back(), nCurrentPara ); @@ -6436,7 +6512,8 @@ if ( ( nTmpSlideId == nSlideId ) && ( pHd->nRecInstance == nRefNum ) ) { - pHd->SeekToEndOfRecord( rIn ); + if (!pHd->SeekToEndOfRecord(rIn)) + break; ReadDffRecordHeader( rIn, aPresRuleHd ); if ( aPresRuleHd.nRecType == PPT_PST_ExtendedParagraphAtom ) { @@ -6461,10 +6538,12 @@ bStatus = false; else { - rIn.Seek( pE->nSlidePersistStartOffset ); + auto nOffset(pE->nSlidePersistStartOffset); + bStatus = (nOffset == rIn.Seek(nOffset)); // now we got the right page and are searching for the right // TextHeaderAtom - while ( rIn.Tell() < pE->nSlidePersistEndOffset ) + auto nEndRecPos = DffPropSet::SanitizeEndPos(rIn, pE->nSlidePersistEndOffset); + while (bStatus && rIn.Tell() < nEndRecPos) { ReadDffRecordHeader( rIn, aClientTextBoxHd ); if ( aClientTextBoxHd.nRecType == PPT_PST_TextHeaderAtom ) @@ -6475,7 +6554,8 @@ break; } } - aClientTextBoxHd.SeekToEndOfRecord( rIn ); + if (!aClientTextBoxHd.SeekToEndOfRecord(rIn)) + break; } if ( rIn.Tell() > pE->nSlidePersistEndOffset ) bStatus = false; @@ -6488,12 +6568,14 @@ // we have to calculate the correct record len DffRecordHeader aTmpHd; - while ( rIn.Tell() < pE->nSlidePersistEndOffset ) + nEndRecPos = DffPropSet::SanitizeEndPos(rIn, pE->nSlidePersistEndOffset); + while (rIn.Tell() < nEndRecPos) { ReadDffRecordHeader( rIn, aTmpHd ); if ( ( aTmpHd.nRecType == PPT_PST_SlidePersistAtom ) || ( aTmpHd.nRecType == PPT_PST_TextHeaderAtom ) ) break; - aTmpHd.SeekToEndOfRecord( rIn ); + if (!aTmpHd.SeekToEndOfRecord(rIn)) + break; aClientTextBoxHd.nRecLen += aTmpHd.nRecLen + DFF_COMMON_RECORD_HEADER_SIZE; } aClientTextBoxHd.SeekToContent( rIn ); @@ -6594,7 +6676,8 @@ // or ParaTabStops and append them on this textobj rIn.Seek( nFilePos ); ::std::vector< PPTFieldEntry* > FieldList; - while ( rIn.Tell() < aClientTextBoxHd.GetRecEndFilePos() ) + auto nEndRecPos = DffPropSet::SanitizeEndPos(rIn, aClientTextBoxHd.GetRecEndFilePos()); + while (rIn.Tell() < nEndRecPos) { ReadDffRecordHeader( rIn, aTextHd ); sal_uInt16 nVal = 0; @@ -6761,7 +6844,8 @@ } break; } - aTextHd.SeekToEndOfRecord( rIn ); + if (!aTextHd.SeekToEndOfRecord(rIn)) + break; if ( pEntry ) { // sorting fields ( hi >> lo ) diff -Nru libreoffice-l10n-4.4.2/filter/source/svg/svgexport.cxx libreoffice-l10n-4.4.6~rc3/filter/source/svg/svgexport.cxx --- libreoffice-l10n-4.4.2/filter/source/svg/svgexport.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/source/svg/svgexport.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -799,13 +799,9 @@ aAttr += OUString::number(nDocWidth) + " " + OUString::number(nDocHeight); - msClipPathId = "presentation_clip_path"; - OUString sClipPathAttrValue = "url(#" + msClipPathId + ")"; - mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "viewBox", aAttr ); mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "preserveAspectRatio", "xMidYMid" ); mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "fill-rule", "evenodd" ); - mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "clip-path", sClipPathAttrValue ); // standard line width is based on 1 pixel on a 90 DPI device (0.28222mmm) mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "stroke-width", OUString::number( 28.222 ) ); @@ -822,12 +818,13 @@ mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "class", "ClipPathGroup" ); SvXMLElementExport aDefsElem( *mpSVGExport, XML_NAMESPACE_NONE, "defs", true, true ); { + msClipPathId = "presentation_clip_path"; mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "id", msClipPathId ); mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "clipPathUnits", "userSpaceOnUse" ); SvXMLElementExport aClipPathElem( *mpSVGExport, XML_NAMESPACE_NONE, "clipPath", true, true ); { - mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "x", OUString::number( 0 ) ); - mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "y", OUString::number( 0 ) ); + mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "x", OUString::number( nDocX ) ); + mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "y", OUString::number( nDocY ) ); mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "width", OUString::number( nDocWidth ) ); mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "height", OUString::number( nDocHeight ) ); SvXMLElementExport aRectElem( *mpSVGExport, XML_NAMESPACE_NONE, "rect", true, true ); diff -Nru libreoffice-l10n-4.4.2/filter/source/svg/svgwriter.cxx libreoffice-l10n-4.4.6~rc3/filter/source/svg/svgwriter.cxx --- libreoffice-l10n-4.4.2/filter/source/svg/svgwriter.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/source/svg/svgwriter.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1157,6 +1157,22 @@ mbIsTextShapeStarted = true; maParentFont = vcl::Font(); mrExport.AddAttribute( XML_NAMESPACE_NONE, "class", "TextShape" ); + + // if text is rotated, set transform matrix at text element + const vcl::Font& rFont = mpVDev->GetFont(); + if( rFont.GetOrientation() ) + { + Point aRot( maTextPos ); + OUString aTransform = + "translate(" + OUString::number( aRot.X() ) + + "," + OUString::number( aRot.Y() ) + ") rotate(" + + OUString::number( rFont.GetOrientation() * -0.1 ) + + ") translate(" + OUString::number( -aRot.X() ) + + "," + OUString::number( -aRot.Y() ) + ")"; + + mrExport.AddAttribute( XML_NAMESPACE_NONE, aXMLAttrTransform, aTransform ); + } + mpTextShapeElem = new SvXMLElementExport( mrExport, XML_NAMESPACE_NONE, aXMLElemText, true, mbIWS ); startTextParagraph(); } @@ -1245,21 +1261,6 @@ if( bExportY ) mrExport.AddAttribute( XML_NAMESPACE_NONE, aXMLAttrY, OUString::number( maTextPos.Y() ) ); - // if text is rotated, set transform matrix at new tspan element - const vcl::Font& rFont = mpVDev->GetFont(); - if( rFont.GetOrientation() ) - { - Point aRot( maTextPos ); - OUString aTransform = - OUString("translate(") + OUString::number( aRot.X() ) + - "," + OUString::number( aRot.Y() ) + ") rotate(" + - OUString::number( rFont.GetOrientation() * -0.1 ) + - ") translate(" + OUString::number( -aRot.X() ) + - "," + OUString::number( -aRot.Y() ) + ")"; - - mrExport.AddAttribute( XML_NAMESPACE_NONE, aXMLAttrTransform, aTransform ); - } - mpTextPositionElem = new SvXMLElementExport( mrExport, XML_NAMESPACE_NONE, aXMLElemTspan, mbIWS, mbIWS ); } @@ -1540,7 +1541,7 @@ else aPos = rPos; - if( mbPositioningNeeded ) + if( mbPositioningNeeded || bApplyMapping ) { mbPositioningNeeded = false; maTextPos.setX( aPos.X() ); @@ -3509,7 +3510,9 @@ } else { + maTextWriter.startTextShape(); maTextWriter.writeTextPortion( pA->GetPoint(), aText ); + maTextWriter.endTextShape(); } } } diff -Nru libreoffice-l10n-4.4.2/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl libreoffice-l10n-4.4.6~rc3/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl --- libreoffice-l10n-4.4.2/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl 2015-10-27 20:55:54.000000000 +0000 @@ -479,7 +479,7 @@ - + @@ -6920,13 +6920,12 @@ - - - - + + + - + @@ -7170,7 +7169,7 @@ - + diff -Nru libreoffice-l10n-4.4.2/filter/source/xslt/odf2xhtml/export/xhtml/body.xsl libreoffice-l10n-4.4.6~rc3/filter/source/xslt/odf2xhtml/export/xhtml/body.xsl --- libreoffice-l10n-4.4.2/filter/source/xslt/odf2xhtml/export/xhtml/body.xsl 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/filter/source/xslt/odf2xhtml/export/xhtml/body.xsl 2015-10-27 20:55:54.000000000 +0000 @@ -1262,7 +1262,7 @@ - + @@ -2909,7 +2909,7 @@ - + diff -Nru libreoffice-l10n-4.4.2/forms/source/component/clickableimage.cxx libreoffice-l10n-4.4.6~rc3/forms/source/component/clickableimage.cxx --- libreoffice-l10n-4.4.2/forms/source/component/clickableimage.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/forms/source/component/clickableimage.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -31,6 +31,8 @@ #include #include #include +#include +#include #include #include #include @@ -62,6 +64,7 @@ using namespace ::com::sun::star::util; using namespace ::com::sun::star::frame; using namespace ::com::sun::star::form::submission; + using namespace ::com::sun::star::graphic; using ::com::sun::star::awt::MouseEvent; using ::com::sun::star::task::XInteractionHandler; @@ -451,6 +454,7 @@ const OUString& rDefault ) :OControlModel( _rxFactory, _rUnoControlModelTypeName, rDefault ) ,OPropertyChangeListener(m_aMutex) + ,m_xGraphicObject() ,m_pMedium(NULL) ,m_pProducer( NULL ) ,m_bDispatchUrlInternal(false) @@ -465,6 +469,7 @@ OClickableImageBaseModel::OClickableImageBaseModel( const OClickableImageBaseModel* _pOriginal, const Reference& _rxFactory ) :OControlModel( _pOriginal, _rxFactory ) ,OPropertyChangeListener( m_aMutex ) + ,m_xGraphicObject( _pOriginal->m_xGraphicObject ) ,m_pMedium( NULL ) ,m_pProducer( NULL ) ,m_bDispatchUrlInternal(false) @@ -497,6 +502,7 @@ void OClickableImageBaseModel::implConstruct() { m_pProducer = new ImageProducer; + m_pProducer->SetDoneHdl( LINK( this, OClickableImageBaseModel, OnImageImportDone ) ); increment( m_refCount ); { m_xProducer = m_pProducer; @@ -852,6 +858,21 @@ } } + IMPL_LINK( OClickableImageBaseModel, OnImageImportDone, Graphic*, i_pGraphic ) + { + const Reference< XGraphic > xGraphic( i_pGraphic != NULL ? Graphic(i_pGraphic->GetBitmapEx()).GetXGraphic() : NULL ); + if ( !xGraphic.is() ) + { + m_xGraphicObject.clear(); + } + else + { + m_xGraphicObject = css::graphic::GraphicObject::create( m_xContext ); + m_xGraphicObject->setGraphic( xGraphic ); + } + return 1L; + } + // OImageProducerThread_Impl diff -Nru libreoffice-l10n-4.4.2/forms/source/component/clickableimage.hxx libreoffice-l10n-4.4.6~rc3/forms/source/component/clickableimage.hxx --- libreoffice-l10n-4.4.2/forms/source/component/clickableimage.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/forms/source/component/clickableimage.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -33,6 +33,7 @@ #include #include #include +#include #include @@ -64,6 +65,8 @@ // ImageProducer stuff ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageProducer> m_xProducer; + // Store the image in a graphic object to make it accesible via graphic cache using graphic ID. + ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphicObject > m_xGraphicObject; SfxMedium* m_pMedium; // Download medium ImageProducer* m_pProducer; bool m_bDispatchUrlInternal; // property: is not allowed to set : 1 @@ -143,6 +146,8 @@ // to be called from within the cloning-ctor of your derived class void implInitializeImageURL( ); + + DECL_LINK( OnImageImportDone, ::Graphic* ); }; class ImageModelMethodGuard : public ::osl::MutexGuard diff -Nru libreoffice-l10n-4.4.2/formula/source/ui/dlg/FormulaHelper.cxx libreoffice-l10n-4.4.6~rc3/formula/source/ui/dlg/FormulaHelper.cxx --- libreoffice-l10n-4.4.2/formula/source/ui/dlg/FormulaHelper.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/formula/source/ui/dlg/FormulaHelper.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -17,12 +17,12 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include + #include "formula/formulahelper.hxx" #include #include -#include - namespace formula { @@ -93,7 +93,7 @@ const sal_uInt32 nCategoryCount = m_pFunctionManager->getCount(); for(sal_uInt32 j= 0; j < nCategoryCount && !*ppFDesc; ++j) { - boost::scoped_ptr pCategory(m_pFunctionManager->getCategory(j)); + const IFunctionCategory* pCategory = m_pFunctionManager->getCategory(j); const sal_uInt32 nCount = pCategory->getCount(); for(sal_uInt32 i = 0 ; i < nCount; ++i) { @@ -201,7 +201,7 @@ return nStart; sal_Int32 nFStart = FUNC_NOTFOUND; - sal_Int32 nParPos = nStart; + sal_Int32 nParPos = bBack ? ::std::min( nStart, nStrLen - 1) : nStart; bool bRepeat, bFound; do @@ -227,7 +227,7 @@ } else { - while ( !bFound && (nParPos < nStrLen) ) + while ( !bFound && (0 <= nParPos && nParPos < nStrLen) ) { if ( rFormula[nParPos] == '"' ) { diff -Nru libreoffice-l10n-4.4.2/fpicker/uiconfig/ui/explorerfiledialog.ui libreoffice-l10n-4.4.6~rc3/fpicker/uiconfig/ui/explorerfiledialog.ui --- libreoffice-l10n-4.4.2/fpicker/uiconfig/ui/explorerfiledialog.ui 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/fpicker/uiconfig/ui/explorerfiledialog.ui 2015-10-27 20:55:54.000000000 +0000 @@ -59,6 +59,7 @@ True True True + 40 False @@ -287,6 +288,7 @@ True False True + 40 1 diff -Nru libreoffice-l10n-4.4.2/framework/source/helper/titlebarupdate.cxx libreoffice-l10n-4.4.6~rc3/framework/source/helper/titlebarupdate.cxx --- libreoffice-l10n-4.4.2/framework/source/helper/titlebarupdate.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/framework/source/helper/titlebarupdate.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -139,25 +139,17 @@ OUString sDesktopName; OUString aModuleId = xModuleManager->identify(xFrame); - if ( aModuleId == "com.sun.star.text.TextDocument" || - aModuleId == "com.sun.star.text.GlobalDocument" || - aModuleId == "com.sun.star.text.WebDocument" || - aModuleId == "com.sun.star.xforms.XMLFormDocument" ) + if ( aModuleId.startsWith("com.sun.star.text.") || aModuleId.startsWith("com.sun.star.xforms.") ) sDesktopName = "Writer"; - else if ( aModuleId == "com.sun.star.sheet.SpreadsheetDocument" ) + else if ( aModuleId.startsWith("com.sun.star.sheet.") ) sDesktopName = "Calc"; - else if ( aModuleId == "com.sun.star.presentation.PresentationDocument" ) + else if ( aModuleId.startsWith("com.sun.star.presentation.") ) sDesktopName = "Impress"; - else if ( aModuleId == "com.sun.star.drawing.DrawingDocument" ) + else if ( aModuleId.startsWith("com.sun.star.drawing." ) ) sDesktopName = "Draw"; - else if ( aModuleId == "com.sun.star.formula.FormulaProperties" ) + else if ( aModuleId.startsWith("com.sun.star.formula." ) ) sDesktopName = "Math"; - else if ( aModuleId == "com.sun.star.sdb.DatabaseDocument" || - aModuleId == "com.sun.star.sdb.OfficeDatabaseDocument" || - aModuleId == "com.sun.star.sdb.RelationDesign" || - aModuleId == "com.sun.star.sdb.QueryDesign" || - aModuleId == "com.sun.star.sdb.TableDesign" || - aModuleId == "com.sun.star.sdb.DataSourceBrowser" ) + else if ( aModuleId.startsWith("com.sun.star.sdb.") ) sDesktopName = "Base"; else sDesktopName = "Startcenter"; diff -Nru libreoffice-l10n-4.4.2/framework/source/layoutmanager/layoutmanager.cxx libreoffice-l10n-4.4.6~rc3/framework/source/layoutmanager/layoutmanager.cxx --- libreoffice-l10n-4.4.2/framework/source/layoutmanager/layoutmanager.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/framework/source/layoutmanager/layoutmanager.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -525,8 +525,15 @@ else if ( aWindowState[n].Name == WINDOWSTATE_PROPERTY_DOCKPOS ) { awt::Point aPoint; - if ( aWindowState[n].Value >>= aPoint ) + if (aWindowState[n].Value >>= aPoint) + { + //tdf#90256 repair these broken Docking positions + if (aPoint.X < 0) + aPoint.X = SAL_MAX_INT32; + if (aPoint.Y < 0) + aPoint.Y = SAL_MAX_INT32; rElementData.m_aDockedData.m_aPos = aPoint; + } } else if ( aWindowState[n].Name == WINDOWSTATE_PROPERTY_POS ) { diff -Nru libreoffice-l10n-4.4.2/framework/source/uielement/menubarmanager.cxx libreoffice-l10n-4.4.6~rc3/framework/source/uielement/menubarmanager.cxx --- libreoffice-l10n-4.4.2/framework/source/uielement/menubarmanager.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/framework/source/uielement/menubarmanager.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1185,7 +1185,8 @@ { sal_uInt16 nItemId = pMenu->GetItemId( nPos ); OUString aCommand = pMenu->GetItemCommand( nItemId ); - if ( nItemId == SID_MDIWINDOWLIST || aCommand == aSpecialWindowCommand) + if ( nItemId == SID_MDIWINDOWLIST || aCommand == aSpecialWindowCommand || + nItemId == SID_HELPMENU || aCommand == aCmdHelpMenu ) { // Retrieve addon popup menus and add them to our menu bar framework::AddonMenuManager::MergeAddonPopupMenus( rFrame, nPos, static_cast(pMenu), m_xContext ); diff -Nru libreoffice-l10n-4.4.2/.gitreview libreoffice-l10n-4.4.6~rc3/.gitreview --- libreoffice-l10n-4.4.2/.gitreview 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/.gitreview 2015-10-27 20:55:54.000000000 +0000 @@ -3,5 +3,5 @@ port=29418 project=core defaultremote=logerrit -defaultbranch=libreoffice-4-4-2 +defaultbranch=libreoffice-4-4-6 diff -Nru libreoffice-l10n-4.4.2/helpcontent2/source/text/shared/01/01070001.xhp libreoffice-l10n-4.4.6~rc3/helpcontent2/source/text/shared/01/01070001.xhp --- libreoffice-l10n-4.4.2/helpcontent2/source/text/shared/01/01070001.xhp 2015-03-26 08:55:46.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/helpcontent2/source/text/shared/01/01070001.xhp 2015-10-27 20:55:54.000000000 +0000 @@ -47,8 +47,7 @@ Create New Directory -Default Directory - + Display area File Name diff -Nru libreoffice-l10n-4.4.2/helpcontent2/source/text/shared/guide/startcenter.xhp libreoffice-l10n-4.4.6~rc3/helpcontent2/source/text/shared/guide/startcenter.xhp --- libreoffice-l10n-4.4.2/helpcontent2/source/text/shared/guide/startcenter.xhp 2015-03-26 08:55:46.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/helpcontent2/source/text/shared/guide/startcenter.xhp 2015-10-27 20:55:54.000000000 +0000 @@ -31,10 +31,10 @@ start center - - - - + + + + Start Center Welcome to %PRODUCTNAME. @@ -43,14 +43,13 @@ You see the Start Center when no document is open in %PRODUCTNAME. It is divided into two panes. Click an icon on the left pane to open a new document or a file dialog. - - - - - - -The document icons each open a new document - of the specified type. + + + + + + +The document icons each open a new document of the specified type. @@ -77,10 +76,10 @@ Formula opens %PRODUCTNAME Math - + The Templates icon opens the Templates and Documents dialog. The Templates icon opens the Templates and Documents dialog. - + The Open a Document icon presents a file open dialog. The Open a document icon presents a file open dialog.the four icons show a short explanation already diff -Nru libreoffice-l10n-4.4.2/i18npool/source/breakiterator/breakiterator_th.cxx libreoffice-l10n-4.4.6~rc3/i18npool/source/breakiterator/breakiterator_th.cxx --- libreoffice-l10n-4.4.2/i18npool/source/breakiterator/breakiterator_th.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/i18npool/source/breakiterator/breakiterator_th.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -21,6 +21,7 @@ #include #include +#include using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; @@ -103,7 +104,7 @@ #define is_Thai(c) (0x0e00 <= c && c <= 0x0e7f) // Unicode definition for Thai -void SAL_CALL BreakIterator_th::makeIndex(const OUString& Text, sal_Int32 nStartPos) +void SAL_CALL BreakIterator_th::makeIndex(const OUString& Text, sal_Int32 const nStartPos) throw(RuntimeException) { if (Text != cachedText) { @@ -123,18 +124,20 @@ return; const sal_Unicode* str = cachedText.getStr(); - sal_Int32 len = cachedText.getLength(), startPos, endPos; + sal_Int32 const len = cachedText.getLength(); - startPos = nStartPos; + sal_Int32 startPos = nStartPos; while (startPos > 0 && is_Thai(str[startPos-1])) startPos--; - endPos = nStartPos+1; + sal_Int32 endPos = std::min(len, nStartPos+1); while (endPos < len && is_Thai(str[endPos])) endPos++; sal_Int32 start, end, pos; pos = start = end = startPos; + assert(endPos <= cellIndexSize); while (pos < endPos) { end += getACell(str, start, endPos); + assert(end <= cellIndexSize); while (pos < end) { nextCellIndex[pos] = end; previousCellIndex[pos] = start; diff -Nru libreoffice-l10n-4.4.2/i18npool/source/characterclassification/cclass_unicode.cxx libreoffice-l10n-4.4.6~rc3/i18npool/source/characterclassification/cclass_unicode.cxx --- libreoffice-l10n-4.4.2/i18npool/source/characterclassification/cclass_unicode.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/i18npool/source/characterclassification/cclass_unicode.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -21,8 +21,10 @@ #include #include #include +#include #include #include +#include #include #include @@ -79,27 +81,41 @@ OUString SAL_CALL cclass_Unicode::toTitle( const OUString& Text, sal_Int32 nPos, sal_Int32 nCount, const Locale& rLocale ) throw(RuntimeException, std::exception) { - sal_Int32 len = Text.getLength(); - if (nPos >= len) - return OUString(); - if (nCount + nPos > len) - nCount = len - nPos; - - trans->setMappingType(MappingTypeToTitle, rLocale); - rtl_uString* pStr = rtl_uString_alloc(nCount); - sal_Unicode* out = pStr->buffer; - BreakIteratorImpl brk(m_xContext); - Boundary bdy = brk.getWordBoundary(Text, nPos, rLocale, - WordType::ANYWORD_IGNOREWHITESPACES, sal_True); - for (sal_Int32 i = nPos; i < nCount + nPos; i++, out++) { - if (i >= bdy.endPos) - bdy = brk.nextWord(Text, bdy.endPos, rLocale, - WordType::ANYWORD_IGNOREWHITESPACES); - *out = (i == bdy.startPos) ? - trans->transliterateChar2Char(Text[i]) : Text[i]; + try + { + sal_Int32 len = Text.getLength(); + if (nPos >= len) + return OUString(); + if (nCount + nPos > len) + nCount = len - nPos; + + trans->setMappingType(MappingTypeToTitle, rLocale); + rtl_uString* pStr = rtl_uString_alloc(nCount); + sal_Unicode* out = pStr->buffer; + BreakIteratorImpl brk(m_xContext); + Boundary bdy = brk.getWordBoundary(Text, nPos, rLocale, + WordType::ANYWORD_IGNOREWHITESPACES, sal_True); + for (sal_Int32 i = nPos; i < nCount + nPos; i++, out++) { + if (i >= bdy.endPos) + bdy = brk.nextWord(Text, bdy.endPos, rLocale, + WordType::ANYWORD_IGNOREWHITESPACES); + *out = (i == bdy.startPos) ? + trans->transliterateChar2Char(Text[i]) : Text[i]; + } + *out = 0; + return OUString( pStr, SAL_NO_ACQUIRE ); + } + catch (const RuntimeException&) + { + throw; + } + catch (const Exception& e) + { + uno::Any a(cppu::getCaughtException()); + throw lang::WrappedTargetRuntimeException( + "wrapped Exception " + e.Message, + uno::Reference(), a); } - *out = 0; - return OUString( pStr, SAL_NO_ACQUIRE ); } sal_Int16 SAL_CALL diff -Nru libreoffice-l10n-4.4.2/i18npool/source/localedata/data/es_CR.xml libreoffice-l10n-4.4.6~rc3/i18npool/source/localedata/data/es_CR.xml --- libreoffice-l10n-4.4.2/i18npool/source/localedata/data/es_CR.xml 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/i18npool/source/localedata/data/es_CR.xml 2015-10-27 20:55:54.000000000 +0000 @@ -28,7 +28,29 @@ Costa Rica - + + + / +   + , + : + , + ; + , + de + de + + + + ‘ + ’ + “ + †+ + AM + PM + metric + D/M @@ -134,31 +156,31 @@ 0,00 - #.##0 + # ##0 - #.##0,00 + # ##0,00 - #.###,00 + # ###,00 - [$â‚¡-140A] #.##0;-[$â‚¡-140A] #.##0 + [$â‚¡-140A] # ##0;-[$â‚¡-140A] # ##0 - [$â‚¡-140A] #.##0,00;-[$â‚¡-140A] #.##0,00 + [$â‚¡-140A] # ##0,00;-[$â‚¡-140A] # ##0,00 - [$â‚¡-140A] #.##0;[RED]-[$â‚¡-140A] #.##0 + [$â‚¡-140A] # ##0;[RED]-[$â‚¡-140A] # ##0 - [$â‚¡-140A] #.##0,00;[RED]-[$â‚¡-140A] #.##0,00 + [$â‚¡-140A] # ##0,00;[RED]-[$â‚¡-140A] # ##0,00 - #.##0,00 CCC + # ##0,00 CCC - [$â‚¡-140A] #.##0,--;[RED]-[$â‚¡-140A] #.##0,-- + [$â‚¡-140A] # ##0,--;[RED]-[$â‚¡-140A] # ##0,-- 0% diff -Nru libreoffice-l10n-4.4.2/i18npool/source/search/textsearch.cxx libreoffice-l10n-4.4.6~rc3/i18npool/source/search/textsearch.cxx --- libreoffice-l10n-4.4.2/i18npool/source/search/textsearch.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/i18npool/source/search/textsearch.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -242,13 +242,26 @@ in_str = xTranslit->transliterate( searchStr, startPos, endPos - startPos, offset ); // JP 20.6.2001: also the start and end positions must be corrected! - sal_Int32 const newStartPos = + sal_Int32 newStartPos = (startPos == 0) ? 0 : FindPosInSeq_Impl( offset, startPos ); - sal_Int32 const newEndPos = (endPos < searchStr.getLength()) + sal_Int32 newEndPos = (endPos < searchStr.getLength()) ? FindPosInSeq_Impl( offset, endPos ) : in_str.getLength(); + sal_Int32 nExtraOffset = 0; + if (pRegexMatcher && startPos > 0) + { + // avoid matching ^ here - in_str omits a prefix of the searchStr + // this is a really lame way to do it, but ICU only offers + // useAnchoringBounds() to disable *both* bounds but what is needed + // here is to disable only one bound and respect the other + in_str = "X" + in_str; + nExtraOffset = 1; + newStartPos += nExtraOffset; + newEndPos += nExtraOffset; + } + sres = (this->*fnForward)( in_str, newStartPos, newEndPos ); // Map offsets back to untransliterated string. @@ -260,14 +273,14 @@ const sal_Int32 nGroups = sres.startOffset.getLength(); for ( sal_Int32 k = 0; k < nGroups; k++ ) { - const sal_Int32 nStart = sres.startOffset[k]; + const sal_Int32 nStart = sres.startOffset[k] - nExtraOffset; if (startPos > 0 || nStart > 0) sres.startOffset[k] = (nStart < nOffsets ? offset[nStart] : (offset[nOffsets - 1] + 1)); // JP 20.6.2001: end is ever exclusive and then don't return // the position of the next character - return the // next position behind the last found character! // "a b c" find "b" must return 2,3 and not 2,4!!! - const sal_Int32 nStop = sres.endOffset[k]; + const sal_Int32 nStop = sres.endOffset[k] - nExtraOffset; if (startPos > 0 || nStop > 0) sres.endOffset[k] = offset[(nStop <= nOffsets ? nStop : nOffsets) - 1] + 1; } @@ -345,6 +358,10 @@ sal_Int32 const newEndPos = (endPos == 0) ? 0 : FindPosInSeq_Impl( offset, endPos ); + // TODO: this would need nExtraOffset handling to avoid $ matching + // if (pRegexMatcher && startPos < searchStr.getLength()) + // but that appears to be impossible with ICU regex + sres = (this->*fnBackward)( in_str, newStartPos, newEndPos ); // Map offsets back to untransliterated string. Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/cmd/lc_colorscaleformatdialog.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/cmd/lc_colorscaleformatdialog.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/cmd/lc_conditionalformatdialog.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/cmd/lc_conditionalformatdialog.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/cmd/lc_databarformatdialog.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/cmd/lc_databarformatdialog.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/cmd/lc_iconsetformatdialog.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/cmd/lc_iconsetformatdialog.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/cmd/sc_iconsetformatdialog.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/cmd/sc_iconsetformatdialog.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/bg/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/bg/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/cs/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/cs/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/da/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/da/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/de/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/de/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/es/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/es/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/et/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/et/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/fr/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/fr/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/hu/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/hu/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/it/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/it/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/ja/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/ja/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/km/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/km/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/ko/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/ko/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/pl/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/pl/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/pt/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/pt/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/pt-BR/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/pt-BR/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/sk/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/sk/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/sl/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/sl/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/sv/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/sv/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/tr/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/tr/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/zh-CN/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/zh-CN/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/galaxy/res/helpimg/zh-TW/rechenlt.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/galaxy/res/helpimg/zh-TW/rechenlt.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/industrial/cmd/lc_linearrowsquare.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/industrial/cmd/lc_linearrowsquare.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/industrial/cmd/lc_line_diagonal.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/industrial/cmd/lc_line_diagonal.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/industrial/cmd/sc_linesquarearrow.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/industrial/cmd/sc_linesquarearrow.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_autofilter.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_autofilter.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_autopilotmenu.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_autopilotmenu.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_conditionalformatdialog.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_conditionalformatdialog.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_conditionalformatmenu.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_conditionalformatmenu.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorarrowend.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorarrowend.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorarrows.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorarrows.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorarrowstart.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorarrowstart.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorcircleend.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorcircleend.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorcircles.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorcircles.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorcirclestart.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorcirclestart.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorcurvearrowend.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorcurvearrowend.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorcurvearrows.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorcurvearrows.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorcurvearrowstart.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorcurvearrowstart.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorcurvecircleend.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorcurvecircleend.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorcurvecircles.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorcurvecircles.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorcurvecirclestart.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorcurvecirclestart.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorcurve.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorcurve.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorlinearrowend.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorlinearrowend.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorlinearrows.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorlinearrows.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorlinearrowstart.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorlinearrowstart.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorlinecircleend.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorlinecircleend.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorlinecircles.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorlinecircles.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorlinecirclestart.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorlinecirclestart.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorline.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorline.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorlinesarrowend.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorlinesarrowend.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorlinesarrows.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorlinesarrows.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorlinesarrowstart.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorlinesarrowstart.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorlinescircleend.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorlinescircleend.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorlinescircles.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorlinescircles.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorlinescirclestart.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorlinescirclestart.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connectorlines.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connectorlines.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_connector.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_connector.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_hyperlinkdialog.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_hyperlinkdialog.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_insertgraphic.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_insertgraphic.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_inserthyperlink.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_inserthyperlink.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_linearrowcircle.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_linearrowcircle.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_linearrowend.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_linearrowend.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_linearrows.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_linearrows.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_linearrowsquare.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_linearrowsquare.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_linearrowstart.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_linearrowstart.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_linecirclearrow.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_linecirclearrow.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_linediagonal.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_linediagonal.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_line.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_line.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_linesquarearrow.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_linesquarearrow.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_measureline.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_measureline.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_presentation.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_presentation.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/lc_printdefault.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/lc_printdefault.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/sc_autofilter.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/sc_autofilter.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/sc_autopilotmenu.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/sc_autopilotmenu.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/sc_conditionalformatdialog.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/sc_conditionalformatdialog.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/sc_conditionalformatmenu.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/sc_conditionalformatmenu.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/sc_datasort.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/sc_datasort.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/sc_datefield.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/sc_datefield.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/sc_decrementindent.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/sc_decrementindent.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/sc_defaultbullet.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/sc_defaultbullet.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/sc_formatarea.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/sc_formatarea.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/sc_inserttable.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/sc_inserttable.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/sc_line.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/sc_line.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/sc_presentation.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/sc_presentation.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/sc_printdefault.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/sc_printdefault.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/sc_setborderstyle.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/sc_setborderstyle.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/cmd/sc_togglemergecells.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/cmd/sc_togglemergecells.png differ diff -Nru libreoffice-l10n-4.4.2/icon-themes/sifr/links.txt libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/links.txt --- libreoffice-l10n-4.4.2/icon-themes/sifr/links.txt 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/links.txt 2015-10-27 20:55:54.000000000 +0000 @@ -36,6 +36,8 @@ # Calc cmd/lc_numberformatcurrency.png cmd/lc_insertcurrencyfield.png cmd/sc_numberformatcurrency.png cmd/sc_insertcurrencyfield.png +cmd/lc_linestyle.png cmd/lc_borderdialog.png +cmd/sc_linestyle.png cmd/sc_borderdialog.png # Date Icons cmd/lc_adddatefield.png cmd/lc_datefield.png @@ -59,3 +61,11 @@ # image icon duplicates cmd/sc_graphicdialog.png cmd/sc_insertgraphic.png +# Writer - Table toolbar +cmd/lc_tablesort.png cmd/lc_datasort.png +cmd/sc_tablesort.png cmd/sc_datasort.png + +# calc autofilter +cmd/lc_datafilterautofilter.png cmd/lc_autofilter.png +cmd/sc_datafilterautofilter.png cmd/sc_autofilter.png + Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/sw/res/doublepage_10x22.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/sw/res/doublepage_10x22.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/sw/res/emptypage_10x14.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/sw/res/emptypage_10x14.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/sifr/sw/res/twopages_10x24.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/sifr/sw/res/twopages_10x24.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/tango/cmd/lc_colorscaleformatdialog.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/tango/cmd/lc_colorscaleformatdialog.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/tango/cmd/lc_conditionalformatdialog.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/tango/cmd/lc_conditionalformatdialog.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/tango/cmd/lc_databarformatdialog.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/tango/cmd/lc_databarformatdialog.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/tango/cmd/lc_iconsetformatdialog.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/tango/cmd/lc_iconsetformatdialog.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/tango/cmd/lc_saveas.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/tango/cmd/lc_saveas.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/tango/cmd/lc_saveastemplate.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/tango/cmd/lc_saveastemplate.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/tango/cmd/lc_saveastemplate.xcf.bz2 and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/tango/cmd/lc_saveastemplate.xcf.bz2 differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/tango/cmd/lc_saveas.xcf.bz2 and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/tango/cmd/lc_saveas.xcf.bz2 differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/tango/cmd/lc_spellonline.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/tango/cmd/lc_spellonline.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/tango/cmd/sc_iconsetformatdialog.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/tango/cmd/sc_iconsetformatdialog.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/tango/cmd/sc_spellonline.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/tango/cmd/sc_spellonline.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/tango/cmd/sc_zoommode.png and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/tango/cmd/sc_zoommode.png differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/icon-themes/tango/cmd/sc_zoommode.xcf.bz2 and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/icon-themes/tango/cmd/sc_zoommode.xcf.bz2 differ diff -Nru libreoffice-l10n-4.4.2/icon-themes/tango/links.txt libreoffice-l10n-4.4.6~rc3/icon-themes/tango/links.txt --- libreoffice-l10n-4.4.2/icon-themes/tango/links.txt 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/icon-themes/tango/links.txt 2015-10-27 20:55:54.000000000 +0000 @@ -162,7 +162,7 @@ cmd/lc_symbolshapes.png cmd/lc_symbolshapes.smiley.png cmd/lc_ellipsetoolbox.png cmd/lc_basicshapes.ellipse.png cmd/lc_rectangletoolbox.png cmd/lc_basicshapes.rectangle.png -cmd/lc_linetoolbox.png cmd/lc_freeline.png +cmd/lc_linetoolbox.png cmd/lc_freeline_unfilled.png cmd/lc_texttoolbox.png cmd/lc_text.png cmd/lc_inserttoolbox.png cmd/lc_drawchart.png cmd/lc_objects3dtoolbox.png cmd/lc_cube.png @@ -178,7 +178,7 @@ cmd/sc_symbolshapes.png cmd/sc_symbolshapes.smiley.png cmd/sc_ellipsetoolbox.png cmd/sc_basicshapes.ellipse.png cmd/sc_rectangletoolbox.png cmd/sc_basicshapes.rectangle.png -cmd/sc_linetoolbox.png cmd/sc_freeline.png +cmd/sc_linetoolbox.png cmd/sc_freeline_unfilled.png cmd/sc_texttoolbox.png cmd/sc_text.png cmd/sc_inserttoolbox.png cmd/sc_drawchart.png cmd/sc_objects3dtoolbox.png cmd/sc_cube.png diff -Nru libreoffice-l10n-4.4.2/include/editeng/colritem.hxx libreoffice-l10n-4.4.6~rc3/include/editeng/colritem.hxx --- libreoffice-l10n-4.4.2/include/editeng/colritem.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/editeng/colritem.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -91,9 +91,11 @@ SvxBackgroundColorItem( SvStream& rStrm, const sal_uInt16 nId ); SvxBackgroundColorItem( const SvxBackgroundColorItem& rCopy ); - virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const SAL_OVERRIDE; - virtual SfxPoolItem* Create(SvStream &, sal_uInt16) const SAL_OVERRIDE; - + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const SAL_OVERRIDE; + virtual SvStream& Store(SvStream& rStream, sal_uInt16 nVersion) const SAL_OVERRIDE; + virtual SfxPoolItem* Create(SvStream &, sal_uInt16) const SAL_OVERRIDE; + virtual bool QueryValue(css::uno::Any& rVal, sal_uInt8 nMemberId = 0) const SAL_OVERRIDE; + virtual bool PutValue(const css::uno::Any& rVal, sal_uInt8 nMemberId) SAL_OVERRIDE; }; #endif diff -Nru libreoffice-l10n-4.4.2/include/editeng/flditem.hxx libreoffice-l10n-4.4.6~rc3/include/editeng/flditem.hxx --- libreoffice-l10n-4.4.2/include/editeng/flditem.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/editeng/flditem.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -194,7 +194,7 @@ class EDITENG_DLLPUBLIC SvxPageTitleField : public SvxFieldData { public: - SV_DECL_PERSIST1( SvxPageTitleField, SvxFieldData, com::sun::star::text::textfield::Type::PAGE_TITLE ) + SV_DECL_PERSIST1( SvxPageTitleField, SvxFieldData, com::sun::star::text::textfield::Type::PAGE_NAME ) SvxPageTitleField(); virtual SvxFieldData* Clone() const SAL_OVERRIDE; diff -Nru libreoffice-l10n-4.4.2/include/editeng/unotext.hxx libreoffice-l10n-4.4.6~rc3/include/editeng/unotext.hxx --- libreoffice-l10n-4.4.2/include/editeng/unotext.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/editeng/unotext.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -91,6 +91,7 @@ { OUString(UNO_NAME_EDIT_CHAR_LOCALE), EE_CHAR_LANGUAGE, ::cppu::UnoType::get(),0, MID_LANG_LOCALE }, \ { OUString(UNO_NAME_EDIT_CHAR_COLOR), EE_CHAR_COLOR, ::cppu::UnoType::get(), 0, 0 }, \ { OUString("CharBackColor"), EE_CHAR_BKGCOLOR, ::cppu::UnoType::get(), 0, 0 }, \ + { OUString("CharBackTransparent"), EE_CHAR_BKGCOLOR, ::cppu::UnoType::get(), 0, MID_GRAPHIC_TRANSPARENT }, \ { OUString(UNO_NAME_EDIT_CHAR_ESCAPEMENT), EE_CHAR_ESCAPEMENT, ::cppu::UnoType::get(), 0, MID_ESC }, \ { OUString(UNO_NAME_EDIT_CHAR_UNDERLINE), EE_CHAR_UNDERLINE, ::cppu::UnoType::get(), 0, MID_TL_STYLE }, \ { OUString("CharUnderlineColor"), EE_CHAR_UNDERLINE, ::cppu::UnoType::get(), 0, MID_TL_COLOR }, \ diff -Nru libreoffice-l10n-4.4.2/include/filter/msfilter/dffpropset.hxx libreoffice-l10n-4.4.6~rc3/include/filter/msfilter/dffpropset.hxx --- libreoffice-l10n-4.4.2/include/filter/msfilter/dffpropset.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/filter/msfilter/dffpropset.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -60,6 +60,7 @@ OUString GetPropertyString( sal_uInt32 nId, SvStream& rStrm ) const; bool SeekToContent( sal_uInt32 nRecType, SvStream& rSt ) const; void InitializePropSet( sal_uInt16 nPropSetType ) const; + static sal_uLong SanitizeEndPos(SvStream &rIn, sal_uLong nEndRecPos); friend SvStream& ReadDffPropSet( SvStream& rIn, DffPropSet& rPropSet ); friend SvStream& operator|=( SvStream& rIn, DffPropSet& rPropSet ); diff -Nru libreoffice-l10n-4.4.2/include/filter/msfilter/svdfppt.hxx libreoffice-l10n-4.4.6~rc3/include/filter/msfilter/svdfppt.hxx --- libreoffice-l10n-4.4.2/include/filter/msfilter/svdfppt.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/filter/msfilter/svdfppt.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -166,6 +166,8 @@ + sal_uInt32('T') * 0x00010000 + sal_uInt32('0') * 0x01000000; +const int nMaxPPTLevels = 5; + // Object IDs for StarDraw UserData #define PPT_OBJECTINFO_ID (1) @@ -715,7 +717,7 @@ struct PPTExtParaSheet { - PPTExtParaLevel aExtParaLevel[ 5 ]; + PPTExtParaLevel aExtParaLevel[nMaxPPTLevels]; }; struct PPTBuGraEntry @@ -762,7 +764,7 @@ struct PPTCharSheet { - PPTCharLevel maCharLevel[ 5 ]; + PPTCharLevel maCharLevel[nMaxPPTLevels]; explicit PPTCharSheet( sal_uInt32 nInstance ); PPTCharSheet( const PPTCharSheet& rCharSheet ); @@ -795,7 +797,7 @@ { public: - PPTParaLevel maParaLevel[ 5 ]; + PPTParaLevel maParaLevel[nMaxPPTLevels]; explicit PPTParaSheet( sal_uInt32 nInstance ); PPTParaSheet( const PPTParaSheet& rParaSheet ); @@ -1000,8 +1002,8 @@ sal_Int32 nFlags; sal_uInt16 nDefaultTab; - sal_uInt16 nTextOfs[ 5 ]; - sal_uInt16 nBulletOfs[ 5 ]; + sal_uInt16 nTextOfs[nMaxPPTLevels]; + sal_uInt16 nBulletOfs[nMaxPPTLevels]; PPTTabEntry* pTab; sal_uInt16 nTabCount; diff -Nru libreoffice-l10n-4.4.2/include/formula/IFunctionDescription.hxx libreoffice-l10n-4.4.6~rc3/include/formula/IFunctionDescription.hxx --- libreoffice-l10n-4.4.2/include/formula/IFunctionDescription.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/formula/IFunctionDescription.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -60,7 +60,7 @@ ~IFunctionManager() {} }; - class IFunctionCategory + class SAL_NO_VTABLE IFunctionCategory { public: IFunctionCategory(){} @@ -70,7 +70,8 @@ virtual sal_uInt32 getNumber() const = 0; virtual OUString getName() const = 0; - virtual ~IFunctionCategory() {} + protected: + ~IFunctionCategory() {} }; class SAL_NO_VTABLE IFunctionDescription diff -Nru libreoffice-l10n-4.4.2/include/oox/core/xmlfilterbase.hxx libreoffice-l10n-4.4.6~rc3/include/oox/core/xmlfilterbase.hxx --- libreoffice-l10n-4.4.2/include/oox/core/xmlfilterbase.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/oox/core/xmlfilterbase.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -236,6 +236,8 @@ FastParser* createParser() const; + bool isMSO2007Document() const; + protected: virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > implGetInputStream( utl::MediaDescriptor& rMediaDesc ) const SAL_OVERRIDE; @@ -255,6 +257,7 @@ ::std::unique_ptr< XmlFilterBaseImpl > mxImpl; sal_Int32 mnRelId; sal_Int32 mnMaxDocId; + bool mbMSO2007; }; typedef ::rtl::Reference< XmlFilterBase > XmlFilterRef; diff -Nru libreoffice-l10n-4.4.2/include/oox/export/drawingml.hxx libreoffice-l10n-4.4.6~rc3/include/oox/export/drawingml.hxx --- libreoffice-l10n-4.4.2/include/oox/export/drawingml.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/oox/export/drawingml.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -73,6 +73,10 @@ virtual void WriteOutliner(const OutlinerParaObject& rParaObj) = 0; /// Write the contents of the textbox that is associated to this shape. virtual void WriteTextBox(css::uno::Reference xShape) = 0; + /// Look up the RelId of a graphic based on its checksum. + virtual OUString FindRelId(sal_uInt32 nChecksum) = 0; + /// Store the RelId of a graphic based on its checksum. + virtual void CacheRelId(sal_uInt32 nChecksum, const OUString& rRelId) = 0; protected: DMLTextExport() {} virtual ~DMLTextExport() {} @@ -103,7 +107,7 @@ bool GetPropertyAndState( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet, ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState > rXPropState, const OUString& aName, ::com::sun::star::beans::PropertyState& eState ); - const char* GetFieldType( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > rRun, bool& bIsField ); + OUString GetFieldValue( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > rRun, bool& bIsURLField ); /// If bRelPathToMedia is true add "../" to image folder path while adding the image relationship diff -Nru libreoffice-l10n-4.4.2/include/oox/export/vmlexport.hxx libreoffice-l10n-4.4.6~rc3/include/oox/export/vmlexport.hxx --- libreoffice-l10n-4.4.2/include/oox/export/vmlexport.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/oox/export/vmlexport.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -39,6 +39,10 @@ virtual oox::drawingml::DrawingML& GetDrawingML() = 0; /// Write the contents of the textbox that is associated to this shape in VML format. virtual void WriteVMLTextBox(css::uno::Reference xShape) = 0; + /// Look up the RelId of a graphic based on its checksum. + virtual OUString FindRelId(sal_uInt32 nChecksum) = 0; + /// Store the RelId of a graphic based on its checksum. + virtual void CacheRelId(sal_uInt32 nChecksum, const OUString& rRelId) = 0; protected: VMLTextExport() {} virtual ~VMLTextExport() {} diff -Nru libreoffice-l10n-4.4.2/include/oox/vml/vmlshape.hxx libreoffice-l10n-4.4.6~rc3/include/oox/vml/vmlshape.hxx --- libreoffice-l10n-4.4.2/include/oox/vml/vmlshape.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/oox/vml/vmlshape.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -58,6 +58,7 @@ struct OOX_DLLPUBLIC ShapeTypeModel { OUString maShapeId; ///< Unique identifier of the shape. + OUString maLegacyId; ///< Plaintext identifier of the shape. OUString maShapeName; ///< Name of the shape, if present. OptValue< sal_Int32 > moShapeType; ///< Builtin shape type identifier. diff -Nru libreoffice-l10n-4.4.2/include/oox/vml/vmltextbox.hxx libreoffice-l10n-4.4.6~rc3/include/oox/vml/vmltextbox.hxx --- libreoffice-l10n-4.4.2/include/oox/vml/vmltextbox.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/oox/vml/vmltextbox.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -95,6 +95,7 @@ bool borderDistanceSet; int borderDistanceLeft, borderDistanceTop, borderDistanceRight, borderDistanceBottom; OUString maLayoutFlow; + OUString msNextTextbox; private: typedef ::std::vector< TextPortionModel > PortionVector; diff -Nru libreoffice-l10n-4.4.2/include/sax/tools/converter.hxx libreoffice-l10n-4.4.6~rc3/include/sax/tools/converter.hxx --- libreoffice-l10n-4.4.2/include/sax/tools/converter.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/sax/tools/converter.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -139,6 +139,12 @@ /** convert string to double number (using ::rtl::math) without unit conversion */ static bool convertDouble(double& rValue, const OUString& rString); + /** convert number, 10th of degrees with range [0..3600] to SVG angle */ + static void convertAngle(OUStringBuffer& rBuffer, sal_Int16 nAngle); + + /** convert SVG angle to number, 10th of degrees with range [0..3600] */ + static bool convertAngle(sal_Int16& rAngle, OUString const& rString); + /** convert double to ISO "duration" string; negative durations allowed */ static void convertDuration(OUStringBuffer& rBuffer, const double fTime); diff -Nru libreoffice-l10n-4.4.2/include/sfx2/dinfdlg.hxx libreoffice-l10n-4.4.6~rc3/include/sfx2/dinfdlg.hxx --- libreoffice-l10n-4.4.2/include/sfx2/dinfdlg.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/sfx2/dinfdlg.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -187,7 +187,7 @@ SelectableFixedText* m_pShowTypeFT; CheckBox* m_pReadOnlyCB; - FixedText* m_pFileValFt; + Edit* m_pFileValEd; SelectableFixedText* m_pShowSizeFT; SelectableFixedText* m_pCreateValFt; diff -Nru libreoffice-l10n-4.4.2/include/svl/poolitem.hxx libreoffice-l10n-4.4.6~rc3/include/svl/poolitem.hxx --- libreoffice-l10n-4.4.2/include/svl/poolitem.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/svl/poolitem.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -85,7 +85,9 @@ //! Notloesung!!! enum SfxFieldUnit { - SFX_FUNIT_NONE, SFX_FUNIT_TWIP + SFX_FUNIT_NONE, SFX_FUNIT_MM, SFX_FUNIT_CM, SFX_FUNIT_M, SFX_FUNIT_KM, + SFX_FUNIT_TWIP, SFX_FUNIT_POINT, SFX_FUNIT_PICA, + SFX_FUNIT_INCH, SFX_FUNIT_FOOT, SFX_FUNIT_MILE, SFX_FUNIT_CHAR, SFX_FUNIT_LINE, SFX_FUNIT_CUSTOM }; enum SfxMapUnit diff -Nru libreoffice-l10n-4.4.2/include/svx/nbdtmg.hxx libreoffice-l10n-4.4.6~rc3/include/svx/nbdtmg.hxx --- libreoffice-l10n-4.4.2/include/svx/nbdtmg.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/svx/nbdtmg.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -27,7 +27,6 @@ namespace svx { namespace sidebar { #define DEFAULT_BULLET_TYPES 8 -#define DEFAULT_NONE 10 #define DEFAULT_NUM_TYPE_MEMBER 5 #define DEFAULT_NUM_VALUSET_COUNT 8 #define DEFAULT_NUMBERING_CACHE_FORMAT_VERSION 0x10 diff -Nru libreoffice-l10n-4.4.2/include/svx/svdpagv.hxx libreoffice-l10n-4.4.6~rc3/include/svx/svdpagv.hxx --- libreoffice-l10n-4.4.2/include/svx/svdpagv.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/svx/svdpagv.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -235,6 +235,11 @@ // Beim Gruppenobjekt muss wenigstens ein Member sichtbar sein, // gesperrt sein darf keiner. bool IsObjMarkable(SdrObject* pObj) const; + // hmm, selectable is surely the same as markable, now that I + // see this as I look for a place to put it. TO-DO, + // merge these + bool IsObjSelectable(SdrObject *pObj) const; + // Betreten (Editieren) einer Objektgruppe. Anschliessend liegen alle // Memberobjekte der Gruppe im direkten Zugriff. Alle anderen Objekte diff -Nru libreoffice-l10n-4.4.2/include/svx/svdundo.hxx libreoffice-l10n-4.4.6~rc3/include/svx/svdundo.hxx --- libreoffice-l10n-4.4.2/include/svx/svdundo.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/svx/svdundo.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -242,9 +242,6 @@ SdrView* pView; // To be able to re-create the selection for a SdrPageView* pPageView; // for a ObjDel, Undo sal_uInt32 nOrdNum; - // It's possible that the object is re-assigned during a Undo/Redo. - // The object is deleted in the dtor, if bOwner==TRUE - ObjListListener* m_pListener; protected: SdrUndoObjList(SdrObject& rNewObj, bool bOrdNumDirect = false); diff -Nru libreoffice-l10n-4.4.2/include/svx/unobrushitemhelper.hxx libreoffice-l10n-4.4.6~rc3/include/svx/unobrushitemhelper.hxx --- libreoffice-l10n-4.4.2/include/svx/unobrushitemhelper.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/svx/unobrushitemhelper.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -46,7 +46,8 @@ SVX_DLLPUBLIC SvxBrushItem getSvxBrushItemFromSourceSet( const SfxItemSet& rSourceSet, sal_uInt16 nBackgroundID, - bool bSearchInParents = true); + bool bSearchInParents = true, + bool bXMLImportHack = false); #endif // _UNOBRUSHITEMHELPER_HXX diff -Nru libreoffice-l10n-4.4.2/include/tools/color.hxx libreoffice-l10n-4.4.6~rc3/include/tools/color.hxx --- libreoffice-l10n-4.4.2/include/tools/color.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/tools/color.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -156,8 +156,8 @@ bool operator!=( const Color& rColor ) const { return !(Color::operator==( rColor )); } - SvStream& Read( SvStream& rIStm, bool bNewFormat = true ); - SvStream& Write( SvStream& rOStm, bool bNewFormat = true ); + SvStream& Read(SvStream& rIStream, bool bNewFormat = true); + SvStream& Write(SvStream& rOStream, bool bNewFormat = true) const; TOOLS_DLLPUBLIC friend SvStream& ReadColor( SvStream& rIStream, Color& rColor ); TOOLS_DLLPUBLIC friend SvStream& WriteColor( SvStream& rOStream, const Color& rColor ); diff -Nru libreoffice-l10n-4.4.2/include/unotools/closeveto.hxx libreoffice-l10n-4.4.6~rc3/include/unotools/closeveto.hxx --- libreoffice-l10n-4.4.2/include/unotools/closeveto.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/unotools/closeveto.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -41,7 +41,8 @@ class UNOTOOLS_DLLPUBLIC CloseVeto { public: - CloseVeto( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& i_closeable ); + CloseVeto( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& i_closeable, + bool bHasOwnership = false); ~CloseVeto(); private: diff -Nru libreoffice-l10n-4.4.2/include/unotools/historyoptions.hxx libreoffice-l10n-4.4.6~rc3/include/unotools/historyoptions.hxx --- libreoffice-l10n-4.4.2/include/unotools/historyoptions.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/unotools/historyoptions.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -20,6 +20,7 @@ #ifndef INCLUDED_UNOTOOLS_HISTORYOPTIONS_HXX #define INCLUDED_UNOTOOLS_HISTORYOPTIONS_HXX +#include #include #include #include @@ -94,7 +95,7 @@ */ void AppendItem(EHistoryType eHistory, const OUString& sURL, const OUString& sFilter, const OUString& sTitle, - const OUString& sPassword, const OUString& sThumbnail); + const OUString& sPassword, const boost::optional& sThumbnail); /** Delete item from the specified list. */ diff -Nru libreoffice-l10n-4.4.2/include/unotools/securityoptions.hxx libreoffice-l10n-4.4.6~rc3/include/unotools/securityoptions.hxx --- libreoffice-l10n-4.4.2/include/unotools/securityoptions.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/unotools/securityoptions.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -186,6 +186,8 @@ */ bool isTrustedLocationUri(OUString const & uri) const; + bool isTrustedLocationUriForUpdatingLinks(OUString const & uri) const; + ::com::sun::star::uno::Sequence< Certificate > GetTrustedAuthors ( ) const; void SetTrustedAuthors ( const ::com::sun::star::uno::Sequence< Certificate >& rAuthors ); diff -Nru libreoffice-l10n-4.4.2/include/vcl/floatwin.hxx libreoffice-l10n-4.4.6~rc3/include/vcl/floatwin.hxx --- libreoffice-l10n-4.4.2/include/vcl/floatwin.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/vcl/floatwin.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -44,11 +44,10 @@ #define FLOATWIN_POPUPMODE_NOMOUSERECTCLOSE ((sal_uLong)0x00000800) #define FLOATWIN_POPUPMODE_ALLMOUSEBUTTONCLOSE ((sal_uLong)0x00001000) #define FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE ((sal_uLong)0x00002000) -#define FLOATWIN_POPUPMODE_PATHMOUSECANCELCLICK ((sal_uLong)0x00004000) -#define FLOATWIN_POPUPMODE_NEWLEVEL ((sal_uLong)0x00008000) -#define FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE ((sal_uLong)0x00010000) -#define FLOATWIN_POPUPMODE_GRABFOCUS ((sal_uLong)0x00020000) -#define FLOATWIN_POPUPMODE_NOHORZPLACEMENT ((sal_uLong)0x00040000) +#define FLOATWIN_POPUPMODE_NEWLEVEL ((sal_uLong)0x00004000) +#define FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE ((sal_uLong)0x00008000) +#define FLOATWIN_POPUPMODE_GRABFOCUS ((sal_uLong)0x00010000) +#define FLOATWIN_POPUPMODE_NOHORZPLACEMENT ((sal_uLong)0x00020000) #define FLOATWIN_POPUPMODEEND_CANCEL ((sal_uInt16)0x0001) #define FLOATWIN_POPUPMODEEND_TEAROFF ((sal_uInt16)0x0002) diff -Nru libreoffice-l10n-4.4.2/include/vcl/window.hxx libreoffice-l10n-4.4.6~rc3/include/vcl/window.hxx --- libreoffice-l10n-4.4.2/include/vcl/window.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/vcl/window.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -228,6 +228,9 @@ #define AUTOSCROLL_VERT ((sal_uInt16)0x0001) #define AUTOSCROLL_HORZ ((sal_uInt16)0x0002) +#ifdef TRANSPARENT +#undef TRANSPARENT +#endif // Flags for StateChanged() enum class StateChangedType : sal_uInt16 { @@ -1192,9 +1195,11 @@ * the preferred widget size. * * Use get_preferred_size to retrieve this value - * mediated via height and width requests + * cached and mediated via height and width requests */ virtual Size GetOptimalSize() const; + /// clear OptimalSize cache + void InvalidateSizeCache(); private: SAL_DLLPRIVATE bool ImplIsAccessibleCandidate() const; diff -Nru libreoffice-l10n-4.4.2/include/xmloff/PageMasterStyleMap.hxx libreoffice-l10n-4.4.6~rc3/include/xmloff/PageMasterStyleMap.hxx --- libreoffice-l10n-4.4.2/include/xmloff/PageMasterStyleMap.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/xmloff/PageMasterStyleMap.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -90,12 +90,13 @@ // at export time using CTF_PM_FLAGMASK and XML_PM_CTF_START as detector // to find the first entry for header/footer (!), see // SvXMLAutoStylePoolP_Impl::exportXML, look for XML_STYLE_FAMILY_PAGE_MASTER -#define CTF_PM_REPEAT_OFFSET_X (XML_PM_CTF_START + 0x0035) -#define CTF_PM_REPEAT_OFFSET_Y (XML_PM_CTF_START + 0x0036) -#define CTF_PM_FILLGRADIENTNAME (XML_PM_CTF_START + 0x0037) -#define CTF_PM_FILLHATCHNAME (XML_PM_CTF_START + 0x0038) -#define CTF_PM_FILLBITMAPNAME (XML_PM_CTF_START + 0x0039) -#define CTF_PM_FILLTRANSNAME (XML_PM_CTF_START + 0x0040) +#define CTF_PM_REPEAT_OFFSET_X (XML_PM_CTF_START + 0x0037) +#define CTF_PM_REPEAT_OFFSET_Y (XML_PM_CTF_START + 0x0038) +#define CTF_PM_FILLGRADIENTNAME (XML_PM_CTF_START + 0x0039) +#define CTF_PM_FILLHATCHNAME (XML_PM_CTF_START + 0x0040) +#define CTF_PM_FILLBITMAPNAME (XML_PM_CTF_START + 0x0041) +#define CTF_PM_FILLTRANSNAME (XML_PM_CTF_START + 0x0042) +#define CTF_PM_FILLBITMAPMODE (XML_PM_CTF_START + 0x0043) #define CTF_PM_SCALETO (XML_PM_CTF_START + 0x0051) // calc specific #define CTF_PM_SCALETOPAGES (XML_PM_CTF_START + 0x0052) diff -Nru libreoffice-l10n-4.4.2/include/xmloff/txtimp.hxx libreoffice-l10n-4.4.6~rc3/include/xmloff/txtimp.hxx --- libreoffice-l10n-4.4.2/include/xmloff/txtimp.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/xmloff/txtimp.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -210,6 +210,7 @@ XML_TOK_TEXT_SEQUENCE_REF, XML_TOK_TEXT_NOTE_REF, XML_TOK_TEXT_SHEET_NAME, + XML_TOK_TEXT_PAGE_NAME, XML_TOK_TEXT_BIBLIOGRAPHY_MARK, XML_TOK_TEXT_ANNOTATION, XML_TOK_TEXT_ANNOTATION_END, diff -Nru libreoffice-l10n-4.4.2/include/xmloff/txtprmap.hxx libreoffice-l10n-4.4.6~rc3/include/xmloff/txtprmap.hxx --- libreoffice-l10n-4.4.2/include/xmloff/txtprmap.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/xmloff/txtprmap.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -196,6 +196,8 @@ #define CTF_CHARBOTTOMBORDER (XML_TEXT_CTF_START + 167) #define CTF_RELWIDTHREL (XML_TEXT_CTF_START + 168) #define CTF_RELHEIGHTREL (XML_TEXT_CTF_START + 169) +#define CTF_FILLSTYLE (XML_TEXT_CTF_START + 172) +#define CTF_FILLCOLOR (XML_TEXT_CTF_START + 173) #define TEXT_PROP_MAP_TEXT 0 diff -Nru libreoffice-l10n-4.4.2/include/xmloff/xmlexppr.hxx libreoffice-l10n-4.4.6~rc3/include/xmloff/xmlexppr.hxx --- libreoffice-l10n-4.4.2/include/xmloff/xmlexppr.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/xmloff/xmlexppr.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -143,7 +143,8 @@ void exportXML( SvXMLExport& rExport, const ::std::vector< XMLPropertyState >& rProperties, - sal_uInt16 nFlags = 0 ) const; + sal_uInt16 nFlags = 0, + bool bUseExtensionNamespaceForGraphicProperties = false ) const; /** like above but only properties whose property map index is within the * specified range are exported diff -Nru libreoffice-l10n-4.4.2/include/xmloff/xmltoken.hxx libreoffice-l10n-4.4.6~rc3/include/xmloff/xmltoken.hxx --- libreoffice-l10n-4.4.2/include/xmloff/xmltoken.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/include/xmloff/xmltoken.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -1368,6 +1368,7 @@ XML_PAGE_HEIGHT, XML_PAGE_MASTER, XML_PAGE_MASTER_NAME, + XML_PAGE_NAME, XML_PAGE_NUMBER, XML_PAGE_START_MARGIN, XML_PAGE_STYLE_NAME, diff -Nru libreoffice-l10n-4.4.2/jvmfwk/distributions/OpenOfficeorg/javavendors_linux.xml libreoffice-l10n-4.4.6~rc3/jvmfwk/distributions/OpenOfficeorg/javavendors_linux.xml --- libreoffice-l10n-4.4.2/jvmfwk/distributions/OpenOfficeorg/javavendors_linux.xml 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/jvmfwk/distributions/OpenOfficeorg/javavendors_linux.xml 2015-10-27 20:55:54.000000000 +0000 @@ -41,6 +41,9 @@ 1.5.0 + + 1.6.0 + diff -Nru libreoffice-l10n-4.4.2/jvmfwk/distributions/OpenOfficeorg/javavendors_macosx.xml libreoffice-l10n-4.4.6~rc3/jvmfwk/distributions/OpenOfficeorg/javavendors_macosx.xml --- libreoffice-l10n-4.4.2/jvmfwk/distributions/OpenOfficeorg/javavendors_macosx.xml 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/jvmfwk/distributions/OpenOfficeorg/javavendors_macosx.xml 2015-10-27 20:55:54.000000000 +0000 @@ -32,6 +32,9 @@ 1.7.0 - + + 1.6.0 + + diff -Nru libreoffice-l10n-4.4.2/jvmfwk/distributions/OpenOfficeorg/javavendors_wnt.xml libreoffice-l10n-4.4.6~rc3/jvmfwk/distributions/OpenOfficeorg/javavendors_wnt.xml --- libreoffice-l10n-4.4.2/jvmfwk/distributions/OpenOfficeorg/javavendors_wnt.xml 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/jvmfwk/distributions/OpenOfficeorg/javavendors_wnt.xml 2015-10-27 20:55:54.000000000 +0000 @@ -32,6 +32,9 @@ 1.5.0 + + 1.6.0 + diff -Nru libreoffice-l10n-4.4.2/jvmfwk/plugins/sunmajor/pluginlib/otherjre.cxx libreoffice-l10n-4.4.6~rc3/jvmfwk/plugins/sunmajor/pluginlib/otherjre.cxx --- libreoffice-l10n-4.4.2/jvmfwk/plugins/sunmajor/pluginlib/otherjre.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/jvmfwk/plugins/sunmajor/pluginlib/otherjre.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -55,10 +55,12 @@ "/bin/client/jvm.dll", "/bin/hotspot/jvm.dll", "/bin/classic/jvm.dll", - "/bin/jrockit/jvm.dll" + "/bin/jrockit/jvm.dll", + "/bin/server/jvm.dll" // needed by Azul #elif defined UNX #ifdef MACOSX - "/../../../../../Frameworks/JavaVM.framework/JavaVM" //as of 1.6.0_22 + "/../../../../../Frameworks/JavaVM.framework/JavaVM", //as of 1.6.0_22 + "/lib/server/libjvm.dylib" // needed by Azul #else "/lib/" JFW_PLUGIN_ARCH "/client/libjvm.so", // for Blackdown PPC "/lib/" JFW_PLUGIN_ARCH "/server/libjvm.so", // for Blackdown AMD64 diff -Nru libreoffice-l10n-4.4.2/jvmfwk/plugins/sunmajor/pluginlib/vendorlist.cxx libreoffice-l10n-4.4.6~rc3/jvmfwk/plugins/sunmajor/pluginlib/vendorlist.cxx --- libreoffice-l10n-4.4.2/jvmfwk/plugins/sunmajor/pluginlib/vendorlist.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/jvmfwk/plugins/sunmajor/pluginlib/vendorlist.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -50,6 +50,7 @@ VENDOR_MAP_ENTRY("Free Software Foundation, Inc.", GnuInfo) VENDOR_MAP_ENTRY("The FreeBSD Foundation", OtherInfo) #endif + VENDOR_MAP_ENTRY("Azul Systems, Inc.", OtherInfo) END_VENDOR_MAP() diff -Nru libreoffice-l10n-4.4.2/librelogo/source/LibreLogo/LibreLogo.py libreoffice-l10n-4.4.6~rc3/librelogo/source/LibreLogo/LibreLogo.py --- libreoffice-l10n-4.4.2/librelogo/source/LibreLogo/LibreLogo.py 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/librelogo/source/LibreLogo/LibreLogo.py 2015-10-27 20:55:54.000000000 +0000 @@ -93,6 +93,7 @@ self.oldlw = 0 self.oldls = __LineStyle_SOLID__ self.oldlj = __ROUNDED__ + self.oldlcap = __Cap_NONE__ self.continuous = True self.areacolor = __FILLCOLOR__ self.t10y = int((__FILLCOLOR__ >> 24) / (255.0/100)) diff -Nru libreoffice-l10n-4.4.2/odk/examples/java/Spreadsheet/CalcAddins.java libreoffice-l10n-4.4.6~rc3/odk/examples/java/Spreadsheet/CalcAddins.java --- libreoffice-l10n-4.4.2/odk/examples/java/Spreadsheet/CalcAddins.java 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/odk/examples/java/Spreadsheet/CalcAddins.java 2015-10-27 20:55:54.000000000 +0000 @@ -60,7 +60,7 @@ * of the service description. It implements the needed interfaces. * @implements XCalcAddins, XAddIn, XServiceName, XServiceInfo, XTypeProvider */ - static private class _CalcAddins extends WeakBase implements + static public class _CalcAddins extends WeakBase implements XCalcAddins, XAddIn, XServiceName, diff -Nru libreoffice-l10n-4.4.2/offapi/com/sun/star/awt/Key.idl libreoffice-l10n-4.4.6~rc3/offapi/com/sun/star/awt/Key.idl --- libreoffice-l10n-4.4.2/offapi/com/sun/star/awt/Key.idl 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/offapi/com/sun/star/awt/Key.idl 2015-10-27 20:55:54.000000000 +0000 @@ -363,6 +363,7 @@ const short SEMICOLON = 1317; + /** @since LibreOffice 4.3 **/ const short QUOTERIGHT = 1318; diff -Nru libreoffice-l10n-4.4.2/offapi/com/sun/star/datatransfer/XTransferable2.idl libreoffice-l10n-4.4.6~rc3/offapi/com/sun/star/datatransfer/XTransferable2.idl --- libreoffice-l10n-4.4.2/offapi/com/sun/star/datatransfer/XTransferable2.idl 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/offapi/com/sun/star/datatransfer/XTransferable2.idl 2015-10-27 20:55:54.000000000 +0000 @@ -8,7 +8,7 @@ #ifndef __com_sun_star_datatransfer_XTransferable2_idl__ #define __com_sun_star_datatransfer_XTransferable2_idl__ -#include +#include module com { module sun { module star { module datatransfer { diff -Nru libreoffice-l10n-4.4.2/offapi/com/sun/star/drawing/FillProperties.idl libreoffice-l10n-4.4.6~rc3/offapi/com/sun/star/drawing/FillProperties.idl --- libreoffice-l10n-4.4.2/offapi/com/sun/star/drawing/FillProperties.idl 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/offapi/com/sun/star/drawing/FillProperties.idl 2015-10-27 20:55:54.000000000 +0000 @@ -26,7 +26,7 @@ #include #include #include - +#include module com { module sun { module star { module drawing { diff -Nru libreoffice-l10n-4.4.2/offapi/com/sun/star/text/textfield/Type.idl libreoffice-l10n-4.4.6~rc3/offapi/com/sun/star/text/textfield/Type.idl --- libreoffice-l10n-4.4.2/offapi/com/sun/star/text/textfield/Type.idl 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/offapi/com/sun/star/text/textfield/Type.idl 2015-10-27 20:55:54.000000000 +0000 @@ -42,7 +42,7 @@ const long PRESENTATION_HEADER = 11; const long PRESENTATION_FOOTER = 12; const long PRESENTATION_DATE_TIME = 13; - const long PAGE_TITLE = 14; + const long PAGE_NAME = 14; }; }; }; }; }; }; diff -Nru libreoffice-l10n-4.4.2/offapi/type_reference/offapi.idl libreoffice-l10n-4.4.6~rc3/offapi/type_reference/offapi.idl --- libreoffice-l10n-4.4.2/offapi/type_reference/offapi.idl 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/offapi/type_reference/offapi.idl 2015-10-27 20:55:54.000000000 +0000 @@ -526,6 +526,7 @@ const short PROPERTIES = 1303; const short Q = 528; const short QUOTELEFT = 1311; + const short QUOTERIGHT = 1318; const short R = 529; const short REPEAT = 1301; const short RETURN = 1280; @@ -2785,6 +2786,16 @@ MIDDLE_BOTTOM = 7, RIGHT_BOTTOM = 8 }; + }; + module text { + published struct GraphicCrop { + long Top; + long Bottom; + long Left; + long Right; + }; + }; + module drawing { published service FillProperties { [property] ::com::sun::star::drawing::FillStyle FillStyle; [property] ::com::sun::star::util::Color FillColor; @@ -2810,6 +2821,7 @@ [property] ::com::sun::star::drawing::BitmapMode FillBitmapMode; [property, optional] boolean FillBitmapStretch; [property, optional] boolean FillBitmapTile; + [property, optional] ::com::sun::star::text::GraphicCrop GraphicCrop; }; published enum LineCap { BUTT = 0, @@ -3007,6 +3019,7 @@ [property, optional] long CharBottomBorderDistance; [property, optional] ::com::sun::star::table::ShadowFormat CharShadowFormat; [property, optional] ::com::sun::star::util::Color CharHighlight; + [property, optional] sequence< ::com::sun::star::beans::PropertyValue > CharInteropGrabBag; }; }; module chart { @@ -3246,6 +3259,10 @@ [property, optional] long NavigationOrder; [property, optional] string Hyperlink; [property, optional] sequence< ::com::sun::star::beans::PropertyValue > InteropGrabBag; + [property, optional] short RelativeHeight; + [property, optional] short RelativeWidth; + [property, optional] short RelativeHeightRelation; + [property, optional] short RelativeWidthRelation; }; }; module chart { @@ -7417,7 +7434,7 @@ interface ::com::sun::star::frame::XDesktop; interface ::com::sun::star::frame::XComponentLoader; }; - published service Desktop: ::com::sun::star::frame::XDesktop2; + /** @deprecated */ published service Desktop: ::com::sun::star::frame::XDesktop2; /** @deprecated */ published interface XDesktopTask { interface ::com::sun::star::lang::XComponent; /** @deprecated */ void initialize([in] ::com::sun::star::awt::XWindow TaskWindow); @@ -7751,6 +7768,7 @@ interface ::com::sun::star::uno::XInterface; [attribute] sequence< string > List; }; + published singleton theDesktop: ::com::sun::star::frame::XDesktop2; }; module graphic { published service GraphicDescriptor { @@ -12261,6 +12279,7 @@ [property, optional] ::com::sun::star::table::BorderLine2 RightBorder2; [property, optional] ::com::sun::star::table::BorderLine2 DiagonalTLBR2; [property, optional] ::com::sun::star::table::BorderLine2 DiagonalBLTR2; + [property, optional] sequence< ::com::sun::star::beans::PropertyValue > CellInteropGrabBag; }; published enum CellContentType { EMPTY = 0, @@ -13730,7 +13749,7 @@ interface ::com::sun::star::uno::XInterface; void trigger([in] string Event); }; - published service JobExecutor: ::com::sun::star::task::XJobExecutor; + /** @deprecated */ published service JobExecutor: ::com::sun::star::task::XJobExecutor; published exception MasterPasswordRequest: ::com::sun::star::task::PasswordRequest { }; published exception NoMasterException: ::com::sun::star::uno::RuntimeException { @@ -13828,6 +13847,7 @@ interface ::com::sun::star::uno::XInterface; /** @deprecated */ ::com::sun::star::task::XStatusIndicator getStatusIndicator(); }; + published singleton theJobExecutor: ::com::sun::star::task::XJobExecutor; }; module text { published constants AuthorDisplayFormat { @@ -13927,6 +13947,8 @@ [property, optional] string FillGradientName; [property, optional] short ShadowTransparence; [property, optional] sequence< ::com::sun::star::beans::PropertyValue > FrameInteropGrabBag; + [property, optional] short RelativeHeightRelation; + [property, optional] short RelativeWidthRelation; }; published service BaseFrame { service ::com::sun::star::text::BaseFrameProperties; @@ -14104,6 +14126,7 @@ [property, optional] short WidthType; [property, optional] short WritingMode; [property, optional] boolean IsFollowingTextFlow; + [property, optional] ::com::sun::star::drawing::TextVerticalAdjust TextVerticalAdjust; }; published service ChainedTextFrame { service ::com::sun::star::text::TextFrame; @@ -14433,12 +14456,6 @@ interface ::com::sun::star::view::XPrintSettingsSupplier; interface ::com::sun::star::view::XViewSettingsSupplier; }; - published struct GraphicCrop { - long Top; - long Bottom; - long Left; - long Right; - }; published constants HoriOrientation { const short CENTER = 2; const short FULL = 6; @@ -14497,6 +14514,7 @@ service ::com::sun::star::sdb::DataAccessDescriptor; interface ::com::sun::star::task::XJob; interface ::com::sun::star::beans::XPropertySet; + [optional] interface ::com::sun::star::util::XCancellable; [optional] interface ::com::sun::star::text::XMailMergeBroadcaster; [property] string DataSourceName; [property] long CommandType; @@ -14665,6 +14683,7 @@ [property] string BackGraphicFilter; [property] ::com::sun::star::style::GraphicLocation BackGraphicLocation; [property, optional] boolean CollapsingBorders; + [property, optional] sequence< ::com::sun::star::beans::PropertyValue > TableInteropGrabBag; }; published service Paragraph { service ::com::sun::star::text::TextContent; @@ -17206,7 +17225,7 @@ [attribute] string BasePathShareLayer; [attribute] string BasePathUserLayer; }; - published service PathSettings: ::com::sun::star::util::XPathSettings; + /** @deprecated */ published service PathSettings: ::com::sun::star::util::XPathSettings; published interface XStringSubstitution { interface ::com::sun::star::uno::XInterface; string substituteVariables([in] string aText, [in] boolean bSubstRequired) raises (::com::sun::star::container::NoSuchElementException); @@ -17387,6 +17406,7 @@ string createUniqueID(); }; published singleton theOfficeInstallationDirectories: ::com::sun::star::util::XOfficeInstallationDirectories; + published singleton thePathSettings: ::com::sun::star::util::XPathSettings; }; module view { published constants DocumentZoomType { diff -Nru libreoffice-l10n-4.4.2/officecfg/Configuration_officecfg.mk libreoffice-l10n-4.4.6~rc3/officecfg/Configuration_officecfg.mk --- libreoffice-l10n-4.4.2/officecfg/Configuration_officecfg.mk 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/officecfg/Configuration_officecfg.mk 2015-10-27 20:55:54.000000000 +0000 @@ -121,6 +121,7 @@ org/openoffice/TypeDetection/UISort-math.xcu \ org/openoffice/ucb/Configuration-gio.xcu \ org/openoffice/ucb/Configuration-neon.xcu \ + org/openoffice/ucb/Configuration-neon_gnomevfs.xcu \ org/openoffice/ucb/Configuration-win.xcu \ )) diff -Nru libreoffice-l10n-4.4.2/officecfg/registry/data/org/openoffice/Office/Addons.xcu libreoffice-l10n-4.4.6~rc3/officecfg/registry/data/org/openoffice/Office/Addons.xcu --- libreoffice-l10n-4.4.2/officecfg/registry/data/org/openoffice/Office/Addons.xcu 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/officecfg/registry/data/org/openoffice/Office/Addons.xcu 2015-10-27 20:55:54.000000000 +0000 @@ -123,7 +123,7 @@ _self - + vnd.sun.star.script:LibreLogo|LibreLogo.py$commandline?language=Python&location=share @@ -143,7 +143,7 @@ 300 - + com.sun.star.text.TextDocument diff -Nru libreoffice-l10n-4.4.2/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu libreoffice-l10n-4.4.6~rc3/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu --- libreoffice-l10n-4.4.2/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu 2015-10-27 20:55:54.000000000 +0000 @@ -1832,7 +1832,7 @@ - Fill + F~ill diff -Nru libreoffice-l10n-4.4.2/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu libreoffice-l10n-4.4.6~rc3/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu --- libreoffice-l10n-4.4.2/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu 2015-10-27 20:55:54.000000000 +0000 @@ -2432,7 +2432,7 @@ - Ed~it Mode + E~dit Mode 9 diff -Nru libreoffice-l10n-4.4.2/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu libreoffice-l10n-4.4.6~rc3/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu --- libreoffice-l10n-4.4.2/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu 2015-10-27 20:55:54.000000000 +0000 @@ -1083,6 +1083,9 @@ ~Rows... + + 1 + @@ -1096,6 +1099,9 @@ ~Columns... + + 1 + diff -Nru libreoffice-l10n-4.4.2/officecfg/registry/data/org/openoffice/ucb/Configuration.xcu libreoffice-l10n-4.4.6~rc3/officecfg/registry/data/org/openoffice/ucb/Configuration.xcu --- libreoffice-l10n-4.4.2/officecfg/registry/data/org/openoffice/ucb/Configuration.xcu 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/officecfg/registry/data/org/openoffice/ucb/Configuration.xcu 2015-10-27 20:55:54.000000000 +0000 @@ -89,7 +89,8 @@ - + com.sun.star.ucb.WebDAVContentProvider @@ -155,7 +156,8 @@ - + com.sun.star.ucb.WebDAVContentProvider diff -Nru libreoffice-l10n-4.4.2/officecfg/registry/schema/org/openoffice/Office/Common.xcs libreoffice-l10n-4.4.6~rc3/officecfg/registry/schema/org/openoffice/Office/Common.xcs --- libreoffice-l10n-4.4.2/officecfg/registry/schema/org/openoffice/Office/Common.xcs 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/officecfg/registry/schema/org/openoffice/Office/Common.xcs 2015-10-27 20:55:54.000000000 +0000 @@ -6340,7 +6340,7 @@ - false + true diff -Nru libreoffice-l10n-4.4.2/officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs libreoffice-l10n-4.4.6~rc3/officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs --- libreoffice-l10n-4.4.2/officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs 2015-10-27 20:55:54.000000000 +0000 @@ -332,7 +332,7 @@ process. - false + true diff -Nru libreoffice-l10n-4.4.2/oox/inc/drawingml/chart/chartspacemodel.hxx libreoffice-l10n-4.4.6~rc3/oox/inc/drawingml/chart/chartspacemodel.hxx --- libreoffice-l10n-4.4.2/oox/inc/drawingml/chart/chartspacemodel.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/inc/drawingml/chart/chartspacemodel.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -58,7 +58,7 @@ bool mbShowLabelsOverMax;/// True = show labels over chart maximum. bool mbPivotChart; /// True = pivot chart. - explicit ChartSpaceModel(); + explicit ChartSpaceModel(bool bMSO2007Doc); ~ChartSpaceModel(); }; diff -Nru libreoffice-l10n-4.4.2/oox/inc/drawingml/textbodyproperties.hxx libreoffice-l10n-4.4.6~rc3/oox/inc/drawingml/textbodyproperties.hxx --- libreoffice-l10n-4.4.2/oox/inc/drawingml/textbodyproperties.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/inc/drawingml/textbodyproperties.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -45,7 +45,7 @@ explicit TextBodyProperties(); - void pushRotationAdjustments( sal_Int32 nRotation ); + void pushRotationAdjustments(); void pushVertSimulation(); }; diff -Nru libreoffice-l10n-4.4.2/oox/source/core/xmlfilterbase.cxx libreoffice-l10n-4.4.6~rc3/oox/source/core/xmlfilterbase.cxx --- libreoffice-l10n-4.4.2/oox/source/core/xmlfilterbase.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/core/xmlfilterbase.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -206,7 +206,8 @@ FilterBase( rxContext ), mxImpl( new XmlFilterBaseImpl( rxContext ) ), mnRelId( 1 ), - mnMaxDocId( 0 ) + mnMaxDocId( 0 ), + mbMSO2007(false) { } @@ -222,6 +223,35 @@ mxImpl->maFastParser.setDocumentHandler( 0 ); } +namespace { + +bool is2007MSODocument(Reference xDocProps) +{ + if (!xDocProps->getGenerator().startsWithIgnoreAsciiCase("Microsoft")) + return false; + + uno::Reference xUserDefProps(xDocProps->getUserDefinedProperties(), uno::UNO_QUERY); + if (!xUserDefProps.is()) + return false; + + comphelper::SequenceAsHashMap aUserDefinedProperties(xUserDefProps->getPropertyValues()); + comphelper::SequenceAsHashMap::iterator it = aUserDefinedProperties.find("AppVersion"); + if (it == aUserDefinedProperties.end()) + return false; + + OUString aValue; + if (!(it->second >>= aValue)) + return false; + + if (!aValue.startsWithIgnoreAsciiCase("12.")) + return false; + + SAL_WARN("oox", "a MSO 2007 document"); + return true; +} + +} + void XmlFilterBase::importDocumentProperties() { Reference< XMultiServiceFactory > xFactory( getComponentContext()->getServiceManager(), UNO_QUERY ); @@ -238,7 +268,9 @@ xContext); Reference< XOOXMLDocumentPropertiesImporter > xImporter( xTemp, UNO_QUERY ); Reference< XDocumentPropertiesSupplier > xPropSupplier( xModel, UNO_QUERY); - xImporter->importProperties( xDocumentStorage, xPropSupplier->getDocumentProperties() ); + Reference< XDocumentProperties > xDocProps = xPropSupplier->getDocumentProperties(); + xImporter->importProperties( xDocumentStorage, xDocProps ); + mbMSO2007 = is2007MSODocument(xDocProps); } FastParser* XmlFilterBase::createParser() const @@ -649,7 +681,8 @@ writeElement( pAppProps, XML_Slides, "slides" ); writeElement( pAppProps, XML_Notes, "notes" ); #endif /* def OOXTODO */ - writeElement( pAppProps, XML_TotalTime, xProperties->getEditingDuration() ); + // EditingDuration is in seconds, TotalTime is in minutes. + writeElement( pAppProps, XML_TotalTime, xProperties->getEditingDuration() / 60 ); #ifdef OOXTODO writeElement( pAppProps, XML_HiddenSlides, "hidden slides" ); writeElement( pAppProps, XML_MMClips, "mm clips" ); @@ -882,6 +915,11 @@ return StorageRef( new ZipStorage( getComponentContext(), rxOutStream ) ); } +bool XmlFilterBase::isMSO2007Document() const +{ + return mbMSO2007; +} + } // namespace core } // namespace oox diff -Nru libreoffice-l10n-4.4.2/oox/source/docprop/ooxmldocpropimport.cxx libreoffice-l10n-4.4.6~rc3/oox/source/docprop/ooxmldocpropimport.cxx --- libreoffice-l10n-4.4.2/oox/source/docprop/ooxmldocpropimport.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/docprop/ooxmldocpropimport.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -80,8 +80,13 @@ const StringPair& rEntry = rEntries[ nEntryIndex ]; if ( rEntry.First == "Target" ) { + // The stream path is always a relative one, ignore the leading "/" if it's there. + OUString aStreamPath = rEntry.Second; + if (aStreamPath.startsWith("/")) + aStreamPath = aStreamPath.copy(1); + Reference< XExtendedStorageStream > xExtStream( - xHierarchy->openStreamElementByHierarchicalName( rEntry.Second, ElementModes::READ ), UNO_QUERY_THROW ); + xHierarchy->openStreamElementByHierarchicalName( aStreamPath, ElementModes::READ ), UNO_QUERY_THROW ); Reference< XInputStream > xInStream = xExtStream->getInputStream(); if( xInStream.is() ) { diff -Nru libreoffice-l10n-4.4.2/oox/source/drawingml/chart/chartspacefragment.cxx libreoffice-l10n-4.4.6~rc3/oox/source/drawingml/chart/chartspacefragment.cxx --- libreoffice-l10n-4.4.2/oox/source/drawingml/chart/chartspacefragment.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/drawingml/chart/chartspacefragment.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -81,8 +81,13 @@ switch( nElement ) { case C_TOKEN( autoTitleDeleted ): - mrModel.mbAutoTitleDel = rAttribs.getBool( XML_val, true ); + { + bool bMSO2007Document = getFilter().isMSO2007Document(); + + // default value is false for MSO 2007 and true in OOXML + mrModel.mbAutoTitleDel = rAttribs.getBool( XML_val, !bMSO2007Document ); return 0; + } case C_TOKEN( backWall ): return new WallFloorContext( *this, mrModel.mxBackWall.create() ); case C_TOKEN( dispBlanksAs ): diff -Nru libreoffice-l10n-4.4.2/oox/source/drawingml/chart/chartspacemodel.cxx libreoffice-l10n-4.4.6~rc3/oox/source/drawingml/chart/chartspacemodel.cxx --- libreoffice-l10n-4.4.2/oox/source/drawingml/chart/chartspacemodel.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/drawingml/chart/chartspacemodel.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -24,10 +24,10 @@ namespace drawingml { namespace chart { -ChartSpaceModel::ChartSpaceModel() : +ChartSpaceModel::ChartSpaceModel(bool bMSO2007Doc) : mnDispBlanksAs( XML_gap ), // not zero as specified mnStyle( 2 ), - mbAutoTitleDel( true ), + mbAutoTitleDel( !bMSO2007Doc ), // difference between OOXML spec and MSO 2007 mbPlotVisOnly( false ), mbShowLabelsOverMax( false ), mbPivotChart( false ) diff -Nru libreoffice-l10n-4.4.2/oox/source/drawingml/shape.cxx libreoffice-l10n-4.4.6~rc3/oox/source/drawingml/shape.cxx --- libreoffice-l10n-4.4.2/oox/source/drawingml/shape.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/drawingml/shape.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -405,6 +405,23 @@ bool bIsEmbMedia = false; SAL_INFO("oox.drawingml", OSL_THIS_FUNC << " id: " << msId); + // tdf#90403 PowerPoint ignores a:ext cx and cy values of p:xfrm, and uses real table width and height + if ( mpTablePropertiesPtr.get() && rServiceName == "com.sun.star.drawing.TableShape" ) + { + maSize.Width = 0; + for( std::vector< sal_Int32 >::const_iterator aTableColIter(mpTablePropertiesPtr->getTableGrid().begin()); + aTableColIter != mpTablePropertiesPtr->getTableGrid().end(); aTableColIter++ ) + { + maSize.Width += *aTableColIter; + } + maSize.Height = 0; + for( std::vector< ::oox::drawingml::table::TableRow >::const_iterator aTableRowIter(mpTablePropertiesPtr->getTableRows().begin()); + aTableRowIter != mpTablePropertiesPtr->getTableRows().end(); aTableRowIter++ ) + { + maSize.Height += (*aTableRowIter).getHeight(); + } + } + awt::Rectangle aShapeRectHmm( maPosition.X / EMU_PER_HMM, maPosition.Y / EMU_PER_HMM, maSize.Width / EMU_PER_HMM, maSize.Height / EMU_PER_HMM ); OUString aServiceName; @@ -649,7 +666,7 @@ // add properties from textbody to shape properties if( mpTextBody.get() ) { - mpTextBody->getTextProperties().pushRotationAdjustments( mnRotation ); + mpTextBody->getTextProperties().pushRotationAdjustments(); aShapeProps.assignUsed( mpTextBody->getTextProperties().maPropertyMap ); // Push char properties as well - specifically useful when this is a placeholder if( mpMasterTextListStyle && mpMasterTextListStyle->getListStyle()[0]->getTextCharacterProperties().moHeight.has() ) @@ -1011,7 +1028,10 @@ if( getTextBody() ) { sal_Int32 nTextRotateAngle = static_cast< sal_Int32 >( getTextBody()->getTextProperties().moRotation.get( 0 ) ); - mpCustomShapePropertiesPtr->setTextRotateAngle( nTextRotateAngle / 60000 ); + /* OOX measures text rotation clockwise in 1/60000th degrees, + relative to the containing shape. setTextRotateAngle wants + degrees anticlockwise. */ + mpCustomShapePropertiesPtr->setTextRotateAngle( -1 * nTextRotateAngle / 60000 ); } SAL_INFO("oox.cscode", "==cscode== shape name: '" << msName << "'"); @@ -1265,7 +1285,8 @@ Reference< chart2::XChartDocument > xChartDoc( xDocModel, UNO_QUERY_THROW ); // load the chart data from the XML fragment - chart::ChartSpaceModel aModel; + bool bMSO2007Doc = rFilter.isMSO2007Document(); + chart::ChartSpaceModel aModel(bMSO2007Doc); chart::ChartSpaceFragment *pChartSpaceFragment = new chart::ChartSpaceFragment( rFilter, mxChartShapeInfo->maFragmentPath, aModel ); const OUString aThemeOverrideFragmentPath( pChartSpaceFragment-> diff -Nru libreoffice-l10n-4.4.2/oox/source/drawingml/table/tablecell.cxx libreoffice-l10n-4.4.6~rc3/oox/source/drawingml/table/tablecell.cxx --- libreoffice-l10n-4.4.2/oox/source/drawingml/table/tablecell.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/drawingml/table/tablecell.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -116,6 +116,17 @@ ::oox::drawingml::FillPropertiesPtr& rPartFillPropertiesPtr( rTableStylePart.getFillProperties() ); if ( rPartFillPropertiesPtr.get() ) rFillProperties.assignUsed( *rPartFillPropertiesPtr ); + else + { + ::oox::drawingml::ShapeStyleRef& rFillStyleRef = rTableStylePart.getStyleRefs()[ XML_fillRef ]; + const Theme* pTheme = rFilterBase.getCurrentTheme(); + if (pTheme && rFillStyleRef.mnThemedIdx != 0 ) + { + rFillProperties.assignUsed( *pTheme->getFillStyle( rFillStyleRef.mnThemedIdx ) ); + sal_Int32 nPhClr = rFillStyleRef.maPhClr.getColor( rFilterBase.getGraphicHelper() ); + rFillProperties.maFillColor.setSrgbClr( nPhClr ); + } + } applyBorder( rFilterBase, rTableStylePart, XML_left, rLeftBorder ); applyBorder( rFilterBase, rTableStylePart, XML_right, rRightBorder ); diff -Nru libreoffice-l10n-4.4.2/oox/source/drawingml/textbodypropertiescontext.cxx libreoffice-l10n-4.4.6~rc3/oox/source/drawingml/textbodypropertiescontext.cxx --- libreoffice-l10n-4.4.2/oox/source/drawingml/textbodypropertiescontext.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/drawingml/textbodypropertiescontext.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -84,13 +84,16 @@ // ST_TextVerticalType if( rAttribs.hasAttribute( XML_vert ) ) { mrTextBodyProp.moVert = rAttribs.getToken( XML_vert ); - bool bRtl = rAttribs.getBool( XML_rtl, false ); sal_Int32 tVert = mrTextBodyProp.moVert.get( XML_horz ); - if( tVert == XML_vert || tVert == XML_eaVert || tVert == XML_vert270 || tVert == XML_mongolianVert ) - mrTextBodyProp.moRotation = -5400000*(tVert==XML_vert270?3:1); - else + if (tVert == XML_vert || tVert == XML_eaVert || tVert == XML_mongolianVert) + mrTextBodyProp.moRotation = 5400000; + else if (tVert == XML_vert270) + mrTextBodyProp.moRotation = 5400000 * 3; + else { + bool bRtl = rAttribs.getBool( XML_rtl, false ); mrTextBodyProp.maPropertyMap.setProperty( PROP_TextWritingMode, ( bRtl ? WritingMode_RL_TB : WritingMode_LR_TB )); + } } // ST_TextAnchoringType diff -Nru libreoffice-l10n-4.4.2/oox/source/drawingml/textbodyproperties.cxx libreoffice-l10n-4.4.6~rc3/oox/source/drawingml/textbodyproperties.cxx --- libreoffice-l10n-4.4.2/oox/source/drawingml/textbodyproperties.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/drawingml/textbodyproperties.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -58,17 +58,17 @@ } /* Push adjusted values, taking into consideration Shape Rotation */ -void TextBodyProperties::pushRotationAdjustments( sal_Int32 nRotation ) +void TextBodyProperties::pushRotationAdjustments() { sal_Int32 nOff = 0; sal_Int32 aProps[] = { PROP_TextLeftDistance, PROP_TextUpperDistance, PROP_TextRightDistance, PROP_TextLowerDistance }; sal_Int32 n = ( sal_Int32 )( sizeof( aProps ) / sizeof( sal_Int32 ) ); - switch( nRotation ) // TODO: What happens for part rotations ? + switch( moRotation.get(0) ) { - case (90*1*60000): nOff = 1; break; + case (90*1*60000): nOff = 3; break; case (90*2*60000): nOff = 2; break; - case (90*3*60000): nOff = 3; break; + case (90*3*60000): nOff = 1; break; default: break; } diff -Nru libreoffice-l10n-4.4.2/oox/source/drawingml/transform2dcontext.cxx libreoffice-l10n-4.4.6~rc3/oox/source/drawingml/transform2dcontext.cxx --- libreoffice-l10n-4.4.2/oox/source/drawingml/transform2dcontext.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/drawingml/transform2dcontext.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -48,7 +48,7 @@ else { if( rAttribs.hasAttribute( XML_rot ) ) - mrShape.getTextBody()->getTextProperties().moRotation = -rAttribs.getInteger( XML_rot ).get(); + mrShape.getTextBody()->getTextProperties().moRotation = rAttribs.getInteger( XML_rot ).get(); } } diff -Nru libreoffice-l10n-4.4.2/oox/source/export/chartexport.cxx libreoffice-l10n-4.4.6~rc3/oox/source/export/chartexport.cxx --- libreoffice-l10n-4.4.2/oox/source/export/chartexport.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/export/chartexport.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1943,7 +1943,7 @@ pFS->startElement( FSNS( XML_c, XML_cat ), FSEND ); - OUString aCellRange = xValueSeq->getSourceRangeRepresentation(); + OUString aCellRange = xValueSeq.is() ? xValueSeq->getSourceRangeRepresentation() : OUString(); aCellRange = parseFormula( aCellRange ); // TODO: need to handle XML_multiLvlStrRef according to aCellRange pFS->startElement( FSNS( XML_c, XML_strRef ), @@ -1986,7 +1986,7 @@ pFS->startElement( FSNS( XML_c, nValueType ), FSEND ); - OUString aCellRange = xValueSeq->getSourceRangeRepresentation(); + OUString aCellRange = xValueSeq.is() ? xValueSeq->getSourceRangeRepresentation() : OUString(); aCellRange = parseFormula( aCellRange ); // TODO: need to handle XML_multiLvlStrRef according to aCellRange pFS->startElement( FSNS( XML_c, XML_numRef ), diff -Nru libreoffice-l10n-4.4.2/oox/source/export/drawingml.cxx libreoffice-l10n-4.4.6~rc3/oox/source/export/drawingml.cxx --- libreoffice-l10n-4.4.2/oox/source/export/drawingml.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/export/drawingml.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -762,7 +762,7 @@ mpFS->endElementNS( XML_a, XML_ln ); } -OUString DrawingML::WriteImage( const OUString& rURL, bool bRelPathToMedia ) +bool lcl_URLToGraphic(const OUString& rURL, Graphic& rGraphic) { OString aURLBS(OUStringToOString(rURL, RTL_TEXTENCODING_UTF8)); @@ -771,9 +771,18 @@ if ( index != -1 ) { - DBG(fprintf (stderr, "begin: %ld %s\n", long( sizeof( aURLBegin ) ), USS( rURL ) + RTL_CONSTASCII_LENGTH( aURLBegin ) )); - Graphic aGraphic = GraphicObject( aURLBS.copy(RTL_CONSTASCII_LENGTH(aURLBegin)) ).GetTransformedGraphic (); + rGraphic = GraphicObject(aURLBS.copy(RTL_CONSTASCII_LENGTH(aURLBegin))).GetTransformedGraphic(); + return true; + } + return false; +} + +OUString DrawingML::WriteImage( const OUString& rURL, bool bRelPathToMedia ) +{ + Graphic aGraphic; + if (lcl_URLToGraphic(rURL, aGraphic)) + { return WriteImage( aGraphic , bRelPathToMedia ); } else @@ -842,7 +851,7 @@ pExtension = ".png"; break; case GFX_LINK_TYPE_NATIVE_TIF: - sMediaType = "image/tif"; + sMediaType = "image/tiff"; pExtension = ".tif"; break; case GFX_LINK_TYPE_NATIVE_WMF: @@ -923,7 +932,23 @@ OUString DrawingML::WriteBlip( Reference< XPropertySet > rXPropSet, const OUString& rURL, bool bRelPathToMedia, const Graphic *pGraphic ) { - OUString sRelId = pGraphic ? WriteImage( *pGraphic, bRelPathToMedia ) : WriteImage( rURL, bRelPathToMedia ); + OUString sRelId; + sal_uInt32 nChecksum = 0; + if (!rURL.isEmpty() && mpTextExport) + { + Graphic aGraphic; + if (lcl_URLToGraphic(rURL, aGraphic)) + { + nChecksum = aGraphic.GetChecksum(); + sRelId = mpTextExport->FindRelId(nChecksum); + } + } + if (sRelId.isEmpty()) + { + sRelId = pGraphic ? WriteImage( *pGraphic, bRelPathToMedia ) : WriteImage( rURL, bRelPathToMedia ); + if (!rURL.isEmpty() && mpTextExport) + mpTextExport->CacheRelId(nChecksum, sRelId); + } sal_Int16 nBright = 0; sal_Int32 nContrast = 0; @@ -1384,7 +1409,7 @@ Reference< XTextField > rXTextField; GET( rXTextField, TextField ); if( rXTextField.is() ) - rRun.set( rXTextField, UNO_QUERY ); + rXPropSet.set( rXTextField, UNO_QUERY ); } // field properties starts here @@ -1407,11 +1432,10 @@ mpFS->endElementNS( XML_a, XML_rPr ); } -const char* DrawingML::GetFieldType( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > rRun, bool& bIsField ) +OUString DrawingML::GetFieldValue( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > rRun, bool& bIsURLField ) { - const char* sType = NULL; Reference< XPropertySet > rXPropSet( rRun, UNO_QUERY ); - OUString aFieldType; + OUString aFieldType, aFieldValue; if( GETA( TextPortionType ) ) { @@ -1425,7 +1449,6 @@ GET( rXTextField, TextField ); if( rXTextField.is() ) { - bIsField = true; rXPropSet.set( rXTextField, UNO_QUERY ); if( rXPropSet.is() ) { @@ -1433,17 +1456,19 @@ DBG(fprintf (stderr, "field kind: %s\n", USS(aFieldKind) )); if( aFieldKind == "Page" ) { - return "slidenum"; + aFieldValue = OUString("slidenum"); + } + else if( aFieldKind == "URL" ) + { + bIsURLField = true; + GET( aFieldValue, Representation) + } - // else if( aFieldKind == "URL" ) { - // do not return here - // and make URL field text run with hyperlink property later - // } } } } - return sType; + return aFieldValue; } void DrawingML::GetUUID( OStringBuffer& rBuffer ) @@ -1488,10 +1513,15 @@ void DrawingML::WriteRun( Reference< XTextRange > rRun ) { - const char* sFieldType; - bool bIsField = false; + bool bIsURLField = false; + OUString sFieldValue = GetFieldValue( rRun, bIsURLField ); + bool bWriteField = !( sFieldValue.isEmpty() || bIsURLField ); + OUString sText = rRun->getString(); + if ( bIsURLField ) + sText = sFieldValue; + if( sText.isEmpty()) { Reference< XPropertySet > xPropSet( rRun, UNO_QUERY ); @@ -1509,15 +1539,14 @@ } } - sFieldType = GetFieldType( rRun, bIsField ); - if( ( sFieldType != NULL ) ) + if( ( bWriteField ) ) { OStringBuffer sUUID(39); GetUUID( sUUID ); mpFS->startElementNS( XML_a, XML_fld, XML_id, sUUID.getStr(), - XML_type, sFieldType, + XML_type, OUStringToOString( sFieldValue, RTL_TEXTENCODING_UTF8 ).getStr(), FSEND ); } else @@ -1526,13 +1555,13 @@ } Reference< XPropertySet > xPropSet( rRun, uno::UNO_QUERY ); - WriteRunProperties( xPropSet, bIsField ); + WriteRunProperties( xPropSet, bIsURLField ); mpFS->startElementNS( XML_a, XML_t, FSEND ); mpFS->writeEscaped( sText ); mpFS->endElementNS( XML_a, XML_t ); - if( sFieldType ) + if( bWriteField ) mpFS->endElementNS( XML_a, XML_fld ); else mpFS->endElementNS( XML_a, XML_r ); diff -Nru libreoffice-l10n-4.4.2/oox/source/export/vmlexport.cxx libreoffice-l10n-4.4.6~rc3/oox/source/export/vmlexport.cxx --- libreoffice-l10n-4.4.2/oox/source/export/vmlexport.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/export/vmlexport.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -605,7 +605,14 @@ aStream.Seek(0); Graphic aGraphic; GraphicConverter::Import(aStream, aGraphic); - OUString aImageId = m_pTextExport->GetDrawingML().WriteImage( aGraphic ); + + sal_uInt32 nChecksum = aGraphic.GetChecksum(); + OUString aImageId = m_pTextExport->FindRelId(nChecksum); + if (aImageId.isEmpty()) + { + aImageId = m_pTextExport->GetDrawingML().WriteImage( aGraphic ); + m_pTextExport->CacheRelId(nChecksum, aImageId); + } pAttrList->add(FSNS(XML_r, XML_id), OUStringToOString(aImageId, RTL_TEXTENCODING_UTF8)); imageData = true; } diff -Nru libreoffice-l10n-4.4.2/oox/source/ppt/slidefragmenthandler.cxx libreoffice-l10n-4.4.6~rc3/oox/source/ppt/slidefragmenthandler.cxx --- libreoffice-l10n-4.4.2/oox/source/ppt/slidefragmenthandler.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/ppt/slidefragmenthandler.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -194,7 +194,7 @@ case PPT_TOKEN( cmLst ): break; case PPT_TOKEN( cm ): - if(!mpSlidePersistPtr->getCommentsList().cmLst.empty()) + if (!mpSlidePersistPtr->getCommentsList().cmLst.empty() && !getCharVector().empty()) { // set comment text for earlier comment mpSlidePersistPtr->getCommentsList().cmLst.back().setText( getCharVector().back() ); diff -Nru libreoffice-l10n-4.4.2/oox/source/shape/WpsContext.cxx libreoffice-l10n-4.4.6~rc3/oox/source/shape/WpsContext.cxx --- libreoffice-l10n-4.4.2/oox/source/shape/WpsContext.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/shape/WpsContext.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -13,6 +13,9 @@ #include #include #include +#include +#include +#include #include @@ -76,9 +79,33 @@ } else { - comphelper::SequenceAsHashMap aCustomShapeGeometry(xPropertySet->getPropertyValue("CustomShapeGeometry")); - aCustomShapeGeometry["TextPreRotateAngle"] = uno::makeAny(sal_Int32(-270)); - xPropertySet->setPropertyValue("CustomShapeGeometry", uno::makeAny(aCustomShapeGeometry.getAsConstPropertyValueList())); + // Get the existing rotation of the shape. + drawing::HomogenMatrix3 aMatrix; + xPropertySet->getPropertyValue("Transformation") >>= aMatrix; + basegfx::B2DHomMatrix aTransformation; + aTransformation.set(0, 0, aMatrix.Line1.Column1); + aTransformation.set(0, 1, aMatrix.Line1.Column2); + aTransformation.set(0, 2, aMatrix.Line1.Column3); + aTransformation.set(1, 0, aMatrix.Line1.Column1); + aTransformation.set(1, 1, aMatrix.Line2.Column2); + aTransformation.set(1, 2, aMatrix.Line3.Column3); + aTransformation.set(2, 0, aMatrix.Line1.Column1); + aTransformation.set(2, 1, aMatrix.Line2.Column2); + aTransformation.set(2, 2, aMatrix.Line3.Column3); + basegfx::B2DTuple aScale; + basegfx::B2DTuple aTranslate; + double fRotate = 0; + double fShearX = 0; + aTransformation.decompose(aScale, aTranslate, fRotate, fShearX); + + // If the text is not rotated the way the shape wants it already, set the angle. + const sal_Int32 nRotation = -270; + if (basegfx::rad2deg(fRotate) != static_cast(NormAngle360(nRotation * 100)) / 100) + { + comphelper::SequenceAsHashMap aCustomShapeGeometry(xPropertySet->getPropertyValue("CustomShapeGeometry")); + aCustomShapeGeometry["TextPreRotateAngle"] = uno::makeAny(nRotation); + xPropertySet->setPropertyValue("CustomShapeGeometry", uno::makeAny(aCustomShapeGeometry.getAsConstPropertyValueList())); + } } } diff -Nru libreoffice-l10n-4.4.2/oox/source/vml/vmlshapecontext.cxx libreoffice-l10n-4.4.6~rc3/oox/source/vml/vmlshapecontext.cxx --- libreoffice-l10n-4.4.2/oox/source/vml/vmlshapecontext.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/vml/vmlshapecontext.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -269,6 +269,7 @@ // shape identifier and shape name bool bHasOspid = rAttribs.hasAttribute( O_TOKEN( spid ) ); mrTypeModel.maShapeId = rAttribs.getXString( bHasOspid ? O_TOKEN( spid ) : XML_id, OUString() ); + mrTypeModel.maLegacyId = rAttribs.getString( XML_id, OUString() ); OSL_ENSURE( !mrTypeModel.maShapeId.isEmpty(), "ShapeTypeContext::ShapeTypeContext - missing shape identifier" ); // if the o:spid attribute exists, the id attribute contains the user-defined shape name if( bHasOspid ) diff -Nru libreoffice-l10n-4.4.2/oox/source/vml/vmlshape.cxx libreoffice-l10n-4.4.6~rc3/oox/source/vml/vmlshape.cxx --- libreoffice-l10n-4.4.2/oox/source/vml/vmlshape.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/vml/vmlshape.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -312,21 +312,64 @@ if( aShapeProp.hasProperty( PROP_Name ) ) aShapeProp.setProperty( PROP_Name, getShapeName() ); uno::Reference< lang::XServiceInfo > xSInfo( xShape, uno::UNO_QUERY_THROW ); + + OUString sLinkChainName = getTypeModel().maLegacyId; + sal_Int32 id = 0; + sal_Int32 idPos = sLinkChainName.indexOf("_x"); + sal_Int32 seq = 0; + sal_Int32 seqPos = sLinkChainName.indexOf("_s",idPos); + if( idPos >= 0 && idPos < seqPos ) + { + id = sLinkChainName.copy(idPos+2,seqPos-idPos+2).toInt32(); + seq = sLinkChainName.copy(seqPos+2).toInt32(); + } + + OUString s_mso_next_textbox; + if( getTextBox() ) + s_mso_next_textbox = getTextBox()->msNextTextbox; + if( s_mso_next_textbox.startsWith("#") ) + s_mso_next_textbox = s_mso_next_textbox.copy(1); + if (xSInfo->supportsService("com.sun.star.text.TextFrame")) { uno::Sequence aGrabBag; uno::Reference propertySet (xShape, uno::UNO_QUERY); propertySet->getPropertyValue("FrameInteropGrabBag") >>= aGrabBag; - sal_Int32 length = aGrabBag.getLength(); + sal_Int32 length; + length = aGrabBag.getLength(); aGrabBag.realloc( length+1 ); aGrabBag[length].Name = "VML-Z-ORDER"; aGrabBag[length].Value = uno::makeAny( maTypeModel.maZIndex.toInt32() ); + + if( !s_mso_next_textbox.isEmpty() ) + { + length = aGrabBag.getLength(); + aGrabBag.realloc( length+1 ); + aGrabBag[length].Name = "mso-next-textbox"; + aGrabBag[length].Value = uno::makeAny( s_mso_next_textbox ); + } + + if( !sLinkChainName.isEmpty() ) + { + length = aGrabBag.getLength(); + aGrabBag.realloc( length+4 ); + aGrabBag[length].Name = "TxbxHasLink"; + aGrabBag[length].Value = uno::makeAny( true ); + aGrabBag[length+1].Name = "Txbx-Id"; + aGrabBag[length+1].Value = uno::makeAny( id ); + aGrabBag[length+2].Name = "Txbx-Seq"; + aGrabBag[length+2].Value = uno::makeAny( seq ); + aGrabBag[length+3].Name = "LinkChainName"; + aGrabBag[length+3].Value = uno::makeAny( sLinkChainName ); + } + if(!(maTypeModel.maRotation).isEmpty()) { - aGrabBag.realloc( length+2 ); - aGrabBag[length+1].Name = "mso-rotation-angle"; - aGrabBag[length+1].Value = uno::makeAny(sal_Int32(NormAngle360((maTypeModel.maRotation.toInt32()) * -100))); + length = aGrabBag.getLength(); + aGrabBag.realloc( length+1 ); + aGrabBag[length].Name = "mso-rotation-angle"; + aGrabBag[length].Value = uno::makeAny(sal_Int32(NormAngle360((maTypeModel.maRotation.toInt32()) * -100))); } propertySet->setPropertyValue( "FrameInteropGrabBag", uno::makeAny(aGrabBag) ); } @@ -337,10 +380,34 @@ uno::Sequence aGrabBag; uno::Reference propertySet (xShape, uno::UNO_QUERY); propertySet->getPropertyValue("InteropGrabBag") >>= aGrabBag; - sal_Int32 length = aGrabBag.getLength(); + sal_Int32 length; + + length = aGrabBag.getLength(); aGrabBag.realloc( length+1 ); aGrabBag[length].Name = "VML-Z-ORDER"; aGrabBag[length].Value = uno::makeAny( maTypeModel.maZIndex.toInt32() ); + + if( !s_mso_next_textbox.isEmpty() ) + { + length = aGrabBag.getLength(); + aGrabBag.realloc( length+1 ); + aGrabBag[length].Name = "mso-next-textbox"; + aGrabBag[length].Value = uno::makeAny( s_mso_next_textbox ); + } + + if( !sLinkChainName.isEmpty() ) + { + length = aGrabBag.getLength(); + aGrabBag.realloc( length+4 ); + aGrabBag[length].Name = "TxbxHasLink"; + aGrabBag[length].Value = uno::makeAny( true ); + aGrabBag[length+1].Name = "Txbx-Id"; + aGrabBag[length+1].Value = uno::makeAny( id ); + aGrabBag[length+2].Name = "Txbx-Seq"; + aGrabBag[length+2].Value = uno::makeAny( seq ); + aGrabBag[length+3].Name = "LinkChainName"; + aGrabBag[length+3].Value = uno::makeAny( sLinkChainName ); + } propertySet->setPropertyValue( "InteropGrabBag", uno::makeAny(aGrabBag) ); } } diff -Nru libreoffice-l10n-4.4.2/oox/source/vml/vmltextboxcontext.cxx libreoffice-l10n-4.4.6~rc3/oox/source/vml/vmltextboxcontext.cxx --- libreoffice-l10n-4.4.2/oox/source/vml/vmltextboxcontext.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/oox/source/vml/vmltextboxcontext.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -212,6 +212,8 @@ rTextBox.mrTypeModel.mbAutoHeight = true; else if (aName == "mso-layout-flow-alt") rTextBox.mrTypeModel.maLayoutFlowAlt = aValue; + else if (aName == "mso-next-textbox") + rTextBox.msNextTextbox = aValue; else SAL_WARN("oox", "unhandled style property: " << aName); } diff -Nru libreoffice-l10n-4.4.2/package/inc/ZipOutputEntry.hxx libreoffice-l10n-4.4.6~rc3/package/inc/ZipOutputEntry.hxx --- libreoffice-l10n-4.4.2/package/inc/ZipOutputEntry.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/package/inc/ZipOutputEntry.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -42,6 +42,7 @@ ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XCipherContext > m_xCipherContext; ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XDigestContext > m_xDigestContext; + ::css::uno::Any m_aParallelDeflateException; CRC32 m_aCRC; ZipEntry *m_pCurrentEntry; @@ -62,6 +63,9 @@ ZipPackageStream* getZipPackageStream() { return m_pCurrentStream; } bool isEncrypt() { return m_bEncryptCurrentEntry; } + void setParallelDeflateException(const ::css::uno::Any &rAny) { m_aParallelDeflateException = rAny; } + ::css::uno::Any getParallelDeflateException() const { return m_aParallelDeflateException; } + void closeEntry(); void write(const css::uno::Sequence< sal_Int8 >& rBuffer); diff -Nru libreoffice-l10n-4.4.2/package/source/zipapi/ZipOutputStream.cxx libreoffice-l10n-4.4.6~rc3/package/source/zipapi/ZipOutputStream.cxx --- libreoffice-l10n-4.4.2/package/source/zipapi/ZipOutputStream.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/package/source/zipapi/ZipOutputStream.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -101,6 +102,11 @@ m_rSharedThreadPool.waitUntilEmpty(); for (size_t i = 0; i < m_aEntries.size(); i++) { + //Any exceptions thrown in the threads were caught and stored for now + ::css::uno::Any aCaughtException(m_aEntries[i]->getParallelDeflateException()); + if (aCaughtException.hasValue()) + ::cppu::throwException(aCaughtException); + writeLOC(m_aEntries[i]->getZipEntry(), m_aEntries[i]->isEncrypt()); sal_Int32 nRead; diff -Nru libreoffice-l10n-4.4.2/package/source/zippackage/ZipPackageStream.cxx libreoffice-l10n-4.4.6~rc3/package/source/zippackage/ZipPackageStream.cxx --- libreoffice-l10n-4.4.2/package/source/zippackage/ZipPackageStream.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/package/source/zippackage/ZipPackageStream.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -46,6 +46,7 @@ #include #include #include +#include #include #include @@ -471,8 +472,15 @@ private: virtual void doWork() SAL_OVERRIDE { - deflateZipEntry(mpEntry, mxInStream); - mxInStream.clear(); + try + { + deflateZipEntry(mpEntry, mxInStream); + mxInStream.clear(); + } + catch (const uno::Exception&) + { + mpEntry->setParallelDeflateException(::cppu::getCaughtException()); + } } }; diff -Nru libreoffice-l10n-4.4.2/postprocess/CustomTarget_registry.mk libreoffice-l10n-4.4.6~rc3/postprocess/CustomTarget_registry.mk --- libreoffice-l10n-4.4.2/postprocess/CustomTarget_registry.mk 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/postprocess/CustomTarget_registry.mk 2015-10-27 20:55:54.000000000 +0000 @@ -328,6 +328,9 @@ endif ifneq ($(WITH_WEBDAV),) postprocess_FILES_main += $(postprocess_MOD)/org/openoffice/ucb/Configuration-neon.xcu +ifeq ($(ENABLE_GNOMEVFS),TRUE) +postprocess_FILES_main += $(postprocess_MOD)/org/openoffice/ucb/Configuration-neon_gnomevfs.xcu +endif endif ifeq ($(ENABLE_EVOAB2),TRUE) postprocess_FILES_main += $(call gb_XcuModuleTarget_get_target,connectivity/registry/evoab2)/org/openoffice/Office/DataAccess/Drivers-evoab2.xcu diff -Nru libreoffice-l10n-4.4.2/readlicense_oo/license/CREDITS.fodt libreoffice-l10n-4.4.6~rc3/readlicense_oo/license/CREDITS.fodt --- libreoffice-l10n-4.4.2/readlicense_oo/license/CREDITS.fodt 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/readlicense_oo/license/CREDITS.fodt 2015-10-27 20:55:54.000000000 +0000 @@ -1,24 +1,24 @@ - Credits » LibreOfficeCreditscontributorscodersdevelopersCredits for the LibreOffice development/coding.LibreOffice/4.3.5.2$Linux_X86_64 LibreOffice_project/3a87456aaa6a95c63eea1c1b3201acedf0751bd52012-02-20T22:17:18.060000000PT14M12S3JUebjoxEpqXoQcpltWRTwzBZEEHtch3wApdhgiQPFiA + Credits » LibreOfficeCreditscontributorscodersdevelopersCredits for the LibreOffice development/coding.LibreOffice/5.0.2.2$Linux_X86_64 LibreOffice_project/37b43f919e4de5eeaca9b9755ed688758a8251fe2012-02-20T22:17:18.060000000PT14M12S3JUebjoxEpqXoQcpltWRTwzBZEEHtch3wApdhgiQPFiA - 1275 + 811 501 - 67326 - 32140 + 39980 + 22624 true true view2 - 3709 - 3475 + 3676 + 3471 501 - 1275 - 67825 - 33413 + 811 + 40479 + 23433 0 0 false @@ -28,84 +28,60 @@ - - 0 - true + false + true + true true + true + 0 true - false - false - false + + false + false false + false false - false false + false false + false + false false + false false - false + true + false true - true true - 1557161 - false - false - false - false - false - false - false - false + false + false + false + + false + false + true false - false - true - true false + + false false - false - false - true - false - true - false - false - false - false - false - false - true - high-resolution - false - - - false - false - 0 - - 2621144 - false - - true - false false - true - 0 + false + true + 4000492 + false + false false + false + true + true + false true - false + 0 + false true - true - false + high-resolution false - false - true - false - false - true - false - - 1 - true hu @@ -115,7 +91,33 @@ - false + false + true + true + true + + true + true + false + false + false + + false + false + 1557161 + false + 1 + true + false + false + 0 + false + false + + + false + false + false @@ -220,6 +222,14 @@ + + + + + + + + @@ -301,58 +311,58 @@ - + - + - + - + - + + + + - + - + - + - + - + - - - - + - + - + - + - + @@ -361,19 +371,19 @@ - + - + - + - + - + @@ -382,24 +392,24 @@ - + - + - + - + - + - + @@ -411,61 +421,75 @@ - - + + - - + - + + + + + - - - - - - - + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + @@ -723,8 +747,7 @@ - - + @@ -738,6 +761,7 @@ + @@ -745,7 +769,7 @@ - + iVBORw0KGgoAAAANSUhEUgAAATkAAABkCAYAAAD9hkdsAAAAAXNSR0IArs4c6QAAAAZiS0dE AP8A/wD/oL2nkwAAAAlwSFlzAAAOuQAADrkBuAYXvwAAAAd0SU1FB9oMChUNCQOjP/4AADYV SURBVHja7V0HfBXF9r65N0B67yEhQIAkJEAggSQklNB7B0UELAhIFYIUReBhQewFEBREUBEQ @@ -1008,7 +1032,7 @@ Credits - 1023 individuals contributed to OpenOffice.org (and whose contributions were imported into LibreOffice) or LibreOffice until 2015-02-20 16:31:02. + 1097 individuals contributed to OpenOffice.org (and whose contributions were imported into LibreOffice) or LibreOffice until 2015-10-27 18:25:07. * marks developers whose first contributions happened after 2010-09-28. Developers committing code since 2010-09-28 @@ -1035,18 +1059,18 @@ Vladimir GlazunovCommits: 25434Joined: 2000-12-04 - Caolán McNamaraCommits: 16634Joined: 2000-10-10 + Caolán McNamaraCommits: 18409Joined: 2000-10-10 - Ivo HinkelmannCommits: 9480Joined: 2002-09-09 + Stephan BergmannCommits: 10330Joined: 2000-10-04 - Stephan BergmannCommits: 8221Joined: 2000-10-04 + Ivo HinkelmannCommits: 9480Joined: 2002-09-09 - Tor LillqvistCommits: 6714Joined: 2010-03-23 + Tor LillqvistCommits: 7107Joined: 2010-03-23 Kohei YoshidaCommits: 5360Joined: 2009-06-19 @@ -1055,26 +1079,29 @@ Frank Schoenheit [fs]Commits: 5008Joined: 2000-09-19 - Michael StahlCommits: 4291Joined: 2008-06-16 + Miklos VajnaCommits: 4948Joined: 2010-07-29 - Miklos VajnaCommits: 4001Joined: 2010-07-29 + Michael StahlCommits: 4944Joined: 2008-06-16 - *Noel GrandinCommits: 3379Joined: 2011-12-12 + *Noel GrandinCommits: 4760Joined: 2011-12-12 - *Markus MohrhardCommits: 3288Joined: 2011-03-17 + *Markus MohrhardCommits: 3905Joined: 2011-03-17 - Hans-Joachim LankenauCommits: 3007Joined: 2000-09-19 + David TardonCommits: 3097Joined: 2009-11-12 - David TardonCommits: 2960Joined: 2009-11-12 + Hans-Joachim LankenauCommits: 3007Joined: 2000-09-19 + + + Eike RathkeCommits: 2936Joined: 2000-10-11 Ocke Janssen [oj]Commits: 2850Joined: 2000-09-20 @@ -1082,47 +1109,44 @@ Mathias BauerCommits: 2580Joined: 2000-09-20 - - Eike RathkeCommits: 2495Joined: 2000-10-11 - - Oliver SpechtCommits: 2458Joined: 2000-09-21 + Oliver SpechtCommits: 2481Joined: 2000-09-21 - *Thomas ArnholdCommits: 2176Joined: 2011-01-16 + Jan HolesovskyCommits: 2220Joined: 2009-06-23 - Philipp Lohmann [pl]Commits: 2089Joined: 2000-09-21 + *Thomas ArnholdCommits: 2176Joined: 2011-01-16 - *Norbert ThiebaudCommits: 2087Joined: 2010-09-29 + *Norbert ThiebaudCommits: 2123Joined: 2010-09-29 - Jan HolesovskyCommits: 1964Joined: 2009-06-23 + Philipp Lohmann [pl]Commits: 2089Joined: 2000-09-21 - Christian LippkaCommits: 1805Joined: 2000-09-25 + Bjoern MichaelsenCommits: 1945Joined: 2009-10-14 - *Matúš KukanCommits: 1619Joined: 2011-04-06 + Christian LippkaCommits: 1805Joined: 2000-09-25 - Bjoern MichaelsenCommits: 1598Joined: 2009-10-14 + *Julien NabetCommits: 1802Joined: 2010-11-04 - *Julien NabetCommits: 1590Joined: 2010-11-04 + *Andras TimarCommits: 1642Joined: 2010-10-02 - *Andras TimarCommits: 1536Joined: 2010-10-02 + *Matúš KukanCommits: 1637Joined: 2011-04-06 - LuboÅ¡ LuňákCommits: 1515Joined: 2010-09-21 + LuboÅ¡ LuňákCommits: 1521Joined: 2010-09-21 Michael MeeksCommits: 1395Joined: 2004-08-05 @@ -1130,69 +1154,69 @@ - Fridrich Å trbaCommits: 1323Joined: 2007-02-22 + *Tomaž VajngerlCommits: 1382Joined: 2012-06-02 - Thomas Lange [tl]Commits: 1310Joined: 2000-09-22 + Fridrich Å trbaCommits: 1324Joined: 2007-02-22 - Niklas NebelCommits: 1296Joined: 2000-09-19 + Thomas Lange [tl]Commits: 1310Joined: 2000-09-22 - Daniel Rentz [dr]Commits: 1206Joined: 2000-09-28 + Niklas NebelCommits: 1296Joined: 2000-09-19 - Armin Le GrandCommits: 1187Joined: 2000-09-25 + Daniel Rentz [dr]Commits: 1206Joined: 2000-09-28 - Thorsten BehrensCommits: 1099Joined: 2001-04-25 + Armin Le GrandCommits: 1187Joined: 2000-09-25 - Petr MladekCommits: 958Joined: 2006-10-03 + Thorsten BehrensCommits: 1132Joined: 2001-04-25 - Noel PowerCommits: 948Joined: 2002-09-24 + *Matteo CasalinCommits: 1063Joined: 2011-11-13 - *Lionel Elie MamaneCommits: 913Joined: 2011-01-15 + *Takeshi AbeCommits: 983Joined: 2010-11-08 - Kai AhrensCommits: 909Joined: 2000-09-21 + Petr MladekCommits: 958Joined: 2006-10-03 - Henning BrinkmannCommits: 899Joined: 2002-08-14 + *Lionel Elie MamaneCommits: 952Joined: 2011-01-15 - Cédric BosdonnatCommits: 882Joined: 2009-11-16 + Noel PowerCommits: 950Joined: 2002-09-24 - Malte Timmermann [mt]Commits: 864Joined: 2000-10-10 + Kai AhrensCommits: 909Joined: 2000-09-21 - Sven JacobiCommits: 850Joined: 2000-09-21 + Henning BrinkmannCommits: 899Joined: 2002-08-14 - *Takeshi AbeCommits: 849Joined: 2010-11-08 + Cédric BosdonnatCommits: 882Joined: 2009-11-16 - *Tomaž VajngerlCommits: 845Joined: 2012-06-02 + Malte Timmermann [mt]Commits: 864Joined: 2000-10-10 - Herbert DürrCommits: 827Joined: 2000-10-17 + Sven JacobiCommits: 850Joined: 2000-09-21 - Martin GallweyCommits: 827Joined: 2000-11-08 + Herbert DürrCommits: 827Joined: 2000-10-17 - *Matteo CasalinCommits: 807Joined: 2011-11-13 + Martin GallweyCommits: 827Joined: 2000-11-08 Mikhail VoytenkoCommits: 793Joined: 2001-01-16 @@ -1206,136 +1230,150 @@ Joachim LingnerCommits: 745Joined: 2000-10-05 - Release EngineeringCommits: 728Joined: 2008-10-02 + *Zolnai TamásCommits: 733Joined: 2012-08-06 - Andre FischerCommits: 719Joined: 2001-02-06 + Release EngineeringCommits: 728Joined: 2008-10-02 - *Zolnai TamásCommits: 688Joined: 2012-08-06 + Andre FischerCommits: 719Joined: 2001-02-06 + + + *Andrzej HuntCommits: 708Joined: 2012-03-27 + + + *Michael MeeksCommits: 684Joined: 2013-09-10 Joerg Skottke [jsk]Commits: 678Joined: 2008-06-17 + + *Joseph PowersCommits: 658Joined: 2010-10-15 Kai SommerfeldCommits: 651Joined: 2000-10-10 - - Ingrid HalamaCommits: 639Joined: 2001-01-19 *Rafael DominguezCommits: 606Joined: 2011-02-13 + + Thomas Benisch [tbe]Commits: 551Joined: 2000-10-23 Jürgen SchmidtCommits: 512Joined: 2000-10-09 + + *Chris SherlockCommits: 499Joined: 2013-02-25 + + + Andreas BregasCommits: 470Joined: 2000-09-25 + - *Andrzej HuntCommits: 506Joined: 2012-03-27 + *Peter FoleyCommits: 442Joined: 2011-09-04 - Andreas BregasCommits: 470Joined: 2000-09-25 + Rene EngelhardCommits: 394Joined: 2005-03-14 - *Chris SherlockCommits: 469Joined: 2013-02-25 + Dirk VoelzkeCommits: 392Joined: 2000-11-27 - *Peter FoleyCommits: 442Joined: 2011-09-04 + *Ivan TimofeevCommits: 380Joined: 2011-09-16 - Dirk VoelzkeCommits: 392Joined: 2000-11-27 + Oliver-Rainer WittmannCommits: 372Joined: 2002-08-09 - Rene EngelhardCommits: 386Joined: 2005-03-14 + Matthias Huetsch [mhu]Commits: 360Joined: 2000-09-28 - *Ivan TimofeevCommits: 380Joined: 2011-09-16 + Christian LohmaierCommits: 340Joined: 2008-06-01 - Oliver-Rainer WittmannCommits: 372Joined: 2002-08-09 + *Olivier HallotCommits: 324Joined: 2010-10-25 - Matthias Huetsch [mhu]Commits: 360Joined: 2000-09-28 - - *Xisco FauliCommits: 311Joined: 2011-02-06 Radek DoulikCommits: 305Joined: 2010-05-03 - *Olivier HallotCommits: 296Joined: 2010-10-25 + *Chr. RossmanithCommits: 295Joined: 2011-01-03 + + + *Katarina BehrensCommits: 286Joined: 2010-10-13 - *Michael MeeksCommits: 294Joined: 2013-09-10 + *August SodoraCommits: 285Joined: 2011-10-18 - *Chr. RossmanithCommits: 288Joined: 2011-01-03 + *Siqi LiuCommits: 277Joined: 2013-04-13 - *August SodoraCommits: 285Joined: 2011-10-18 + *Pierre-André JacquodCommits: 276Joined: 2010-11-13 - *Pierre-André JacquodCommits: 276Joined: 2010-11-13 + *Yousuf PhilipsCommits: 274Joined: 2014-09-21 - Christian LohmaierCommits: 262Joined: 2008-06-01 + *David OstrovskyCommits: 267Joined: 2012-04-01 Lars LanghansCommits: 260Joined: 2000-09-22 - Muthu SubramanianCommits: 247Joined: 2010-08-25 + Muthu SubramanianCommits: 248Joined: 2010-08-25 - *Siqi LIUCommits: 236Joined: 2013-04-13 + *Robert Antoni Buj GelonchCommits: 247Joined: 2014-06-11 - *Robert Antoni Buj i GelonchCommits: 230Joined: 2014-06-11 + *Maxim MonastirskyCommits: 235Joined: 2013-10-27 - *Khaled HosnyCommits: 223Joined: 2011-01-28 + *Khaled HosnyCommits: 232Joined: 2011-01-28 - *David OstrovskyCommits: 218Joined: 2012-04-01 + *Szymon KÅ‚osCommits: 231Joined: 2014-03-22 - Ingo SchmidtCommits: 202Joined: 2004-02-05 + *László NémethCommits: 220Joined: 2010-09-29 - *Katarina BehrensCommits: 196Joined: 2010-10-13 + Ingo SchmidtCommits: 202Joined: 2004-02-05 *Robert NagyCommits: 191Joined: 2010-11-04 - *Marcos Paulo de SouzaCommits: 188Joined: 2012-09-26 + *Jacobo Aragunde PérezCommits: 190Joined: 2013-09-25 - *Andrzej HuntCommits: 187Joined: 2013-12-04 + *Marcos Paulo de SouzaCommits: 188Joined: 2012-09-26 @@ -1346,7 +1384,7 @@ *Philipp RiemerCommits: 171Joined: 2012-05-25 - *Jacobo Aragunde PérezCommits: 170Joined: 2013-09-25 + *Adolfo Jayme BarrientosCommits: 161Joined: 2013-06-21 *Nigel HawkinsCommits: 160Joined: 2010-10-28 @@ -1354,30 +1392,30 @@ - *Yousuf PhilipsCommits: 156Joined: 2014-09-21 + *Artur DordaCommits: 151Joined: 2012-04-15 - *Maxim MonastirskyCommits: 155Joined: 2013-10-27 + *Gert FallerCommits: 151Joined: 2010-10-25 - *Gert FallerCommits: 151Joined: 2010-10-25 + Gregor HartmannCommits: 141Joined: 2000-10-12 - *Artur DordaCommits: 151Joined: 2012-04-15 + *Artur DryomovCommits: 137Joined: 2013-03-14 - Gregor HartmannCommits: 141Joined: 2000-10-12 + *Jesús CorriusCommits: 130Joined: 2010-10-07 - *Artur DryomovCommits: 137Joined: 2013-03-14 + *Philipp WeissenbacherCommits: 128Joined: 2011-10-28 - *László NémethCommits: 137Joined: 2010-09-29 + *Ariel Constenla-HaileCommits: 126Joined: 2012-01-16 - *Jesús CorriusCommits: 128Joined: 2010-10-07 + *haochenCommits: 126Joined: 2013-10-10 @@ -1385,133 +1423,147 @@ Helge Delfs [hde]Commits: 126Joined: 2009-07-28 - *Philipp WeissenbacherCommits: 125Joined: 2011-10-28 + Takashi OnoCommits: 122Joined: 2009-12-10 - *haochenCommits: 125Joined: 2013-10-10 + *Arnaud VersiniCommits: 120Joined: 2010-10-05 - *Ariel Constenla-HaileCommits: 125Joined: 2012-01-16 + *Sebastian SpaethCommits: 119Joined: 2010-09-28 - Takashi OnoCommits: 122Joined: 2009-12-10 + *Alexander WilmsCommits: 118Joined: 2013-12-22 - *Sebastian SpaethCommits: 119Joined: 2010-09-28 + *Andrea GelminiCommits: 117Joined: 2014-10-30 - *Alexander WilmsCommits: 118Joined: 2013-12-22 + Kalman Szalai - KAMICommits: 116Joined: 2010-09-14 - Kalman Szalai - KAMICommits: 116Joined: 2010-09-14 + *Samuel MehrbrodtCommits: 114Joined: 2011-06-08 - *Samuel MehrbrodtCommits: 113Joined: 2011-06-08 + *Tomáš ChvátalCommits: 114Joined: 2011-07-27 *I-Jui (Ray) SungCommits: 112Joined: 2013-09-30 - *Tomáš ChvátalCommits: 111Joined: 2011-07-27 + *Jan-Marek GlogowskiCommits: 106Joined: 2013-11-14 - *Arnaud VersiniCommits: 108Joined: 2010-10-05 + *Louis-Francis Ratté-BoulianneCommits: 102Joined: 2014-10-29 - *Louis-Francis Ratté-BoulianneCommits: 102Joined: 2014-10-29 + *Thomas KlausnerCommits: 98Joined: 2010-10-01 - *Stefan KnorrCommits: 91Joined: 2011-07-04 + *andreas kainzCommits: 96Joined: 2015-03-18 - *Adolfo Jayme BarrientosCommits: 90Joined: 2014-07-02 + *Laurent GodardCommits: 92Joined: 2011-05-06 - *Daniel BankstonCommits: 88Joined: 2012-04-03 + *Stefan KnorrCommits: 91Joined: 2011-07-04 - *Tim RetoutCommits: 88Joined: 2012-02-14 + *Krisztian PinterCommits: 90Joined: 2013-02-18 - *Adam CoCommits: 86Joined: 2013-04-28 + *Laurent Balland-PoirierCommits: 90Joined: 2011-08-31 - Mihaela KedikovaCommits: 85Joined: 2009-10-30 + *Daniel BankstonCommits: 88Joined: 2012-04-03 - *Jan-Marek GlogowskiCommits: 85Joined: 2013-11-14 + *Tim RetoutCommits: 88Joined: 2012-02-14 - *Javier FernandezCommits: 84Joined: 2013-03-06 + *Stanislav HoracekCommits: 87Joined: 2012-12-09 - *Thomas KlausnerCommits: 84Joined: 2010-10-01 + *Albert ThuswaldnerCommits: 86Joined: 2011-01-26 - Tobias KrauseCommits: 83Joined: 2007-10-02 + *Adam CoCommits: 86Joined: 2013-04-28 - *Krisztian PinterCommits: 83Joined: 2013-02-18 + *Douglas MenckenCommits: 85Joined: 2013-12-11 - *Minh NgoCommits: 83Joined: 2013-05-02 + Mihaela KedikovaCommits: 85Joined: 2009-10-30 - *Ricardo MontaniaCommits: 82Joined: 2012-08-18 + *Javier FernandezCommits: 84Joined: 2013-03-06 - *Douglas MenckenCommits: 76Joined: 2013-12-11 + Tobias KrauseCommits: 83Joined: 2007-10-02 - *Korrawit PruegsanusakCommits: 74Joined: 2011-05-28 + *Minh NgoCommits: 83Joined: 2013-05-02 - *Laurent GodardCommits: 73Joined: 2011-05-06 + *Ricardo MontaniaCommits: 82Joined: 2012-08-18 - *weigaoCommits: 72Joined: 2014-05-07 + *Tobias MadlCommits: 74Joined: 2014-09-15 + + + *Korrawit PruegsanusakCommits: 74Joined: 2011-05-28 *Gergo MocsiCommits: 72Joined: 2013-02-14 + + + + *weigaoCommits: 72Joined: 2014-05-07 + + + Thorsten BosbachCommits: 70Joined: 2008-06-18 + Bartosz KosiorekCommits: 70Joined: 2010-09-17 + + *Winfried DonkersCommits: 69Joined: 2013-08-06 + - Thorsten BosbachCommits: 70Joined: 2008-06-18 + *Michaël LefèvreCommits: 68Joined: 2011-02-22 *Antonio FernandezCommits: 68Joined: 2012-07-18 - *Stanislav HoracekCommits: 68Joined: 2012-12-09 + *Kevin HunterCommits: 67Joined: 2010-10-22 - *Kevin HunterCommits: 67Joined: 2010-10-22 + *Jelle van der WaaCommits: 66Joined: 2013-06-16 - *Jelle van der WaaCommits: 66Joined: 2013-06-16 + *Riccardo MagliocchettiCommits: 64Joined: 2012-01-25 - *Laurent Balland-PoirierCommits: 63Joined: 2011-08-31 + *Michael WeghornCommits: 62Joined: 2014-09-10 Wolfram Garten [wg]Commits: 61Joined: 2009-10-23 @@ -1528,7 +1580,7 @@ Marc Neumann [msc]Commits: 59Joined: 2008-06-20 - *Riccardo MagliocchettiCommits: 59Joined: 2012-01-25 + *Pranav KantCommits: 59Joined: 2015-06-02 *shiming zhangCommits: 59Joined: 2013-11-04 @@ -1536,69 +1588,69 @@ - *Joren De CuyperCommits: 58Joined: 2013-01-07 + *Simon SteinbeissCommits: 58Joined: 2015-06-01 - *yiming juCommits: 57Joined: 2013-11-01 + *Joren De CuyperCommits: 58Joined: 2013-01-07 - *Michaël LefèvreCommits: 57Joined: 2011-02-22 + *Pierre-Eric Pelloux-PrayerCommits: 57Joined: 2012-06-20 - *Pierre-Eric Pelloux-PrayerCommits: 57Joined: 2012-06-20 + *yiming juCommits: 57Joined: 2013-11-01 - *Michael WeghornCommits: 55Joined: 2014-09-10 + *matteocamCommits: 56Joined: 2014-02-25 - *Albert ThuswaldnerCommits: 54Joined: 2011-01-26 + *Joren De CuyperCommits: 56Joined: 2014-02-06 - Nikolai PretzellCommits: 54Joined: 2001-03-09 + *Matthew J. FrancisCommits: 55Joined: 2014-08-25 - *Martin KepplingerCommits: 53Joined: 2011-02-18 + Nikolai PretzellCommits: 54Joined: 2001-03-09 - *Rob SneldersCommits: 53Joined: 2011-02-08 + *Mihály PalenikCommits: 54Joined: 2013-07-11 - *yangzhangCommits: 53Joined: 2013-11-04 + *yangzhangCommits: 54Joined: 2013-11-04 - *Matthias FreundCommits: 52Joined: 2013-02-08 + *Martin KepplingerCommits: 53Joined: 2011-02-18 - *Efe Gürkan YALAMANCommits: 52Joined: 2012-08-01 + *Rob SneldersCommits: 53Joined: 2011-02-08 - *Winfried DonkersCommits: 52Joined: 2013-08-06 + *Matthias FreundCommits: 52Joined: 2013-02-08 - *Faisal M. Al-OtaibiCommits: 51Joined: 2012-06-25 + *Efe Gürkan YALAMANCommits: 52Joined: 2012-08-01 - *Rachit GuptaCommits: 51Joined: 2014-01-18 + *Will ThompsonCommits: 51Joined: 2012-03-21 - *Will ThompsonCommits: 51Joined: 2012-03-21 + *Faisal M. Al-OtaibiCommits: 51Joined: 2012-06-25 - *Cao Cuong NgoCommits: 51Joined: 2013-03-04 + *Rachit GuptaCommits: 51Joined: 2014-01-18 - *Ptyl DragonCommits: 50Joined: 2013-05-09 + *Cao Cuong NgoCommits: 51Joined: 2013-03-04 - *mingli juCommits: 48Joined: 2013-11-05 + *Ptyl DragonCommits: 50Joined: 2013-05-09 *Urs FässlerCommits: 48Joined: 2013-02-14 @@ -1609,41 +1661,55 @@ *Marcel MetzCommits: 48Joined: 2011-12-05 - *Palenik MihályCommits: 47Joined: 2013-07-11 + *mingli juCommits: 48Joined: 2013-11-05 *J. Graeme LingardCommits: 47Joined: 2010-09-29 + *Alexandre VicenziCommits: 46Joined: 2014-01-15 + + + + + *hongyu zhongCommits: 46Joined: 2013-11-04 + + *Lior KaplanCommits: 46Joined: 2010-10-05 + + *Matthias FreundCommits: 46Joined: 2014-09-08 + + + *Martin HoskenCommits: 46Joined: 2011-02-25 + - *Alexandre VicenziCommits: 46Joined: 2014-01-15 + *RosemaryCommits: 44Joined: 2015-06-23 - *hongyu zhongCommits: 46Joined: 2013-11-04 + *Eilidh McAdamCommits: 44Joined: 2011-03-10 Volker Ahrendt [va]Commits: 44Joined: 2002-04-15 - *Szymon KÅ‚osCommits: 43Joined: 2014-03-22 + *Niklas JohanssonCommits: 44Joined: 2011-11-07 - *Peter JentschCommits: 42Joined: 2011-01-07 + *Luc CastermansCommits: 43Joined: 2011-11-13 - *matteocamCommits: 42Joined: 2014-02-25 + *Peter JentschCommits: 42Joined: 2011-01-07 *Mark WielaardCommits: 42Joined: 2013-05-13 - *Luc CastermansCommits: 41Joined: 2011-11-13 + *Henry CastroCommits: 42Joined: 2015-01-09 @@ -1651,94 +1717,94 @@ *Sébastien Le RayCommits: 41Joined: 2011-02-10 - *Tobias MadlCommits: 41Joined: 2014-09-15 + *Christian M. HellerCommits: 41Joined: 2013-02-24 *Francisco SaitoCommits: 40Joined: 2011-03-21 - *Martin HoskenCommits: 40Joined: 2011-02-25 + *Daniel RobertsonCommits: 40Joined: 2015-06-27 - *Christian M. HellerCommits: 39Joined: 2013-02-24 - - *Kayo HamidCommits: 39Joined: 2010-10-09 *minwangCommits: 39Joined: 2013-11-04 - *Joren De CuyperCommits: 38Joined: 2014-02-06 - - - - *Valentin KettnerCommits: 38Joined: 2014-03-17 *abdulmajeed ahmedCommits: 37Joined: 2012-07-07 + + *Iain BillettCommits: 37Joined: 2012-04-11 *Tsutomu UchinoCommits: 37Joined: 2014-01-08 + + *Mihai VargaCommits: 37Joined: 2014-02-27 + + + *Jennifer LiebelCommits: 37Joined: 2014-08-29 + *Vinaya MandkeCommits: 36Joined: 2013-02-08 - *Christophe JAILLETCommits: 36Joined: 2012-06-14 + *Radu IoanCommits: 36Joined: 2012-08-17 - *Winfried DonkersCommits: 36Joined: 2011-11-11 + *Csikós TamásCommits: 36Joined: 2013-07-01 - *Guillaume PousselCommits: 36Joined: 2010-12-22 + *Jean-Pierre LedureCommits: 36Joined: 2013-10-12 - *Csikós TamásCommits: 36Joined: 2013-07-01 + *Guillaume PousselCommits: 36Joined: 2010-12-22 - *Santiago MartinezCommits: 35Joined: 2012-01-20 + *Christophe JAILLETCommits: 36Joined: 2012-06-14 - *dechuangCommits: 35Joined: 2013-11-04 + *Winfried DonkersCommits: 36Joined: 2011-11-11 - *Radu IoanCommits: 35Joined: 2012-08-17 + *Santiago MartinezCommits: 35Joined: 2012-01-20 - *Laurent CharrièreCommits: 35Joined: 2010-10-14 + *Åukasz HryniukCommits: 35Joined: 2015-01-02 *xukai liuCommits: 35Joined: 2013-11-01 - *Eilidh McAdamCommits: 35Joined: 2011-03-10 + *Laurent CharrièreCommits: 35Joined: 2010-10-14 - *Matthew FrancisCommits: 35Joined: 2014-08-25 + *Philippe JungCommits: 35Joined: 2015-05-01 - *Jennifer LiebelCommits: 35Joined: 2014-08-29 + *Priyanka GaikwadCommits: 35Joined: 2013-11-12 - *Niklas JohanssonCommits: 35Joined: 2011-11-07 + *dechuangCommits: 35Joined: 2013-11-04 - *Steve YinCommits: 34Joined: 2013-11-14 + *Samuel MehrbrodtCommits: 35Joined: 2015-09-15 *Marc-André LaverdièreCommits: 34Joined: 2011-06-21 @@ -1746,52 +1812,80 @@ + *Steve YinCommits: 34Joined: 2013-11-14 + + + *Tobias LippertCommits: 34Joined: 2014-01-02 + + + *Varun DhallCommits: 33Joined: 2015-03-07 + + *Andreas MantkeCommits: 33Joined: 2010-09-29 + + *Alexander WilmsCommits: 33Joined: 2012-05-26 - *Vishv BrahmbhattCommits: 32Joined: 2013-01-28 + *Justin LuthCommits: 33Joined: 2014-09-30 *GokulCommits: 32Joined: 2012-07-10 + + *Yogesh BharateCommits: 32Joined: 2013-10-11 + + *Vishv BrahmbhattCommits: 32Joined: 2013-01-28 + + *fengzengCommits: 31Joined: 2013-11-04 + *muleiCommits: 30Joined: 2013-11-01 + + *Kenneth VenkenCommits: 30Joined: 2010-10-15 + + + + *Christoph HerzogCommits: 30Joined: 2011-01-07 + *Manal AlhassounCommits: 30Joined: 2012-09-10 - *Christoph HerzogCommits: 30Joined: 2011-01-07 + *Isamu MogiCommits: 30Joined: 2013-04-27 + + + *Rodolfo Ribeiro GomesCommits: 29Joined: 2012-12-19 - *muleiCommits: 30Joined: 2013-11-01 + *Wols ListsCommits: 29Joined: 2010-11-07 - *Isamu MogiCommits: 30Joined: 2013-04-27 + *Elton ChungCommits: 29Joined: 2012-01-31 *xinjiangCommits: 29Joined: 2013-11-04 - *Rodolfo Ribeiro GomesCommits: 29Joined: 2012-12-19 + *Harri PitkänenCommits: 29Joined: 2010-10-04 - *Elton ChungCommits: 29Joined: 2012-01-31 + *Sushil ShindeCommits: 28Joined: 2013-10-21 - *Wols ListsCommits: 29Joined: 2010-11-07 + *Szabolcs DezsiCommits: 28Joined: 2012-02-16 *Aurimas FiÅ¡erasCommits: 28Joined: 2010-10-11 @@ -1802,122 +1896,119 @@ - *Szabolcs DezsiCommits: 28Joined: 2012-02-16 + Andre Fischer<andre.f.fischerCommits: 28Joined: 2010-07-21 - Andre Fischer<andre.f.fischerCommits: 28Joined: 2010-07-21 + *Andres GomezCommits: 27Joined: 2013-04-09 - *Harri PitkänenCommits: 28Joined: 2010-10-04 + *Gökçen EraslanCommits: 27Joined: 2012-04-15 - *Jean-Pierre LedureCommits: 28Joined: 2013-10-12 + *Marco CecchettiCommits: 26Joined: 2014-12-24 - *Tobias LippertCommits: 27Joined: 2014-01-02 + *Josh HeidenreichCommits: 26Joined: 2011-07-20 - *Andres GomezCommits: 27Joined: 2013-04-09 + Giuseppe CastagnoCommits: 26Joined: 2007-12-09 - *Gökçen EraslanCommits: 27Joined: 2012-04-15 + *Regina HenschelCommits: 26Joined: 2010-11-04 - *Sushil ShindeCommits: 27Joined: 2013-10-21 + *Maxime de RoucyCommits: 26Joined: 2012-03-08 - *Maxime de RoucyCommits: 26Joined: 2012-03-08 + *Joel MaderoCommits: 25Joined: 2012-06-15 - *Josh HeidenreichCommits: 26Joined: 2011-07-20 + *Juergen FunkCommits: 25Joined: 2014-09-17 - *Priyanka GaikwadCommits: 25Joined: 2013-11-12 + *Ashod NakashianCommits: 25Joined: 2015-01-07 - *Kurosawa TakeshiCommits: 25Joined: 2011-01-04 + *Prashant PandeyCommits: 25Joined: 2013-02-20 - *Prashant PandeyCommits: 25Joined: 2013-02-20 + *Mark HungCommits: 25Joined: 2014-11-04 - *Joel MaderoCommits: 24Joined: 2012-06-15 + *Kurosawa TakeshiCommits: 25Joined: 2011-01-04 - *Daniel SikelerCommits: 24Joined: 2014-08-28 + *Uray M. JánosCommits: 24Joined: 2012-07-17 - *Uray M. JánosCommits: 24Joined: 2012-07-17 + *VortCommits: 24Joined: 2014-01-21 - *VortCommits: 24Joined: 2014-01-21 + *Daniel SikelerCommits: 24Joined: 2014-08-28 - *Luke DellerCommits: 23Joined: 2012-11-26 + *Felix ZhangCommits: 23Joined: 2011-10-19 - *Jack LeighCommits: 23Joined: 2012-10-03 + *Julien ChaffraixCommits: 23Joined: 2011-04-12 - *Christian DywanCommits: 23Joined: 2011-04-14 + *José Guilherme VanzCommits: 23Joined: 2012-09-26 - *Felix ZhangCommits: 23Joined: 2011-10-19 + *Jack LeighCommits: 23Joined: 2012-10-03 - *Sören MöllerCommits: 23Joined: 2011-01-03 + *Luke DellerCommits: 23Joined: 2012-11-26 - *Yogesh BharateCommits: 23Joined: 2013-10-11 + *Lucas BaudinCommits: 23Joined: 2011-01-25 - *Julien ChaffraixCommits: 23Joined: 2011-04-12 + *Sören MöllerCommits: 23Joined: 2011-01-03 - *Lucas BaudinCommits: 23Joined: 2011-01-25 + *Robert RothCommits: 23Joined: 2010-10-31 - *Robert RothCommits: 23Joined: 2010-10-31 + *Christian DywanCommits: 23Joined: 2011-04-14 - *José Guilherme VanzCommits: 23Joined: 2012-09-26 + *zhenyu yuanCommits: 22Joined: 2013-11-06 - *Ruslan KabatsayevCommits: 22Joined: 2012-05-11 + *Jian Fang ZhangCommits: 22Joined: 2012-06-18 - *Jian Fang ZhangCommits: 22Joined: 2012-06-18 + *Jacek WolszczakCommits: 22Joined: 2010-10-07 - *Jacek WolszczakCommits: 22Joined: 2010-10-07 + *Ruslan KabatsayevCommits: 22Joined: 2012-05-11 *Frédéric WangCommits: 22Joined: 2013-06-22 - *Júlio HoffimannCommits: 22Joined: 2010-10-18 + *Laurent AlonsoCommits: 22Joined: 2011-10-23 - *zhenyu yuanCommits: 22Joined: 2013-11-06 - - - *Regina HenschelCommits: 21Joined: 2010-11-04 + *Júlio HoffimannCommits: 22Joined: 2010-10-18 *Nicolas ChristenerCommits: 21Joined: 2011-03-10 @@ -1925,19 +2016,22 @@ *Rohit DeshmukhCommits: 21Joined: 2013-09-30 + + *Tushar BendeCommits: 20Joined: 2013-09-27 + - Eric BachardCommits: 20Joined: 2005-10-19 + *Rishabh KumarCommits: 20Joined: 2015-02-13 - *Tushar BendeCommits: 20Joined: 2013-09-27 + *Brad SowdenCommits: 20Joined: 2011-12-27 - *Laurent AlonsoCommits: 20Joined: 2011-10-23 + *Andy HolderCommits: 20Joined: 2010-12-06 - *Andy HolderCommits: 20Joined: 2010-12-06 + Eric BachardCommits: 20Joined: 2005-10-19 @@ -1945,52 +2039,52 @@ *Petr VorelCommits: 20Joined: 2012-02-17 - *Brad SowdenCommits: 20Joined: 2011-12-27 + *Peter FoleyCommits: 20Joined: 2014-09-08 - *Baptiste DaroussinCommits: 19Joined: 2011-01-31 + *Peilin XiaoCommits: 19Joined: 2013-12-09 - *Peilin XiaoCommits: 19Joined: 2013-12-09 + *Lennard WasserthalCommits: 19Joined: 2012-08-11 - Xiaofei ZhangCommits: 19Joined: 2010-06-28 + *Baptiste DaroussinCommits: 19Joined: 2011-01-31 - *Lennard WasserthalCommits: 19Joined: 2012-08-11 + *Tomofumi YagiCommits: 19Joined: 2011-10-20 - *Peter FoleyCommits: 18Joined: 2014-09-08 + *AndrewCommits: 19Joined: 2014-02-26 - *Matthias FreundCommits: 18Joined: 2014-09-08 + Xiaofei ZhangCommits: 19Joined: 2010-06-28 - *Boris DuÅ¡ekCommits: 18Joined: 2013-07-21 + *Ravindra VidhateCommits: 19Joined: 2014-01-30 - *Joost WezenbeekCommits: 18Joined: 2010-10-24 + *Jens CarlCommits: 18Joined: 2014-05-28 - Hanno Meyer-ThurowCommits: 18Joined: 2010-09-16 + *Abdulelah AlarifiCommits: 18Joined: 2012-12-12 - *Abdulelah AlarifiCommits: 18Joined: 2012-12-12 + *Joost WezenbeekCommits: 18Joined: 2010-10-24 - *László NémethCommits: 17Joined: 2015-01-20 + *Pedro GiffuniCommits: 18Joined: 2011-10-28 - *Bálint DózsaCommits: 17Joined: 2011-02-10 + Hanno Meyer-ThurowCommits: 18Joined: 2010-09-16 - *navin patidarCommits: 17Joined: 2013-01-06 + *Boris DuÅ¡ekCommits: 18Joined: 2013-07-21 *Alfonso EusebioCommits: 17Joined: 2011-01-16 @@ -1998,58 +2092,58 @@ - *Jian Hong ChengCommits: 17Joined: 2012-06-26 + *Mike KaganskiCommits: 17Joined: 2015-04-26 - *Umesh KadamCommits: 17Joined: 2014-01-10 + *Jian Hong ChengCommits: 17Joined: 2012-06-26 - *Jens CarlCommits: 17Joined: 2014-05-28 + *Vasily MelenchukCommits: 17Joined: 2015-01-27 - *Tomofumi YagiCommits: 17Joined: 2011-10-20 + *Bálint DózsaCommits: 17Joined: 2011-02-10 - *Jordan AyersCommits: 16Joined: 2010-11-04 + *Umesh KadamCommits: 17Joined: 2014-01-10 - *Chris SherlockCommits: 16Joined: 2015-01-26 + *navin patidarCommits: 17Joined: 2013-01-06 - *Luke DixonCommits: 16Joined: 2010-10-26 + *Niko RönkköCommits: 16Joined: 2010-10-31 - *Ravindra VidhateCommits: 16Joined: 2014-01-30 + *Jean-Noël RouvignacCommits: 16Joined: 2013-01-09 - Giuseppe CastagnoCommits: 16Joined: 2007-12-09 + *tsahi glikCommits: 16Joined: 2013-06-04 - *Mihai VargaCommits: 16Joined: 2014-02-27 + *Anders JonssonCommits: 16Joined: 2010-12-11 - *Maciej RumianowskiCommits: 16Joined: 2011-07-19 + *Jordan AyersCommits: 16Joined: 2010-11-04 - *tsahi glikCommits: 16Joined: 2013-06-04 + *Chris LaplanteCommits: 16Joined: 2014-04-07 - *Jean-Noël RouvignacCommits: 16Joined: 2013-01-09 + Florian ReuterCommits: 16Joined: 2010-09-14 - Florian ReuterCommits: 16Joined: 2010-09-14 + *Maciej RumianowskiCommits: 16Joined: 2011-07-19 - *Niko RönkköCommits: 16Joined: 2010-10-31 + *Richard PALOCommits: 16Joined: 2014-11-09 - *Anders JonssonCommits: 16Joined: 2010-12-11 + *Luke DixonCommits: 16Joined: 2010-10-26 @@ -2060,21 +2154,21 @@ *Nikhil WalvekarCommits: 15Joined: 2013-11-01 - *Chris LaplanteCommits: 15Joined: 2014-04-07 + *Luke SymesCommits: 15Joined: 2010-10-01 - *Luke SymesCommits: 15Joined: 2010-10-01 + *Catalin IacobCommits: 15Joined: 2012-02-10 - *Povilas KanapickasCommits: 15Joined: 2010-10-18 + *Heena GuptaCommits: 15Joined: 2014-06-17 *Yifan JCommits: 15Joined: 2010-12-16 - *Alexander BergmannCommits: 15Joined: 2012-01-13 + *Joachim TremourouxCommits: 15Joined: 2010-11-19 *Arnaud VersiniCommits: 15Joined: 2013-08-10 @@ -2082,24 +2176,21 @@ - *Joachim TremourouxCommits: 15Joined: 2010-11-19 + Octavio AlvarezCommits: 15Joined: 2010-09-13 - *Catalin IacobCommits: 15Joined: 2012-02-10 + *Alexander BergmannCommits: 15Joined: 2012-01-13 - Octavio AlvarezCommits: 15Joined: 2010-09-13 + *Povilas KanapickasCommits: 15Joined: 2010-10-18 - *Pedro GiffuniCommits: 15Joined: 2011-10-28 + *Cosimo CecchiCommits: 15Joined: 2011-11-02 - *Cosimo CecchiCommits: 15Joined: 2011-11-02 - - - *Tim HardeckCommits: 14Joined: 2011-11-03 + *Cor NouwsCommits: 14Joined: 2011-11-19 *Zhe WangCommits: 14Joined: 2012-06-20 @@ -2107,19 +2198,22 @@ *Sun YingCommits: 14Joined: 2012-08-16 + + *Juan PiccaCommits: 14Joined: 2014-07-23 + - *Juergen FunkCommits: 14Joined: 2014-09-17 + *Tim HardeckCommits: 14Joined: 2011-11-03 - *Juan PiccaCommits: 14Joined: 2014-07-23 + *Zsolt BölönyCommits: 14Joined: 2015-01-10 - *Muhammad HaggagCommits: 13Joined: 2012-02-01 + *tageziCommits: 14Joined: 2015-09-16 - *Mathias HasselmannCommits: 13Joined: 2013-01-14 + *Sven WehnerCommits: 13Joined: 2014-01-16 @@ -2127,125 +2221,125 @@ *gerhard oettlCommits: 13Joined: 2012-08-27 - *Andrea GelminiCommits: 13Joined: 2014-10-30 + *Prashant ShahCommits: 13Joined: 2010-10-10 - *Sven WehnerCommits: 13Joined: 2014-01-16 + *Dennis FrancisCommits: 13Joined: 2015-04-15 - *Prashant ShahCommits: 13Joined: 2010-10-10 + *LeMoyne CastleCommits: 13Joined: 2010-10-25 - *Alia AlmusaireaeCommits: 13Joined: 2012-11-05 + *Mathias HasselmannCommits: 13Joined: 2013-01-14 - *Jani MonosesCommits: 12Joined: 2010-10-30 + *Björgvin RagnarssonCommits: 13Joined: 2012-02-13 - *LeMoyne CastleCommits: 12Joined: 2010-10-25 + *Muhammad HaggagCommits: 13Joined: 2012-02-01 - *Wilhelm PfluegerCommits: 12Joined: 2011-02-05 + *Alia AlmusaireaeCommits: 13Joined: 2012-11-05 - *Gábor StefanikCommits: 12Joined: 2012-04-07 + *Mariusz DykierekCommits: 12Joined: 2012-01-16 - *Björgvin RagnarssonCommits: 12Joined: 2012-02-13 + *Greg Kroah-HartmanCommits: 12Joined: 2012-02-06 - *Wei WeiCommits: 12Joined: 2013-11-16 + *Gábor StefanikCommits: 12Joined: 2012-04-07 - *Mariusz DykierekCommits: 12Joined: 2012-01-16 + *Jani MonosesCommits: 12Joined: 2010-10-30 - *Greg Kroah-HartmanCommits: 12Joined: 2012-02-06 + *Wei WeiCommits: 12Joined: 2013-11-16 - *Jean-Baptiste FaureCommits: 12Joined: 2011-02-20 + *Wilhelm PfluegerCommits: 12Joined: 2011-02-05 - *Richard PALOCommits: 11Joined: 2014-11-09 + *Olivier RCommits: 12Joined: 2011-08-01 - *Tomas HlavatyCommits: 11Joined: 2011-12-06 + *Jean-Baptiste FaureCommits: 12Joined: 2011-02-20 - Frank PetersCommits: 11Joined: 2010-05-20 + *Jung-uk KimCommits: 11Joined: 2012-08-13 - *Andre FischeCommits: 11Joined: 2011-02-10 + *Enrico Weigelt, metux ITSCommits: 11Joined: 2012-11-14 - *David BolenCommits: 11Joined: 2012-03-07 + *Jonas Finnemann JensenCommits: 11Joined: 2010-10-01 - *Peter RabiCommits: 11Joined: 2011-07-14 + *Abdulaziz A AlayedCommits: 11Joined: 2013-01-22 - *AndrewCommits: 11Joined: 2014-02-26 + *David BolenCommits: 11Joined: 2012-03-07 - *Jung-uk KimCommits: 11Joined: 2012-08-13 + *Peter RabiCommits: 11Joined: 2011-07-14 - *Cor NouwsCommits: 11Joined: 2011-11-19 + Frank PetersCommits: 11Joined: 2010-05-20 - *Enrico Weigelt, metux ITSCommits: 11Joined: 2012-11-14 + *Andre FischeCommits: 11Joined: 2011-02-10 - *Jonas Finnemann JensenCommits: 11Joined: 2010-10-01 + *Michael JaumannCommits: 11Joined: 2014-09-02 - *Abdulaziz A AlayedCommits: 11Joined: 2013-01-22 + *Tomas HlavatyCommits: 11Joined: 2011-12-06 - *René KjellerupCommits: 11Joined: 2010-10-14 + *Charu TyagiCommits: 11Joined: 2014-06-25 - *Jianyuan LiCommits: 10Joined: 2012-08-16 + *René KjellerupCommits: 11Joined: 2010-10-14 - *Kristian RietveldCommits: 10Joined: 2011-10-15 + *Jianyuan LiCommits: 10Joined: 2012-08-16 - *Michael JaumannCommits: 10Joined: 2014-09-02 + *Kristian RietveldCommits: 10Joined: 2011-10-15 - *Theo van KlaverenCommits: 10Joined: 2011-03-10 + *Mirek MazelCommits: 10Joined: 2012-06-05 - *Olivier RCommits: 10Joined: 2011-08-01 + *Theo van KlaverenCommits: 10Joined: 2011-03-10 - *Timo HeinoCommits: 10Joined: 2010-11-22 + *Luke PetrolekasCommits: 10Joined: 2011-02-12 - *Mirek MazelCommits: 10Joined: 2012-06-05 + *Bryan QuigleyCommits: 10Joined: 2013-11-10 - *Luke PetrolekasCommits: 10Joined: 2011-02-12 + *Timo HeinoCommits: 10Joined: 2010-11-22 - *Surendran MahendranCommits: 9Joined: 2010-11-05 + *Dinesh PatilCommits: 9Joined: 2014-03-12 @@ -2253,192 +2347,192 @@ *Steven ButlerCommits: 9Joined: 2011-01-07 - *David VogtCommits: 9Joined: 2012-02-05 + *Matthew PottageCommits: 9Joined: 2014-07-26 - *Mattias JohnssonCommits: 9Joined: 2010-10-18 + *Surendran MahendranCommits: 9Joined: 2010-11-05 - *Dinesh PatilCommits: 9Joined: 2014-03-12 + *Mattias JohnssonCommits: 9Joined: 2010-10-18 - *Daisuke NishinoCommits: 8Joined: 2011-11-06 + *David VogtCommits: 9Joined: 2012-02-05 - *Ursache VladimirCommits: 8Joined: 2015-02-10 + *Benjamin NiCommits: 8Joined: 2015-04-02 - *karthCommits: 8Joined: 2013-01-07 + *Dennis RoczekCommits: 8Joined: 2015-06-09 - *Tomcsik BenceCommits: 8Joined: 2012-01-14 + *Sean DavisCommits: 8Joined: 2015-06-01 - *Robert DargaudCommits: 8Joined: 2011-04-12 + *Norah A. AbanumayCommits: 8Joined: 2012-07-30 - *Heena GuptaCommits: 8Joined: 2014-06-30 + *Ãdám Csaba KirályCommits: 8Joined: 2013-02-28 - *Ahmad H. Al HarthiCommits: 8Joined: 2012-12-31 + *Michael CallahanCommits: 8Joined: 2010-12-06 - *Michael CallahanCommits: 8Joined: 2010-12-06 + *Troy RolloCommits: 8Joined: 2011-07-11 - Fong LinCommits: 8Joined: 2010-09-14 + *Michael DunphyCommits: 8Joined: 2013-04-18 - *Ashod NakashianCommits: 8Joined: 2015-01-07 + *Robert DargaudCommits: 8Joined: 2011-04-12 - *Norah A. AbanumayCommits: 8Joined: 2012-07-30 + *Ursache VladimirCommits: 8Joined: 2015-02-10 - *Justin LuthCommits: 8Joined: 2014-09-30 + *Tomcsik BenceCommits: 8Joined: 2012-01-14 - *Ãdám Csaba KirályCommits: 8Joined: 2013-02-28 + *Ahmad H. Al HarthiCommits: 8Joined: 2012-12-31 - *Michael DunphyCommits: 8Joined: 2013-04-18 + Fong LinCommits: 8Joined: 2010-09-14 - *Jonathan AdamsCommits: 8Joined: 2012-03-16 + *RajashriCommits: 8Joined: 2013-12-06 - *Charu TyagiCommits: 8Joined: 2014-06-25 + *SouravCommits: 8Joined: 2014-03-15 - *Troy RolloCommits: 8Joined: 2011-07-11 + *Stefan WeibergCommits: 8Joined: 2014-08-28 - Jody GoldbergCommits: 8Joined: 2010-09-15 + *HeiherCommits: 8Joined: 2015-07-07 - *RajashriCommits: 8Joined: 2013-12-06 + *Timothy PearsonCommits: 8Joined: 2012-08-18 - *SouravCommits: 8Joined: 2014-03-15 + *Daisuke NishinoCommits: 8Joined: 2011-11-06 - *Jenei GáborCommits: 8Joined: 2011-07-29 + *karthCommits: 8Joined: 2013-01-07 - *Stefan WeibergCommits: 8Joined: 2014-08-28 + *Nathan YeeCommits: 8Joined: 2015-01-01 - *Timothy PearsonCommits: 8Joined: 2012-08-18 + *IanCommits: 8Joined: 2015-08-06 - *SJacobiCommits: 7Joined: 2013-03-05 + *Jonathan AdamsCommits: 8Joined: 2012-03-16 - *Christopher CopitsCommits: 7Joined: 2012-09-19 + Jody GoldbergCommits: 8Joined: 2010-09-15 - *Mathias MichelCommits: 7Joined: 2012-11-19 + *Jenei GáborCommits: 8Joined: 2011-07-29 - *Matthew PottageCommits: 7Joined: 2014-07-26 + *Martin SrebotnjakCommits: 7Joined: 2010-12-19 - *Keith CurtisCommits: 7Joined: 2013-12-20 + *Pranav KantCommits: 7Joined: 2015-03-01 - *Mark HungCommits: 7Joined: 2014-11-04 + *David DelmaCommits: 7Joined: 2014-05-13 - *Issa AlkurtassCommits: 7Joined: 2012-09-04 + *Roi IllouzCommits: 7Joined: 2013-10-20 - *Terrence EngerCommits: 7Joined: 2011-10-27 + *Thies PierdolaCommits: 7Joined: 2011-01-28 - *Martin SrebotnjakCommits: 7Joined: 2010-12-19 + *Phillip SzCommits: 7Joined: 2015-03-16 - *Keith McRaeCommits: 7Joined: 2012-01-18 + *Mathias MichelCommits: 7Joined: 2012-11-19 *Sergey DavidoffCommits: 7Joined: 2011-04-11 - *Stefan RingCommits: 7Joined: 2014-01-09 + *Terrence EngerCommits: 7Joined: 2011-10-27 - *Eric SeynaeveCommits: 7Joined: 2013-02-04 + *SJacobiCommits: 7Joined: 2013-03-05 - *Samuel CantrellCommits: 7Joined: 2011-06-11 + *Christopher CopitsCommits: 7Joined: 2012-09-19 - *David DelmaCommits: 7Joined: 2014-05-13 + *Deena FrancisCommits: 7Joined: 2014-07-29 - *Roi IllouzCommits: 7Joined: 2013-10-20 + *Keith CurtisCommits: 7Joined: 2013-12-20 - *Brennan VincentCommits: 7Joined: 2012-04-02 + *Issa AlkurtassCommits: 7Joined: 2012-09-04 - *Wang LeiCommits: 7Joined: 2012-06-14 + *Gert van ValkenhoefCommits: 7Joined: 2012-02-14 - *Thies PierdolaCommits: 7Joined: 2011-01-28 + *Keith McRaeCommits: 7Joined: 2012-01-18 - *Gert van ValkenhoefCommits: 7Joined: 2012-02-14 + *Wang LeiCommits: 7Joined: 2012-06-14 - *tianyaoCommits: 6Joined: 2013-11-09 + *Trent MacAlpineCommits: 7Joined: 2014-03-06 - *Phil BordelonCommits: 6Joined: 2010-09-30 + *Eric SeynaeveCommits: 7Joined: 2013-02-04 - *RaalCommits: 6Joined: 2014-12-31 + *Samuel CantrellCommits: 7Joined: 2011-06-11 - *Jeroen NijhofCommits: 6Joined: 2014-05-01 + *Stefan RingCommits: 7Joined: 2014-01-09 - *Daniel Di MarcoCommits: 6Joined: 2010-11-15 + *Mario J. RugieroCommits: 7Joined: 2015-10-11 - *shiraharaCommits: 6Joined: 2011-01-28 + *Brennan VincentCommits: 7Joined: 2012-04-02 - *Sven WehnerCommits: 6Joined: 2014-01-11 + *Xavier ALTCommits: 6Joined: 2011-03-06 - *Anurag JainCommits: 6Joined: 2011-04-05 + *RaalCommits: 6Joined: 2014-12-31 *Thomas CollertonCommits: 6Joined: 2011-11-18 @@ -2446,1049 +2540,1119 @@ - *Xavier ALTCommits: 6Joined: 2011-03-06 + *Michel RenonCommits: 6Joined: 2015-05-19 - *David VerrierCommits: 6Joined: 2013-02-26 + *Phil BordelonCommits: 6Joined: 2010-09-30 - *Ricardo MorenoCommits: 6Joined: 2010-11-03 + *Anurag JainCommits: 6Joined: 2011-04-05 - *Alexander O. AnisimovCommits: 6Joined: 2010-11-06 + *Jorenz ParagasCommits: 6Joined: 2015-06-23 - *Marco CecchettiCommits: 5Joined: 2014-12-24 + *David VerrierCommits: 6Joined: 2013-02-26 - *Werner KoernerCommits: 5Joined: 2012-12-11 + *Damjan JovanovicCommits: 6Joined: 2015-08-26 - *Pavel JaníkCommits: 5Joined: 2012-11-29 + *tianyaoCommits: 6Joined: 2013-11-09 - *Gustavo Buzzatti PachecoCommits: 5Joined: 2011-12-15 + *Anurag KanungoCommits: 6Joined: 2013-04-19 - *David HobleyCommits: 5Joined: 2010-10-04 + *Jeroen NijhofCommits: 6Joined: 2014-05-01 - *Gil ForcadaCommits: 5Joined: 2010-09-28 + *Sean YoungCommits: 6Joined: 2013-05-16 - *anuragkanungoCommits: 5Joined: 2013-04-19 + *Ricardo MorenoCommits: 6Joined: 2010-11-03 - *Jeffrey ChangCommits: 5Joined: 2011-06-01 + *Christoph LutzCommits: 6Joined: 2013-11-05 - *Bryan QuigleyCommits: 5Joined: 2013-11-10 + *Sven WehnerCommits: 6Joined: 2014-01-11 - *ericb2Commits: 5Joined: 2011-10-30 + *Daniel Di MarcoCommits: 6Joined: 2010-11-15 - *Ciorba EdmondCommits: 5Joined: 2013-06-11 + *shiraharaCommits: 6Joined: 2011-01-28 - *MÃTÉ GergelyCommits: 5Joined: 2013-07-19 + *Alexander O. AnisimovCommits: 6Joined: 2010-11-06 - *Wei Ming KhooCommits: 5Joined: 2012-02-17 + *Werner KoernerCommits: 5Joined: 2012-12-11 - *Bernhard RosenkraenzerCommits: 5Joined: 2010-11-01 + *Antoine ProulxCommits: 5Joined: 2011-01-30 - *Marc-Andre LaverdiereCommits: 5Joined: 2011-07-19 + *Timothy MarkleCommits: 5Joined: 2014-01-31 - *Lionel DricotCommits: 5Joined: 2012-06-04 + *ericb2Commits: 5Joined: 2011-10-30 - *Antoine ProulxCommits: 5Joined: 2011-01-30 + *Ciorba EdmondCommits: 5Joined: 2013-06-11 - *Matthias HofmannCommits: 5Joined: 2013-03-08 + *Wei Ming KhooCommits: 5Joined: 2012-02-17 - *Timothy MarkleCommits: 5Joined: 2014-01-31 + *Jan KantertCommits: 5Joined: 2014-06-12 - *Miguel GomezCommits: 5Joined: 2013-04-02 + *Matthias HofmannCommits: 5Joined: 2013-03-08 - *Eilidh McAdamCommits: 5Joined: 2014-12-09 + *Bernhard RosenkraenzerCommits: 5Joined: 2010-11-01 - *Bence BabatiCommits: 5Joined: 2012-08-13 + *Miguel GomezCommits: 5Joined: 2013-04-02 - *Tobias RosenbergerCommits: 5Joined: 2011-01-31 + *pje335_NLCommits: 5Joined: 2013-05-10 - *Trent MacAlpineCommits: 5Joined: 2014-03-06 + *Pavel JaníkCommits: 5Joined: 2012-11-29 - *Kohei YoshidaCommits: 5Joined: 2013-09-07 + *Nicolas ChristenerCommits: 5Joined: 2013-08-04 - *Michael T. WhiteleyCommits: 5Joined: 2011-11-25 + *MÃTÉ GergelyCommits: 5Joined: 2013-07-19 - *Pavel KysilkaCommits: 5Joined: 2012-06-25 + *Marc-Andre LaverdiereCommits: 5Joined: 2011-07-19 - *pje335_NLCommits: 5Joined: 2013-05-10 + *Giuseppe BilottaCommits: 5Joined: 2014-09-09 - *Santiago AlessandriCommits: 4Joined: 2010-11-11 + *Robinson TryonCommits: 5Joined: 2012-06-21 - *Jeffrey StedfastCommits: 4Joined: 2014-07-26 + *Pasi LallinahoCommits: 5Joined: 2015-06-02 - *Florian ReisingerCommits: 4Joined: 2012-06-22 + *Tobias RosenbergerCommits: 5Joined: 2011-01-31 - *An LeendersCommits: 4Joined: 2011-01-25 + *Kohei YoshidaCommits: 5Joined: 2013-09-07 - *Pantelis KoukousoulasCommits: 4Joined: 2011-03-14 + *Jack LeighCommits: 5Joined: 2015-03-18 - *Maja DjordjevicCommits: 4Joined: 2011-01-06 + *Bence BabatiCommits: 5Joined: 2012-08-13 - *Alex HenrieCommits: 4Joined: 2014-03-05 + *Michael T. WhiteleyCommits: 5Joined: 2011-11-25 - *Ken BiondiCommits: 4Joined: 2014-03-05 + *Gustavo Buzzatti PachecoCommits: 5Joined: 2011-12-15 - *Rodolfo Ribeiro GomesCommits: 4Joined: 2015-01-31 + *David HobleyCommits: 5Joined: 2010-10-04 - *Kevin SuoCommits: 4Joined: 2014-11-06 + *Gil ForcadaCommits: 5Joined: 2010-09-28 - *Wolfgang PechlanerCommits: 4Joined: 2011-09-04 + *Lionel DricotCommits: 5Joined: 2012-06-04 - *Deena FrancisCommits: 4Joined: 2014-07-29 + *Jeffrey ChangCommits: 5Joined: 2011-06-01 - *Andrew C. E. DentCommits: 4Joined: 2010-10-24 + *Pavel KysilkaCommits: 5Joined: 2012-06-25 - *Michael MuenchCommits: 4Joined: 2011-02-13 + *Tom TromeyCommits: 4Joined: 2011-08-11 - *Ulrich KitzingerCommits: 4Joined: 2013-11-30 + *Santiago AlessandriCommits: 4Joined: 2010-11-11 - *Samphan RaruenromCommits: 4Joined: 2011-03-24 + *Ken BiondiCommits: 4Joined: 2014-03-05 - *Andreas BeckerCommits: 4Joined: 2011-04-04 + *Rodolfo Ribeiro GomesCommits: 4Joined: 2015-01-31 - *Sameer DeshmukhCommits: 4Joined: 2013-04-20 + *Andrew C. E. DentCommits: 4Joined: 2010-10-24 - *André SchnabelCommits: 4Joined: 2011-05-31 + *Kate GossCommits: 4Joined: 2012-02-11 - *Florian BircherCommits: 4Joined: 2010-10-16 + *ClioCommits: 4Joined: 2011-01-30 - *Tom TromeyCommits: 4Joined: 2011-08-11 + *Elie RouxCommits: 4Joined: 2013-05-29 - *Giuseppe BilottaCommits: 4Joined: 2014-09-09 + *Simon DannerCommits: 4Joined: 2014-08-02 - *XiaoliCommits: 4Joined: 2013-03-23 + *Thomas ViehmannCommits: 4Joined: 2014-08-15 - *tinoCommits: 4Joined: 2012-12-03 + *Alex HenrieCommits: 4Joined: 2014-03-05 - *Jan KantertCommits: 4Joined: 2014-06-12 + *Maja DjordjevicCommits: 4Joined: 2011-01-06 - *Zheng FanCommits: 4Joined: 2013-04-22 + *Michael MuenchCommits: 4Joined: 2011-02-13 - *Elie RouxCommits: 4Joined: 2013-05-29 + *Ulrich KitzingerCommits: 4Joined: 2013-11-30 - *Kate GossCommits: 4Joined: 2012-02-11 + *Kevin SuoCommits: 4Joined: 2014-11-06 - *Nicholas ShanksCommits: 4Joined: 2012-09-04 + *Sameer DeshmukhCommits: 4Joined: 2013-04-20 - *Raimundo MouraCommits: 4Joined: 2012-06-16 + *Kay SchenkCommits: 4Joined: 2014-09-19 - *Honza HavlíÄekCommits: 4Joined: 2013-07-27 + *XiaoliCommits: 4Joined: 2013-03-23 - *Simon DannerCommits: 4Joined: 2014-08-02 + *Mariana MarasoiuCommits: 4Joined: 2012-03-14 - *Thomas ViehmannCommits: 4Joined: 2014-08-15 + *Nicholas ShanksCommits: 4Joined: 2012-09-04 - *Jean-Tiare LE BIGOTCommits: 4Joined: 2012-08-08 + *Jeffrey StedfastCommits: 4Joined: 2014-07-26 - *Mariana MarasoiuCommits: 4Joined: 2012-03-14 + *An LeendersCommits: 4Joined: 2011-01-25 - *Nourah.AlShoeibiCommits: 4Joined: 2013-07-07 + *José Guilherme VanzCommits: 4Joined: 2013-10-20 - *Yong Lin MaCommits: 4Joined: 2012-06-07 + *Florian BircherCommits: 4Joined: 2010-10-16 - *ClioCommits: 4Joined: 2011-01-30 + *Wolfgang PechlanerCommits: 4Joined: 2011-09-04 - *Fridrich StrbaCommits: 4Joined: 2013-03-08 + *tinoCommits: 4Joined: 2012-12-03 - *José Guilherme VanzCommits: 4Joined: 2013-10-20 + *André SchnabelCommits: 4Joined: 2011-05-31 - *Alan DuCommits: 3Joined: 2010-10-12 + *Jean-Tiare LE BIGOTCommits: 4Joined: 2012-08-08 - *Petr KrausCommits: 3Joined: 2013-03-26 + *V Stuart FooteCommits: 4Joined: 2014-12-04 - *Tobias MuellerCommits: 3Joined: 2014-02-10 + *Ryan McCoskrieCommits: 4Joined: 2014-09-14 - *Oliver GüntherCommits: 3Joined: 2012-08-09 + *Nourah.AlShoeibiCommits: 4Joined: 2013-07-07 - *Jacopo NespoloCommits: 3Joined: 2010-10-01 + *Yong Lin MaCommits: 4Joined: 2012-06-07 - *Robert M CampbellCommits: 3Joined: 2013-11-13 + *Fridrich StrbaCommits: 4Joined: 2013-03-08 - *Renato FerreiraCommits: 3Joined: 2014-11-15 + *Pantelis KoukousoulasCommits: 4Joined: 2011-03-14 - *vjinochCommits: 3Joined: 2013-04-09 + *Andreas BeckerCommits: 4Joined: 2011-04-04 - *Cameron PaulCommits: 3Joined: 2012-02-27 + *Florian ReisingerCommits: 4Joined: 2012-06-22 - *Cheng-Chia TsengCommits: 3Joined: 2012-01-16 + *Zheng FanCommits: 4Joined: 2013-04-22 - *Pascal UllrichCommits: 3Joined: 2010-12-28 + *Raimundo MouraCommits: 4Joined: 2012-06-16 - *Andrea PescettiCommits: 3Joined: 2013-10-07 + *Honza HavlíÄekCommits: 4Joined: 2013-07-27 - *Roland BaudinCommits: 3Joined: 2011-05-16 + *Samphan RaruenromCommits: 4Joined: 2011-03-24 - *Markus MaierCommits: 3Joined: 2012-11-25 + *Alan DuCommits: 3Joined: 2010-10-12 - *Peter Senna TschudinCommits: 3Joined: 2014-05-26 + *Stefan SchickCommits: 3Joined: 2013-02-18 - *Dávid VastagCommits: 3Joined: 2013-02-04 + *Petr KrausCommits: 3Joined: 2013-03-26 - *Haidong LianCommits: 3Joined: 2013-07-24 + *Gioele BarabucciCommits: 3Joined: 2010-11-18 - *Dimitri DucCommits: 3Joined: 2011-04-19 + *Simon LongCommits: 3Joined: 2015-07-08 - *Jonathan AquilinaCommits: 3Joined: 2011-01-18 + *Cameron PaulCommits: 3Joined: 2012-02-27 - *Guto MaiaCommits: 3Joined: 2011-03-18 + *Markus MaierCommits: 3Joined: 2012-11-25 - *Stefan SchickCommits: 3Joined: 2013-02-18 + *Gabriele BulfonCommits: 3Joined: 2013-07-05 - *Peter BaumgartenCommits: 3Joined: 2012-11-24 + *Michael KochCommits: 3Joined: 2011-01-21 - *Kay SchenkCommits: 3Joined: 2014-09-19 + *Jonathan AquilinaCommits: 3Joined: 2011-01-18 - *Gioele BarabucciCommits: 3Joined: 2010-11-18 + *Pierre-Eric Pelloux-PrayerCommits: 3Joined: 2015-02-08 - *Istvan TuriCommits: 3Joined: 2012-08-16 + *vjinochCommits: 3Joined: 2013-04-09 - *Jeremy BrownCommits: 3Joined: 2012-09-19 + *Stefan HeinemannCommits: 3Joined: 2012-02-16 - *Gabor KelemenCommits: 3Joined: 2013-06-18 + *Sushil ShindeCommits: 3Joined: 2014-09-21 - *Nagy AkosCommits: 3Joined: 2013-06-27 + *Michael BauerCommits: 3Joined: 2011-11-23 - *David NalleyCommits: 3Joined: 2011-03-03 + *Mathieu VonlanthenCommits: 3Joined: 2012-07-19 - *Michael BauerCommits: 3Joined: 2011-11-23 + *Matthew NichollsCommits: 3Joined: 2015-04-01 - *Anthony DurityCommits: 3Joined: 2011-04-18 + *Florian Allmann-RahnCommits: 3Joined: 2011-08-22 - *Golnaz IrannejadCommits: 3Joined: 2013-04-02 + *n.r.pearsonCommits: 3Joined: 2015-09-09 - *Xuacu SaturioCommits: 3Joined: 2010-12-19 + *Dávid VastagCommits: 3Joined: 2013-02-04 - *Gabriele BulfonCommits: 3Joined: 2013-07-05 + *Andrea PescettiCommits: 3Joined: 2013-10-07 - *Tantai TanakanokCommits: 3Joined: 2011-02-09 + *Peter BaumgartenCommits: 3Joined: 2012-11-24 - *Jan DarmochwalCommits: 3Joined: 2011-01-27 + *Dimitri DucCommits: 3Joined: 2011-04-19 - *Marina PlakalovicCommits: 3Joined: 2012-12-14 + *Peter Senna TschudinCommits: 3Joined: 2014-05-26 - *LuboÅ¡ LuňákCommits: 3Joined: 2014-03-18 + *Marek DoleželCommits: 3Joined: 2015-07-06 - *Dmitry AshkadovCommits: 3Joined: 2011-08-29 + *David NalleyCommits: 3Joined: 2011-03-03 - *Michael KochCommits: 3Joined: 2011-01-21 + *Golnaz IrannejadCommits: 3Joined: 2013-04-02 - *Sérgio MarquesCommits: 3Joined: 2011-11-25 + *Tantai TanakanokCommits: 3Joined: 2011-02-09 - *Mathieu VonlanthenCommits: 3Joined: 2012-07-19 + *LuboÅ¡ LuňákCommits: 3Joined: 2014-03-18 - *Jason HulmeCommits: 3Joined: 2013-06-05 + *Sérgio MarquesCommits: 3Joined: 2011-11-25 - Keith StribleyCommits: 3Joined: 2010-06-29 + *Tom ThorogoodCommits: 3Joined: 2012-02-28 - *Bertrand LorentzCommits: 3Joined: 2012-08-03 + *Chris Carpenter(mordocai)Commits: 3Joined: 2011-02-02 - *Mike EberdtCommits: 3Joined: 2011-07-12 + *Alexander ThurgoodCommits: 3Joined: 2011-01-26 - *Florian Allmann-RahnCommits: 3Joined: 2011-08-22 + *Bertrand LorentzCommits: 3Joined: 2012-08-03 - *Joan MontaneCommits: 3Joined: 2013-02-22 + *Marina PlakalovicCommits: 3Joined: 2012-12-14 - *Sean YoungCommits: 3Joined: 2013-05-16 + *Tobias MuellerCommits: 3Joined: 2014-02-10 - *Tom ThorogoodCommits: 3Joined: 2012-02-28 + *Haidong LianCommits: 3Joined: 2013-07-24 - *Chris Carpenter(mordocai)Commits: 3Joined: 2011-02-02 + *Jacopo NespoloCommits: 3Joined: 2010-10-01 - *Vasily MelenchukCommits: 3Joined: 2015-01-27 + *Robert M CampbellCommits: 3Joined: 2013-11-13 - *Mihkel TõnnovCommits: 3Joined: 2012-07-02 + *Renato FerreiraCommits: 3Joined: 2014-11-15 - *Alexander ThurgoodCommits: 3Joined: 2011-01-26 + *Cheng-Chia TsengCommits: 3Joined: 2012-01-16 - *Benjamin DrungCommits: 3Joined: 2012-06-08 + *Pascal UllrichCommits: 3Joined: 2010-12-28 - *Brij Mohan Lal SrivastavaCommits: 3Joined: 2014-11-12 + *Dmitry AshkadovCommits: 3Joined: 2011-08-29 - *Adam MrózCommits: 2Joined: 2013-02-24 + *Istvan TuriCommits: 3Joined: 2012-08-16 - *Ed DeanCommits: 2Joined: 2011-01-14 + *Mihkel TõnnovCommits: 3Joined: 2012-07-02 - *Sean McNamaraCommits: 2Joined: 2010-09-29 + *Lucas SatabinCommits: 3Joined: 2015-08-25 - *Greggory HernandezCommits: 2Joined: 2012-02-22 + Keith StribleyCommits: 3Joined: 2010-06-29 - *Tobias KranzCommits: 2Joined: 2011-02-17 + *Mike EberdtCommits: 3Joined: 2011-07-12 - *Jagan LokanathaCommits: 2Joined: 2013-11-19 + *Joan MontaneCommits: 3Joined: 2013-02-22 - *Marc GarciaCommits: 2Joined: 2012-05-04 + *Benjamin DrungCommits: 3Joined: 2012-06-08 - *Sean McMurrayCommits: 2Joined: 2010-10-20 + *Jason HulmeCommits: 3Joined: 2013-06-05 - *Sergey FarbotkaCommits: 2Joined: 2012-09-21 + *Oliver GüntherCommits: 3Joined: 2012-08-09 - *Arno TeigsethCommits: 2Joined: 2011-09-14 + *Thorsten WagnerCommits: 3Joined: 2015-04-24 - *Vicente VendrellCommits: 2Joined: 2012-04-23 + *Roland BaudinCommits: 3Joined: 2011-05-16 - *Åukasz HryniukCommits: 2Joined: 2015-01-02 + *Guto MaiaCommits: 3Joined: 2011-03-18 - *Bartolomé Sánchez SaladoCommits: 2Joined: 2012-02-18 + *Gabor KelemenCommits: 3Joined: 2013-06-18 - *Seo SanghyeonCommits: 2Joined: 2010-09-29 + *Nagy AkosCommits: 3Joined: 2013-06-27 - *Gary HoustonCommits: 2Joined: 2014-12-15 + *Anthony DurityCommits: 3Joined: 2011-04-18 - *Benedikt MorbachCommits: 2Joined: 2013-03-10 + *Xuacu SaturioCommits: 3Joined: 2010-12-19 - *Ferran VidalCommits: 2Joined: 2012-04-21 + *Feyza YavuzCommits: 3Joined: 2015-10-04 - *Sophie GautierCommits: 2Joined: 2010-12-19 + *Jan DarmochwalCommits: 3Joined: 2011-01-27 - *UrmasCommits: 2Joined: 2012-02-13 + *Jeremy BrownCommits: 3Joined: 2012-09-19 - *Anderson RobertoCommits: 2Joined: 2014-01-15 + *Brij Mohan Lal SrivastavaCommits: 3Joined: 2014-11-12 - *Mark WolfCommits: 2Joined: 2012-04-04 + *Sean McNamaraCommits: 2Joined: 2010-09-29 - *PKEuSCommits: 2Joined: 2012-02-05 + *Christoph NoackCommits: 2Joined: 2010-12-13 - *Martyn RussellCommits: 2Joined: 2012-06-07 + *Mohammad ElahiCommits: 2Joined: 2011-08-27 - *Neil MooreCommits: 2Joined: 2013-08-09 + *Gary HoustonCommits: 2Joined: 2014-12-15 - *Ri GangHuCommits: 2Joined: 2013-07-28 + *UrmasCommits: 2Joined: 2012-02-13 - *Dwayne BaileyCommits: 2Joined: 2010-11-03 + *kriptonCommits: 2Joined: 2015-10-03 - *Hussian AlamriCommits: 2Joined: 2014-05-14 + *Martyn RussellCommits: 2Joined: 2012-06-07 - *Henry CastroCommits: 2Joined: 2015-01-09 + *Andrew HigginsonCommits: 2Joined: 2012-04-10 - *Christoph NoackCommits: 2Joined: 2010-12-13 + *Vinicius VendraminiCommits: 2Joined: 2014-10-22 - *Jean Charles PapinCommits: 2Joined: 2011-02-11 + *Andras BartekCommits: 2Joined: 2012-08-06 - *William GathoyeCommits: 2Joined: 2012-02-28 + *Matthias KloseCommits: 2Joined: 2011-03-01 - Loiseleur MichelCommits: 2Joined: 2010-09-14 + *Donizete WaterkemperCommits: 2Joined: 2013-05-23 - *Mukhiddin YusupovCommits: 2Joined: 2014-05-19 + *Yuri DarioCommits: 2Joined: 2012-07-18 - *Mohammad ElahiCommits: 2Joined: 2011-08-27 + *Kelly AndersonCommits: 2Joined: 2011-05-31 - *Daniel HerdeCommits: 2Joined: 2012-08-09 + *Ri GangHuCommits: 2Joined: 2013-07-28 - *Andrew HigginsonCommits: 2Joined: 2012-04-10 + *Popa Adrian MariusCommits: 2Joined: 2015-03-26 - *Jonathan CallenCommits: 2Joined: 2011-01-29 + *Akash ShetyeCommits: 2Joined: 2013-03-23 - *Mateusz ZasuwikCommits: 2Joined: 2011-12-20 + *Michal SvecCommits: 2Joined: 2011-07-12 - *Karsten GerloffCommits: 2Joined: 2011-02-06 + *Adam MrózCommits: 2Joined: 2013-02-24 - *Maxim IorshCommits: 2Joined: 2011-10-05 + *Ed DeanCommits: 2Joined: 2011-01-14 - *dbeurleCommits: 2Joined: 2015-01-12 + *Mark WolfCommits: 2Joined: 2012-04-04 - *Vinicius VendraminiCommits: 2Joined: 2014-10-22 + *Jean Charles PapinCommits: 2Joined: 2011-02-11 - *Horacio FernandesCommits: 2Joined: 2012-07-20 + *Tobias KranzCommits: 2Joined: 2011-02-17 - *Yury TarasievichCommits: 2Joined: 2011-11-23 + *Kishor BhatCommits: 2Joined: 2015-01-28 - *Daniel StoneCommits: 2Joined: 2014-10-29 + *Derrick RochaCommits: 2Joined: 2015-09-11 - *Robert SedakCommits: 2Joined: 2010-10-05 + *Anderson RobertoCommits: 2Joined: 2014-01-15 - *Viktor VargaCommits: 2Joined: 2013-08-28 + *Dwayne BaileyCommits: 2Joined: 2010-11-03 - *Andras BartekCommits: 2Joined: 2012-08-06 + Loiseleur MichelCommits: 2Joined: 2010-09-14 - *Mark WilliamsCommits: 2Joined: 2014-12-17 + *Mukhiddin YusupovCommits: 2Joined: 2014-05-19 - *Gregg KingCommits: 2Joined: 2013-02-26 + *Sergey FarbotkaCommits: 2Joined: 2012-09-21 - *Marcin eXine MCommits: 2Joined: 2010-11-02 + *Daniel StoneCommits: 2Joined: 2014-10-29 - *Matthias KloseCommits: 2Joined: 2011-03-01 + *Boris EgorovCommits: 2Joined: 2014-09-08 - *Donizete WaterkemperCommits: 2Joined: 2013-05-23 + *Clarence GuoCommits: 2Joined: 2014-05-26 - *Janit AnjariaCommits: 2Joined: 2013-04-19 + *Laszlo Kis-AdamCommits: 2Joined: 2015-03-12 - *David SteeleCommits: 2Joined: 2012-04-24 + *Andreas SchierlCommits: 2Joined: 2012-01-30 - *Abeer SethiCommits: 2Joined: 2012-04-12 + *Viktor VargaCommits: 2Joined: 2013-08-28 - *Yuri DarioCommits: 2Joined: 2012-07-18 + *gamebusterzCommits: 2Joined: 2015-02-19 - *Boris EgorovCommits: 2Joined: 2014-09-08 + *Clément LassieurCommits: 2Joined: 2014-12-21 - *Clarence GuoCommits: 2Joined: 2014-05-26 + *SahasCommits: 2Joined: 2015-10-04 - *Moritz KuettCommits: 2Joined: 2013-03-23 + *Justin MalcolmCommits: 2Joined: 2010-09-29 - *Robinson TryonCommits: 2Joined: 2012-06-21 + *Andreu Correa CasablancaCommits: 2Joined: 2011-09-11 - *Kelly AndersonCommits: 2Joined: 2011-05-31 + *YiiChang YenCommits: 2Joined: 2014-10-16 - *Rolf HemmerlingCommits: 2Joined: 2013-06-15 + *Jonathan CallenCommits: 2Joined: 2011-01-29 - *Karthik A PadmanabhanCommits: 2Joined: 2012-03-31 + *Mathieu ParentCommits: 2Joined: 2013-10-14 - *Cyril RoelandtCommits: 2Joined: 2011-04-26 + *Lubosz SarneckiCommits: 2Joined: 2015-08-20 - *sushil_shindeCommits: 2Joined: 2014-09-21 + *Mox SoiniCommits: 2Joined: 2015-06-02 - *Andreas SchierlCommits: 2Joined: 2012-01-30 + *Sean McMurrayCommits: 2Joined: 2010-10-20 - *Flex LiuCommits: 2Joined: 2012-09-04 + *Vicente VendrellCommits: 2Joined: 2012-04-23 - *Christos StrubulisCommits: 2Joined: 2012-12-09 + *Seo SanghyeonCommits: 2Joined: 2010-09-29 - *Arne de BruijnCommits: 2Joined: 2012-12-11 + *Marc GarciaCommits: 2Joined: 2012-05-04 - *Chris HoppeCommits: 2Joined: 2013-06-27 + *Ferran VidalCommits: 2Joined: 2012-04-21 - *Hideki IkedaCommits: 2Joined: 2014-06-25 + *Mateusz ZasuwikCommits: 2Joined: 2011-12-20 - *Kishor BhatCommits: 2Joined: 2015-01-28 + *Rimas KudelisCommits: 2Joined: 2015-01-06 - *Justin MalcolmCommits: 2Joined: 2010-09-29 + *Chris HoppeCommits: 2Joined: 2013-06-27 - *Jing XianCommits: 2Joined: 2013-06-26 + *Derrick RochaCommits: 2Joined: 2015-08-26 - *Michael NattererCommits: 2Joined: 2011-04-08 + *David SteeleCommits: 2Joined: 2012-04-24 - *Akash ShetyeCommits: 2Joined: 2013-03-23 + *William GathoyeCommits: 2Joined: 2012-02-28 - *Janos FaragoCommits: 2Joined: 2013-09-03 + *PKEuSCommits: 2Joined: 2012-02-05 - *YiiChang YenCommits: 2Joined: 2014-10-16 + *Horacio FernandesCommits: 2Joined: 2012-07-20 - *Emanuele FiaCommits: 2Joined: 2011-11-02 + *Austin ChenCommits: 2Joined: 2015-03-25 - *V Stuart FooteCommits: 2Joined: 2014-12-04 + *Gregg KingCommits: 2Joined: 2013-02-26 - *Ryan McCoskrieCommits: 2Joined: 2014-09-14 + *Marcin eXine MCommits: 2Joined: 2010-11-02 - *Pader RezsoCommits: 2Joined: 2013-07-01 + *Benedikt MorbachCommits: 2Joined: 2013-03-10 - *Johann MessnerCommits: 2Joined: 2012-08-28 + *Mark WilliamsCommits: 2Joined: 2014-12-17 - *Andreu Correa CasablancaCommits: 2Joined: 2011-09-11 + *Rolf HemmerlingCommits: 2Joined: 2013-06-15 - *Michal SvecCommits: 2Joined: 2011-07-12 + *Arne de BruijnCommits: 2Joined: 2012-12-11 - *Jesso Clarence MuruganCommits: 2Joined: 2012-06-23 + *Aybuke OzdemirCommits: 2Joined: 2015-10-07 - *Takashi NakamotoCommits: 2Joined: 2011-08-28 + *Bartolomé Sánchez SaladoCommits: 2Joined: 2012-02-18 + *Martin HollmichelCommits: 2Joined: 2015-06-29 + + + *Flex LiuCommits: 2Joined: 2012-09-04 + + + *Janos FaragoCommits: 2Joined: 2013-09-03 + + + *Hussian AlamriCommits: 2Joined: 2014-05-14 + + + + + *Christos StrubulisCommits: 2Joined: 2012-12-09 + + *Jose Santiago Jimenez SarmientoCommits: 2Joined: 2012-04-24 - *Pierre-Eric Pelloux-PrayerCommits: 2Joined: 2015-02-08 + *Jing XianCommits: 2Joined: 2013-06-26 - *Nadav VinikCommits: 2Joined: 2010-10-21 + *Neil MooreCommits: 2Joined: 2013-08-09 + + - *Bisal NayalCommits: 2Joined: 2014-05-07 + *Greggory HernandezCommits: 2Joined: 2012-02-22 + + + *Jagan LokanathaCommits: 2Joined: 2013-11-19 + + + *Arno TeigsethCommits: 2Joined: 2011-09-14 + + + *Jesso Clarence MuruganCommits: 2Joined: 2012-06-23 - *Supreme AryalCommits: 2Joined: 2014-12-04 + *Karsten GerloffCommits: 2Joined: 2011-02-06 - *Hannah LyhneCommits: 1Joined: 2014-04-01 + *Sophie GautierCommits: 2Joined: 2010-12-19 - *Goran RakicCommits: 1Joined: 2013-03-30 + *Karthik A PadmanabhanCommits: 2Joined: 2012-03-31 - *Mathieu ParentCommits: 1Joined: 2014-10-03 + *Maxim IorshCommits: 2Joined: 2011-10-05 - *Dona HertelCommits: 1Joined: 2011-04-14 + *dbeurleCommits: 2Joined: 2015-01-12 - *Chen ZuoJunCommits: 1Joined: 2012-10-08 + *Carlos LuqueCommits: 2Joined: 2015-07-16 - *mb93783Commits: 1Joined: 2010-12-21 + *Robert SedakCommits: 2Joined: 2010-10-05 - *Andrew RistCommits: 1Joined: 2012-10-05 + *Emanuele FiaCommits: 2Joined: 2011-11-02 - *Laureano G. LindeCommits: 1Joined: 2012-04-15 + *Janit AnjariaCommits: 2Joined: 2013-04-19 - *Tim JanikCommits: 1Joined: 2012-08-10 + *Moritz KuettCommits: 2Joined: 2013-03-23 - *Philipp KaluzaCommits: 1Joined: 2012-10-21 + *Abeer SethiCommits: 2Joined: 2012-04-12 - *AWASHIRO IkuyaCommits: 1Joined: 2011-01-04 + *Pader RezsoCommits: 2Joined: 2013-07-01 - *Milan CrhaCommits: 1Joined: 2013-02-07 + *Cyril RoelandtCommits: 2Joined: 2011-04-26 - *Rich WarehamCommits: 1Joined: 2012-01-12 + *Yury TarasievichCommits: 2Joined: 2011-11-23 - *Aldo Román NureñaCommits: 1Joined: 2012-04-09 + *Hideki IkedaCommits: 2Joined: 2014-06-25 - *Da'angh KhagarothCommits: 1Joined: 2012-01-16 + *Takashi NakamotoCommits: 2Joined: 2011-08-28 - *Tarun KumarCommits: 1Joined: 2014-03-07 + *Daniel HerdeCommits: 2Joined: 2012-08-09 - *Ward van WanrooijCommits: 1Joined: 2012-06-25 + *Michael NattererCommits: 2Joined: 2011-04-08 - *Olivier PlotonCommits: 1Joined: 2012-12-12 + *Markus WernigCommits: 2Joined: 2015-03-18 - *Ruggero CyrilleCommits: 1Joined: 2014-10-18 + *Gulsah KoseCommits: 2Joined: 2015-03-14 - *Joshua CogliatiCommits: 1Joined: 2012-01-06 + *Johann MessnerCommits: 2Joined: 2012-08-28 - *Dolives BenoitCommits: 1Joined: 2011-07-04 + *Nadav VinikCommits: 2Joined: 2010-10-21 - *Adolfo Jayme BarrientosCommits: 1Joined: 2013-06-21 + *Bisal NayalCommits: 2Joined: 2014-05-07 - *xjclCommits: 1Joined: 2014-08-04 + *Supreme AryalCommits: 2Joined: 2014-12-04 - *Ross BurtonCommits: 1Joined: 2012-04-18 + *Goran RakicCommits: 1Joined: 2013-03-30 - *Kalman KemenczyCommits: 1Joined: 2010-10-28 + *Ross BurtonCommits: 1Joined: 2012-04-18 - *Paulo JoséCommits: 1Joined: 2011-04-01 + *Martin BrownCommits: 1Joined: 2013-02-23 - *Gordon LackCommits: 1Joined: 2012-05-09 + *Philipp KaluzaCommits: 1Joined: 2012-10-21 - *Javier Silva SanahujaCommits: 1Joined: 2012-04-23 + *Milan CrhaCommits: 1Joined: 2013-02-07 - *Pádraig BradyCommits: 1Joined: 2011-10-21 + *Rich WarehamCommits: 1Joined: 2012-01-12 - *Srijan ChoudharyCommits: 1Joined: 2013-08-10 + *Swachhand LokhandeCommits: 1Joined: 2015-03-07 - *Jonathan SchultzCommits: 1Joined: 2013-05-22 + *Raj NatarajanCommits: 1Joined: 2015-07-23 + *Ruggero CyrilleCommits: 1Joined: 2014-10-18 + + + *Pádraig BradyCommits: 1Joined: 2011-10-21 + + + *Foo Lai ChooCommits: 1Joined: 2014-11-26 + + *Tzvetelina TzenevaCommits: 1Joined: 2011-12-22 + + *Kenneth BeckCommits: 1Joined: 2013-03-02 - *Maarten HoesCommits: 1Joined: 2014-12-20 + *Udo SchuermannCommits: 1Joined: 2012-04-16 - *Erik AuerswaldCommits: 1Joined: 2013-07-09 + *Valek FilippovCommits: 1Joined: 2013-02-23 + + + *Jörg SonnenbergerCommits: 1Joined: 2014-08-28 - *Babu VincentCommits: 1Joined: 2014-09-19 + *Mattias PõldaruCommits: 1Joined: 2014-12-06 - *Alberto FerreiraCommits: 1Joined: 2012-06-08 + *Kevin HausmannCommits: 1Joined: 2012-08-17 - *Péter SzathmáryCommits: 1Joined: 2015-01-07 + *Andreas SliwkaCommits: 1Joined: 2011-02-06 - *Martin BrownCommits: 1Joined: 2013-02-23 + *Jeff AignerCommits: 1Joined: 2011-06-09 - *Heiko ScheidtCommits: 1Joined: 2014-08-03 + *Michael DunphyCommits: 1Joined: 2015-03-22 - *Arfrever Frehtes Taifersar ArahesisCommits: 1Joined: 2012-04-02 + *Ta Duc TungCommits: 1Joined: 2011-08-08 - *Valek FilippovCommits: 1Joined: 2013-02-23 + *Alex KempshallCommits: 1Joined: 2011-08-14 - *James Michael DuPontCommits: 1Joined: 2013-08-30 + *Robin KumarCommits: 1Joined: 2014-06-17 - *Johannes WidmerCommits: 1Joined: 2013-03-23 + *Neven ĆosićCommits: 1Joined: 2012-10-08 - *Hiroto KagotaniCommits: 1Joined: 2014-08-19 + *Lennart PoetteringCommits: 1Joined: 2014-10-09 - *Jun NOGATACommits: 1Joined: 2015-01-07 + *Mathieu DCommits: 1Joined: 2012-11-19 - *Ota ChasákCommits: 1Joined: 2013-04-24 + *Benjamin OtteCommits: 1Joined: 2013-06-15 - *OKANO TakayoshiCommits: 1Joined: 2013-01-29 + *Valter MuraCommits: 1Joined: 2015-06-07 - *Rafael CabralCommits: 1Joined: 2011-03-31 + *Nathan WellsCommits: 1Joined: 2015-09-03 - *Alex IvanCommits: 1Joined: 2013-04-15 + *Dobra GaborCommits: 1Joined: 2015-04-02 - *sonakshi nathaniCommits: 1Joined: 2013-06-26 + *Naser SharifiCommits: 1Joined: 2012-11-26 - *Jean-Yves RoyerCommits: 1Joined: 2011-03-07 + *Shreyansh GandhiCommits: 1Joined: 2014-06-10 - *Jan BobisudCommits: 1Joined: 2013-04-29 + *Michael KovarikCommits: 1Joined: 2015-01-07 - *Rubén JáñezCommits: 1Joined: 2010-10-11 + *Mathias SuppCommits: 1Joined: 2014-02-25 - *Edmund LaugassonCommits: 1Joined: 2015-01-07 + *Eric S. RaymondCommits: 1Joined: 2013-06-07 - *Stefano FacchiniCommits: 1Joined: 2013-08-22 + *Bernhard M. WiedemannCommits: 1Joined: 2011-10-17 - *Kevin HausmannCommits: 1Joined: 2012-08-17 + *Neil Voss (fourier)Commits: 1Joined: 2013-05-24 - *Milan ZelenkaCommits: 1Joined: 2014-03-26 + *tinderboxCommits: 1Joined: 2013-04-11 - *Ashish BanerjeeCommits: 1Joined: 2013-04-04 + *pgajdosCommits: 1Joined: 2011-01-31 - *Andreas SliwkaCommits: 1Joined: 2011-02-06 + *Roman EiseleCommits: 1Joined: 2011-11-23 - *Christopher BackhouseCommits: 1Joined: 2010-12-06 + *Simon WilperCommits: 1Joined: 2015-01-24 - *Jeff AignerCommits: 1Joined: 2011-06-09 + *Andreas K. Huettel (dilfridge)Commits: 1Joined: 2015-01-04 - *Zsolt BölönyCommits: 1Joined: 2015-01-10 + *JesseCommits: 1Joined: 2011-12-14 - *Ta Duc TungCommits: 1Joined: 2011-08-08 + *Javier CatalaCommits: 1Joined: 2012-04-26 - *Stefan WeigelCommits: 1Joined: 2011-10-17 + *yjw9012Commits: 1Joined: 2013-12-30 - *Alberto RuizCommits: 1Joined: 2011-03-31 + *armijnCommits: 1Joined: 2010-12-30 - *Rimas KudelisCommits: 1Joined: 2015-01-06 + *keremCommits: 1Joined: 2015-10-12 - *Alex KempshallCommits: 1Joined: 2011-08-14 + *OndÅ™ej SmržCommits: 1Joined: 2013-03-10 - *Hansgerd SchneiderCommits: 1Joined: 2013-04-02 + *Italo VignoliCommits: 1Joined: 2012-03-09 + + + *massinissaHamidiCommits: 1Joined: 2015-05-07 + + + *Andor ErtseyCommits: 1Joined: 2011-09-04 + + + + + *ritztroCommits: 1Joined: 2015-04-11 + + + *Jihui ChoiCommits: 1Joined: 2015-06-22 + + + *Srijan ChoudharyCommits: 1Joined: 2013-08-10 + + + *Marcel HBCommits: 1Joined: 2011-05-03 + + + + + *Xavi Escriche GalindoCommits: 1Joined: 2012-04-24 + + + *Stefan WeigelCommits: 1Joined: 2011-10-17 *Paula MannesCommits: 1Joined: 2012-11-30 - *Michal HorakCommits: 1Joined: 2014-04-21 + *Trevor MurphyCommits: 1Joined: 2010-10-20 - *Italo VignoliCommits: 1Joined: 2012-03-09 + *mmeof2Commits: 1Joined: 2015-05-09 - *Lennart PoetteringCommits: 1Joined: 2014-10-09 + *burekenCommits: 1Joined: 2015-10-01 - *Ayantha RandikaCommits: 1Joined: 2014-01-23 + *Marco BiscaroCommits: 1Joined: 2012-08-27 - *roopak12345Commits: 1Joined: 2014-03-09 + *Johannes WidmerCommits: 1Joined: 2013-03-23 - *Guillaume FillolCommits: 1Joined: 2011-01-29 + *Ryo ONODERACommits: 1Joined: 2014-04-07 - *Nico WeyandCommits: 1Joined: 2012-09-02 + *umairshahidCommits: 1Joined: 2015-05-29 - *Jan HubickaCommits: 1Joined: 2014-02-18 + *Masataka ShinkeCommits: 1Joined: 2012-02-15 *Phil HartCommits: 1Joined: 2012-06-29 @@ -3496,35 +3660,91 @@ - *Andrew WestCommits: 1Joined: 2011-10-21 + *Vicente Rafael Estevez VacasCommits: 1Joined: 2012-04-22 - *Mathieu DCommits: 1Joined: 2012-11-19 + *Bryan QuigleyCommits: 1Joined: 2012-12-12 - *Juan Pablo Martínez CortésCommits: 1Joined: 2011-11-28 + *Michal SiedlaczekCommits: 1Joined: 2014-01-25 - *AdrienCommits: 1Joined: 2013-08-18 + *Jean-Yves RoyerCommits: 1Joined: 2011-03-07 - *Jörg SonnenbergerCommits: 1Joined: 2014-08-28 + *Victor LeeCommits: 1Joined: 2011-12-24 - *Mattias PõldaruCommits: 1Joined: 2014-12-06 + *AWASHIRO IkuyaCommits: 1Joined: 2011-01-04 - *Dan CorneanuCommits: 1Joined: 2010-12-29 + *Olivier PlotonCommits: 1Joined: 2012-12-12 - *Florent GallaireCommits: 1Joined: 2012-04-21 + *Joshua CogliatiCommits: 1Joined: 2012-01-06 - *dbarisakkurtCommits: 1Joined: 2012-02-02 + *xjclCommits: 1Joined: 2014-08-04 + + + *Chen ZuoJunCommits: 1Joined: 2012-10-08 + + + *Javier Silva SanahujaCommits: 1Joined: 2012-04-23 + + + *Andrew RistCommits: 1Joined: 2012-10-05 + + + + + *Travis CarterCommits: 1Joined: 2012-06-22 + + + *Péter SzathmáryCommits: 1Joined: 2015-01-07 + + + *Hiroto KagotaniCommits: 1Joined: 2014-08-19 + + + *Alberto RuizCommits: 1Joined: 2011-03-31 + + + + + *Petr GajdosCommits: 1Joined: 2015-04-07 + + + *Stefano FacchiniCommits: 1Joined: 2013-08-22 + + + *Milan ZelenkaCommits: 1Joined: 2014-03-26 + + + *Mark WrightCommits: 1Joined: 2013-02-09 + + + + + *Piet van OostrumCommits: 1Joined: 2015-03-12 + + + *roopak12345Commits: 1Joined: 2014-03-09 + + + *Juan Pablo Martínez CortésCommits: 1Joined: 2011-11-28 + + + *Vincent PovirkCommits: 1Joined: 2011-12-19 + + + + + *Christopher BackhouseCommits: 1Joined: 2010-12-06 *Andy HearnCommits: 1Joined: 2011-01-09 @@ -3533,21 +3753,91 @@ *Karl KoehlerCommits: 1Joined: 2011-11-11 + *Alexandre FournierCommits: 1Joined: 2010-11-06 + + + + + *Martin OwensCommits: 1Joined: 2014-07-27 + + + *Edmund LaugassonCommits: 1Joined: 2015-01-07 + + *Douglas Rodrigues de AlmeidaCommits: 1Joined: 2012-09-15 + + *Hamza AbdelkebirCommits: 1Joined: 2013-02-23 + - *Alexandre FournierCommits: 1Joined: 2010-11-06 + *Jacqueline RahemipourCommits: 1Joined: 2013-03-23 - *Martin OwensCommits: 1Joined: 2014-07-27 + *Aditya KaleCommits: 1Joined: 2014-04-01 - *Vincent PovirkCommits: 1Joined: 2011-12-19 + *Jonathan RiddellCommits: 1Joined: 2014-11-22 - *camilleCommits: 1Joined: 2010-12-13 + *James CCommits: 1Joined: 2011-12-20 + + + + + *Tim RichardsonCommits: 1Joined: 2013-06-04 + + + *Hannah LyhneCommits: 1Joined: 2014-04-01 + + + *Florent GallaireCommits: 1Joined: 2012-04-21 + + + *Milos SramekCommits: 1Joined: 2012-01-20 + + + + + *Evertjan GarretsenCommits: 1Joined: 2010-10-04 + + + *William LachanceCommits: 1Joined: 2011-06-08 + + + *krishnan parthasarathiCommits: 1Joined: 2010-10-07 + + + *ZirkCommits: 1Joined: 2015-01-07 + + + + + *Kevin PengCommits: 1Joined: 2012-07-20 + + + *Paolo PozzanCommits: 1Joined: 2010-12-19 + + + *Rolf KoetterCommits: 1Joined: 2013-11-05 + + + *Ward van WanrooijCommits: 1Joined: 2012-06-25 + + + + + *Arkadiusz MiÅ›kiewiczCommits: 1Joined: 2014-10-09 + + + *NeilBrownCommits: 1Joined: 2010-09-28 + + + *Miguel FernándezCommits: 1Joined: 2012-04-26 + + + *Gábor NyersCommits: 1Joined: 2013-03-02 @@ -3555,574 +3845,572 @@ *Jean-François Fortin TamCommits: 1Joined: 2013-06-10 - *Brian FraserCommits: 1Joined: 2013-09-03 + *iremsendurCommits: 1Joined: 2015-10-11 - *Joseph BrownCommits: 1Joined: 2012-08-14 + *Tadele AssefaCommits: 1Joined: 2013-01-15 - *Mathieu ParentCommits: 1Joined: 2013-10-14 + *Martin LiÅ¡kaCommits: 1Joined: 2014-03-26 - *Nathan YeeCommits: 1Joined: 2015-01-01 + *Jose ManuelCommits: 1Joined: 2012-04-25 - *Jacqueline RahemipourCommits: 1Joined: 2013-03-23 + *Michael DuelliCommits: 1Joined: 2013-08-01 - *Aditya KaleCommits: 1Joined: 2014-04-01 + *Vojta KoukalCommits: 1Joined: 2013-03-03 - *Marco BiscaroCommits: 1Joined: 2012-08-27 + *Chris CheneyCommits: 1Joined: 2011-04-27 - *pkoroau pkoroauCommits: 1Joined: 2012-12-20 + *Aleksandr AndreevCommits: 1Joined: 2015-04-20 - *Audrey TangCommits: 1Joined: 2014-08-05 + *Irányossy Knoblauch ArtúrCommits: 1Joined: 2013-04-06 - *Christophe StrobbeCommits: 1Joined: 2011-08-09 + *Fahad Al-SaidiCommits: 1Joined: 2014-07-16 - *Mark WrightCommits: 1Joined: 2013-02-09 + *ricardobottoCommits: 1Joined: 2013-05-18 - *Yohei YukawaCommits: 1Joined: 2013-05-06 + *Cassio NeriCommits: 1Joined: 2011-05-01 - *Stefan HeinemannCommits: 1Joined: 2012-02-16 + *Danny BrownCommits: 1Joined: 2013-09-18 - *Jonathan RiddellCommits: 1Joined: 2014-11-22 + *David PenzesCommits: 1Joined: 2011-06-14 - *Jaime NavarroCommits: 1Joined: 2012-04-20 + *Jason GerlowskiCommits: 1Joined: 2014-03-07 - *Monica Ramirez ArcedaCommits: 1Joined: 2012-04-23 + *Manas JoshiCommits: 1Joined: 2014-03-17 - *Shreyansh GandhiCommits: 1Joined: 2014-06-10 + *Aron BudeaCommits: 1Joined: 2014-12-22 - *James CCommits: 1Joined: 2011-12-20 + *sagarCommits: 1Joined: 2012-09-15 - *Andrey TurkinCommits: 1Joined: 2011-02-09 + *Karan DesaiCommits: 1Joined: 2012-04-01 - *Alaa.BukhariCommits: 1Joined: 2013-07-04 + *Steven MeyerCommits: 1Joined: 2013-03-13 - *Mathias SuppCommits: 1Joined: 2014-02-25 + *Paulo JoséCommits: 1Joined: 2011-04-01 - *Eric S. RaymondCommits: 1Joined: 2013-06-07 + *Dona HertelCommits: 1Joined: 2011-04-14 - *Jordi MallachCommits: 1Joined: 2012-05-03 + *Aldo Román NureñaCommits: 1Joined: 2012-04-09 - *Daniel NaberCommits: 1Joined: 2012-05-09 + *Kalman KemenczyCommits: 1Joined: 2010-10-28 - *Martin RichardCommits: 1Joined: 2012-01-31 + *Naruhiko OgasawaraCommits: 1Joined: 2014-10-25 - *Bernhard M. WiedemannCommits: 1Joined: 2011-10-17 + *Ankitkumar Rameshchandra PatelCommits: 1Joined: 2012-01-20 - *matt_51Commits: 1Joined: 2013-11-05 + *Babu VincentCommits: 1Joined: 2014-09-19 - *tinderboxCommits: 1Joined: 2013-04-11 + *Heiko ScheidtCommits: 1Joined: 2014-08-03 - *Jiri BlechaCommits: 1Joined: 2013-03-02 + *Arfrever Frehtes Taifersar ArahesisCommits: 1Joined: 2012-04-02 - *Roman EiseleCommits: 1Joined: 2011-11-23 + *OKANO TakayoshiCommits: 1Joined: 2013-01-29 - *Wolfgang SilbermayrCommits: 1Joined: 2010-10-21 + *Alex IvanCommits: 1Joined: 2013-04-15 - *Simon WilperCommits: 1Joined: 2015-01-24 + *sonakshi nathaniCommits: 1Joined: 2013-06-26 - *Andreas K. Huettel (dilfridge)Commits: 1Joined: 2015-01-04 + *Sam TukeCommits: 1Joined: 2015-05-21 - *Milos SramekCommits: 1Joined: 2012-01-20 + *Hansgerd SchneiderCommits: 1Joined: 2013-04-02 - *JesseCommits: 1Joined: 2011-12-14 + *Ayantha RandikaCommits: 1Joined: 2014-01-23 - *J. Fernando LagrangeCommits: 1Joined: 2014-02-02 + *Jorge Cunha MendesCommits: 1Joined: 2015-04-03 - *Javier CatalaCommits: 1Joined: 2012-04-26 + *Jan HubickaCommits: 1Joined: 2014-02-18 - *Jan NieuwenhuizenCommits: 1Joined: 2011-04-28 + *Joseph BrownCommits: 1Joined: 2012-08-14 - *Andrew BranchCommits: 1Joined: 2013-02-20 + *Dan CorneanuCommits: 1Joined: 2010-12-29 - *Manas JoshiCommits: 1Joined: 2014-03-17 + *Tim JanikCommits: 1Joined: 2012-08-10 - *Honza MinarikCommits: 1Joined: 2013-04-03 + *dbarisakkurtCommits: 1Joined: 2012-02-02 - *Moritz BechlerCommits: 1Joined: 2011-12-19 + *Pavel KacerCommits: 1Joined: 2013-04-11 - *yjw9012Commits: 1Joined: 2013-12-30 + *Fernando GovernatoreCommits: 1Joined: 2012-02-25 - *Pavel KacerCommits: 1Joined: 2013-04-11 + *Christophe StrobbeCommits: 1Joined: 2011-08-09 - *Reem.ALotaibiCommits: 1Joined: 2013-07-25 + *matt_51Commits: 1Joined: 2013-11-05 - *Neil Voss (fourier)Commits: 1Joined: 2013-05-24 + *Karthick Prasad GunasekaranCommits: 1Joined: 2015-03-22 - *Naser SharifiCommits: 1Joined: 2012-11-26 + *J. Fernando LagrangeCommits: 1Joined: 2014-02-02 - *armijnCommits: 1Joined: 2010-12-30 + *Jan NieuwenhuizenCommits: 1Joined: 2011-04-28 - *DaveCommits: 1Joined: 2012-08-23 + *Pieter AdriaensenCommits: 1Joined: 2014-12-21 - *Matt PrattCommits: 1Joined: 2011-11-02 + *James Michael DuPontCommits: 1Joined: 2013-08-30 - *OndÅ™ej SmržCommits: 1Joined: 2013-03-10 + *Reem.ALotaibiCommits: 1Joined: 2013-07-25 - *Ryo ONODERACommits: 1Joined: 2014-04-07 + *DaveCommits: 1Joined: 2012-08-23 - *siqiCommits: 1Joined: 2014-01-26 + *Serge KrotCommits: 1Joined: 2015-10-25 - *Dave RichardsCommits: 1Joined: 2012-08-22 + *Apostolos SyropoulosCommits: 1Joined: 2014-05-07 - *krishnan parthasarathiCommits: 1Joined: 2010-10-07 + *Daniel MihalyiCommits: 1Joined: 2012-02-06 - *Krunoslav Å ebetićCommits: 1Joined: 2013-07-18 + *Quentin PradetCommits: 1Joined: 2012-12-21 - *Modestas RimkusCommits: 1Joined: 2011-11-21 + *Adrià Cereto MassaguéCommits: 1Joined: 2010-10-26 - *Nick SavageCommits: 1Joined: 2010-10-01 + *Christopher HotchkissCommits: 1Joined: 2013-02-15 - *Pieter AdriaensenCommits: 1Joined: 2014-12-21 + *Slávek BankoCommits: 1Joined: 2015-10-10 - *Victor PortellaCommits: 1Joined: 2014-11-05 + *Ionut BiruCommits: 1Joined: 2012-05-14 - *Rishabh KumarCommits: 1Joined: 2015-02-13 + *mb93783Commits: 1Joined: 2010-12-21 - *Fernando GovernatoreCommits: 1Joined: 2012-02-25 + *Christoph LutzCommits: 1Joined: 2011-09-06 - *Jose ManuelCommits: 1Joined: 2012-04-25 + *Louis PossozCommits: 1Joined: 2012-10-26 - *ZirkCommits: 1Joined: 2015-01-07 + *Joan ParaisoCommits: 1Joined: 2015-09-25 - *Apostolos SyropoulosCommits: 1Joined: 2014-05-07 + *Rafael CabralCommits: 1Joined: 2011-03-31 - *Alex GulyásCommits: 1Joined: 2014-04-27 + *Jiri BlechaCommits: 1Joined: 2013-03-02 - *yangzhangCommits: 1Joined: 2013-12-12 + *Tomas HlavatyCommits: 1Joined: 2014-06-03 - *Quentin PradetCommits: 1Joined: 2012-12-21 + *Serg BormantCommits: 1Joined: 2011-11-28 - *Louis PossozCommits: 1Joined: 2012-10-26 + *ACTomCommits: 1Joined: 2015-03-23 - *Rolf KoetterCommits: 1Joined: 2013-11-05 + *Tim-Philipp MüllerCommits: 1Joined: 2012-07-29 - *Damien ChambeCommits: 1Joined: 2014-06-15 + *Sujith SudhakaranCommits: 1Joined: 2015-04-07 - *Adrià Cereto MassaguéCommits: 1Joined: 2010-10-26 + *nrbrtx@gmail.comCommits: 1Joined: 2014-06-10 - *gdm.manmeetCommits: 1Joined: 2014-03-18 + *Freek de KruijfCommits: 1Joined: 2010-12-19 - *Arkadiusz MiÅ›kiewiczCommits: 1Joined: 2014-10-09 + *Carsten NiehausCommits: 1Joined: 2012-02-09 - *Jan HubickaCommits: 1Joined: 2011-09-12 + *Tarun KumarCommits: 1Joined: 2014-03-07 - *Richard HughesCommits: 1Joined: 2013-10-01 + *Jonathan SchultzCommits: 1Joined: 2013-05-22 - *Heena GuptaCommits: 1Joined: 2014-06-17 + *Nick SavageCommits: 1Joined: 2010-10-01 - *Robin KumarCommits: 1Joined: 2014-06-17 + *Monica Ramirez ArcedaCommits: 1Joined: 2012-04-23 - *Neil StalkerCommits: 1Joined: 2010-10-02 + *camilleCommits: 1Joined: 2010-12-13 - *Ionut BiruCommits: 1Joined: 2012-05-14 + *Denis LackovicCommits: 1Joined: 2010-10-05 - *Juergen SteinhilberCommits: 1Joined: 2012-03-05 + *Dushyant BhalgamiCommits: 1Joined: 2014-07-04 - *Vicente Rafael Estevez VacasCommits: 1Joined: 2012-04-22 + *Peter TillemansCommits: 1Joined: 2012-06-26 - *William LachanceCommits: 1Joined: 2011-06-08 + *Andrey TurkinCommits: 1Joined: 2011-02-09 - *Nikita OfitserovCommits: 1Joined: 2011-01-10 + *Tomas TurekCommits: 1Joined: 2013-03-24 - *Marcel HBCommits: 1Joined: 2011-05-03 + *Stephan van den AkkerCommits: 1Joined: 2012-06-07 - *NeilBrownCommits: 1Joined: 2010-09-28 + *Maxime CôtéCommits: 1Joined: 2011-04-19 - *Christoph LutzCommits: 1Joined: 2011-09-06 + *AdrienCommits: 1Joined: 2013-08-18 - *Miguel FernándezCommits: 1Joined: 2012-04-26 + *Peng GaoCommits: 1Joined: 2013-06-16 - *Gábor NyersCommits: 1Joined: 2013-03-02 + *robert BabiakCommits: 1Joined: 2015-03-25 - *Xavi Escriche GalindoCommits: 1Joined: 2012-04-24 + *melikeyurtogluCommits: 1Joined: 2015-10-09 - *Alexandr N. ZamaraevCommits: 1Joined: 2010-10-01 + *Rubén JáñezCommits: 1Joined: 2010-10-11 - *Tomas HlavatyCommits: 1Joined: 2014-06-03 + *Laureano G. LindeCommits: 1Joined: 2012-04-15 - *Foo Lai ChooCommits: 1Joined: 2014-11-26 + *Da'angh KhagarothCommits: 1Joined: 2012-01-16 - *pavelCommits: 1Joined: 2010-12-10 + *Jaime NavarroCommits: 1Joined: 2012-04-20 - *Kenneth AafløyCommits: 1Joined: 2012-01-11 + *Maarten HoesCommits: 1Joined: 2014-12-20 - *Daniel MihalyiCommits: 1Joined: 2012-02-06 + *vincentCommits: 1Joined: 2013-03-22 - *Kevin PengCommits: 1Joined: 2012-07-20 + *Erik AuerswaldCommits: 1Joined: 2013-07-09 - *Tadele AssefaCommits: 1Joined: 2013-01-15 + *brinzingCommits: 1Joined: 2015-08-22 - *Naruhiko OgasawaraCommits: 1Joined: 2014-10-25 + *Henning DiedlerCommits: 1Joined: 2013-11-02 - *Michael KovarikCommits: 1Joined: 2015-01-07 + *Jun NOGATACommits: 1Joined: 2015-01-07 - *Neven ĆosićCommits: 1Joined: 2012-10-08 + *Ota ChasákCommits: 1Joined: 2013-04-24 - *Martin LiÅ¡kaCommits: 1Joined: 2014-03-26 + *Jan BobisudCommits: 1Joined: 2013-04-29 - *Freek de KruijfCommits: 1Joined: 2010-12-19 + *Ashish BanerjeeCommits: 1Joined: 2013-04-04 - *Andor ErtseyCommits: 1Joined: 2011-09-04 + *Alaa.BukhariCommits: 1Joined: 2013-07-04 - *Maxime CôtéCommits: 1Joined: 2011-04-19 + *marstayCommits: 1Joined: 2015-10-18 - *vincentCommits: 1Joined: 2013-03-22 + *Guillaume FillolCommits: 1Joined: 2011-01-29 - *Tim-Philipp MüllerCommits: 1Joined: 2012-07-29 + *Andrew WestCommits: 1Joined: 2011-10-21 - *Siqi LIUCommits: 1Joined: 2013-08-15 + *Antoine CÅ“urCommits: 1Joined: 2015-06-11 - *Hamza AbdelkebirCommits: 1Joined: 2013-02-23 + *Dennis E. HamiltonCommits: 1Joined: 2013-01-19 - *Trevor MurphyCommits: 1Joined: 2010-10-20 + *Hugo Beauzée-LuyssenCommits: 1Joined: 2011-09-28 - *Serg BormantCommits: 1Joined: 2011-11-28 + *Modestas RimkusCommits: 1Joined: 2011-11-21 - *Paolo PozzanCommits: 1Joined: 2010-12-19 + *Brian FraserCommits: 1Joined: 2013-09-03 - *Michael DuelliCommits: 1Joined: 2013-08-01 + *Michael HornCommits: 1Joined: 2015-03-21 - *Vojta KoukalCommits: 1Joined: 2013-03-03 + *pkoroau pkoroauCommits: 1Joined: 2012-12-20 - *Udo SchuermannCommits: 1Joined: 2012-04-16 + *Audrey TangCommits: 1Joined: 2014-08-05 - *pgajdosCommits: 1Joined: 2011-01-31 + *Krunoslav Å ebetićCommits: 1Joined: 2013-07-18 - *Benjamin OtteCommits: 1Joined: 2013-06-15 + *Victor PortellaCommits: 1Joined: 2014-11-05 - *Danny RobertsCommits: 1Joined: 2011-02-18 + *gdm.manmeetCommits: 1Joined: 2014-03-18 - *Bryan QuigleyCommits: 1Joined: 2012-12-12 + *Juergen SteinhilberCommits: 1Joined: 2012-03-05 - *Nicolas ChristenerCommits: 1Joined: 2013-08-04 + *Timothée IsnardCommits: 1Joined: 2015-10-11 - *nrbrtx@gmail.comCommits: 1Joined: 2014-06-10 + *Juan A. Suarez RomeroCommits: 1Joined: 2014-12-15 - *LesterCommits: 1Joined: 2012-10-23 + *Jordi MallachCommits: 1Joined: 2012-05-03 - *christianjuCommits: 1Joined: 2014-02-10 + *Daniel NaberCommits: 1Joined: 2012-05-09 - *Irányossy Knoblauch ArtúrCommits: 1Joined: 2013-04-06 + *Martin RichardCommits: 1Joined: 2012-01-31 - *Travis CarterCommits: 1Joined: 2012-06-22 + *Neil StalkerCommits: 1Joined: 2010-10-02 - *Carsten NiehausCommits: 1Joined: 2012-02-09 + *Tomáš ChvátalCommits: 1Joined: 2015-09-15 - *Chris CheneyCommits: 1Joined: 2011-04-27 + *Alberto FerreiraCommits: 1Joined: 2012-06-08 - *Fahad Al-SaidiCommits: 1Joined: 2014-07-16 + *Wolfgang SilbermayrCommits: 1Joined: 2010-10-21 - *Seyeong KimCommits: 1Joined: 2014-10-06 + *Gordon LackCommits: 1Joined: 2012-05-09 - *Christopher HotchkissCommits: 1Joined: 2013-02-15 + *Sergey FukanchikCommits: 1Joined: 2015-09-17 - *Ankitkumar Rameshchandra PatelCommits: 1Joined: 2012-01-20 + *Andrew BranchCommits: 1Joined: 2013-02-20 - *Raymond WellsCommits: 1Joined: 2013-09-02 + *Honza MinarikCommits: 1Joined: 2013-04-03 - *ricardobottoCommits: 1Joined: 2013-05-18 + *Moritz BechlerCommits: 1Joined: 2011-12-19 - *Denis LackovicCommits: 1Joined: 2010-10-05 + *Raymond WellsCommits: 1Joined: 2013-09-02 - *haochenCommits: 1Joined: 2014-05-31 + *Matt PrattCommits: 1Joined: 2011-11-02 - *Cassio NeriCommits: 1Joined: 2011-05-01 + *Dave RichardsCommits: 1Joined: 2012-08-22 - *Danny BrownCommits: 1Joined: 2013-09-18 + *Jan HubickaCommits: 1Joined: 2011-09-12 - *MihaiCommits: 1Joined: 2015-02-13 + *Alex GulyásCommits: 1Joined: 2014-04-27 - *Dennis E. HamiltonCommits: 1Joined: 2013-01-19 + *Yurii KolesnykovCommits: 1Joined: 2015-05-10 - *David PenzesCommits: 1Joined: 2011-06-14 + *Richard HughesCommits: 1Joined: 2013-10-01 - *Dushyant BhalgamiCommits: 1Joined: 2014-07-04 + *Nikita OfitserovCommits: 1Joined: 2011-01-10 - *Peter TillemansCommits: 1Joined: 2012-06-26 + *Linus BehrensCommits: 1Joined: 2015-04-23 - *Lucian ConstantinCommits: 1Joined: 2013-03-24 + *Alexandr N. ZamaraevCommits: 1Joined: 2010-10-01 - *Jakub GolebiewskiCommits: 1Joined: 2013-04-09 + *pavelCommits: 1Joined: 2010-12-10 - *Tim RichardsonCommits: 1Joined: 2013-06-04 + *Nico WeyandCommits: 1Joined: 2012-09-02 - *Tomas TurekCommits: 1Joined: 2013-03-24 + *Kenneth AafløyCommits: 1Joined: 2012-01-11 - *PhyzerCommits: 1Joined: 2014-09-13 + *scitoCommits: 1Joined: 2015-04-13 - *Stephan van den AkkerCommits: 1Joined: 2012-06-07 + *Danny RobertsCommits: 1Joined: 2011-02-18 - *Christoph LutzCommits: 1Joined: 2013-11-05 + *LesterCommits: 1Joined: 2012-10-23 - *mmeofCommits: 1Joined: 2013-05-03 + *christianjuCommits: 1Joined: 2014-02-10 - *Henning DiedlerCommits: 1Joined: 2013-11-02 + *Seyeong KimCommits: 1Joined: 2014-10-06 - *Masataka ShinkeCommits: 1Joined: 2012-02-15 + *Florian EffenbergerCommits: 1Joined: 2015-08-04 - *Peng GaoCommits: 1Joined: 2013-06-16 + *Michal HorakCommits: 1Joined: 2014-04-21 - *Jason GerlowskiCommits: 1Joined: 2014-03-07 + *Lucian ConstantinCommits: 1Joined: 2013-03-24 - *Aron BudeaCommits: 1Joined: 2014-12-22 + *Yohei YukawaCommits: 1Joined: 2013-05-06 - *sagarCommits: 1Joined: 2012-09-15 + *Jakub GolebiewskiCommits: 1Joined: 2013-04-09 - *Evertjan GarretsenCommits: 1Joined: 2010-10-04 + *PhyzerCommits: 1Joined: 2014-09-13 - *galbarnissanCommits: 1Joined: 2014-12-03 + *mmeofCommits: 1Joined: 2013-05-03 - *Michal SiedlaczekCommits: 1Joined: 2014-01-25 + *Dolives BenoitCommits: 1Joined: 2011-07-04 - *Victor LeeCommits: 1Joined: 2011-12-24 - - - *Hugo Beauzée-LuyssenCommits: 1Joined: 2011-09-28 + *Damien ChambeCommits: 1Joined: 2014-06-15 - *Karan DesaiCommits: 1Joined: 2012-04-01 + *galbarnissanCommits: 1Joined: 2014-12-03 - - *Steven MeyerCommits: 1Joined: 2013-03-13 + + + Contributors to bundled templates @@ -4192,14 +4480,14 @@ *Francisco SaitoCommits: 1Joined: 2011-03-29 + *Tomaž VajngerlCommits: 1Joined: 2015-04-22 + + *Michael StahlCommits: 1Joined: 2012-03-23 *Stefan Knorr (astron)Commits: 1Joined: 2012-07-16 - - - Developers not committing code since 2010-09-28 @@ -4373,12 +4661,12 @@ Gerd WeissCommits: 45Joined: 2007-04-26 - Steffen GrundCommits: 45Joined: 2003-02-04 + Michael MiCommits: 45Joined: 2004-07-14 - Michael MiCommits: 45Joined: 2004-07-14 + Steffen GrundCommits: 45Joined: 2003-02-04 Armin TheissenCommits: 44Joined: 2000-09-22 @@ -4387,12 +4675,12 @@ Cyrille MoureauxCommits: 42Joined: 2002-05-17 - markmCommits: 39Joined: 2002-03-22 + neilmCommits: 39Joined: 2002-11-13 - neilmCommits: 39Joined: 2002-11-13 + markmCommits: 39Joined: 2002-03-22 oisinCommits: 38Joined: 2000-10-03 @@ -4468,10 +4756,10 @@ Amelia WangCommits: 17Joined: 2010-09-13 - Csaba BorbolaCommits: 16Joined: 2000-09-22 + dkennyCommits: 16Joined: 2001-04-17 - dkennyCommits: 16Joined: 2001-04-17 + Csaba BorbolaCommits: 16Joined: 2000-09-22 @@ -4482,10 +4770,10 @@ Ping LiaoCommits: 14Joined: 2000-09-21 - okCommits: 13Joined: 2000-11-16 + Mindy LiuCommits: 13Joined: 2003-03-03 - Mindy LiuCommits: 13Joined: 2003-03-03 + okCommits: 13Joined: 2000-11-16 @@ -4493,10 +4781,10 @@ Svante SchubertCommits: 12Joined: 2001-02-08 - cdtCommits: 11Joined: 2000-10-16 + Bernd EilersCommits: 11Joined: 2001-06-03 - Bernd EilersCommits: 11Joined: 2001-06-03 + cdtCommits: 11Joined: 2000-10-16 Laszlo KovacsCommits: 11Joined: 2002-09-23 @@ -4518,41 +4806,41 @@ - Joerg SieversCommits: 8Joined: 2008-06-13 + maCommits: 8Joined: 2001-03-21 - maCommits: 8Joined: 2001-03-21 + Joerg SieversCommits: 8Joined: 2008-06-13 - mb93783Commits: 7Joined: 2009-11-04 + niddCommits: 7Joined: 2001-12-25 - wvdCommits: 7Joined: 2001-07-18 + Mike HayesCommits: 7Joined: 2002-10-09 - Mike HayesCommits: 7Joined: 2002-10-09 + Jonathan PryorCommits: 7Joined: 2010-09-15 - mwuCommits: 7Joined: 2002-07-04 + wvdCommits: 7Joined: 2001-07-18 lwangCommits: 7Joined: 2002-11-06 - niddCommits: 7Joined: 2001-12-25 + mb93783Commits: 7Joined: 2009-11-04 - Jonathan PryorCommits: 7Joined: 2010-09-15 + mwuCommits: 7Joined: 2002-07-04 Ilko HöppingCommits: 6Joined: 2001-05-04 - Uwe FischerCommits: 5Joined: 2009-11-20 + dicCommits: 5Joined: 2001-02-12 tsCommits: 5Joined: 2000-12-11 @@ -4566,15 +4854,15 @@ lucturCommits: 5Joined: 2003-11-05 - dicCommits: 5Joined: 2001-02-12 + Uwe FischerCommits: 5Joined: 2009-11-20 - Willem van DorpCommits: 4Joined: 2000-09-29 + ms93807Commits: 4Joined: 2010-01-08 - ms93807Commits: 4Joined: 2010-01-08 + Willem van DorpCommits: 4Joined: 2000-09-29 tl93732Commits: 3Joined: 2009-10-20 @@ -4583,102 +4871,102 @@ Jiao JianhuaCommits: 3Joined: 2010-09-13 - Stella SchulzeCommits: 3Joined: 2001-09-13 + tlxCommits: 3Joined: 2000-12-07 - tlxCommits: 3Joined: 2000-12-07 + Stella SchulzeCommits: 3Joined: 2001-09-13 Stefan TaxhetCommits: 3Joined: 2001-12-13 - htajimaCommits: 2Joined: 2000-12-11 + Wind LiCommits: 2Joined: 2004-01-30 - Wind LiCommits: 2Joined: 2004-01-30 + Terence TseCommits: 2Joined: 2000-09-22 - jobinCommits: 2Joined: 2008-02-29 + mxiaoCommits: 2Joined: 2002-09-17 - Louis Suárez-PottsCommits: 2Joined: 2001-08-17 + Alexis LedouxCommits: 2Joined: 2002-09-24 - Alexis LedouxCommits: 2Joined: 2002-09-24 + Chris HallsCommits: 2Joined: 2002-10-04 - Terence TseCommits: 2Joined: 2000-09-22 + jmengCommits: 2Joined: 2003-12-04 - Chris HallsCommits: 2Joined: 2002-10-04 + htajimaCommits: 2Joined: 2000-12-11 - mxiaoCommits: 2Joined: 2002-09-17 + Louis Suárez-PottsCommits: 2Joined: 2001-08-17 - Michael RauchCommits: 2Joined: 2002-03-19 + jobinCommits: 2Joined: 2008-02-29 - jmengCommits: 2Joined: 2003-12-04 + Michael RauchCommits: 2Joined: 2002-03-19 - mbuCommits: 1Joined: 2005-10-18 + cl93746Commits: 1Joined: 2009-10-22 - shaneCommits: 1Joined: 2000-10-02 + gh93821Commits: 1Joined: 2010-04-09 - gh93821Commits: 1Joined: 2010-04-09 + dcCommits: 1Joined: 2002-03-05 - Dan WilliamsCommits: 1Joined: 2004-03-08 + vsCommits: 1Joined: 2001-01-30 - dcCommits: 1Joined: 2002-03-05 + Nakata MahoCommits: 1Joined: 2006-07-08 - asaundersCommits: 1Joined: 2003-07-07 + oc93805Commits: 1Joined: 2009-11-30 - oc93805Commits: 1Joined: 2009-11-30 + Artem KhvatCommits: 1Joined: 2007-12-14 - fs93730Commits: 1Joined: 2009-10-16 + sg128468Commits: 1Joined: 2010-01-20 - Artem KhvatCommits: 1Joined: 2007-12-14 + asaundersCommits: 1Joined: 2003-07-07 - gyangCommits: 1Joined: 2004-10-29 + mbuCommits: 1Joined: 2005-10-18 - vsCommits: 1Joined: 2001-01-30 + Dan WilliamsCommits: 1Joined: 2004-03-08 - mishaCommits: 1Joined: 2002-04-29 + shaneCommits: 1Joined: 2000-10-02 - cl93746Commits: 1Joined: 2009-10-22 + fs93730Commits: 1Joined: 2009-10-16 - Nakata MahoCommits: 1Joined: 2006-07-08 + gyangCommits: 1Joined: 2004-10-29 - sg128468Commits: 1Joined: 2010-01-20 + mishaCommits: 1Joined: 2002-04-29 @@ -4731,17 +5019,17 @@ We do not distinguish between commits that were imported from the OOo code base and those who went directly into the LibreOffice code base as: - + - a) it is technically not possible to distinguish between commits that go directly into the LibreOffice code base and commits that were merged in from the OpenOffice.org code base, and + a) it is technically not possible to distinguish between commits that go directly into the LibreOffice code base and commits that were merged in from the OpenOffice.org code base, and - b) contributors to the OOo code base should also be credited for the excellent work they do. + b) contributors to the OOo code base should also be credited for the excellent work they do. Do note that LibreOffice used to be divided into 20 git repositories. Pushing a change into all repositories will be counted as 20 commits as there is no way to distinguish this from 20 separate commits. Total contributions to the TDF Wiki - 2038 individuals contributed: + 2186 individuals contributed: @@ -4749,139 +5037,139 @@ - K-j (5166) + Roczek, Dennis (5663) - Roczek, Dennis (5136) + K-j (5598) - Uroveits (4061) + Uroveits (4079) - Tryon, Robinson (3350) + Tryon, Robinson (3579) - Pierre-yves samyn (3185) + Pierre-yves samyn (3523) - Kü (2788) + Kü (2850) - Gautier, Sophie (2613) + Gautier, Sophie (2780) - Tagezi (2175) + Goncharuk, Lera (2387) - Balland-Poirier, Laurent (2104) + Balland-Poirier, Laurent (2147) Bielefeld, Rainer (2075) - Jeanweber (1859) + Jeanweber (1894) - Effenberger, Florian (1505) + Effenberger, Florian (1577) - Marcpare (1376) + Marcpare (1382) - Michaelsen, Björn (1333) + Michaelsen, Björn (1378) Adailton (1203) - Mirek2 (1162) + Mac-Cormick, João (1195) - Buzzatti Pacheco, Gustavo (1125) + Mirek2 (1162) - Haas, Uwe (1095) + Buzzatti Pacheco, Gustavo (1125) - Mac-Cormick, João (997) + Haas, Uwe (1095) - Novak, Nino (971) + Novak, Nino (972) - Tom (920) + Tom (926) - Meeks, Michael (822) + Meeks, Michael (845) - Ostrovsky, David (723) + Ostrovsky, David (828) - Naruoga (657) + Naruoga (743) - Drew (646) + Jayme Barrientos, Adolfo (736) - Filmsi (626) + Filmsi (733) - Teo91 (619) + Teo91 (729) - GerryT (613) + GerryT (724) - Jayme Barrientos, Adolfo (606) + Clement21.philippe (664) - Jmadero (589) + Enoki (654) - Hallot, Olivier (588) + Drew (646) - H-k (578) + H-k (629) - Enoki (566) + Hallot, Olivier (602) - Clement21.philippe (554) + Jmadero (595) - de Souza Lima, Paulo (546) + Nouws, Cor (574) - Hazel (542) + Behrens, Thorsten (571) - Behrens, Thorsten (537) + de Souza Lima, Paulo (546) - ChristophNoack (532) + Hazel (542) - Nouws, Cor (522) + ChristophNoack (532) Knorr, Stefan (521) @@ -4892,49 +5180,63 @@ Davidnelson (517) - Elianedomingos (505) + Kompilainenn (517) - Jmpierre (496) + Elianedomingos (505) - Reisinger, Florian (489) + Jmpierre (498) - Mladek, Petr (450) + Reisinger, Florian (490) - Rmfaile (436) + Mladek, Petr (450) - Carrera, Sigrid (435) + Carrera, Sigrid (437) - Chris69 (419) + Rmfaile (436) + Chris69 (419) + + Gecko (419) Luz Coelho, Rogério (409) - Kompilainenn (395) + HoleÅ¡ovský, Jan (401) + + Alexander Wilms (392) + + Yoshida, Kohei (388) + + + Vajna, Miklos (388) + + + Rathke, Eike (387) + - Yoshida, Kohei (386) + Foral (384) - Foral (384) + McNamara, Caolán (381) StefanW (379) @@ -4945,38 +5247,35 @@ - McNamara, Caolán (365) + Raulpacheco (339) - Rathke, Eike (360) + AndrasTimar (334) - HoleÅ¡ovský, Jan (354) + Merschmann, Volker (329) - Raulpacheco (338) + Pruegsanusak, Korrawit (328) - Merschmann, Volker (329) + Thiebaud, Norbert (328) - Pruegsanusak, Korrawit (328) + Rönkkö, Niko (322) - Vajna, Miklos (326) + Lohmaier, Christian (316) - Rönkkö, Niko (322) + Tardon, David (313) - AndrasTimar (317) - - - Thiebaud, Norbert (299) + Foote, V Stuart (300) Heinzws (292) @@ -4984,27 +5283,30 @@ Emanuel A. Marcatinco B. (290) + + Librelegal (290) + - Librelegal (288) + Philips, Yousuf (276) - Tardon, David (271) + Hibagonsan (271) Christian, Erich (268) - Helen russian (265) + Helen russian (266) - Lohmaier, Christian (257) + Gerald (255) - Gerald (255) + Stahl, Michael (255) Tseng, Cheng-Chia (254) @@ -5018,80 +5320,80 @@ Deemonizer (248) - Adrianoafonso (242) + Adrianoafonso (245) - Loic (240) + Mohrhard, Markus (242) - Steve (237) + Loic (240) - Bosdonnat, Cédric (228) + RobertG (237) - Dippold, Bernhard (226) + Steve (237) - Vsfoote (222) + Elcico (232) - Almusaireae (219) + Bosdonnat, Cédric (230) - Khirano (215) + Dippold, Bernhard (226) - Stahl, Michael (211) + Almusaireae (219) - Gilvanvilarim (210) + Kkwet38 (218) - Andreschnabel (205) + Khirano (215) - Kkwet38 (203) + Gilvanvilarim (213) - XsLiDian (203) + Andreschnabel (205) - Jbfaure (199) + Jbfaure (205) - Hackert, Thomas (199) + XsLiDian (203) - Wheatbix (198) + Lillqvist, Tor (202) - RobertG (195) + Hackert, Thomas (199) - Erhardt (193) + Wheatbix (198) - Schulz, Charles-H. (188) + Erhardt (193) - DmitryBowie (188) + Schulz, Charles-H. (189) - Tarnhold (187) + DmitryBowie (188) - Lillqvist, Tor (181) + Tarnhold (187) Méixome, Antón (179) @@ -5099,16 +5401,16 @@ - Elcico (176) + Alkurtass, Issa (178) - Alkurtass, Issa (175) + Kaplan, Lior (176) - Mohrhard, Markus (175) + Raw text (175) - Raw text (175) + Madl, Tobias (175) @@ -5119,18 +5421,18 @@ Luizheli (172) - Madl, Tobias (170) + Furusho (169) - Furusho (168) + Jiang, Yifan (168) - Jiang, Yifan (168) + Matuaki (163) - Matuaki (162) + Veracape (161) See (160) @@ -5141,10 +5443,10 @@ - Philips, Yousuf (157) + Henschel, Regina (158) - Kaplan, Lior (154) + Pitkänen, Harri (151) Herzog, Christoph (149) @@ -5158,7 +5460,7 @@ Gonzalez, Daniel (146) - Pitkänen, Harri (146) + Sam m (146) Mipmap (144) @@ -5175,56 +5477,59 @@ P.guimberteau (137) - Norah (135) + Bergmann, Stephan (137) - Veracape (134) + Weissenbacher, Philipp (136) - Filhocf (132) + Norah (135) - Richteruwe (131) + Filhocf (132) - Henschel, Regina (130) + Kerwyn (132) - Michel, Mathias (129) + Richteruwe (131) - Nik (127) + Michel, Mathias (129) - Krackedpress (123) + Mamane, Lionel Elie (128) - RGB.ES (123) + Beluga (127) - Michelr (122) + Nik (127) - Weissenbacher, Philipp (122) + Krackedpress (123) - Bergmann, Stephan (122) + Michelr (123) - Trapezus (122) + RGB.ES (123) - Mamane, Lionel Elie (121) + Trapezus (122) + Ikuya (121) + + Lodahl (121) @@ -5233,27 +5538,24 @@ Liebel, Jennifer (119) - - Abe, Takeshi (117) - - Spaeth, Sebastian (115) + Abe, Takeshi (118) - Ikuya (114) + Rodriguez, Daniel Armando (115) - Markers (114) + Spaeth, Sebastian (115) - Vohe (113) + Markers (114) - Kerwyn (112) + Vohe (113) Marcus Gama (112) @@ -5262,7 +5564,7 @@ Medieval (111) - Rodriguez, Daniel Armando (110) + Phorious (108) @@ -5273,102 +5575,116 @@ Ki Drupadi (106) - JZA (101) + Bitsfritz (104) - Android272 (99) + Óvári (103) - JeHa (99) + Mantke, Andreas (102) - Sam m (97) + JZA (101) - AlanC (96) + Android272 (99) - Mantke, Andreas (95) + JeHa (99) - Andreasg (92) + Ysabeau (99) - Bitsfritz (92) + AlanC (98) - Llunak (92) + Nemeth (98) - MagicFab (91) + Andreasg (92) - Phorious (91) + Llunak (92) + + + Kevin, Suo (é”ç¨ç‘) (92) + + + MagicFab (91) Frombenny (90) + + + + Zolnai, Tamás (87) + Omori (86) - Kevin, Suo (é”ç¨ç‘) (86) + Shunesburg69 (86) + + + Zeki (86) - Dan (84) + Dan (85) KorrawitBot (84) - Nemeth (84) + Klaibson (82) - Zeki (84) + Nabet, Julien (82) - Ztamas (82) + JamesWalker (81) - JamesWalker (81) + 80686 (79) - Ysabeau (80) + KeithCu (78) - 80686 (79) + Milos (78) - Nabet, Julien (79) + Gathoye, William (78) - Milos (78) + Pechlaner, Wolfgang (78) - Gathoye, William (78) + Xosé (76) - KeithCu (77) + K.K.Ashisuto (75) - Pechlaner, Wolfgang (77) + Albino (74) - Xosé (76) + FiÅ¡eras, Aurimas (74) Lbalbalba (74) @@ -5379,22 +5695,19 @@ - Albino (73) - - - FiÅ¡eras, Aurimas (73) + Junmeguro (73) - Klaibson (73) + Castermans, Luc (72) Jeanmi2403 (72) - - Aury88 (71) + + RalfHB (71) @@ -5404,10 +5717,13 @@ Jo7ueb (70) + + Malhassoun (69) + - Malhassoun (69) + Deneb (68) Freetank (68) @@ -5427,18 +5743,18 @@ Ptux (67) - StanG (65) + Baffclan (66) - Karbasion, Bersam (64) + StanG (65) - Castermans, Luc (64) + Karbasion, Bersam (64) - Junmeguro (64) + Gghh (64) Oipila (64) @@ -5449,36 +5765,47 @@ + Kees538 (63) + + Kudelis, Rimas (63) + Sikeler (63) + + Denco (61) + + Frieder (61) Jlgrenar (60) - - Neel, Daniel (58) Loflex (58) + + - Camillem (57) + Kukan, Matúš (58) - Kukan, Matúš (57) + Bmcs (57) + + + Camillem (57) - - Davefilms (56) + + Glen.reesor (56) @@ -5488,6 +5815,9 @@ Jrahemipour (55) + + Hunt, Andrzej (54) + @@ -5497,7 +5827,7 @@ Sunny2038 (53) - Beluga (52) + Popa, Adrian Marius (52) Petrizzo (52) @@ -5505,10 +5835,10 @@ - Vpanter (52) + Timur LOL (52) - Hunt, Andrzej (51) + Vpanter (52) ArnoldSchiller (51) @@ -5525,18 +5855,18 @@ Agd (50) - Halparker (50) + Chtfn (50) - Ronaldo (50) + Halparker (50) - Catalin Festila (49) + Ronaldo (50) - Chtfn (49) + Catalin Festila (49) Mpescador (49) @@ -5553,41 +5883,44 @@ Dagobert 78 (47) - Sk94 (46) + Buj Gelonch, Robert Antoni (47) - Timur LOL (46) + Moreno, Eduardo (46) - Bfo (45) + Sk94 (46) - Bmcs (45) + Bfo (45) Bhorst (44) - Aaronxu (43) + Quest-88 (44) + Aaronxu (43) + + Gareth (43) - Quest-88 (43) + Htietze (42) Hertel, Jesper (42) + + KAMI (42) - - Another sam (41) @@ -5597,27 +5930,24 @@ Bluedwarf (41) - - Deneb (41) - - Gghh (41) - - Joey (41) - Kees538 (41) + Jung, Philippe (41) Kraucer (40) + + Pedlino (40) + - Baffclan (39) + Wilper, Simon (39) Dougvigliazzi (38) @@ -5626,7 +5956,7 @@ Enervation (38) - Wilper, Simon (38) + Magliocchetti, Riccardo (38) @@ -5651,10 +5981,10 @@ Castle, John LeMoyne (37) - Pedlino (37) + Pje335 (37) - Pje335 (37) + RaducuG (37) @@ -5662,108 +5992,108 @@ Danishka (36) - Moreno, Eduardo (36) + Patheticcockroach (36) Sci citation (36) - Liongold (35) + HoráÄek, Stanislav (36) - Nora (35) + Liongold (35) - Pingping111 (35) + Nora (35) - Stalker08 (35) + Paz (35) - Caco13 (34) + Pingping111 (35) - Quikee (34) + Stalker08 (35) - Buj Gelonch, Robert Antoni (34) + Subramanian, Muthu (35) - Smaug42 (34) + Caco13 (34) - Subramanian, Muthu (34) + Mahfiaz (34) - Aragunde Pérez, Jacobo (33) + Quikee (34) - Corrius, Jesús (33) + Smaug42 (34) - Lmartinezh (33) + Aragunde Pérez, Jacobo (33) - Mateus.m.luna (33) + Corrius, Jesús (33) - Patheticcockroach (33) + Lmartinezh (33) - Pereriksson (33) + Mars (33) - Rafi (33) + Mateus.m.luna (33) - Shirahara (33) + Pereriksson (33) - Clio (32) + Rafi (33) - Daud (32) + Shirahara (33) - Dryomov, Artur (32) + Clio (32) - Xuacu (32) + Daud (32) - IvanM (31) + Dryomov, Artur (32) - Paz (31) + Enger, Terrence (32) - Shunesburg69 (31) + Xuacu (32) - Mahfiaz (30) + Alexanderwerner (31) - Njsg (30) + IvanM (31) - Tclovis (30) + Njsg (30) - Enger, Terrence (30) + Tclovis (30) Thardeck (30) @@ -5771,9 +6101,6 @@ - Alexanderwerner (29) - - Cida.Coltro (29) @@ -5782,11 +6109,11 @@ Haaninjo (29) - - RodolfoRG (29) + + Серж (29) @@ -5794,6 +6121,9 @@ Ace-dent (28) + EdvaldoSCruz (28) + + Riemer, Philipp (28) @@ -5816,16 +6146,19 @@ Micm (27) + Thuswaldner, Albert (27) + + Alayaran (26) Arnaud versini (26) + + Ezeperez26 (26) - - Fanch (26) @@ -5835,11 +6168,11 @@ Hawkins, Nigel (26) + + Pirat Michi (26) - - Sveinki (26) @@ -5847,16 +6180,24 @@ Vaslav (26) + Vulcain (26) + + + + + Donkers, Winfried (26) + + Aidsoid (25) Roßmanith, Christina (25) - - Eresus (25) + + Freddyrh (25) @@ -5866,38 +6207,44 @@ Lboccia (25) + + Noelson (25) + - Noelson (25) + Winniemiel05 (25) - Vulcain (25) + Gaianer (24) - Winniemiel05 (25) + Gérard24 (24) - Gaianer (24) + Ksoviero (24) - Gérard24 (24) + Nik vr (24) - Ksoviero (24) + PaoloPelloni (24) - Mariuz (24) + Freund, Matthias (24) - Nik vr (24) + Yanpas (24) - Donkers, Winfried (24) + Lenochod (23) + + + Nogajun (23) Olorin (23) @@ -5905,11 +6252,11 @@ TaeWong (23) + + Team One (23) - - Bellerophon (22) @@ -5919,27 +6266,24 @@ HenryGR (22) - - JChimene (22) - - PaoloPelloni (22) + JChimene (22) - RaducuG (22) + Olivier (22) - Thuswaldner, Albert (22) + Youngman, Anthony W. (22) - Youngman, Anthony W. (22) + Enio.gemmo (21) - EdvaldoSCruz (21) + Grandin, Noel (21) Montané, Joan (21) @@ -5959,44 +6303,41 @@ Wayra (21) - Yanpas (21) - - Bugmenot (20) - - - - Grandin, Noel (20) - Grasip (20) + + HeinF (20) LLyaudet (20) - - Mattsturgeon (20) XMatence (20) + + Yorick (20) Zapata (20) - - + + Gippy73 (19) + Guateconexion (19) + + Icobgr (19) @@ -6006,93 +6347,113 @@ Jem (19) + + Kentarch (19) + - Kentarch (19) + Jingtao, Yan (18) - Freund, Matthias (19) + Jstaerk (18) - Magliocchetti, Riccardo (19) + Narayan (18) - Jstaerk (18) + Power, Noel (18) - Narayan (18) + Richard (18) - Power, Noel (18) + Schiavinatto (18) - Richard (18) + Sooth (18) - UriHerrera (18) + Toxitom (18) + UriHerrera (18) + + + Valdirbarbosa (18) + + 林漢昌 (18) Akerbeltz (17) + + Aphaia (17) Chd (17) - - Dlmoretz (17) Ertsey, Andor (17) + + Guilherme.vanz (17) Gulmorais (17) - - Juergenfenn (17) Rubembarreto (17) + + Taken (17) - Valdirbarbosa (17) + Thumperward (17) + + + Uwealtmann (17) - - Yumakino (17) + + Беломир (17) + Alexpikptz (16) + + Dhersh (16) - Houbsi (16) + Elpapki (16) + Houbsi (16) + + MoIshihara (16) @@ -6101,16 +6462,10 @@ P.Guimberteau (16) - - Ristoi (16) - - Thumperward (16) - - - Uwealtmann (16) + Ristoi (16) Vuhung (16) @@ -6118,11 +6473,11 @@ X1sc0 (16) - - APerson (15) + + Airon90 (15) @@ -6132,15 +6487,18 @@ Bertob (15) - - Craigo (15) + + Franklin (15) + Irmhild (15) + + Khlood Elsayed (15) @@ -6163,9 +6521,6 @@ - Olivier (15) - - PauGNU (15) @@ -6174,13 +6529,13 @@ Thorogood, Tom (15) - - - Toxitom (15) + æš—å½±éºè¨€ (15) + + - æš—å½±éºè¨€ (15) + Afaccioli74 (14) Fina (14) @@ -6188,39 +6543,39 @@ Kosiorek, Bartosz (14) - - - - Gippy73 (14) - Guuml (14) + + Halencarjunior (14) Lfernandocarvalho (14) - - Librosaurus (14) Lutch (14) + + Mderoucy (14) Reinsle (14) - - + + Steve- - (14) + Tamiliam (14) + + Testnoda (14) @@ -6230,11 +6585,11 @@ Akoscomp (13) - - Alrt84 (13) + + Alyssonware (13) @@ -6244,11 +6599,11 @@ Cedric31 (13) - - Gallaecio (13) + + Kadekilo (13) @@ -6258,11 +6613,11 @@ Ljelly (13) - - Luc (13) + + Luked (13) @@ -6270,27 +6625,41 @@ Mabbb (13) + Mihkel (13) + + Mortense (13) + Odd123 (13) + + Pete Boyd (13) + Royerjy (13) + + S.Gecko (13) + + + + Samtuke (13) + Sanyii (13) Simplicity Instinct (13) - - Sherlock, Chris (13) + + ThierryM (13) @@ -6300,15 +6669,18 @@ Vivaelcelta (13) - - Vkkodali (13) + + And471 (12) + AustinW (12) + + Bhaskar (12) @@ -6323,21 +6695,21 @@ Halan (12) - HiTom (12) + Immanuelg (12) - Immanuelg (12) + Godard, Laurent (12) - Pcapeluto (12) + Monastirsky, Maxim (12) - R4chi7 (12) + Pcapeluto (12) - Royerjy (12) + Gupta, Rachit (12) Staticsafe (12) @@ -6345,7 +6717,7 @@ - HoráÄek, Stanislav (12) + Tommy27 (12) Veerh01 (12) @@ -6365,15 +6737,15 @@ Dajare (11) - Eduaraujo (11) + Ebraminio (11) - Elpapki (11) + Eduaraujo (11) - Irmhild (11) + Gokul, S (11) Kallecarl (11) @@ -6382,7 +6754,7 @@ Kelemeng (11) - Godard, Laurent (11) + Krabina (11) @@ -6421,14 +6793,17 @@ Gomez, Andres (11) - Zero0w (11) + Webmink (11) - Admasonscottisha (10) + Zero0w (11) + Admasonscottisha (10) + + Aeusebio (10) @@ -6437,14 +6812,22 @@ AliIsingor (10) + + + + Castagno, Giuseppe (10) + Blargh (10) - - + + Bubli (10) + Diginin (10) + + Eagles051387 (10) @@ -6454,6 +6837,9 @@ El7r (10) + + Elrath (10) + @@ -6466,21 +6852,21 @@ Lionlinux (10) - Pearson, Timothy (10) + MNeto (10) - Chung, Elton (10) + Pearson, Timothy (10) - Mihkel (10) + Chung, Elton (10) Mikalai (10) - Monastirsky, Maxim (10) + Nateyee (10) @@ -6499,9 +6885,6 @@ - Sikeler (10) - - Tatat (10) @@ -6510,6 +6893,9 @@ Tomg (10) + + User8192 (10) + @@ -6519,14 +6905,17 @@ Al-Abdulrazzaq, Abdulmajeed (9) - AtkinsSJ (9) + Agger (9) - Calisgarge (9) + AtkinsSJ (9) + Calisgarge (9) + + Camargo (9) @@ -6535,13 +6924,10 @@ Crazyskeggy (9) - - Dupreyb (9) - - Ebraminio (9) + Dupreyb (9) Fatdf (9) @@ -6558,23 +6944,23 @@ GisbertFriege (9) - Gokul, S (9) - - Goranrakic (9) Jim-BobHarris (9) - - Jopsen (9) + + Jowyta (9) + Funk, Juergen (9) + + Lapetec (9) @@ -6589,15 +6975,15 @@ Marco (9) - Bogliolo, Meo (9) + Marcuskgosi (9) - Msaffron (9) + Bogliolo, Meo (9) - Nogajun (9) + Msaffron (9) Ohnemax (9) @@ -6606,11 +6992,14 @@ Oprea.luci (9) - PeppinoLib (9) + Foley, Peter (9) + PeppinoLib (9) + + Pixpray (9) @@ -6619,99 +7008,107 @@ Rogawa (9) + + Rpr (9) - - + + Slacka (9) + Ellis, Damien (9) Therabi (9) + + Ttocsmij (9) Twstdude0to1 (9) - - Urdulizer (9) - User8192 (9) + Zhangxiaofei (9) + + - Webmink (9) + ميدو (9) - Zhangxiaofei (9) + Baird, Alan C. (8) - - Alexxed (8) AndreasL (8) + + Ausserirdischegesund (8) Cocofan (8) - - Crolidge (8) Dashohoxha (8) + + DrDub (8) Ed Eyles (8) - - Elacheche (8) Horst (8) + + Israel Chaves (8) JR (8) - - Jslozier (8) Hoffimann Mendes, Júlio (8) + + Dywan, Christian (8) Kednar (8) - - Rietveld, Kristian (8) + Lee (8) + + + + Leigh, Jack (8) @@ -6720,25 +7117,25 @@ Manj k (8) - - Mrmox2 (8) + + NightMonkey (8) - Paulo.tavares (8) + Nyucel (8) - Foley, Peter (8) + Paulo.tavares (8) - - Peterpall (8) + + Ricardolau (8) @@ -6746,6 +7143,9 @@ Seomarketing221 (8) + Thejack (8) + + Tibbylickle (8) @@ -6771,18 +7171,18 @@ Kabatsayev, Ruslan (7) - Baird, Alan C. (7) + Andrea.soragna (7) - Andrea.soragna (7) + Bastik (7) - Bastik (7) + Bjherbison (7) - Bjherbison (7) + Bookman900 (7) Borim7 (7) @@ -6816,74 +7216,102 @@ Ingotian (7) + Ledure, Jean-Pierre (7) + + + + + Jstnlth (7) + + M1cky (7) + + Mariosv (7) + + + Mbayer (7) + MephistoBooks (7) + Francis, Matthew (7) + + Nathanjh13 (7) Olivier DDB (7) + + Opensas (7) - - Polte (7) + Kant, Pranav (7) + + RMCampos (7) + + Rodo (7) Shady (7) - - Simosx (7) - Slacka (7) + Smarquespt (7) + + - Smarquespt (7) + Tonnysmile (7) Toxicbits (7) - - + + Ulf hamburg (7) + Wabuo (7) + + Woordje (7) - Armin Dänzer (6) + Alexandrorodrigez (6) - Asian flower (6) + Andreas ka (6) + + + Armin Dänzer (6) - Higginson, Andrew (6) + Asian flower (6) - Barend (6) + Higginson, Andrew (6) - Castagno, Giuseppe (6) + Barend (6) Bobe (6) @@ -6942,11 +7370,14 @@ Gallaire, Florent (6) - Florian heckl (6) + Fisiu (6) + Florian heckl (6) + + Ghune (6) @@ -6955,11 +7386,11 @@ HdV (6) + + Hmoi (6) - - Hramrach (6) @@ -6969,13 +7400,13 @@ Iplaw67 (6) + + Timofeev, Ivan (6) - - - Ledure, Jean-Pierre (6) + Iversen, Jan (6) Jeffersonx (6) @@ -6983,9 +7414,6 @@ Glogowski, Jan-Marek (6) - - Jstnlth (6) - @@ -7009,16 +7437,13 @@ Mas (6) - Mbayer (6) - - Mgommel (6) - - Mikeyy (6) + + Mmetz (6) @@ -7028,23 +7453,29 @@ Öttl, Gerhard (6) - - Only you (6) + + Konefal, Pawel (6) + Peter Chastain (6) + + Peterhuang1kimo (6) - Rotaj (6) + Puggan (6) + Rotaj (6) + + Sn!py (6) @@ -7053,11 +7484,11 @@ Heidenreich, Josh (6) + + Thorwil (6) - - Tyree (6) @@ -7067,11 +7498,11 @@ Vgezer (6) + + Virthus (6) - - Wagner Augusto Silva Rodrigo (6) @@ -7081,11 +7512,11 @@ Wiseacre (6) + + صÙا الÙليج (6) - - 3blz (5) @@ -7095,14 +7526,22 @@ Albucasis (5) - - Alexpikptz (5) - + AleXanDeR G (5) + + + Alvarez, Octavio (5) + + + Andrea Gelmini (5) + + Anousak (5) + + Art.Gilvanov (5) @@ -7112,11 +7551,11 @@ AustinSaintAubin (5) - - Baumgarp (5) + + Bitigchi (5) @@ -7126,10 +7565,13 @@ Cray85 (5) + + Dejourdain (5) + - Dejourdain (5) + DickStomp (5) DoFoWerner (5) @@ -7160,16 +7602,19 @@ HubPfalz (5) + Hummer5354 (5) + + Scott, Patrick (5) JoeP (5) + + John.pratt (5) - - KadlecOn (5) @@ -7179,28 +7624,36 @@ Hosny, Khaled (5) + + Klausmach (5) - - Koji Annoura (5) - Mak (5) + LibreOfficeUser1 (5) - Mariosv (5) + Mak (5) + + Mgaster (5) - - + + Weghorn, Michael (5) + + + Laplante, Chris (5) + Mtg (5) + + OSVALDO LINS VIANA (5) @@ -7210,11 +7663,11 @@ Pepe (5) - - Pescetti (5) + + Pkoroau (5) @@ -7224,11 +7677,11 @@ Rajesh (5) - - Raknor (5) + + Raulpaes (5) @@ -7238,11 +7691,11 @@ Salavine1 (5) - - Chvátal, Tomáš (5) + + Sergej (5) @@ -7252,11 +7705,11 @@ Srividya (5) - - Starseeker (5) + + Taylorh140 (5) @@ -7266,10 +7719,16 @@ Timotheonb (5) + + Tranzistors (5) + - Tranzistors (5) + Valtermura (5) + + + WalterPape (5) Wt (5) @@ -7277,11 +7736,11 @@ AHi (4) + + Aaronkyle (4) - - Aas (4) @@ -7291,11 +7750,11 @@ Albertoeda (4) + + Nureña, Aldo Román (4) - - Alex1 (4) @@ -7303,9 +7762,6 @@ Alvarenga (4) - Alvarez, Octavio (4) - - Alzoo (4) @@ -7317,16 +7773,13 @@ AndikaTriwidada (4) - Andrea Gelmini (4) - - Andréb (4) - - Archlid (4) + + Arhitectul (4) @@ -7336,11 +7789,11 @@ Ayhanyalcinsoy (4) - - Bardo (4) + + Bigbek (4) @@ -7350,10 +7803,13 @@ Bntser (4) + + Bryanquigley (4) + - Bubli (4) + Cam AW (4) ConquerorsHaki (4) @@ -7367,9 +7823,6 @@ - DickStomp (4) - - Dmerker (4) @@ -7378,10 +7831,13 @@ Doubi (4) + + Dragon (4) + - Dragon (4) + Robertson, Daniel (4) Edmund.laugasson (4) @@ -7415,14 +7871,17 @@ ImperfectlyInformed (4) - Jiehong (4) + Jamesleader (4) - Jjmeric (4) + Jiehong (4) + Jjmeric (4) + + JnRouvignac (4) @@ -7431,11 +7890,11 @@ Jones (4) + + Jooste (4) - - Joriki (4) @@ -7443,51 +7902,62 @@ Le Bigot, Jean-Tiare (4) - Funk, Juergen (4) - - Lethargilistic (4) + Loren.rogers (4) + + + MDDN (4) + + Haggag, Muhammad (4) MPascual (4) + + Rumianowski, Maciej (4) Marco c (4) - - Mhonline (4) - Weghorn, Michael (4) + Mikedoherty ca (4) + + - Mikedoherty ca (4) + Kaganski, Mike (4) Morgan greywolf (4) - - Mortgage01 (4) + NGHLibreOffice (4) + + + + Orson69 (4) Oscar90210 (4) + Osnola (4) + + Paolopoz (4) @@ -7502,25 +7972,28 @@ Prolog.guy (4) - Qubit-test (4) + Psao (4) - Samson (4) + Qubit-test (4) - Sasha (4) + Reyn100 (4) - Schiavinatto (4) + Samson (4) - Sealview (4) + Sasha (4) + Sealview (4) + + SpencerMann (4) @@ -7529,11 +8002,11 @@ Stevenmw (4) + + Surat (4) - - Tct (4) @@ -7543,9 +8016,6 @@ Tk (4) - - Tommy27 (4) - @@ -7558,14 +8028,11 @@ UlKu (4) - Valtermura (4) + V., Artem (4) - V., Artem (4) - - Wcolen (4) @@ -7574,11 +8041,11 @@ Williamjmorenor (4) - - Wpeixoto (4) + + Ð”ÐµÐ½Ð¸Ñ (4) @@ -7588,11 +8055,11 @@ Adept (3) - - Aexyn (3) + + Alex.simoes (3) @@ -7600,11 +8067,17 @@ Alexsfagundes (3) - Antanasb (3) + Almorca (3) + + + Andrey Usov (3) + Antanasb (3) + + Armin (3) @@ -7613,11 +8086,11 @@ Arthur Zennig (3) + + Aurelien (3) - - Baena (3) @@ -7627,11 +8100,11 @@ Benjwgarner (3) + + Bindassanant (3) - - Bodhi-Baum (3) @@ -7641,9 +8114,6 @@ Brub (3) - - Bryanquigley (3) - @@ -7692,16 +8162,19 @@ Bankston, Daniel (3) + Dennisfrancis (3) + + Dmtrs32 (3) Donbrookman (3) + + Dubyk (3) - - EdgeE (3) @@ -7711,16 +8184,13 @@ ErSey (3) - - Ericatamiris (3) - - Estebanmonge (3) + Ericatamiris (3) - Fisiu (3) + Estebanmonge (3) Fraang (3) @@ -7765,14 +8235,17 @@ It-christian (3) - Jennifer.park (3) + JDM (3) - Murugan, Jesso Clarence (3) + Jennifer.park (3) + Murugan, Jesso Clarence (3) + + Jhbn (3) @@ -7781,11 +8254,11 @@ Johannes Rohr (3) + + Joseroberto (3) - - Juanpabl (3) @@ -7795,44 +8268,55 @@ Kbiondi (3) - - Kfogel (3) - - Khunshan (3) + Kevinob (3) - Kkrothapalli (3) + Kfogel (3) - Krabina (3) + Khunshan (3) - Kristof (3) + Kkrothapalli (3) + Kristof (3) + + Kscanne (3) + LO Rob (3) + + Lennoazevedo (3) + + + + LewisCowles (3) + Libcub (3) LucaCappelletti (3) + + Hryniuk, Åukasz (3) + Luuk (3) - MDDN (3) + Margott (3) Matteocam (3) @@ -7852,11 +8336,14 @@ Michaelwheatland (3) - Neookano (3) + Midimarcus (3) + Neookano (3) + + Nicolas.abel (3) @@ -7865,11 +8352,11 @@ Ragnarsson, Björgvin (3) + + Nloira (3) - - Noel Power (3) @@ -7877,39 +8364,64 @@ OOarthurOo (3) + Steinbeiß, Simon (3) + + + + Ojeremyj (3) Oliverguenther (3) - - Oprea luci (3) + Os cib (3) + + + + Penalvch (3) - Rapha.ksf (3) + van Oostrum, Piet (3) - Rauloliverpaes (3) + Rajatvijay (3) + + + Rapha.ksf (3) + Rauloliverpaes (3) + + + Rautamiekka (3) + + RebeccaHodgson (3) Rick (3) + + Robert.E.A.Harvey (3) + Sander Klootwijk (3) + + Sangeeta (3) + + Satabin (3) + @@ -7927,6 +8439,9 @@ + Skinnerbird (3) + + Soliac (3) @@ -7935,11 +8450,11 @@ Soued031 (3) + + StefanRing (3) - - SteveKelem (3) @@ -7949,11 +8464,11 @@ Suren (3) + + Sushils (3) - - Taylor46 (3) @@ -7963,11 +8478,11 @@ Timsamoff (3) + + Tititou36 (3) - - Kumar, Tarun (3) @@ -7977,11 +8492,11 @@ Toxifier (3) + + TrnsltLife (3) - - Tushantin (3) @@ -7989,31 +8504,39 @@ Kitzinger, Ulrich (3) + Melenchuk, Vasily (3) + + + + Vinctor (3) Vljubovic (3) - - Wagnerluis1982 (3) Khoo, Wei Ming (3) + + WesPeacock (3) - Xaker1 (3) + Xaker1 (3) + + + Yukawa (3) + + + Kolesnykov, Yurii (3) - Yukawa (3) - - Yvon Henel (3) @@ -8022,11 +8545,11 @@ §chinagl (3) - - ترجمان05 (3) + + AbbeyI19jfjc (2) @@ -8036,11 +8559,11 @@ AdrianValdez4 (2) - - AdriannaJeppese (2) + + Adsha (2) @@ -8050,11 +8573,11 @@ Aimee (2) - - AliceOliver7 (2) + + Alisha (2) @@ -8064,11 +8587,11 @@ AlphonsoNava4 (2) - - AmyCarney5 (2) + + Anasiic (2) @@ -8078,10 +8601,13 @@ AndrewKuhn7 (2) + + AndrewUlrich (2) + - AndrewUlrich (2) + Anipeter (2) Anjar (2) @@ -8129,30 +8655,41 @@ AvaGreer1 (2) - BZT42 (2) + Ozdemir, Aybuke (2) - BernardMeza9 (2) + BZT42 (2) + Bachka (2) + + + BernardMeza9 (2) + + BettieGiordano (2) BirdRivas2 (2) + + BlazejJones1 (2) BlessedOrozco (2) - - + + Blume (2) + BoD (2) + + Bogcahi (2) @@ -8160,6 +8697,9 @@ Boivie (2) + Boldizsakawi7 (2) + + BoleslausSaunders (2) @@ -8185,14 +8725,17 @@ ButlerBarron6 (2) - C1pr1an (2) + C0bb3r (2) - CallieMvzap (2) + C1pr1an (2) + CallieMvzap (2) + + CallieSalgado (2) @@ -8201,43 +8744,51 @@ CandidoRutherford (2) + + CapistranOleary (2) - - + + Capri99 (2) + CaraDang6 (2) Carlosr (2) + + CarolinaCalling (2) CarrieDaniels (2) - - CarrollRico2 (2) Iacob, Catalin (2) + + CavesGill8 (2) Celsovsm (2) - - Cgrosdemange (2) + Chabermu (2) + + + + Chanda57Oyhnbco (2) @@ -8246,15 +8797,18 @@ Cheche (2) - - ChrzcicielCampbell (2) + + Cjbackhouse (2) + Cl-r (2) + + ClariceThorne (2) @@ -8440,14 +8994,11 @@ EmperorErnst5 (2) - Enio.gemmo (2) + EnosKraus6 (2) - EnosKraus6 (2) - - Erdalronahi (2) @@ -8456,11 +9007,11 @@ ErieTovar6 (2) - - Erikcht (2) + + Ersteinmal (2) @@ -8470,10 +9021,13 @@ EssieKeller8 (2) + + EsterEngland7 (2) + - EsterEngland7 (2) + Eszka (2) EthylCardenas (2) @@ -8507,86 +9061,97 @@ FlorenceKim1 (2) - Foolfitz (2) + Flyntyuei2 (2) - FordRhodes5 (2) + Foolfitz (2) + FordRhodes5 (2) + + FranciscoByrne (2) FredaDowning7 (2) + Fukanchik, Sergey (2) + + + + Garcia.marc (2) GayeRossetti (2) - - GeoDowning4 (2) GeoffLawrence (2) + + GeorgiannaOchoa (2) Gerardgiraud (2) - - Gerpunzel (2) GertieEllington (2) + + GiertrudaLehman (2) Girvinh (2) - - GiuseppOQH (2) Glanbeav (2) + + Gmealer (2) GraciaNorwood (2) - - Grakic (2) Grim (2) + + Gualtiero (2) Guillem (2) - - + + Kose, Gulsah (2) + Hamurcu (2) + + HannaEspinoza (2) @@ -8596,23 +9161,29 @@ HarleyWatkins (2) - - Hasithakj (2) + + Hector (2) - Helo (2) + Hedaja (2) - Hemmerling (2) + Hellpé (2) + + + Helo (2) + Hemmerling (2) + + Jensen, Henrik (2) @@ -8621,11 +9192,11 @@ HermitMuller1 (2) + + Herronrobertson (2) - - HershelPeterson (2) @@ -8635,11 +9206,11 @@ Ian22 (2) + + IkeVasquez9 (2) - - IlaRoberts4 (2) @@ -8649,11 +9220,11 @@ InezFinney8 (2) + + IraLane4 (2) - - IrinaMccormack (2) @@ -8663,11 +9234,11 @@ IsadoraFoster (2) + + IsaiahBuck5 (2) - - IsiahLackey2 (2) @@ -8677,11 +9248,11 @@ JacintaGibson (2) + + Adams, Jonathan (2) - - C., James (2) @@ -8691,11 +9262,11 @@ JanuariusStringer (2) + + Jasmins (2) - - JasperSawyer7 (2) @@ -8705,11 +9276,11 @@ JayStafford3 (2) + + Jcubic (2) - - Jeraldinesewell (2) @@ -8719,69 +9290,80 @@ JettieGibson2 (2) + + + + Jgpestana (2) + Lingard, J. Graeme (2) - - Jiero (2) Jnicolas (2) + + JoWi (2) JonesRichter8 (2) - - Jowenshaw (2) João Pedro (2) + + Jstaniek (2) JudasPeoples9 (2) - - JudasPritchard (2) JudithGraves6 (2) + + Jumoun (2) JustinaEldridge (2) - - Karakartala (2) KarkGunn4 (2) + + Karolus (2) Kasos (2) + + Kazuyuki Yoshimura (2) + + + Keepiledar (2) + - Keepiledar (2) + KeithC (2) Khokkanen (2) @@ -8857,14 +9439,17 @@ Lliehu (2) - LovisaKessler (2) + Lonelyhiker (2) - Petrolekas, Luke (2) + LovisaKessler (2) + Petrolekas, Luke (2) + + LubomyrWalden (2) @@ -8873,11 +9458,11 @@ LynnForbes3 (2) + + Casalin, Matteo (2) - - Mărăşoiu, Mariana (2) @@ -8887,11 +9472,11 @@ Ma83mit (2) + + MabelleStanley (2) - - MadisonDarnell (2) @@ -8901,11 +9486,11 @@ MaggieGray2 (2) + + MagnoliaParsons (2) - - Manu.unni (2) @@ -8915,11 +9500,11 @@ MarchCourtney (2) + + Marcinz (2) - - Marco74 (2) @@ -8929,11 +9514,11 @@ MargeryThorpe (2) + + MarillaMarsh7 (2) - - Marius (2) @@ -8943,28 +9528,36 @@ MartaRollins2 (2) + + MarthaBright4 (2) - - + + MartinPC (2) + MateuszDominguez (2) Matt 51 (2) + + MattieSchleinit (2) Mbemidio (2) - - + + Measure for Measure (2) + MercedesDelatorre (2) + + Merchantbusiness (2) @@ -8974,11 +9567,11 @@ MerleGlass6 (2) - - Mesutkullar (2) + + Mgiri (2) @@ -8988,11 +9581,11 @@ Michiel (2) - - MikeyZ (2) + + MinaHuggins7 (2) @@ -9002,67 +9595,67 @@ MinervaLuna8 (2) - - Mitcoes (2) - - Francis, Matthew (2) - + + Mjkopp (2) Mklever (2) - - Lechner, Marco (2) Mloiseleur (2) + + Mnalima (2) Mnsoto (2) - - Rimkus, Modestas (2) Mordocai (2) + + MorganJohnstone (2) - Laplante, Chris (2) + Rugiero, Mario (2) - - Mst0 (2) Mttza1 (2) + + + + Musicstave (2) + Mzalewski (2) Nacerix (2) - - Narcisgarcia (2) + + NealEspinoza6 (2) @@ -9072,11 +9665,11 @@ NettieParra1 (2) - - NewtonZuniga9 (2) + + Nishino, Daisuke (2) @@ -9084,6 +9677,9 @@ NicholasLanier (2) + Christener, Nicolas (2) + + NinaLam6 (2) @@ -9137,58 +9733,69 @@ OscarMeredith (2) - PercherskySanford (2) + Percherie (2) - Senna Tschudin, Peter (2) + PercherskySanford (2) + Senna Tschudin, Peter (2) + + Pgraber (2) + Szelat, Phillip (2) + + Pierre (2) + + Pitonyak (2) Pkst (2) - - PolishHungarianSharp (2) Posterboy (2) + + PragueBergman (2) Pulsifer (2) - - R.Yu. (2) Rahul050 (2) + + + + Rania (2) + Rbecke (2) ReaganBaudin (2) - - ReeseShepherd (2) + + ReginaldMcgraw (2) @@ -9198,11 +9805,11 @@ RenniePrescott (2) - - RetaStern5 (2) + + RhodaMackey3 (2) @@ -9212,11 +9819,11 @@ Rmarquardt (2) - - Roadrunner (2) + + RollandHannah (2) @@ -9226,11 +9833,11 @@ RosalinBlaubaum (2) - - RosannaPaul7 (2) + + RosariaLampungm (2) @@ -9240,11 +9847,11 @@ RoyShelton7 (2) - - Ryan (2) + + Sagar.libo (2) @@ -9254,11 +9861,11 @@ Sankarshan (2) - - SavinaShaffer (2) + + SebastianNorth (2) @@ -9268,11 +9875,11 @@ Sergwish (2) - - Sfeuser (2) + + Shaforostoff (2) @@ -9282,11 +9889,11 @@ Shaun.schutte (2) - - SidneyArredondo (2) + + Silwol (2) @@ -9296,9 +9903,15 @@ SlavicNapier8 (2) + + Smile4ever (2) + + Soothsilver (2) + + Sotrud nik (2) @@ -9307,11 +9920,11 @@ Sshelagh (2) + + Ssorgatem (2) - - StaciBorthwick (2) @@ -9319,15 +9932,26 @@ Stappers (2) + Stephan66 (2) + + + + Stuarta0 (2) Sturm (2) + + Sungkhum (2) + + + SusanSwain3 (2) + - SusanSwain3 (2) + Svante (2) Sven.fischer.de (2) @@ -9378,13 +10002,24 @@ Thomase (2) - Thorongil (2) + Thomeck (2) + Thorongil (2) + + + Tim1075 (2) + + + Timeshifter (2) + + TimothyChilds (2) + + TomaMora8 (2) @@ -9394,23 +10029,29 @@ Tomrobert87 (2) - - TraciKQAZnsqjho (2) + + TressieCulver (2) + Isnard, Timothée (2) + + Tux40000 (2) - ValessioBrito (2) + Usik64 (2) + ValessioBrito (2) + + VanHogan7 (2) @@ -9419,11 +10060,11 @@ VerneDodd5 (2) + + VernitaDonley (2) - - VeronaXiong3 (2) @@ -9433,11 +10074,11 @@ ViolaPraed (2) + + Viper550 (2) - - VirginArredondo (2) @@ -9447,11 +10088,11 @@ VladimirPrince (2) + + VladislavA (2) - - Volker (2) @@ -9461,11 +10102,11 @@ Vossman (2) + + WaclawaSavage (2) - - WalentynaPatrick (2) @@ -9475,11 +10116,11 @@ WarrenChristian (2) + + WashingtonOakley (2) - - Watermelons (2) @@ -9489,56 +10130,64 @@ WilhelminaEaton (2) + + WincentyMorrison (2) - - Wirelessben (2) + Wkn (2) + + Wulei (2) + + Xoristzatziki (2) Yaw (2) - - ZiriaKo (2) ZoraWinkler1 (2) + + ريماس هيثم (2) æµæ˜Ÿä¾æ—§ (2) - - AaronPeterson (1) Abde.jarti99 (1) + + Abdulaziz A Alayed (1) Absolute Garcinia (1) - - + + Acetfntfh (1) + AdalberDesailll (1) + + Adlard.matthew (1) @@ -9548,11 +10197,11 @@ Aevora (1) - - Agradecido (1) + + Ainurshakirov (1) @@ -9562,11 +10211,11 @@ Albrechtloh (1) - - Aleks (1) + + Henrie, Alex (1) @@ -9576,11 +10225,11 @@ Alex80 (1) - - Alexandrevicenzi (1) + + Alexandri (1) @@ -9590,11 +10239,11 @@ Alexnivan (1) - - Alexsandro Matias (1) + + Alg (1) @@ -9604,11 +10253,11 @@ AlphonsDen (1) - - Alverne (1) + + Amacater (1) @@ -9618,11 +10267,11 @@ AndreasEk (1) - - AndreasK (1) + + AndreasNeudecker (1) @@ -9632,11 +10281,11 @@ Andrey.turkin (1) - - Andriazdk2177 (1) + + AngelaRusconi (1) @@ -9646,11 +10295,11 @@ AniVar (1) - - AntoineVe (1) + + AntoniePonder (1) @@ -9660,11 +10309,11 @@ Apfelsaft (1) - - ArdenRatcliff (1) + + Arekm (1) @@ -9674,11 +10323,11 @@ ArielleWx (1) - - Arkonide (1) + + Armandos (1) @@ -9688,11 +10337,11 @@ Arnoldu (1) - - Teigseth, Arno (1) + + Artintal (1) @@ -9702,11 +10351,11 @@ Asiersar (1) - - Astalaseven (1) + + AstridGoo (1) @@ -9716,11 +10365,11 @@ Augustina (1) - - AundreaPqf (1) + + AvaPANumrgiabjx (1) @@ -9730,22 +10379,28 @@ B3t (1) + + Bailiwick (1) + Bailly02 (1) + Bami (1) + + Bandera (1) Barbara21F (1) + + BarryLovegrove (1) - - Vincent, Babu (1) @@ -9755,85 +10410,93 @@ BelindaApplerot (1) + + BernardHannafor (1) - - Bestdating (1) + Beyoken (1) + + Beznogov (1) + + Bezzy (1) Bgloberman (1) - - Bgranados (1) BillyBurke (1) + + Biofool (1) Bjossir (1) - - Bkg2018 (1) Bkolaimeraq (1) + + BlakeGartrell (1) BlancheBelstead (1) - - BlancheClopton (1) Blandyna (1) + + Bolo (1) BookerSoderlund (1) - - Borowcm (1) - Bortis (1) + Bortis (1) + + Sowden, Brad (1) BrentHawthorne (1) - - BridgettC (1) + Brinzing, Oliver (1) + + + + BroderiHolyman (1) @@ -9842,11 +10505,11 @@ BryceMoorhouse (1) - - Budo (1) + + Burger.ga (1) @@ -9856,11 +10519,11 @@ CalebSommer (1) - - CalebWgypcu (1) + + CamillaPena (1) @@ -9870,11 +10533,11 @@ CandelariaJageu (1) - - Capira (1) + + CarloASilva (1) @@ -9884,11 +10547,11 @@ Carlos.gilaranz (1) - - CarlotaF42 (1) + + Castarco (1) @@ -9898,25 +10561,25 @@ Cesera (1) - - - - Chabermu (1) - ChantalWalker (1) + + Charles12 (1) CharlesJenkins (1) - - + + Chatjoe (1) + Chmilblick (1) + + Beauzée-Luyssen, Hugo (1) @@ -9926,11 +10589,11 @@ Chrlutz (1) - - Ciampix (1) + + CiaraLockie (1) @@ -9940,11 +10603,11 @@ Cleitongalvao (1) - - CletaValentino (1) + + Clint7236c (1) @@ -9954,11 +10617,11 @@ Cora17 (1) - - Corsolibreoffice (1) + + Cosmopolitan (1) @@ -9966,6 +10629,9 @@ Cpatrick08 (1) + Cpinedar (1) + + Cpmipn (1) @@ -9974,74 +10640,88 @@ CrystleGravatt (1) + CÅ“ur, Antoine (1) + + DaisieDavison (1) DamionThorp (1) + + + + Danichocolate (1) + Dar18proore (1) - - Darcy0243gd (1) DarylAlcantar (1) + + DarylBoot (1) Datesmen (1) - - Dave (1) Davidmichel (1) + + DawnOgles (1) Di Marco, Daniel (1) - - De-jourdain (1) DeShark (1) + + DeannaQuaife (1) DeanneKer (1) - - DebbraWingfield (1) DeborahW18 (1) + + DelbertChristie (1) DelilahBock (1) + + Denytracom (1) + + + Dezsiszabi (1) + - Dezsiszabi (1) + Kis-Ãdám, László (1) Herde, Daniel (1) @@ -10156,16 +10836,19 @@ Emyr (1) + Enesates (1) + + Ennael (1) Erasmo (1) + + Eric (1) - - ErickRijoJr (1) @@ -10175,99 +10858,121 @@ Roux, Elie (1) + + + + Esben aaberg (1) + EstebanUD (1) - - EstelaAWTxiu (1) Evelyn3794 (1) + + Evfool (1) Factooor (1) - - Falatooni (1) Falcao (1) + + Farhaf (1) FarzanehSarafraz (1) - - Faseeh1218 (1) FelipaSwan (1) + + + + Fenchi (1) + + + Ferlodev (1) + FerminAndrade (1) - Flirtwomens (1) + Feyza (1) - Foobar (1) + Fghj (1) - Fourdollars (1) + Flirtwomens (1) - Fred.th (1) + Foobar (1) - Ftigeot (1) + Fourdollars (1) - Fukanchik (1) + Francesco (1) + + + Fred.th (1) + + + Ftigeot (1) Manas Joshi (1) + + GabrielSwart (1) Gabrielezorzi (1) - - Garhitusqr (1) Gautrucdo (1) + + Bilotta, Giuseppe (1) Gcoelho (1) - - GeeZ (1) + Gekacheka (1) + + + + Geoff newson (1) @@ -10276,11 +10981,11 @@ Houston, Gary (1) - - Giancav (1) + + Gicmo (1) @@ -10290,11 +10995,11 @@ Gmolleda (1) - - Gpmanrpi (1) + + Grahl (1) @@ -10304,11 +11009,11 @@ Grover47Ywzdn (1) - - GroverYQVvwokac (1) + + Gstein (1) @@ -10318,11 +11023,11 @@ Guillaume (1) - - Gwidion (1) + + HFujimaki (1) @@ -10332,11 +11037,11 @@ HLGZorawdi (1) - - Haggai (1) + + Hagos (1) @@ -10346,10 +11051,16 @@ Hamkins (1) + + Hasinasi (1) + - Hasinasi (1) + Hbr (1) + + + Rui Wang (1) HelenWalston (1) @@ -10357,11 +11068,11 @@ Hermeli2856 (1) + + Heygo (1) - - Heyheyitshay (1) @@ -10371,11 +11082,11 @@ HilarioTr (1) + + Hillrich (1) - - HiltonFtel (1) @@ -10385,11 +11096,11 @@ Hkdocholid (1) + + Hlavaty, Tomas (1) - - Honza.havlicek (1) @@ -10397,30 +11108,38 @@ HoracioRydge (1) + Hornmichaels (1) + + + + Hosiryuhosi (1) Hriostat (1) - - HumbertGno (1) Hwoehrle (1) + + + + Ialbors (1) + Ian (1) Ianjo (1) - - IbraM (1) + + IceBlur (1) @@ -10428,6 +11147,9 @@ Ida (1) + Gilham, Ian (1) + + Igorizyumin (1) @@ -10531,6 +11253,9 @@ + Jeeva03789 (1) + + JefferyMackenna (1) @@ -10539,54 +11264,68 @@ JerryShi (1) + + + + Gao, Qiwen (1) + JestineNww (1) - - Bruhn, Jan-Henrik (1) Jimmyhaynbj (1) + + Jinocvla (1) JiroMatsuzawa (1) - - Jmarchn (1) Joachim (1) + + Joaofernando (1) JoelH (1) - - JolieZepps (1) JomarSilva (1) + + JonelleFritz (1) JonnaCainzabvwf (1) + + JordanS (1) + + + Jorge Rodríguez Fonseca (1) + + Jorgemendes (1) + + Joselaurian (1) @@ -10595,11 +11334,11 @@ José Eduardo (1) + + JoyLittler (1) - - Jpl (1) @@ -10609,12 +11348,11 @@ JudeMcCafferty (1) + + Juergen (1) - - - JuliannSnider (1) @@ -10624,40 +11362,40 @@ Picca, Juan (1) + + Jwcampbell (1) - - KSBMiranda (1) + Kamran Mackey (1) + + KatjaG (1) + + Bhat, Kishor (1) KendraDunstan (1) - - Kenneth.venken (1) Kenton3255 (1) + + KerrieMarino (1) - Kevinob (1) - - - - KieraY22at (1) @@ -10666,11 +11404,11 @@ Koeleman (1) + + Kosmous (1) - - KourtneNester (1) @@ -10680,11 +11418,11 @@ Kying (1) + + LKPSharylptwsdo (1) - - LMKemm (1) @@ -10694,11 +11432,11 @@ LaPingvino (1) + + Laskov (1) - - LatoshaZnu (1) @@ -10708,11 +11446,11 @@ LaurelLangton (1) + + LaverneNavarret (1) - - LavinaVandermar (1) @@ -10722,11 +11460,11 @@ Learner (1) + + Learnwellwithme93 (1) - - Librestez54 (1) @@ -10736,11 +11474,11 @@ LilianG44nxresx (1) + + LillianaRad (1) - - LillieNlowccx (1) @@ -10750,11 +11488,11 @@ Literacyglenys (1) + + Liturgist (1) - - Llalllal1 (1) @@ -10764,11 +11502,11 @@ Lorne (1) + + Lucas Filho (1) - - LudieNutter (1) @@ -10778,9 +11516,6 @@ Luke (1) - - Hryniuk, Åukasz (1) - @@ -10801,23 +11536,23 @@ MJW (1) - MNeto (1) - - Mabel7997eelu (1) MadelineShort (1) - - Maemst (1) + + Magicienap (1) + Magmag (1) + + Mahdiekrani (1) @@ -10905,80 +11640,83 @@ Matsuura (1) - Campanelli, Matteo (1) + MattTheGeek (1) + Campanelli, Matteo (1) + + + MatÄ›j (1) + + MavisReit (1) Maxjf1 (1) + + Bechler, Moritz (1) - Measure for Measure (1) + Doležel, Marek (1) - - Megan44Dgxg (1) MelisaBroughton (1) + + MellisaIQU (1) Menturi (1) - - MeriMerideth (1) Mete0r (1) + + Mhaehnel (1) Mhcrnl (1) - - Mhenriday (1) Mhoes (1) + + MicaelaLaurantu (1) Michaelwood (1) - - Michka B (1) - Midimarcus (1) - - Midomidi2013 (1) + + MiguelKastner (1) - - Miguelverdu (1) @@ -10988,11 +11726,11 @@ MilagroWilkerso (1) + + Milanbv (1) - - Miles (1) @@ -11002,11 +11740,11 @@ MitchellP (1) + + Miurahr (1) - - Mixer (1) @@ -11014,19 +11752,30 @@ Mixstah (1) + Mmeof (1) + + + + Moberg (1) ModestoZzc (1) - - Mohammedzalta (1) Momo50 (1) + + + + Morvan (1) + + + Soini, Mox (1) + Muhammadsufyanzainalabidin (1) @@ -11078,9 +11827,6 @@ - Christener, Nicolas (1) - - NiklasHor (1) @@ -11089,11 +11835,11 @@ Ngo, Minh (1) - - Nnino2 (1) + + Northwestfirestarters (1) @@ -11103,11 +11849,11 @@ Notafish (1) - - Nouiurm (1) + + Norbert X (1) @@ -11117,11 +11863,11 @@ OBMLorraine (1) - - Oclei (1) + + Oig (1) @@ -11131,11 +11877,11 @@ Okusi (1) - - Olea (1) + + OliverHoffnung (1) @@ -11145,11 +11891,11 @@ Onurkucuk67 (1) - - Oosterkamp (1) + + Ophelia2399 (1) @@ -11157,98 +11903,98 @@ Orrd (1) - Osnola (1) - - - - Oui (1) Ozpoz (1) + + PBsoft (1) PPRShaywuttpocn (1) - - Padenton (1) PamalaDorsch (1) + + Pankaj (1) Papesky (1) - - Passerpunt (1) Pastim (1) + + PatriceMerrick (1) Paulolima (1) - - PearlFelton (1) PearlMoyazw (1) + + PenelopHewlett (1) Nowee, Peter (1) - - Vorel, Petr (1) Pharmankur (1) + + Phb.nbnet.nb.ca (1) PhilDur (1) - - Philhart (1) PhilipTimms (1) + + Philippe43 (1) PhillippBethea (1) - - Phomes (1) + Paraiso, Joan (1) + + + + Piero (1) @@ -11257,11 +12003,11 @@ Pietro.caballeri (1) - - Pilavi (1) + + Piratu (1) @@ -11271,11 +12017,11 @@ Pjotr (1) - - Pkavinda (1) + + Plastique (1) @@ -11285,11 +12031,11 @@ PoppyHart (1) - - PopularOutcast (1) + + PorfiriMansergh (1) @@ -11299,11 +12045,11 @@ Carter, Travis (1) - - Prosper (1) + + Psauthor (1) @@ -11311,6 +12057,9 @@ Psychicread531 (1) + Ptoye (1) + + QGBWinonajrdtpj (1) @@ -11353,14 +12102,11 @@ Ratias (1) - Rautamiekka (1) + Rcampbelllaos (1) - Rcampbelllaos (1) - - RebeccaToscano (1) @@ -11369,15 +12115,18 @@ RexRTEJnlzus (1) - - Rholler (1) + + Rhoslyn (1) + Richardprins (1) + + RickieHpejt (1) @@ -11395,11 +12144,14 @@ Rion (1) - Rizobix (1) + Ritzema, Brent (1) + Rizobix (1) + + Rizwan1218 (1) @@ -11408,11 +12160,11 @@ Robustchao (1) + + RoccoAPIUqpuoia (1) - - Rockcows31 (1) @@ -11420,31 +12172,39 @@ Rockers (1) + Rodney78 (1) + + + + RogelioTrost (1) Deshmukh, Rohit (1) - - Rombert (1) Ron1 (1) + + Ronny (1) Roscoe5731 (1) - - Rosemarie (1) + Rosemary (1) + + + + Rpott (1) @@ -11453,23 +12213,29 @@ RuleAndLine (1) - - Rvr (1) + + Ryho (1) - SallyMorales (1) + ONODERA, Ryo (1) - Samanicute (1) + Sahasranaman M S (1) + + + SallyMorales (1) + Samanicute (1) + + SamuelPoltpalin (1) @@ -11478,11 +12244,11 @@ Sandeeps (1) + + Sanipache (1) - - Saracans (1) @@ -11492,11 +12258,11 @@ Sbosio (1) + + Schrillesbunteshamburg (1) - - Scito (1) @@ -11506,6 +12272,17 @@ Sctenebro (1) + + + + Seanyoung (1) + + + SecondLifeGuerilla (1) + + + Ak, Sedat (1) + ShannaCockrell (1) @@ -11554,9 +12331,6 @@ - Smile4ever (1) - - Socialmitchell (1) @@ -11565,11 +12339,11 @@ SonyaBunnell (1) - - Sovichet (1) + + Sphericalhorse (1) @@ -11577,6 +12351,9 @@ Spreadsheetsorter (1) + Spyros (1) + + Srijanani (1) @@ -11610,54 +12387,68 @@ + Svend-ev (1) + + Sviola (1) + Svtlichnijj (1) + + Sébastien C. (1) + + TAQSamueld (1) Talueses (1) - - Tanguy k (1) Thanakanok, Tantai (1) + + TaylorSlemp (1) TeganCreswick (1) - - Tegas (1) Testsflirt (1) + + The Magpie (1) ThePokehach (1) - - + + Thephilosoft (1) + TheronAbdullah (1) + + Thom (1) + Thor574 (1) + + ThudDriver (1) @@ -11666,10 +12457,10 @@ - Tilt (1) + Tigerbeard (1) - Tim1075 (1) + Tilt (1) TimothyDempster (1) @@ -11680,6 +12471,9 @@ + Tomasdd (1) + + Viehmann, Thomas (1) @@ -11688,11 +12482,11 @@ Transcend (1) + + TrevorPfe (1) - - Trondtr (1) @@ -11702,12 +12496,12 @@ Tuping (1) - - Ulf hamburg (1) - + Shahid, Umair (1) + + Vincent, Brennan (1) @@ -11716,11 +12510,11 @@ UrmasD (1) + + UrsulaHorrell (1) - - Ushabtay (1) @@ -11730,13 +12524,13 @@ VPUJamikajklq (1) + + ValenciaS (1) - - - Melenchuk, Vasily (1) + Dhall, Varun (1) Veeven (1) @@ -11744,11 +12538,11 @@ Vera Cavalcante (1) + + VerenaGaskins (1) - - VernaSchulze (1) @@ -11758,11 +12552,11 @@ VickyShick (1) + + Vincentvikram (1) - - Virus009 (1) @@ -11772,11 +12566,11 @@ WOBFriedauk (1) + + WZEMonica (1) - - Wadrian (1) @@ -11786,11 +12580,11 @@ Waqas mirza6 (1) + + Wastl (1) - - Waynemcl (1) @@ -11800,11 +12594,11 @@ Wes (1) + + Westantenna (1) - - Wezchlebaty (1) @@ -11814,11 +12608,11 @@ William Avery (1) + + Williewortel (1) - - Klausner, Thomas (1) @@ -11828,11 +12622,11 @@ XSXKristin (1) + + Baudin, Lucas (1) - - Xsdcfghjk (1) @@ -11842,11 +12636,11 @@ Xtrusia (1) + + Yangyiji (1) - - YaroslavRutledge (1) @@ -11856,11 +12650,11 @@ Yoshiharu Kawai (1) + + Yowbooks (1) - - Yury Tarasievich (1) @@ -11868,26 +12662,37 @@ YvanM (1) + Yy y ja jp (1) + + + + + Bölöny, Zsolt (1) + + ZAXHesterlpu (1) ZBMCallumbwire (1) + + ZakGregory (1) + - ZakGregory (1) + Zangune (1) Zizzle (1) - + - If you want to replace your Wiki user name with your full name, go to this wiki page and add yourself to the name mapping list. + If you want to replace your Wiki user name with your full name, go to this wiki page and add yourself to the name mapping list. diff -Nru libreoffice-l10n-4.4.2/RepositoryExternal.mk libreoffice-l10n-4.4.6~rc3/RepositoryExternal.mk --- libreoffice-l10n-4.4.2/RepositoryExternal.mk 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/RepositoryExternal.mk 2015-10-27 20:55:54.000000000 +0000 @@ -3081,6 +3081,11 @@ define gb_LinkTarget__use_python $(call gb_LinkTarget__use_python_headers,$(1)) +ifeq ($(OS),MACOSX) +$(call gb_LinkTarget_use_generated_package,$(1),python3) +else +$(call gb_LinkTarget_use_package,$(1),python3) +endif ifeq ($(OS),WNT) $(call gb_LinkTarget_add_libs,$(1),\ @@ -3755,6 +3760,7 @@ )) \ $(call gb_Package_get_target_for_build,postprocess_images) \ $(call gb_Package_get_target_for_build,postprocess_registry) \ + $(call gb_Package_get_target_for_build,instsetoo_native_setup_ure) \ $(call gb_Rdb_get_target_for_build,ure/services) \ $(INSTROOT)/$(LIBO_URE_SHARE_FOLDER)/misc/services.rdb \ $(call gb_UnoApi_get_target,offapi) \ diff -Nru libreoffice-l10n-4.4.2/sal/osl/unx/file_misc.cxx libreoffice-l10n-4.4.6~rc3/sal/osl/unx/file_misc.cxx --- libreoffice-l10n-4.4.2/sal/osl/unx/file_misc.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sal/osl/unx/file_misc.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -816,7 +816,7 @@ "sal.osl", "rename(" << pszDestFileName << ", " << tmpDestFile << ") failed with errno " << e); - return osl_File_E_BUSY; // for want of a better error code + return osl_File_E_EXIST; // for want of a better error code } } } diff -Nru libreoffice-l10n-4.4.2/sal/qa/rtl/strings/test_strings_replace.cxx libreoffice-l10n-4.4.6~rc3/sal/qa/rtl/strings/test_strings_replace.cxx --- libreoffice-l10n-4.4.2/sal/qa/rtl/strings/test_strings_replace.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sal/qa/rtl/strings/test_strings_replace.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -186,6 +186,10 @@ rtl::OUString("other"), &n))); CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n); } + + CPPUNIT_ASSERT_EQUAL( + rtl::OUString(), + rtl::OUString("xa").replaceFirst("xa", rtl::OUString())); } void Test::ustringReplaceFirstAsciiLAsciiL() { @@ -225,6 +229,9 @@ replaceFirst("bar", "other", &n))); CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n); } + + CPPUNIT_ASSERT_EQUAL( + rtl::OUString(), rtl::OUString("xa").replaceFirst("xa", "")); } void Test::ustringReplaceAll() { @@ -265,6 +272,9 @@ rtl::OUString("xaa").replaceAll( "xa", rtl::OUString("xx"))); + + CPPUNIT_ASSERT_EQUAL( + rtl::OUString(), rtl::OUString("xa").replaceAll("xa", rtl::OUString())); } void Test::ustringReplaceAllAsciiLAsciiL() { @@ -282,6 +292,9 @@ rtl::OUString("xxa"), (rtl::OUString("xaa"). replaceAll("xa", "xx"))); + + CPPUNIT_ASSERT_EQUAL( + rtl::OUString(), rtl::OUString("xa").replaceAll("xa", "")); } } diff -Nru libreoffice-l10n-4.4.2/sal/rtl/ustring.cxx libreoffice-l10n-4.4.6~rc3/sal/rtl/ustring.cxx --- libreoffice-l10n-4.4.2/sal/rtl/ustring.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sal/rtl/ustring.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1118,8 +1118,8 @@ } sal_Int32 n = str->length - fromLength + to->length; rtl_uString_acquire(str); // in case *newStr == str + rtl_uString_new_WithLength(newStr, n); if (n != 0) { - rtl_uString_new_WithLength(newStr, n); (*newStr)->length = n; assert(i >= 0 && i < str->length); memcpy( @@ -1161,8 +1161,8 @@ } sal_Int32 n = str->length - fromLength + toLength; rtl_uString_acquire(str); // in case *newStr == str + rtl_uString_new_WithLength(newStr, n); if (n != 0) { - rtl_uString_new_WithLength(newStr, n); (*newStr)->length = n; assert(i >= 0 && i < str->length); memcpy( diff -Nru libreoffice-l10n-4.4.2/sax/source/tools/converter.cxx libreoffice-l10n-4.4.6~rc3/sax/source/tools/converter.cxx --- libreoffice-l10n-4.4.2/sax/source/tools/converter.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sax/source/tools/converter.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -639,6 +639,62 @@ return ( eStatus == rtl_math_ConversionStatus_Ok ); } +/** convert number, 10th of degrees with range [0..3600] to SVG angle */ +void Converter::convertAngle(OUStringBuffer& rBuffer, sal_Int16 const nAngle) +{ +#if 1 + // wrong, but backward compatible with OOo/LO < 4.4 + ::sax::Converter::convertNumber(rBuffer, nAngle); +#else + // maybe in the future... (see other convertAngle) + double fAngle(double(nAngle) / 10.0); + ::sax::Converter::convertDouble(rBuffer, fAngle); + rBuffer.append("deg"); +#endif +} + +/** convert SVG angle to number, 10th of degrees with range [0..3600] */ +bool Converter::convertAngle(sal_Int16& rAngle, OUString const& rString) +{ + // ODF 1.1 leaves it undefined what the number means, but ODF 1.2 says it's + // degrees, while OOo has historically used 10th of degrees :( + // So import degrees when we see the "deg" suffix but continue with 10th of + // degrees for now for the sake of existing OOo/LO documents, until the + // new versions that can read "deg" suffix are widely deployed and we can + // start to write the "deg" suffix. + sal_Int32 nValue(0); + double fValue(0.0); + bool bRet = ::sax::Converter::convertDouble(fValue, rString); + if (-1 != rString.indexOf("deg")) + { + nValue = fValue * 10.0; + } + else if (-1 != rString.indexOf("grad")) + { + nValue = (fValue * 9.0 / 10.0) * 10.0; + } + else if (-1 != rString.indexOf("rad")) + { + nValue = (fValue * 180.0 / M_PI) * 10.0; + } + else // no explicit unit + { + nValue = fValue; // wrong, but backward compatible with OOo/LO < 4.4 + } + // limit to valid range [0..3600] + nValue = nValue % 3600; + if (nValue < 0) + { + nValue += 3600; + } + assert(0 <= nValue && nValue <= 3600); + if (bRet) + { + rAngle = sal::static_int_cast(nValue); + } + return bRet; +} + /** convert double to ISO "duration" string; negative durations allowed */ void Converter::convertDuration(OUStringBuffer& rBuffer, const double fTime) diff -Nru libreoffice-l10n-4.4.2/sc/inc/autoform.hxx libreoffice-l10n-4.4.6~rc3/sc/inc/autoform.hxx --- libreoffice-l10n-4.4.2/sc/inc/autoform.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/inc/autoform.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -307,9 +307,13 @@ bool Save( SvStream& rStream, sal_uInt16 fileVersion ); }; +struct DefaultFirstEntry { + bool operator() (const OUString& left, const OUString& right) const; +}; + class SC_DLLPUBLIC ScAutoFormat { - typedef boost::ptr_map MapType; + typedef boost::ptr_map MapType; MapType maData; bool mbSaveLater; ScAfVersions m_aVersions; diff -Nru libreoffice-l10n-4.4.2/sc/inc/column.hxx libreoffice-l10n-4.4.6~rc3/sc/inc/column.hxx --- libreoffice-l10n-4.4.2/sc/inc/column.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/inc/column.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -351,7 +351,7 @@ void GetFormula( SCROW nRow, OUString& rFormula ) const; const ScFormulaCell* GetFormulaCell( SCROW nRow ) const; ScFormulaCell* GetFormulaCell( SCROW nRow ); - ScFormulaCell * const * GetFormulaCellBlockAddress( SCROW nRow ) const; + ScFormulaCell * const * GetFormulaCellBlockAddress( SCROW nRow, size_t& rBlockSize ) const; CellType GetCellType( SCROW nRow ) const; SCSIZE GetCellCount() const; sal_uInt32 GetWeightedCount() const; @@ -566,7 +566,7 @@ ScPostIt* GetCellNote( SCROW nRow ); const ScPostIt* GetCellNote( SCROW nRow ) const; const ScPostIt* GetCellNote( sc::ColumnBlockConstPosition& rBlockPos, SCROW nRow ) const; - void DeleteCellNotes( sc::ColumnBlockPosition& rBlockPos, SCROW nRow1, SCROW nRow2 ); + void DeleteCellNotes( sc::ColumnBlockPosition& rBlockPos, SCROW nRow1, SCROW nRow2, bool bForgetCaptionOwnership ); bool HasCellNotes() const; void SetCellNote( SCROW nRow, ScPostIt* pNote); bool IsNotesEmptyBlock(SCROW nStartRow, SCROW nEndRow) const; diff -Nru libreoffice-l10n-4.4.2/sc/inc/compare.hxx libreoffice-l10n-4.4.6~rc3/sc/inc/compare.hxx --- libreoffice-l10n-4.4.2/sc/inc/compare.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/inc/compare.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -63,9 +63,13 @@ }; /** @param pOptions - NULL means case sensitivity document option is to be used! + Used for comparing two strings, if given. + NULL means that for comparing two strings ScQueryOp rComp.meOp is + tested for SC_EQUAL and SC_NOT_EQUAL, else pOptions->aQueryEntry.eOp + Case sensitivity document option is always to be passed in + rComp.mbIgnoreCase. */ -double CompareFunc( const Compare::Cell& rCell1, const Compare::Cell& rCell2, bool bIgnoreCase, CompareOptions* pOptions = NULL ); +double CompareFunc( const Compare& rComp, CompareOptions* pOptions = NULL ); double CompareFunc( const Compare::Cell& rCell1, double fCell2, CompareOptions* pOptions = NULL ); double CompareFunc( double fCell1, double fCell2 ); diff -Nru libreoffice-l10n-4.4.2/sc/inc/conditio.hxx libreoffice-l10n-4.4.6~rc3/sc/inc/conditio.hxx --- libreoffice-l10n-4.4.2/sc/inc/conditio.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/inc/conditio.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -496,6 +496,7 @@ const_iterator end() const; size_t size() const; + bool empty() const; void erase(sal_uLong nIndex); diff -Nru libreoffice-l10n-4.4.2/sc/inc/dbdata.hxx libreoffice-l10n-4.4.6~rc3/sc/inc/dbdata.hxx --- libreoffice-l10n-4.4.2/sc/inc/dbdata.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/inc/dbdata.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -112,6 +112,10 @@ void GetSortParam(ScSortParam& rSortParam) const; void SetSortParam(const ScSortParam& rSortParam); + /** Remember some more settings of ScSortParam, only to be called at + anonymous DB ranges as it at least overwrites bHasHeader. */ + void UpdateFromSortParam( const ScSortParam& rSortParam ); + SC_DLLPUBLIC void GetQueryParam(ScQueryParam& rQueryParam) const; SC_DLLPUBLIC void SetQueryParam(const ScQueryParam& rQueryParam); SC_DLLPUBLIC bool GetAdvancedQuerySource(ScRange& rSource) const; @@ -206,6 +210,7 @@ ScDBData* getByRange(const ScRange& rRange); void insert(ScDBData* p); bool empty() const; + bool has( const ScDBData* p ) const; bool operator== (const AnonDBs& r) const; }; diff -Nru libreoffice-l10n-4.4.2/sc/inc/funcdesc.hxx libreoffice-l10n-4.4.6~rc3/sc/inc/funcdesc.hxx --- libreoffice-l10n-4.4.2/sc/inc/funcdesc.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/inc/funcdesc.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -27,6 +27,7 @@ #include #include #include +#include #define MAX_FUNCCAT 12 /* maximum number of categories for functions */ #define LRU_MAX 10 /* maximal number of last recently used functions */ @@ -361,7 +362,7 @@ /** Returns a category. - Creates an IFunctionCategory object from a category specified by nPos. + Returns an IFunctionCategory object for a category specified by nPos. @param nPos the index of the category, note that 0 maps to the first category not the cumulative ('All') category. @@ -399,9 +400,10 @@ private: ScFunctionList* pFuncList; /**< list of all calc functions */ - ::std::vector* aCatLists[MAX_FUNCCAT]; /**< array of all categories, 0 is the cumulative ('All') category */ - mutable ::std::vector::iterator pCurCatListIter; /**< position in current category */ - mutable ::std::vector::iterator pCurCatListEnd; /**< end of current category */ + std::vector* aCatLists[MAX_FUNCCAT]; /**< array of all categories, 0 is the cumulative ('All') category */ + mutable std::map< sal_uInt32, std::shared_ptr > m_aCategories; /**< map of category pos to IFunctionCategory */ + mutable std::vector::iterator pCurCatListIter; /**< position in current category */ + mutable std::vector::iterator pCurCatListEnd; /**< end of current category */ }; #endif // INCLUDED_SC_INC_FUNCDESC_HXX diff -Nru libreoffice-l10n-4.4.2/sc/inc/global.hxx libreoffice-l10n-4.4.6~rc3/sc/inc/global.hxx --- libreoffice-l10n-4.4.2/sc/inc/global.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/inc/global.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -204,10 +204,11 @@ const InsertDeleteFlags IDF_NOCAPTIONS = InsertDeleteFlags::fromInt(0x0200); /// Internal use only (undo etc.): do not copy/delete caption objects of cell notes. const InsertDeleteFlags IDF_ADDNOTES = InsertDeleteFlags::fromInt(0x0400); /// Internal use only (copy from clip): do not delete existing cell contents when pasting notes. const InsertDeleteFlags IDF_SPECIAL_BOOLEAN = InsertDeleteFlags::fromInt(0x1000); +const InsertDeleteFlags IDF_FORGETCAPTIONS = InsertDeleteFlags::fromInt(0x2000); /// Internal use only (d&d undo): do not delete caption objects of cell notes. const InsertDeleteFlags IDF_ATTRIB = IDF_HARDATTR | IDF_STYLES; const InsertDeleteFlags IDF_CONTENTS = IDF_VALUE | IDF_DATETIME | IDF_STRING | IDF_NOTE | IDF_FORMULA | IDF_OUTLINE; const InsertDeleteFlags IDF_ALL = IDF_CONTENTS | IDF_ATTRIB | IDF_OBJECTS; -const InsertDeleteFlags IDF_ALL_USED_BITS = IDF_ALL | IDF_EDITATTR | IDF_NOCAPTIONS | IDF_ADDNOTES | IDF_SPECIAL_BOOLEAN; +const InsertDeleteFlags IDF_ALL_USED_BITS = IDF_ALL | IDF_EDITATTR | IDF_NOCAPTIONS | IDF_ADDNOTES | IDF_SPECIAL_BOOLEAN | IDF_FORGETCAPTIONS; inline InsertDeleteFlags operator~ (const InsertDeleteFlags& rhs) { diff -Nru libreoffice-l10n-4.4.2/sc/inc/progress.hxx libreoffice-l10n-4.4.6~rc3/sc/inc/progress.hxx --- libreoffice-l10n-4.4.2/sc/inc/progress.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/inc/progress.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -49,6 +49,7 @@ static bool bAllowInterpretProgress; static ScDocument* pInterpretDoc; static bool bIdleWasEnabled; + bool bEnabled; SfxProgress* pProgress; @@ -144,6 +145,9 @@ return pProgress->GetState(); return 0; } + bool Enabled() const { return bEnabled; } + void Disable() { bEnabled = false; } + void Enable() { bEnabled = true; } }; #endif diff -Nru libreoffice-l10n-4.4.2/sc/inc/queryentry.hxx libreoffice-l10n-4.4.6~rc3/sc/inc/queryentry.hxx --- libreoffice-l10n-4.4.2/sc/inc/queryentry.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/inc/queryentry.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -43,8 +43,9 @@ QueryType meType; double mfVal; svl::SharedString maString; + bool mbMatchEmpty; - Item() : meType(ByValue), mfVal(0.0) {} + Item() : meType(ByValue), mfVal(0.0), mbMatchEmpty(false) {} bool operator== (const Item& r) const; }; diff -Nru libreoffice-l10n-4.4.2/sc/inc/queryparam.hxx libreoffice-l10n-4.4.6~rc3/sc/inc/queryparam.hxx --- libreoffice-l10n-4.4.2/sc/inc/queryparam.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/inc/queryparam.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -25,6 +25,8 @@ #include +class SvNumberFormatter; + struct ScDBQueryParamInternal; struct ScQueryEntry; @@ -55,7 +57,8 @@ ScQueryEntry* FindEntryByField(SCCOLROW nField, bool bNew); SC_DLLPUBLIC void RemoveEntryByField(SCCOLROW nField); void Resize(size_t nNew); - void FillInExcelSyntax(svl::SharedStringPool& rPool, const OUString& aCellStr, SCSIZE nIndex); + void FillInExcelSyntax( svl::SharedStringPool& rPool, const OUString& aCellStr, SCSIZE nIndex, + SvNumberFormatter* pFormatter ); protected: typedef boost::ptr_vector EntriesType; diff -Nru libreoffice-l10n-4.4.2/sc/inc/refdata.hxx libreoffice-l10n-4.4.6~rc3/sc/inc/refdata.hxx --- libreoffice-l10n-4.4.2/sc/inc/refdata.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/inc/refdata.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -57,6 +57,8 @@ void InitAddress( SCCOL nCol, SCROW nRow, SCTAB nTab ); /// InitAddressRel: InitFlags and set address, everything relative to rPos void InitAddressRel( const ScAddress& rAdr, const ScAddress& rPos ); + /// InitFlags and set address, relative to rPos if rRef says so. + void InitFromRefAddress( const ScRefAddress& rRef, const ScAddress& rPos ); sal_uInt8 FlagValue() const { return mnFlagValue;} void SetColRel( bool bVal ) { Flags.bColRel = bVal; } @@ -102,6 +104,9 @@ SCCOL Col() const; SCTAB Tab() const; + /** Adjust ordering (front-top-left/rear-bottom-right) to a new position. */ + static void PutInOrder( ScSingleRefData& rRef1, ScSingleRefData& rRef2, const ScAddress& rPos ); + bool operator==( const ScSingleRefData& ) const; bool operator!=( const ScSingleRefData& ) const; @@ -135,6 +140,9 @@ Ref2.InitAddress( nCol2, nRow2, nTab2 ); } + /// InitFlags and set range, relative to rPos if rRef1 and rRef2 say so. + void InitFromRefAddresses( const ScRefAddress& rRef1, const ScRefAddress& rRef2, const ScAddress& rPos ); + bool Valid() const; /** In external references nTab is -1 for the start tab and -1 for the end @@ -142,8 +150,14 @@ bool ValidExternal() const; SC_DLLPUBLIC ScRange toAbs( const ScAddress& rPos ) const; + + /** Set a new range, assuming that the ordering of the range matches the + ordering of the reference data flags already set. */ void SetRange( const ScRange& rRange, const ScAddress& rPos ); + /** Adjust ordering (front-top-left/rear-bottom-right) to a new position. */ + void PutInOrder( const ScAddress& rPos ); + inline bool operator==( const ScComplexRefData& r ) const { return Ref1 == r.Ref1 && Ref2 == r.Ref2; } /** Enlarge range if reference passed is not within existing range. diff -Nru libreoffice-l10n-4.4.2/sc/inc/refupdatecontext.hxx libreoffice-l10n-4.4.6~rc3/sc/inc/refupdatecontext.hxx --- libreoffice-l10n-4.4.2/sc/inc/refupdatecontext.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/inc/refupdatecontext.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -103,29 +103,32 @@ struct RefUpdateInsertTabContext { + ScDocument& mrDoc; SCTAB mnInsertPos; SCTAB mnSheets; UpdatedRangeNames maUpdatedNames; - RefUpdateInsertTabContext(SCTAB nInsertPos, SCTAB nSheets); + RefUpdateInsertTabContext(ScDocument& rDoc, SCTAB nInsertPos, SCTAB nSheets); }; struct RefUpdateDeleteTabContext { + ScDocument& mrDoc; SCTAB mnDeletePos; SCTAB mnSheets; UpdatedRangeNames maUpdatedNames; - RefUpdateDeleteTabContext(SCTAB nInsertPos, SCTAB nSheets); + RefUpdateDeleteTabContext(ScDocument& rDoc, SCTAB nInsertPos, SCTAB nSheets); }; struct RefUpdateMoveTabContext { + ScDocument& mrDoc; SCTAB mnOldPos; SCTAB mnNewPos; UpdatedRangeNames maUpdatedNames; - RefUpdateMoveTabContext(SCTAB nOldPos, SCTAB nNewPos); + RefUpdateMoveTabContext(ScDocument& rDoc, SCTAB nOldPos, SCTAB nNewPos); SCTAB getNewTab(SCTAB nOldTab) const; }; diff -Nru libreoffice-l10n-4.4.2/sc/inc/scmatrix.hxx libreoffice-l10n-4.4.6~rc3/sc/inc/scmatrix.hxx --- libreoffice-l10n-4.4.2/sc/inc/scmatrix.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/inc/scmatrix.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -264,6 +264,7 @@ /// Jump sal_False without path void PutEmptyPath( SCSIZE nC, SCSIZE nR); void PutError( sal_uInt16 nErrorCode, SCSIZE nC, SCSIZE nR ); + void PutError( sal_uInt16 nErrorCode, SCSIZE nIndex ); void PutBoolean( bool bVal, SCSIZE nC, SCSIZE nR); void FillDouble( double fVal, @@ -341,6 +342,9 @@ bool IsValue( SCSIZE nC, SCSIZE nR ) const; /// @return if value or boolean or empty or empty path. + bool IsValueOrEmpty( SCSIZE nIndex ) const; + + /// @return if value or boolean or empty or empty path. bool IsValueOrEmpty( SCSIZE nC, SCSIZE nR ) const; /// @return if boolean. @@ -388,7 +392,7 @@ void GetDoubleArray( std::vector& rArray, bool bEmptyAsZero = true ) const; void MergeDoubleArray( std::vector& rArray, Op eOp ) const; - void SubAddOp(bool bSub, double fVal, svl::SharedString aString, ScMatrix& rMat); + void SubAddOp(bool bSub, double fVal, ScMatrix& rMat); ScMatrix& operator+= ( const ScMatrix& r ); diff -Nru libreoffice-l10n-4.4.2/sc/inc/sharedformula.hxx libreoffice-l10n-4.4.6~rc3/sc/inc/sharedformula.hxx --- libreoffice-l10n-4.4.2/sc/inc/sharedformula.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/inc/sharedformula.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -62,8 +62,9 @@ * specified position is not a formula cell. * * @param aPos position of cell to examine. + * @param pCxt context to be used, if any, may be nullptr. */ - static void splitFormulaCellGroup(const CellStoreType::position_type& aPos); + static void splitFormulaCellGroup(const CellStoreType::position_type& aPos, sc::EndListeningContext* pCxt); /** * Split existing shared formula ranges at specified row positions. diff -Nru libreoffice-l10n-4.4.2/sc/inc/tokenarray.hxx libreoffice-l10n-4.4.6~rc3/sc/inc/tokenarray.hxx --- libreoffice-l10n-4.4.2/sc/inc/tokenarray.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/inc/tokenarray.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -216,6 +216,12 @@ void AdjustReferenceOnMovedOriginIfOtherSheet( const ScAddress& rOldPos, const ScAddress& rNewPos ); /** + * Adjust internal range references on base position change to justify / + * put in order the relative references. + */ + void AdjustReferenceOnCopy( const ScAddress& rNewPos ); + + /** * Clear sheet deleted flag from internal reference tokens if the sheet * index falls within specified range. Note that when a reference is on a * sheet that's been deleted, its referenced sheet index retains the diff -Nru libreoffice-l10n-4.4.2/sc/inc/token.hxx libreoffice-l10n-4.4.6~rc3/sc/inc/token.hxx --- libreoffice-l10n-4.4.2/sc/inc/token.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/inc/token.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -337,6 +337,12 @@ /** Reset matrix and upper left, keep matrix formula dimension. */ void ResetResult(); + +private: + + /** xUpperLeft is modifiable through SetUpperLeftDouble(), so clone it + whenever an svDouble token is assigned to. */ + void CloneUpperLeftIfNecessary(); }; class SC_DLLPUBLIC ScHybridCellToken : public formula::FormulaToken Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sc/qa/unit/data/ods/header-image.ods and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sc/qa/unit/data/ods/header-image.ods differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sc/qa/unit/data/xls/pass/crash-1.xls and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sc/qa/unit/data/xls/pass/crash-1.xls differ diff -Nru libreoffice-l10n-4.4.2/sc/qa/unit/subsequent_export-test.cxx libreoffice-l10n-4.4.6~rc3/sc/qa/unit/subsequent_export-test.cxx --- libreoffice-l10n-4.4.2/sc/qa/unit/subsequent_export-test.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/qa/unit/subsequent_export-test.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -135,6 +135,7 @@ void testLinkedGraphicRT(); void testSupBookVirtualPath(); + void testHeaderImage(); CPPUNIT_TEST_SUITE(ScExportTest); CPPUNIT_TEST(test); @@ -180,6 +181,7 @@ #endif CPPUNIT_TEST(testSwappedOutImageExport); CPPUNIT_TEST(testLinkedGraphicRT); + CPPUNIT_TEST(testHeaderImage); CPPUNIT_TEST_SUITE_END(); @@ -2417,6 +2419,20 @@ } } +void ScExportTest::testHeaderImage() +{ + // Graphic as header background was lost on export. + ScDocShellRef xShell = loadDoc("header-image.", ODS); + ScDocShellRef xDocSh = saveAndReload(&(*xShell), ODS); + uno::Reference xStyleFamiliesSupplier(xDocSh->GetModel(), uno::UNO_QUERY); + uno::Reference xStyleFamilies = xStyleFamiliesSupplier->getStyleFamilies(); + uno::Reference xPageStyles(xStyleFamilies->getByName("PageStyles"), uno::UNO_QUERY); + uno::Reference xStyle(xPageStyles->getByName("Default"), uno::UNO_QUERY); + OUString aURL; + xStyle->getPropertyValue("HeaderBackGraphicURL") >>= aURL; + CPPUNIT_ASSERT(aURL.startsWith("vnd.sun.star.GraphicObject:")); +} + CPPUNIT_TEST_SUITE_REGISTRATION(ScExportTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff -Nru libreoffice-l10n-4.4.2/sc/sdi/scalc.sdi libreoffice-l10n-4.4.6~rc3/sc/sdi/scalc.sdi --- libreoffice-l10n-4.4.2/sc/sdi/scalc.sdi 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/sdi/scalc.sdi 2015-10-27 20:55:54.000000000 +0000 @@ -3280,7 +3280,7 @@ ] SfxVoidItem SearchResultsDialog SID_SEARCH_RESULTS_DIALOG -() +(SfxBoolItem Visible SID_SEARCH_RESULTS_DIALOG) [ /* flags: */ AutoUpdate = FALSE, @@ -3297,9 +3297,9 @@ /* config: */ AccelConfig = TRUE, - MenuConfig = TRUE, + MenuConfig = FALSE, StatusBarConfig = FALSE, - ToolBoxConfig = TRUE, + ToolBoxConfig = FALSE, GroupId = GID_OPTIONS; ] diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/bcaslot.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/bcaslot.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/bcaslot.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/bcaslot.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1229,12 +1229,22 @@ for (; it != itEnd; ++it) { ScBroadcastArea* pArea = it->first; - const sc::ColumnSpanSet* pSpans = it->second; assert(pArea); - assert(pSpans); - aHint.setSpans(pSpans); - pArea->GetBroadcaster().Broadcast(aHint); - bBroadcasted = true; + SvtBroadcaster& rBC = pArea->GetBroadcaster(); + if (!rBC.HasListeners()) + { + /* FIXME: find the cause where the last listener is removed and + * this area is still listed here. */ + SAL_WARN("sc.core","ScBroadcastAreaSlotMachine::BulkBroadcastGroupAreas - pArea has no listeners and should had been removed already"); + } + else + { + const sc::ColumnSpanSet* pSpans = it->second; + assert(pSpans); + aHint.setSpans(pSpans); + rBC.Broadcast(aHint); + bBroadcasted = true; + } } maBulkGroupAreas.clear(); diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/column2.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/column2.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/column2.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/column2.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -43,6 +43,7 @@ #include "formulagroup.hxx" #include "listenercontext.hxx" #include "mtvcellfunc.hxx" +#include "progress.hxx" #include "scmatrix.hxx" #include @@ -822,7 +823,18 @@ } if (bStdOnly) - if (HasEditCells(nStart,nEnd,nEditPos)) // includes mixed script types + { + bool bHasEditCells = HasEditCells(nStart,nEnd,nEditPos); + // Call to HasEditCells() may change pattern due to + // calculation, => sync always. + // We don't know which row changed first, but as pPattern + // covered nStart to nEnd we can pick nStart. Worst case we + // have to repeat that for every row in range if every row + // changed. + pPattern = aIter.Resync( nStart, nStart, nEnd); + if (bHasEditCells && nEnd < nEditPos) + bHasEditCells = false; // run into that again + if (bHasEditCells) // includes mixed script types { if (nEditPos == nStart) { @@ -838,6 +850,7 @@ nEnd = nEditPos - 1; // standard - part } } + } sc::SingleColumnSpanSet aSpanSet; aSpanSet.scan(*this, nStart, nEnd); @@ -1802,8 +1815,27 @@ maCellNotes.set(nRow, pNote); } -void ScColumn::DeleteCellNotes( sc::ColumnBlockPosition& rBlockPos, SCROW nRow1, SCROW nRow2 ) +namespace { +class ForgetCellNoteCaptionsHandler +{ + +public: + ForgetCellNoteCaptionsHandler() {} + + void operator() ( size_t /*nRow*/, ScPostIt* p ) + { + p->ForgetCaption(); + } +}; +} + +void ScColumn::DeleteCellNotes( sc::ColumnBlockPosition& rBlockPos, SCROW nRow1, SCROW nRow2, bool bForgetCaptionOwnership ) { + if (bForgetCaptionOwnership) + { + ForgetCellNoteCaptionsHandler aFunc; + sc::ParseNote(maCellNotes.begin(), maCellNotes, nRow1, nRow2, aFunc); + } rBlockPos.miCellNotePos = maCellNotes.set_empty(rBlockPos.miCellNotePos, nRow1, nRow2); } @@ -2305,10 +2337,23 @@ sc::formula_block::iterator itData, itDataEnd; getBlockIterators(it, nLenRemain, itData, itDataEnd); + /* tdf#91416 setting progress in triggers a resize of the window + and so ScTabView::DoResize and an InterpretVisible and + InterpretDirtyCells which resets the mpFormulaGroupCxt that + the current rCxt points to, which is bad, so disable progress + during GetResult + */ + ScProgress *pProgress = ScProgress::GetInterpretProgress(); + bool bTempDisableProgress = pProgress && pProgress->Enabled(); + if (bTempDisableProgress) + pProgress->Disable(); + for (; itData != itDataEnd; ++itData, ++nPos) { ScFormulaCell& rFC = **itData; + sc::FormulaResultValue aRes = rFC.GetResult(); + if (aRes.meType == sc::FormulaResultValue::Invalid || aRes.mnError) { if (aRes.mnError == ScErrorCodes::errCircularReference) @@ -2331,6 +2376,9 @@ (*rColArray.mpNumArray)[nPos] = aRes.mfValue; } } + + if (bTempDisableProgress) + pProgress->Enable(); } break; case sc::element_type_empty: @@ -2712,26 +2760,37 @@ ApplyAttr(nRow, SfxUInt32Item(ATTR_VALUE_FORMAT, nNumberFormat)); } -ScFormulaCell * const * ScColumn::GetFormulaCellBlockAddress( SCROW nRow ) const +ScFormulaCell * const * ScColumn::GetFormulaCellBlockAddress( SCROW nRow, size_t& rBlockSize ) const { if (!ValidRow(nRow)) + { + rBlockSize = 0; return NULL; + } std::pair aPos = maCells.position(nRow); sc::CellStoreType::const_iterator it = aPos.first; if (it == maCells.end()) + { + rBlockSize = 0; return NULL; + } if (it->type != sc::element_type_formula) + { // Not a formula cell. + rBlockSize = 0; return NULL; + } + rBlockSize = it->size; return &sc::formula_block::at(*it->data, aPos.second); } const ScFormulaCell* ScColumn::FetchFormulaCell( SCROW nRow ) const { - ScFormulaCell const * const * pp = GetFormulaCellBlockAddress( nRow ); + size_t nBlockSize = 0; + ScFormulaCell const * const * pp = GetFormulaCellBlockAddress( nRow, nBlockSize ); return pp ? *pp : NULL; } diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/column3.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/column3.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/column3.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/column3.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -327,13 +327,13 @@ const sc::CellStoreType::position_type& aPos, size_t nLength ) { // Split formula grouping at the top and bottom boundaries. - sc::SharedFormulaUtil::splitFormulaCellGroup(aPos); + sc::SharedFormulaUtil::splitFormulaCellGroup(aPos, nullptr); size_t nRow = aPos.first->position + aPos.second; size_t nNextTopRow = nRow + nLength; // start row of next formula group. if (ValidRow(nNextTopRow)) { sc::CellStoreType::position_type aPos2 = maCells.position(aPos.first, nNextTopRow); - sc::SharedFormulaUtil::splitFormulaCellGroup(aPos2); + sc::SharedFormulaUtil::splitFormulaCellGroup(aPos2, nullptr); } if (pDocument->IsClipOrUndo()) @@ -368,11 +368,11 @@ sc::CellStoreType::iterator it = aPos.first; // Split formula grouping at the top and bottom boundaries. - sc::SharedFormulaUtil::splitFormulaCellGroup(aPos); + sc::SharedFormulaUtil::splitFormulaCellGroup(aPos, &rCxt); if (ValidRow(nRow2+1)) { aPos = maCells.position(it, nRow2+1); - sc::SharedFormulaUtil::splitFormulaCellGroup(aPos); + sc::SharedFormulaUtil::splitFormulaCellGroup(aPos, &rCxt); } if (pDocument->IsClipOrUndo()) @@ -684,7 +684,10 @@ } if (nDelFlag & IDF_NOTE) - DeleteCellNotes(aBlockPos, nStartRow, nEndRow); + { + bool bForgetCaptionOwnership = ((nDelFlag & IDF_FORGETCAPTIONS) != IDF_NONE); + DeleteCellNotes(aBlockPos, nStartRow, nEndRow, bForgetCaptionOwnership); + } if ( nDelFlag & IDF_EDITATTR ) { @@ -2020,6 +2023,10 @@ fVal = rtl::math::approxFloor(fVal); mbHasDates = true; bDate = true; + // Convert string representation to ISO 8601 date to eliminate + // locale dependent behaviour later when filtering for dates. + sal_uInt32 nIndex = pFormatter->GetFormatIndex( NF_DATE_DIN_YYYYMMDD); + pFormatter->GetInputLineString( fVal, nIndex, aStr); } // maybe extend ScTypedStrData enum is also an option here mrStrings.push_back(ScTypedStrData(aStr, fVal, ScTypedStrData::Value,bDate)); diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/column4.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/column4.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/column4.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/column4.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -114,7 +114,7 @@ } if (nDelFlag & IDF_NOTE) - DeleteCellNotes(aBlockPos, nRow1, nRow2); + DeleteCellNotes(aBlockPos, nRow1, nRow2, false); if (nDelFlag & IDF_EDITATTR) RemoveEditAttribs(nRow1, nRow2); diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/column.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/column.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/column.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/column.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1908,15 +1908,15 @@ // Split the formula grouping at the top and bottom boundaries. sc::CellStoreType::position_type aPos = maCells.position(nStartRow); - sc::SharedFormulaUtil::splitFormulaCellGroup(aPos); + sc::SharedFormulaUtil::splitFormulaCellGroup(aPos, nullptr); aPos = maCells.position(aPos.first, nEndRow+1); - sc::SharedFormulaUtil::splitFormulaCellGroup(aPos); + sc::SharedFormulaUtil::splitFormulaCellGroup(aPos, nullptr); // Do the same with the destination column. aPos = rCol.maCells.position(nStartRow); - sc::SharedFormulaUtil::splitFormulaCellGroup(aPos); + sc::SharedFormulaUtil::splitFormulaCellGroup(aPos, nullptr); aPos = rCol.maCells.position(aPos.first, nEndRow+1); - sc::SharedFormulaUtil::splitFormulaCellGroup(aPos); + sc::SharedFormulaUtil::splitFormulaCellGroup(aPos, nullptr); // Move the broadcasters to the destination column. maBroadcasters.transfer(nStartRow, nEndRow, rCol.maBroadcasters, nStartRow); diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/conditio.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/conditio.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/conditio.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/conditio.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -2314,6 +2314,11 @@ return maConditionalFormats.size(); } +bool ScConditionalFormatList::empty() const +{ + return maConditionalFormats.empty(); +} + void ScConditionalFormatList::erase( sal_uLong nIndex ) { for( iterator itr = begin(); itr != end(); ++itr ) diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/dociter.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/dociter.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/dociter.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/dociter.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1117,8 +1117,24 @@ if (maCurPos.first->type == sc::element_type_empty) { - IncBlock(); - continue; + if (rItem.mbMatchEmpty && rEntry.GetQueryItems().size() == 1) + { + // This shortcut, instead of determining if any SC_OR query + // exists or this query is SC_AND'ed (which wouldn't make + // sense, but..) and evaluating them in ValidQuery(), is + // possible only because the interpreter is the only caller + // that sets mbMatchEmpty and there is only one item in those + // cases. + // XXX this would have to be reworked if other filters used it + // in different manners and evaluation would have to be done in + // ValidQuery(). + return true; + } + else + { + IncBlock(); + continue; + } } ScRefCellValue aCell = sc::toRefCell(maCurPos.first, maCurPos.second); diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/documen2.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/documen2.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/documen2.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/documen2.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -731,7 +731,7 @@ // Update Reference // TODO: combine with UpdateReference! - sc::RefUpdateMoveTabContext aCxt(nOldPos, nNewPos); + sc::RefUpdateMoveTabContext aCxt( *this, nOldPos, nNewPos); SCsTAB nDz = ((SCsTAB)nNewPos) - (SCsTAB)nOldPos; ScRange aSourceRange( 0,0,nOldPos, MAXCOL,MAXROW,nOldPos ); @@ -804,7 +804,7 @@ bValid = !GetTable( aName, nDummy ); sc::AutoCalcSwitch aACSwitch(*this, false); - sc::RefUpdateInsertTabContext aCxt(nNewPos, 1); + sc::RefUpdateInsertTabContext aCxt( *this, nNewPos, 1); sc::StartListeningContext aSLCxt(*this); if (bValid) diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/documen7.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/documen7.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/documen7.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/documen7.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -149,12 +149,20 @@ continue; ScConditionalFormatList* pCondFormList = GetCondFormList(nTab); - if (pCondFormList) + if (pCondFormList && !pCondFormList->empty()) { + /* TODO: looping over all possible cells is a terrible bottle neck, + * for each cell looping over all conditional formats even worse, + * this certainly needs a better method. */ + ScAddress aAddress( 0, 0, nTab); for (SCROW nRow = nRow1; nRow <= nRow2; ++nRow) { + aAddress.SetRow(nRow); for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol) - pCondFormList->SourceChanged(ScAddress(nCol,nRow,nTab)); + { + aAddress.SetCol(nCol); + pCondFormList->SourceChanged(aAddress); + } } } } @@ -410,6 +418,7 @@ CalcAll(); else { + ::std::vector vAlwaysDirty; ScFormulaCell* pCell = pFormulaTree; while ( pCell ) { @@ -419,12 +428,11 @@ { if ( pCell->GetCode()->IsRecalcModeAlways() ) { - // pCell wird im SetDirty neu angehaengt! - ScFormulaCell* pNext = pCell->GetNext(); - pCell->SetDirty(); - // falls pNext==0 und neue abhaengige hinten angehaengt - // wurden, so macht das nichts, da die alle bDirty sind - pCell = pNext; + // pCell and dependents are to be set dirty again, collect + // them first and broadcast afterwards to not break the + // FormulaTree chain here. + vAlwaysDirty.push_back( pCell); + pCell = pCell->GetNext(); } else { // andere simpel berechnen @@ -434,6 +442,14 @@ } } } + for (::std::vector::iterator it( vAlwaysDirty.begin()), itEnd( vAlwaysDirty.end()); + it != itEnd; ++it) + { + pCell = *it; + if (!pCell->GetDirty()) + pCell->SetDirty(); + } + bool bProgress = !bOnlyForced && nFormulaCodeInTree && bProgressBar; if ( bProgress ) ScProgress::CreateInterpretProgress( this, true ); diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/documen9.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/documen9.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/documen9.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/documen9.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -139,11 +139,11 @@ // in SfxItemSets using the Calc SfxItemPool. This is e.g. needed when // the PageStyle using SvxBrushItem is visualized and will be potentially // used more intense in the future - if(xPoolHelper.is()) + if (xPoolHelper.is() && !IsClipOrUndo()) //Using IsClipOrUndo as a proxy for SharePooledResources called { ScDocumentPool* pLocalPool = xPoolHelper->GetDocPool(); - if(pLocalPool) + if (pLocalPool) { OSL_ENSURE(!pLocalPool->GetSecondaryPool(), "OOps, already a secondary pool set where the DrawingLayer ItemPool is to be placed (!)"); pLocalPool->SetSecondaryPool(&pDrawLayer->GetItemPool()); diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/document.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/document.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/document.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/document.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -491,7 +491,7 @@ { if (ValidTab(nPos) && (nPos < nTabCount)) { - sc::RefUpdateInsertTabContext aCxt(nPos, 1); + sc::RefUpdateInsertTabContext aCxt( *this, nPos, 1); ScRange aRange( 0,0,nPos, MAXCOL,MAXROW,MAXTAB ); xColNameRanges->UpdateReference( URM_INSDEL, this, aRange, 0,0,1 ); @@ -582,7 +582,7 @@ { if (ValidTab(nPos) && (nPos < nTabCount)) { - sc::RefUpdateInsertTabContext aCxt(nPos, nNewSheets); + sc::RefUpdateInsertTabContext aCxt( *this, nPos, nNewSheets); ScRange aRange( 0,0,nPos, MAXCOL,MAXROW,MAXTAB ); xColNameRanges->UpdateReference( URM_INSDEL, this, aRange, 0,0,nNewSheets ); xRowNameRanges->UpdateReference( URM_INSDEL, this, aRange, 0,0,nNewSheets ); @@ -657,7 +657,7 @@ if (nTabCount > 1) { sc::AutoCalcSwitch aACSwitch(*this, false); - sc::RefUpdateDeleteTabContext aCxt(nTab, 1); + sc::RefUpdateDeleteTabContext aCxt( *this, nTab, 1); ScRange aRange( 0, 0, nTab, MAXCOL, MAXROW, nTab ); DelBroadcastAreasInRange( aRange ); @@ -739,7 +739,7 @@ if (nTabCount > nSheets) { sc::AutoCalcSwitch aACSwitch(*this, false); - sc::RefUpdateDeleteTabContext aCxt(nTab, nSheets); + sc::RefUpdateDeleteTabContext aCxt( *this, nTab, nSheets); for (SCTAB aTab = 0; aTab < nSheets; ++aTab) { @@ -1779,12 +1779,15 @@ std::vector aGroupPos; sc::EndListeningContext aCxt(*this); ScRange aRange(nCol1, nRow1, 0, nCol2, nRow2, 0); - for (size_t i = 0; i < maTabs.size(); ++i) + for (SCTAB i = 0; i < static_cast(maTabs.size()); i++) { - aRange.aStart.SetTab(i); - aRange.aEnd.SetTab(i); + if (rMark.GetTableSelect(i)) + { + aRange.aStart.SetTab(i); + aRange.aEnd.SetTab(i); - EndListeningIntersectedGroups(aCxt, aRange, &aGroupPos); + EndListeningIntersectedGroups(aCxt, aRange, &aGroupPos); + } } aCxt.purgeEmptyBroadcasters(); @@ -2938,10 +2941,18 @@ // Listener aufbauen nachdem alles inserted wurde StartListeningFromClip(aDestRange.aStart.Col(), aDestRange.aStart.Row(), aDestRange.aEnd.Col(), aDestRange.aEnd.Row(), rMark, nInsFlag ); - // nachdem alle Listener aufgebaut wurden, kann gebroadcastet werden - SetDirtyFromClip( - aDestRange.aStart.Col(), aDestRange.aStart.Row(), aDestRange.aEnd.Col(), aDestRange.aEnd.Row(), - rMark, nInsFlag, aBroadcastSpans); + + { + ScBulkBroadcast aBulkBroadcast( GetBASM()); + + // Set formula cells dirty and collect non-formula cells. + SetDirtyFromClip( + aDestRange.aStart.Col(), aDestRange.aStart.Row(), aDestRange.aEnd.Col(), aDestRange.aEnd.Row(), + rMark, nInsFlag, aBroadcastSpans); + + BroadcastAction aAction(*this); + aBroadcastSpans.executeColumnAction(*this, aAction); + } if (bResetCut) pClipDoc->GetClipParam().mbCutMode = false; @@ -3204,19 +3215,29 @@ if (!pTab) return false; - // In case setting this string affects an existing formula group, record - // its above and below position for later listening. + bool bNumFmtSet = false; - std::vector aGroupPos; - sc::EndListeningContext aCxt(*this); - ScAddress aPos(nCol, nRow, nTab); - EndListeningIntersectedGroup(aCxt, aPos, &aGroupPos); - aCxt.purgeEmptyBroadcasters(); + const ScFormulaCell* pCurCellFormula = pTab->GetFormulaCell(nCol, nRow); + if (pCurCellFormula && pCurCellFormula->IsShared()) + { + // In case setting this string affects an existing formula group, record + // its above and below position for later listening. - bool bNumFmtSet = pTab->SetString(nCol, nRow, nTab, rString, pParam); + std::vector aGroupPos; + sc::EndListeningContext aCxt(*this); + ScAddress aPos(nCol, nRow, nTab); + EndListeningIntersectedGroup(aCxt, aPos, &aGroupPos); + aCxt.purgeEmptyBroadcasters(); - SetNeedsListeningGroups(aGroupPos); - StartNeededListeners(); + bNumFmtSet = pTab->SetString(nCol, nRow, nTab, rString, pParam); + + SetNeedsListeningGroups(aGroupPos); + StartNeededListeners(); + } + else + { + bNumFmtSet = pTab->SetString(nCol, nRow, nTab, rString, pParam); + } return bNumFmtSet; } @@ -3303,18 +3324,26 @@ if (!pTab) return; - // In case setting this string affects an existing formula group, record - // its above and below position for later listening. + const ScFormulaCell* pCurCellFormula = pTab->GetFormulaCell(rPos.Col(), rPos.Row()); + if (pCurCellFormula && pCurCellFormula->IsShared()) + { + // In case setting this string affects an existing formula group, record + // its above and below position for later listening. - std::vector aGroupPos; - sc::EndListeningContext aCxt(*this); - EndListeningIntersectedGroup(aCxt, rPos, &aGroupPos); - aCxt.purgeEmptyBroadcasters(); + std::vector aGroupPos; + sc::EndListeningContext aCxt(*this); + EndListeningIntersectedGroup(aCxt, rPos, &aGroupPos); + aCxt.purgeEmptyBroadcasters(); - pTab->SetValue(rPos.Col(), rPos.Row(), fVal); + pTab->SetValue(rPos.Col(), rPos.Row(), fVal); - SetNeedsListeningGroups(aGroupPos); - StartNeededListeners(); + SetNeedsListeningGroups(aGroupPos); + StartNeededListeners(); + } + else + { + pTab->SetValue(rPos.Col(), rPos.Row(), fVal); + } } OUString ScDocument::GetString( SCCOL nCol, SCROW nRow, SCTAB nTab ) const @@ -3507,17 +3536,19 @@ sal_uInt32 ScDocument::GetNumberFormat( const ScAddress& rPos ) const { SCTAB nTab = rPos.Tab(); - if ( maTabs[nTab] ) - return maTabs[nTab]->GetNumberFormat( rPos ); - return 0; + if (!TableExists(nTab)) + return 0; + + return maTabs[nTab]->GetNumberFormat( rPos ); } void ScDocument::SetNumberFormat( const ScAddress& rPos, sal_uInt32 nNumberFormat ) { - if (!TableExists(rPos.Tab())) + SCTAB nTab = rPos.Tab(); + if (!TableExists(nTab)) return; - maTabs[rPos.Tab()]->SetNumberFormat(rPos.Col(), rPos.Row(), nNumberFormat); + maTabs[nTab]->SetNumberFormat(rPos.Col(), rPos.Row(), nNumberFormat); } void ScDocument::GetNumberFormatInfo( short& nType, sal_uLong& nIndex, @@ -3729,6 +3760,14 @@ if (*it) (*it)->CalcAll(); ClearFormulaTree(); + + // In hard recalc state caches were not added as listeners, invalidate them + // so the next non-CalcAll() normal lookup will not be presented with + // outdated data. + /* TODO: come up with more detailed hard recalc states so we can + * differentiate between hard recalc after load and others. */ + if (GetHardRecalcState()) + ClearLookupCaches(); } void ScDocument::CompileAll() @@ -5588,18 +5627,81 @@ void ScDocument::DeleteSelection( InsertDeleteFlags nDelFlag, const ScMarkData& rMark, bool bBroadcast ) { + sc::AutoCalcSwitch aACSwitch(*this, false); + + std::vector aGroupPos; + // Destroy and reconstruct listeners only if content is affected. + bool bDelContent = ((nDelFlag & ~IDF_CONTENTS) != nDelFlag); + if (bDelContent) + { + // Record the positions of top and/or bottom formula groups that + // intersect the area borders. + sc::EndListeningContext aCxt(*this); + ScRangeList aRangeList; + rMark.FillRangeListWithMarks( &aRangeList, false); + for (size_t i = 0; i < aRangeList.size(); ++i) + { + const ScRange* pRange = aRangeList[i]; + if (pRange) + EndListeningIntersectedGroups( aCxt, *pRange, &aGroupPos); + } + aCxt.purgeEmptyBroadcasters(); + } + SCTAB nMax = static_cast(maTabs.size()); ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end(); for (; itr != itrEnd && *itr < nMax; ++itr) if (maTabs[*itr]) maTabs[*itr]->DeleteSelection(nDelFlag, rMark, bBroadcast); + + if (bDelContent) + { + // Re-start listeners on those top bottom groups that have been split. + SetNeedsListeningGroups(aGroupPos); + StartNeededListeners(); + } } void ScDocument::DeleteSelectionTab( SCTAB nTab, InsertDeleteFlags nDelFlag, const ScMarkData& rMark, bool bBroadcast ) { if (ValidTab(nTab) && nTab < static_cast(maTabs.size()) && maTabs[nTab]) + { + sc::AutoCalcSwitch aACSwitch(*this, false); + + std::vector aGroupPos; + // Destroy and reconstruct listeners only if content is affected. + bool bDelContent = ((nDelFlag & ~IDF_CONTENTS) != nDelFlag); + if (bDelContent) + { + // Record the positions of top and/or bottom formula groups that + // intersect the area borders. + sc::EndListeningContext aCxt(*this); + ScRangeList aRangeList; + rMark.FillRangeListWithMarks( &aRangeList, false); + for (size_t i = 0; i < aRangeList.size(); ++i) + { + const ScRange* pRange = aRangeList[i]; + if (pRange && pRange->aStart.Tab() <= nTab && nTab <= pRange->aEnd.Tab()) + { + ScRange aRange( *pRange); + aRange.aStart.SetTab( nTab); + aRange.aEnd.SetTab( nTab); + EndListeningIntersectedGroups( aCxt, aRange, &aGroupPos); + } + } + aCxt.purgeEmptyBroadcasters(); + } + maTabs[nTab]->DeleteSelection(nDelFlag, rMark, bBroadcast); + + if (bDelContent) + { + // Re-start listeners on those top bottom groups that have been split. + SetNeedsListeningGroups(aGroupPos); + StartNeededListeners(); + } + } else { OSL_FAIL("wrong table"); diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/drwlayer.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/drwlayer.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/drwlayer.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/drwlayer.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -27,6 +27,7 @@ #include #include #include +#include #include "scitems.hxx" #include @@ -116,6 +117,14 @@ pData->maStart = aOldStt; pData->maEnd = aOldEnd; } + + // Undo also an untransformed anchor + pData = ScDrawLayer::GetNonRotatedObjData( pObj ); + if (pData) + { + pData->maStart = aOldStt; + pData->maEnd = aOldEnd; + } } void ScUndoObjData::Redo() @@ -127,6 +136,14 @@ pData->maStart = aNewStt; pData->maEnd = aNewEnd; } + + // Redo also an untransformed anchor + pData = ScDrawLayer::GetNonRotatedObjData( pObj ); + if (pData) + { + pData->maStart = aNewStt; + pData->maEnd = aNewEnd; + } } ScTabDeletedHint::ScTabDeletedHint( SCTAB nTabNo ) : @@ -495,6 +512,15 @@ { if ( pObj->ISA( SdrRectObj ) && pData->maStart.IsValid() && pData->maEnd.IsValid() ) pData->maStart.PutInOrder( pData->maEnd ); + + // Update also an untransformed anchor thats what we stored ( and still do ) to xml + ScDrawObjData* pNoRotatedAnchor = GetNonRotatedObjData( pObj, false ); + if ( pNoRotatedAnchor ) + { + pNoRotatedAnchor->maStart = pData->maStart; + pNoRotatedAnchor->maEnd = pData->maEnd; + } + AddCalcUndo( new ScUndoObjData( pObj, aOldStt, aOldEnd, pData->maStart, pData->maEnd ) ); RecalcPos( pObj, *pData, bNegativePage, bUpdateNoteCaptionPos ); } @@ -759,6 +785,39 @@ ScDrawObjData& rNoRotatedAnchor = *GetNonRotatedObjData( pObj, true ); if (rData.maLastRect.IsEmpty()) { + // Every shape it is saved with an negative offset relative to cell + if (ScDrawLayer::GetAnchorType(*pObj) == SCA_CELL) + { + double fRotate(0.0); + double fShearX(0.0); + + Point aPoint; + Rectangle aRect; + + basegfx::B2DTuple aScale; + basegfx::B2DTuple aTranslate; + basegfx::B2DPolyPolygon aPolyPolygon; + basegfx::B2DHomMatrix aOriginalMatrix; + + aRect = pDoc->GetMMRect(nCol1, nRow1, nCol1 , nRow1, nTab1); + + if (bNegativePage) + aPoint.X() = aRect.Right(); + else + aPoint.X() = aRect.Left(); + aPoint.Y() = aRect.Top(); + + pObj->TRGetBaseGeometry(aOriginalMatrix, aPolyPolygon); + aOriginalMatrix.decompose(aScale, aTranslate, fRotate, fShearX); + aTranslate += ::basegfx::B2DTuple(aPoint.X(), aPoint.Y()); + aOriginalMatrix = basegfx::tools::createScaleShearXRotateTranslateB2DHomMatrix( + aScale, + fShearX, + fRotate, + aTranslate); + pObj->TRSetBaseGeometry(aOriginalMatrix, aPolyPolygon); + } + // It's confusing ( but blame that we persist the anchor in terms of unrotated shape ) // that the initial anchor we get here is in terms of an unrotated shape ( if the shape is rotated ) // we need to save the old anchor ( for persisting ) and also track any resize or repositions that happen. diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/formulacell.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/formulacell.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/formulacell.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/formulacell.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -844,6 +844,9 @@ pCode->AdjustAbsoluteRefs( rCell.pDocument, rCell.aPos, aPos, false, bCopyBetweenDocs ); } + if (!pDocument->IsClipOrUndo()) + pCode->AdjustReferenceOnCopy( aPos); + if ( nCloneFlags & SC_CLONECELL_ADJUST3DREL ) pCode->ReadjustRelative3DReferences( rCell.aPos, aPos ); @@ -1929,8 +1932,12 @@ } // Reschedule slows the whole thing down considerably, thus only execute on percent change - ScProgress::GetInterpretProgress()->SetStateCountDownOnPercent( - pDocument->GetFormulaCodeInTree()/MIN_NO_CODES_PER_PROGRESS_UPDATE ); + ScProgress *pProgress = ScProgress::GetInterpretProgress(); + if (pProgress && pProgress->Enabled()) + { + pProgress->SetStateCountDownOnPercent( + pDocument->GetFormulaCodeInTree()/MIN_NO_CODES_PER_PROGRESS_UPDATE ); + } switch (p->GetVolatileType()) { @@ -3760,9 +3767,6 @@ bool ScFormulaCell::InterpretFormulaGroup() { - if (!officecfg::Office::Common::Misc::UseOpenCL::get()) - return false; - if (!mxGroup || !pCode) return false; @@ -3788,6 +3792,9 @@ return false; } + if (!officecfg::Office::Common::Misc::UseOpenCL::get()) + return false; + // TODO : Disable invariant formula group interpretation for now in order // to get implicit intersection to work. if (mxGroup->mbInvariant && false) diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/funcdesc.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/funcdesc.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/funcdesc.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/funcdesc.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -752,12 +752,13 @@ const formula::IFunctionCategory* ScFunctionMgr::getCategory(sal_uInt32 nCategory) const { - formula::IFunctionCategory* pRet = NULL; if ( nCategory < (MAX_FUNCCAT-1) ) { - pRet = new ScFunctionCategory(const_cast(this),aCatLists[nCategory+1],nCategory); // aCatLists[0] is "all" + if (m_aCategories.find(nCategory) == m_aCategories.end()) + m_aCategories[nCategory].reset(new ScFunctionCategory(const_cast(this),aCatLists[nCategory+1],nCategory)); // aCatLists[0] is "all" + return m_aCategories[nCategory].get(); } - return pRet; + return NULL; } const formula::IFunctionDescription* ScFunctionMgr::getFunctionByName(const OUString& _sFunctionName) const diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/refupdatecontext.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/refupdatecontext.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/refupdatecontext.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/refupdatecontext.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -61,14 +61,14 @@ mbReferenceModified(r.mbReferenceModified), mbNameModified(r.mbNameModified) {} -RefUpdateInsertTabContext::RefUpdateInsertTabContext(SCTAB nInsertPos, SCTAB nSheets) : - mnInsertPos(nInsertPos), mnSheets(nSheets) {} +RefUpdateInsertTabContext::RefUpdateInsertTabContext(ScDocument& rDoc, SCTAB nInsertPos, SCTAB nSheets) : + mrDoc(rDoc), mnInsertPos(nInsertPos), mnSheets(nSheets) {} -RefUpdateDeleteTabContext::RefUpdateDeleteTabContext(SCTAB nDeletePos, SCTAB nSheets) : - mnDeletePos(nDeletePos), mnSheets(nSheets) {} +RefUpdateDeleteTabContext::RefUpdateDeleteTabContext(ScDocument& rDoc, SCTAB nDeletePos, SCTAB nSheets) : + mrDoc(rDoc), mnDeletePos(nDeletePos), mnSheets(nSheets) {} -RefUpdateMoveTabContext::RefUpdateMoveTabContext(SCTAB nOldPos, SCTAB nNewPos) : - mnOldPos(nOldPos), mnNewPos(nNewPos) {} +RefUpdateMoveTabContext::RefUpdateMoveTabContext(ScDocument& rDoc, SCTAB nOldPos, SCTAB nNewPos) : + mrDoc(rDoc), mnOldPos(nOldPos), mnNewPos(nNewPos) {} SCTAB RefUpdateMoveTabContext::getNewTab(SCTAB nOldTab) const { diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/table2.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/table2.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/table2.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/table2.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -295,18 +295,17 @@ if (!maColManualBreaks.empty()) { - std::set::reverse_iterator rit = maColManualBreaks.rbegin(); - while (rit != maColManualBreaks.rend()) - { - SCCOL nCol = *rit; - if (nCol < nStartCol) - break; // while - else - { - maColManualBreaks.erase( (++rit).base()); - maColManualBreaks.insert( static_cast( nCol + nSize)); - } - } + // Copy all breaks up to nStartCol (non-inclusive). + ::std::set::iterator itr1 = maColManualBreaks.lower_bound(nStartCol); + ::std::set aNewBreaks(maColManualBreaks.begin(), itr1); + + // Copy all breaks from nStartCol (inclusive) to the last element, + // but add nSize to each value. + ::std::set::iterator itr2 = maColManualBreaks.end(); + for (; itr1 != itr2; ++itr1) + aNewBreaks.insert(static_cast(*itr1 + nSize)); + + maColManualBreaks.swap(aNewBreaks); } } @@ -376,14 +375,21 @@ if (!maColManualBreaks.empty()) { - std::set::iterator it = maColManualBreaks.upper_bound( static_cast( nStartCol + nSize - 1)); - maColManualBreaks.erase( maColManualBreaks.lower_bound( nStartCol), it); - while (it != maColManualBreaks.end()) - { - SCCOL nCol = *it; - maColManualBreaks.erase( it++); - maColManualBreaks.insert( static_cast( nCol - nSize)); - } + // Erase all manual breaks between nStartCol and nStartCol + nSize - 1 (inclusive). + std::set::iterator itr1 = maColManualBreaks.lower_bound(nStartCol); + std::set::iterator itr2 = maColManualBreaks.upper_bound(static_cast(nStartCol + nSize - 1)); + maColManualBreaks.erase(itr1, itr2); + + // Copy all breaks from the 1st element up to nStartCol to the new container. + itr1 = maColManualBreaks.lower_bound(nStartCol); + ::std::set aNewBreaks(maColManualBreaks.begin(), itr1); + + // Copy all breaks from nStartCol to the last element, but subtract each value by nSize. + itr2 = maColManualBreaks.end(); + for (; itr1 != itr2; ++itr1) + aNewBreaks.insert(static_cast(*itr1 - nSize)); + + maColManualBreaks.swap(aNewBreaks); } } diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/table3.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/table3.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/table3.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/table3.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -711,6 +711,7 @@ void fillSortedColumnArray( boost::ptr_vector& rSortedCols, SortedRowFlags& rRowFlags, + std::vector& rCellListeners, ScSortInfoArray* pArray, SCTAB nTab, SCCOL nCol1, SCCOL nCol2, ScProgress* pProgress ) { SCROW nRow1 = pArray->GetStart(); @@ -768,6 +769,16 @@ pNew->GetCode()->AdjustReferenceOnMovedOriginIfOtherSheet(aOldPos, aCellPos); } + if (!rCellListeners.empty()) + { + // Original source cells will be deleted during + // sc::CellStoreType::transfer(), SvtListener is a base + // class, so we need to replace it. + auto it( ::std::find( rCellListeners.begin(), rCellListeners.end(), rCell.maCell.mpFormula)); + if (it != rCellListeners.end()) + *it = pNew; + } + rCellStore.push_back(pNew); } break; @@ -1083,7 +1094,7 @@ // a copy before updating the document. boost::ptr_vector aSortedCols; // storage for copied cells. SortedRowFlags aRowFlags; - fillSortedColumnArray(aSortedCols, aRowFlags, pArray, nTab, nCol1, nCol2, pProgress); + fillSortedColumnArray(aSortedCols, aRowFlags, aCellListeners, pArray, nTab, nCol1, nCol2, pProgress); for (size_t i = 0, n = aSortedCols.size(); i < n; ++i) { @@ -1268,7 +1279,8 @@ // a copy before updating the document. boost::ptr_vector aSortedCols; // storage for copied cells. SortedRowFlags aRowFlags; - fillSortedColumnArray(aSortedCols, aRowFlags, pArray, nTab, nCol1, nCol2, pProgress); + std::vector aListenersDummy; + fillSortedColumnArray(aSortedCols, aRowFlags, aListenersDummy, pArray, nTab, nCol1, nCol2, pProgress); for (size_t i = 0, n = aSortedCols.size(); i < n; ++i) { @@ -1702,11 +1714,10 @@ SCROW nLastRow = 0; for (SCCOL nCol = rSortParam.nCol1; nCol <= rSortParam.nCol2; nCol++) nLastRow = std::max(nLastRow, aCol[nCol].GetLastDataPos()); - rSortParam.nRow2 = nLastRow = std::min(nLastRow, rSortParam.nRow2); - SCROW nRow1 = (rSortParam.bHasHeader ? - rSortParam.nRow1 + 1 : rSortParam.nRow1); + rSortParam.nRow2 = nLastRow = std::max( std::min(nLastRow, rSortParam.nRow2), rSortParam.nRow1); + SCROW nRow1 = (rSortParam.bHasHeader ? rSortParam.nRow1 + 1 : rSortParam.nRow1); aSortParam = rSortParam; // must be assigned before calling IsSorted() - if (!IsSorted(nRow1, nLastRow)) + if (nRow1 < nLastRow && !IsSorted(nRow1, nLastRow)) { if(pProgress) pProgress->SetState( 0, nLastRow-nRow1 ); @@ -1735,7 +1746,7 @@ SCCOL nCol1 = (rSortParam.bHasHeader ? rSortParam.nCol1 + 1 : rSortParam.nCol1); aSortParam = rSortParam; // must be assigned before calling IsSorted() - if (!IsSorted(nCol1, nLastCol)) + if (nCol1 < nLastCol && !IsSorted(nCol1, nLastCol)) { if(pProgress) pProgress->SetState( 0, nLastCol-nCol1 ); @@ -3088,7 +3099,7 @@ if (nIndex < nNewEntries) { rQueryParam.GetEntry(nIndex).nField = pFields[nCol - nCol1]; - rQueryParam.FillInExcelSyntax(rPool, aCellStr, nIndex); + rQueryParam.FillInExcelSyntax(rPool, aCellStr, nIndex, NULL); nIndex++; if (nIndex < nNewEntries) rQueryParam.GetEntry(nIndex).eConnect = SC_AND; diff -Nru libreoffice-l10n-4.4.2/sc/source/core/data/table4.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/data/table4.cxx --- libreoffice-l10n-4.4.2/sc/source/core/data/table4.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/data/table4.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1170,7 +1170,7 @@ if (aSpans.empty()) return; - aCol[nCol].DeleteRanges(aSpans, IDF_CONTENTS, false); + aCol[nCol].DeleteRanges(aSpans, IDF_VALUE | IDF_DATETIME | IDF_STRING | IDF_FORMULA | IDF_OUTLINE, false); aCol[nCol].CloneFormulaCell(rSrcCell, sc::CellTextAttr(), aSpans, NULL); boost::shared_ptr pSet(new sc::ColumnBlockPositionSet(*pDocument)); diff -Nru libreoffice-l10n-4.4.2/sc/source/core/inc/interpre.hxx libreoffice-l10n-4.4.6~rc3/sc/source/core/inc/interpre.hxx --- libreoffice-l10n-4.4.2/sc/source/core/inc/interpre.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/inc/interpre.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -331,6 +331,8 @@ void PushExternalDoubleRef(sal_uInt16 nFileId, const OUString& rTabName, SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2); +void PushSingleRef( const ScRefAddress& rRef ); +void PushDoubleRef( const ScRefAddress& rRef1, const ScRefAddress& rRef2 ); void PushMatrix( const sc::RangeMatrix& rMat ); void PushMatrix(const ScMatrixRef& pMat); void PushError( sal_uInt16 nError ); @@ -403,7 +405,7 @@ // Returns true if last jump was executed and result matrix pushed. bool JumpMatrix( short nStackLevel ); -double Compare(); +double Compare( ScQueryOp eOp ); /** @param pOptions NULL means case sensitivity document option is to be used! */ diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/address.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/address.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/address.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/address.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -917,7 +917,7 @@ tmp1 = lcl_eatWhiteSpace( tmp1 ); tmp2 = lcl_a1_get_row( tmp1, &r.aEnd, &nFlags2 ); - if( !tmp2 ) + if( !tmp2 || *tmp2 != 0 ) // Must have fully parsed a singleton. return 0; r.aStart.SetCol( 0 ); r.aEnd.SetCol( MAXCOL ); @@ -940,7 +940,7 @@ tmp1 = lcl_eatWhiteSpace( tmp1 ); tmp2 = lcl_a1_get_col( tmp1, &r.aEnd, &nFlags2 ); - if( !tmp2 ) + if( !tmp2 || *tmp2 != 0 ) // Must have fully parsed a singleton. return 0; r.aStart.SetRow( 0 ); r.aEnd.SetRow( MAXROW ); diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/autoform.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/autoform.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/autoform.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/autoform.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -897,6 +897,16 @@ insert(pData); } +bool DefaultFirstEntry::operator() (const OUString& left, const OUString& right) const +{ + OUString aStrStandard(ScGlobal::GetRscString(STR_STYLENAME_STANDARD)); + if ( ScGlobal::GetpTransliteration()->isEqual( left, aStrStandard ) ) + return true; + if ( ScGlobal::GetpTransliteration()->isEqual( right, aStrStandard ) ) + return false; + return ScGlobal::GetCollator()->compareString( left, right) < 0; +} + ScAutoFormat::ScAutoFormat(const ScAutoFormat& r) : maData(r.maData), mbSaveLater(false) {} diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/compare.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/compare.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/compare.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/compare.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -43,8 +43,11 @@ // struct if needed. } -double CompareFunc( const Compare::Cell& rCell1, const Compare::Cell& rCell2, bool bIgnoreCase, CompareOptions* pOptions ) +double CompareFunc( const Compare& rComp, CompareOptions* pOptions ) { + const Compare::Cell& rCell1 = rComp.maCells[0]; + const Compare::Cell& rCell2 = rComp.maCells[1]; + // Keep DoubleError if encountered // #i40539# if bEmpty is set, bVal/nVal are uninitialized if (!rCell1.mbEmpty && rCell1.mbValue && !rtl::math::isFinite(rCell1.mfValue)) @@ -134,7 +137,7 @@ sal_Int32 nStart = 0; sal_Int32 nStop = rCell1.maStr.getLength(); bool bMatch = rEntry.GetSearchTextPtr( - !bIgnoreCase)->SearchForward( + !rComp.mbIgnoreCase)->SearchForward( rCell1.maStr.getString(), &nStart, &nStop); if (bMatch && pOptions->bMatchWholeCell && (nStart != 0 || nStop != rCell1.maStr.getLength())) bMatch = false; // RegEx must match entire string. @@ -143,12 +146,12 @@ else if (rEntry.eOp == SC_EQUAL || rEntry.eOp == SC_NOT_EQUAL) { ::utl::TransliterationWrapper* pTransliteration = - (bIgnoreCase ? ScGlobal::GetpTransliteration() : + (rComp.mbIgnoreCase ? ScGlobal::GetpTransliteration() : ScGlobal::GetCaseTransliteration()); bool bMatch = false; if (pOptions->bMatchWholeCell) { - if (bIgnoreCase) + if (rComp.mbIgnoreCase) bMatch = rCell1.maStr.getDataIgnoreCase() == rCell2.maStr.getDataIgnoreCase(); else bMatch = rCell1.maStr.getData() == rCell2.maStr.getData(); @@ -165,14 +168,21 @@ } fRes = (bMatch ? 0 : 1); } - else if (bIgnoreCase) + else if (rComp.mbIgnoreCase) fRes = (double) ScGlobal::GetCollator()->compareString( rCell1.maStr.getString(), rCell2.maStr.getString()); else fRes = (double) ScGlobal::GetCaseCollator()->compareString( rCell1.maStr.getString(), rCell2.maStr.getString()); } - else if (bIgnoreCase) + else if (rComp.meOp == SC_EQUAL || rComp.meOp == SC_NOT_EQUAL) + { + if (rComp.mbIgnoreCase) + fRes = (rCell1.maStr.getDataIgnoreCase() == rCell2.maStr.getDataIgnoreCase()) ? 0 : 1; + else + fRes = (rCell1.maStr.getData() == rCell2.maStr.getData()) ? 0 : 1; + } + else if (rComp.mbIgnoreCase) fRes = (double) ScGlobal::GetCollator()->compareString( rCell1.maStr.getString(), rCell2.maStr.getString()); else diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/compiler.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/compiler.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/compiler.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/compiler.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -2367,6 +2367,18 @@ } else { + // When having parsed a second reference part, ensure that the + // i18n parser did not mistakingly parse a number that included + // a separator which happened to be meant as a parameter + // separator instead. + if (mnRangeOpPosInSymbol >= 0 && (aRes.TokenType & KParseType::ASC_NUMBER)) + { + for (sal_Int32 i = nSrcPos; i < aRes.EndPos; ++i) + { + if (pStart[i] == cSep) + aRes.EndPos = i; // also ends for + } + } aSymbol.append( pStart + nSrcPos, aRes.EndPos - nSrcPos); nSrcPos = aRes.EndPos; c = pStart[nSrcPos]; @@ -2453,6 +2465,7 @@ { "GOALSEEK", ocBackSolver }, // GOALSEEK -> ORG.OPENOFFICE.GOALSEEK // Renamed new names, prepare to read future names: { "FDIST", ocFDist_LT }, // COM.MICROSOFT.F.DIST -> FDIST + { "FINV", ocFInv_LT }, // COM.MICROSOFT.F.INV -> FINV //{ "ORG.OPENOFFICE.XXX", ocXXX } // XXX -> ORG.OPENOFFICE.XXX }; static const size_t nOdffAliases = sizeof(aOdffAliases) / sizeof(aOdffAliases[0]); @@ -2746,7 +2759,7 @@ if ( ch1 == cDecSep ) return false; // Who was that imbecile introducing '.' as the sheet name separator!?! - if ( rtl::isAsciiDigit( ch1 ) ) + if ( rtl::isAsciiDigit( ch1 ) && pConv->getSpecialSymbol( Convention::SHEET_SEPARATOR) == '.' ) { // Numerical sheet name is valid. // But English 1.E2 or 1.E+2 is value 100, 1.E-2 is 0.01 diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/dbdata.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/dbdata.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/dbdata.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/dbdata.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -336,6 +336,11 @@ bByRow = rSortParam.bByRow; } +void ScDBData::UpdateFromSortParam( const ScSortParam& rSortParam ) +{ + bHasHeader = rSortParam.bHasHeader; +} + void ScDBData::GetQueryParam( ScQueryParam& rQueryParam ) const { rQueryParam = *mpQueryParam; @@ -645,6 +650,17 @@ } }; +class FindByPointer : public unary_function +{ + const ScDBData* mpDBData; +public: + FindByPointer(const ScDBData* pDBData) : mpDBData(pDBData) {} + bool operator() (const ScDBData& r) const + { + return &r == mpDBData; + } +}; + } ScDBCollection::NamedDBs::NamedDBs(ScDBCollection& rParent, ScDocument& rDoc) : @@ -789,6 +805,11 @@ return maDBs.empty(); } +bool ScDBCollection::AnonDBs::has( const ScDBData* p ) const +{ + return find_if( maDBs.begin(), maDBs.end(), FindByPointer(p)) != maDBs.end(); +} + bool ScDBCollection::AnonDBs::operator== (const AnonDBs& r) const { return maDBs == r.maDBs; diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/doubleref.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/doubleref.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/doubleref.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/doubleref.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -191,7 +191,7 @@ if (nIndex < nNewEntries) { pParam->GetEntry(nIndex).nField = aFields[nCol]; - pParam->FillInExcelSyntax(rPool, aCellStr, nIndex); + pParam->FillInExcelSyntax(rPool, aCellStr, nIndex, NULL); nIndex++; if (nIndex < nNewEntries) pParam->GetEntry(nIndex).eConnect = SC_AND; diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/grouparealistener.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/grouparealistener.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/grouparealistener.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/grouparealistener.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -86,16 +86,18 @@ assert(mpColumn); SAL_INFO( "sc.core.grouparealistener", "FormulaGroupAreaListener ctor this " << this << - " range " << maRange.Format(SCA_VALID) << - " mnTopCellRow " << mnTopCellRow << " length " << mnGroupLen); + " range " << (maRange == BCA_LISTEN_ALWAYS ? "LISTEN-ALWAYS" : maRange.Format(SCA_VALID)) << + " mnTopCellRow " << mnTopCellRow << " length " << mnGroupLen << + ", col/tab " << mpColumn->GetCol() << "/" << mpColumn->GetTab()); } FormulaGroupAreaListener::~FormulaGroupAreaListener() { SAL_INFO( "sc.core.grouparealistener", "FormulaGroupAreaListener dtor this " << this << - " range " << maRange.Format(SCA_VALID) << - " mnTopCellRow " << mnTopCellRow << " length " << mnGroupLen); + " range " << (maRange == BCA_LISTEN_ALWAYS ? "LISTEN-ALWAYS" : maRange.Format(SCA_VALID)) << + " mnTopCellRow " << mnTopCellRow << " length " << mnGroupLen << + ", col/tab " << mpColumn->GetCol() << "/" << mpColumn->GetTab()); } ScRange FormulaGroupAreaListener::getListeningRange() const @@ -184,13 +186,64 @@ { SAL_INFO( "sc.core.grouparealistener", "FormulaGroupAreaListener::collectFormulaCells() this " << this << - " range " << maRange.Format(SCA_VALID) << - " mnTopCellRow " << mnTopCellRow << " length " << mnGroupLen); + " range " << (maRange == BCA_LISTEN_ALWAYS ? "LISTEN-ALWAYS" : maRange.Format(SCA_VALID)) << + " mnTopCellRow " << mnTopCellRow << " length " << mnGroupLen << + ", col/tab " << mpColumn->GetCol() << "/" << mpColumn->GetTab()); - ScFormulaCell* const * pp = mpColumn->GetFormulaCellBlockAddress( mnTopCellRow); - assert(pp); + size_t nBlockSize = 0; + ScFormulaCell* const * pp = mpColumn->GetFormulaCellBlockAddress( mnTopCellRow, nBlockSize); if (!pp) + { + SAL_WARN("sc.core", "GetFormulaCellBlockAddress not found"); return; + } + + /* FIXME: this is tdf#90717, when deleting a row fixed size area listeners + * such as BCA_ALWAYS or entire row listeners are (rightly) not destroyed, + * but mnTopCellRow and mnGroupLen also not updated, which needs fixing. + * Until then pull things as straight as possible here in such situation + * and prevent crash. */ + if (!(*pp)->IsSharedTop()) + { + SCROW nRow = (*pp)->GetSharedTopRow(); + if (nRow < 0) + SAL_WARN("sc.core", "FormulaGroupAreaListener::collectFormulaCells() no shared top"); + else + { + SAL_WARN("sc.core","FormulaGroupAreaListener::collectFormulaCells() syncing mnTopCellRow from " << + mnTopCellRow << " to " << nRow); + const_cast(this)->mnTopCellRow = nRow; + pp = mpColumn->GetFormulaCellBlockAddress( mnTopCellRow, nBlockSize); + if (!pp) + { + SAL_WARN("sc.core", "GetFormulaCellBlockAddress not found"); + return; + } + } + } + SCROW nLen = (*pp)->GetSharedLength(); + if (nLen != mnGroupLen) + { + SAL_WARN("sc.core", "FormulaGroupAreaListener::collectFormulaCells() syncing mnGroupLen from " << + mnGroupLen << " to " << nLen); + const_cast(this)->mnGroupLen = nLen; + } + + /* FIXME: with tdf#89957 it happened that the actual block size in column + * AP (shifted from AO) of sheet 'w' was smaller than the remembered group + * length and correct. This is just a very ugly workaround, the real cause + * is yet unknown, but at least don't crash in such case. The intermediate + * cause is that not all affected group area listeners are destroyed and + * newly created, so mpColumn still points to the old column that then has + * the content of a shifted column. Effectively this workaround has the + * consequence that the group area listener is fouled up and not all + * formula cells are notified.. */ + if (nBlockSize < static_cast(mnGroupLen)) + { + SAL_WARN("sc.core","FormulaGroupAreaListener::collectFormulaCells() nBlockSize " << + nBlockSize << " < " << mnGroupLen << " mnGroupLen"); + const_cast(this)->mnGroupLen = static_cast(nBlockSize); + } ScFormulaCell* const * ppEnd = pp + mnGroupLen; @@ -280,8 +333,9 @@ const ScFormulaCell* FormulaGroupAreaListener::getTopCell() const { - const ScFormulaCell* const * pp = mpColumn->GetFormulaCellBlockAddress( mnTopCellRow); - assert(pp); + size_t nBlockSize = 0; + const ScFormulaCell* const * pp = mpColumn->GetFormulaCellBlockAddress( mnTopCellRow, nBlockSize); + SAL_WARN_IF(!pp, "sc", "GetFormulaCellBlockAddress not found"); return pp ? *pp : NULL; } diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/interpr1.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/interpr1.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/interpr1.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/interpr1.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -349,11 +349,11 @@ SCSIZE nC = 0, nR = 0; for ( ; nC < nCols && (nC != nErrorCol || nR != nErrorRow); /*nop*/ ) { - for ( ; nR < nRows && (nC != nErrorCol || nR != nErrorRow); ++nR) + for (nR = 0 ; nR < nRows && (nC != nErrorCol || nR != nErrorRow); ++nR) { lcl_storeJumpMatResult(pMatPtr, pJumpMat, nC, nR); } - if (nC != nErrorCol || nR != nErrorRow) + if (nC != nErrorCol && nR != nErrorRow) ++nC; } // Now the mixed cases. @@ -371,6 +371,7 @@ lcl_storeJumpMatResult(pMatPtr, pJumpMat, nC, nR); } } + nR = 0; } xNew = new ScJumpMatrixToken( pJumpMat ); GetTokenMatrixMap().insert( ScTokenMatrixMap::value_type( pCur, xNew )); @@ -794,9 +795,10 @@ return false; } -double ScInterpreter::Compare() +double ScInterpreter::Compare( ScQueryOp eOp ) { sc::Compare aComp; + aComp.meOp = eOp; aComp.mbIgnoreCase = pDok->GetDocOptions().IsIgnoreCase(); for( short i = 1; i >= 0; i-- ) { @@ -881,7 +883,7 @@ if( nGlobalError ) return 0; nCurFmtType = nFuncFmtType = NUMBERFORMAT_LOGICAL; - return sc::CompareFunc(aComp.maCells[0], aComp.maCells[1], aComp.mbIgnoreCase); + return sc::CompareFunc(aComp); } sc::RangeMatrix ScInterpreter::CompareMat( ScQueryOp eOp, sc::CompareOptions* pOptions ) @@ -990,11 +992,10 @@ rCell.mbEmpty = false; } } - aRes.mpMat->PutDouble( - sc::CompareFunc(aComp.maCells[0], aComp.maCells[1], aComp.mbIgnoreCase, pOptions), j, k); + aRes.mpMat->PutDouble( sc::CompareFunc( aComp, pOptions), j, k); } else - aRes.mpMat->PutString(mrStrPool.intern(ScGlobal::GetRscString(STR_NO_VALUE)), j, k); + aRes.mpMat->PutError( errNoValue, j, k); } } @@ -1081,7 +1082,7 @@ PushMatrix(aMat); } else - PushInt( int(Compare() == 0) ); + PushInt( int(Compare( SC_EQUAL) == 0) ); } void ScInterpreter::ScNotEqual() @@ -1098,7 +1099,7 @@ PushMatrix(aMat); } else - PushInt( int(Compare() != 0) ); + PushInt( int(Compare( SC_NOT_EQUAL) != 0) ); } void ScInterpreter::ScLess() @@ -1115,7 +1116,7 @@ PushMatrix(aMat); } else - PushInt( int(Compare() < 0) ); + PushInt( int(Compare( SC_LESS) < 0) ); } void ScInterpreter::ScGreater() @@ -1132,7 +1133,7 @@ PushMatrix(aMat); } else - PushInt( int(Compare() > 0) ); + PushInt( int(Compare( SC_GREATER) > 0) ); } void ScInterpreter::ScLessEqual() @@ -1149,7 +1150,7 @@ PushMatrix(aMat); } else - PushInt( int(Compare() <= 0) ); + PushInt( int(Compare( SC_LESS_EQUAL) <= 0) ); } void ScInterpreter::ScGreaterEqual() @@ -1166,7 +1167,7 @@ PushMatrix(aMat); } else - PushInt( int(Compare() >= 0) ); + PushInt( int(Compare( SC_GREATER_EQUAL) >= 0) ); } void ScInterpreter::ScAnd() @@ -1499,8 +1500,7 @@ if ( pMat->IsValueOrEmpty(i,j) ) pResMat->PutDouble( -pMat->GetDouble(i,j), i, j ); else - pResMat->PutString( - mrStrPool.intern(ScGlobal::GetRscString(STR_NO_VALUE)), i, j); + pResMat->PutError( errNoValue, i, j); } } PushMatrix( pResMat ); @@ -1553,8 +1553,7 @@ if ( pMat->IsValueOrEmpty(i,j) ) pResMat->PutDouble( double(pMat->GetDouble(i,j) == 0.0), i, j ); else - pResMat->PutString( - mrStrPool.intern(ScGlobal::GetRscString(STR_NO_VALUE)), i, j); + pResMat->PutError( errNoValue, i, j); } } PushMatrix( pResMat ); @@ -3187,15 +3186,20 @@ { //2do: make it full range unicode? OUString aStr = GetString().getString(); - //"classic" ByteString conversion flags - const sal_uInt32 convertFlags = - RTL_UNICODETOTEXT_FLAGS_NONSPACING_IGNORE | - RTL_UNICODETOTEXT_FLAGS_CONTROL_IGNORE | - RTL_UNICODETOTEXT_FLAGS_FLUSH | - RTL_UNICODETOTEXT_FLAGS_UNDEFINED_DEFAULT | - RTL_UNICODETOTEXT_FLAGS_INVALID_DEFAULT | - RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE; - PushInt( (unsigned char) OUStringToOString(OUString(aStr[0]), osl_getThreadTextEncoding(), convertFlags).toChar() ); + if (aStr.isEmpty()) + PushInt(0); + else + { + //"classic" ByteString conversion flags + const sal_uInt32 convertFlags = + RTL_UNICODETOTEXT_FLAGS_NONSPACING_IGNORE | + RTL_UNICODETOTEXT_FLAGS_CONTROL_IGNORE | + RTL_UNICODETOTEXT_FLAGS_FLUSH | + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_DEFAULT | + RTL_UNICODETOTEXT_FLAGS_INVALID_DEFAULT | + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE; + PushInt( (unsigned char) OUStringToOString(OUString(aStr[0]), osl_getThreadTextEncoding(), convertFlags).toChar() ); + } } void ScInterpreter::ScChar() @@ -4863,11 +4867,7 @@ } else { - rParam.FillInExcelSyntax(pDok->GetSharedStringPool(), aString.getString(), 0); - sal_uInt32 nIndex = 0; - bool bNumber = pFormatter->IsNumberFormat( - rItem.maString.getString(), nIndex, rItem.mfVal); - rItem.meType = bNumber ? ScQueryEntry::ByValue : ScQueryEntry::ByString; + rParam.FillInExcelSyntax(pDok->GetSharedStringPool(), aString.getString(), 0, pFormatter); if (rItem.meType == ScQueryEntry::ByString) rParam.bRegExp = MayBeRegExp(rItem.maString.getString(), pDok); } @@ -5162,11 +5162,7 @@ } else { - rParam.FillInExcelSyntax(pDok->GetSharedStringPool(), aString.getString(), 0); - sal_uInt32 nIndex = 0; - bool bNumber = pFormatter->IsNumberFormat( - rItem.maString.getString(), nIndex, rItem.mfVal); - rItem.meType = bNumber ? ScQueryEntry::ByValue : ScQueryEntry::ByString; + rParam.FillInExcelSyntax(pDok->GetSharedStringPool(), aString.getString(), 0, pFormatter); if (rItem.meType == ScQueryEntry::ByString) rParam.bRegExp = MayBeRegExp(rItem.maString.getString(), pDok); } @@ -5420,11 +5416,7 @@ } else { - rParam.FillInExcelSyntax(pDok->GetSharedStringPool(), aString.getString(), 0); - sal_uInt32 nIndex = 0; - bool bNumber = pFormatter->IsNumberFormat( - rItem.maString.getString(), nIndex, rItem.mfVal); - rItem.meType = bNumber ? ScQueryEntry::ByValue : ScQueryEntry::ByString; + rParam.FillInExcelSyntax(pDok->GetSharedStringPool(), aString.getString(), 0, pFormatter); if (rItem.meType == ScQueryEntry::ByString) rParam.bRegExp = MayBeRegExp(rItem.maString.getString(), pDok); } @@ -5520,6 +5512,7 @@ if (!pMainMatrix) { SetError( errIllegalParameter); + return 0; } nMainCol1 = 0; nMainRow1 = 0; @@ -7072,8 +7065,7 @@ aRefAd2.Col(), aRefAd2.Row(), aRefAd2.Tab()); } else - PushDoubleRef( aRefAd.Col(), aRefAd.Row(), aRefAd.Tab(), - aRefAd2.Col(), aRefAd2.Row(), aRefAd2.Tab() ); + PushDoubleRef( aRefAd, aRefAd2); } else if (ConvertSingleRef(pDok, sRefStr, nTab, aRefAd, aDetails, &aExtInfo)) { @@ -7083,7 +7075,7 @@ aExtInfo.mnFileId, aExtInfo.maTabName, aRefAd.Col(), aRefAd.Row(), aRefAd.Tab()); } else - PushSingleRef( aRefAd.Col(), aRefAd.Row(), aRefAd.Tab() ); + PushSingleRef( aRefAd); } else { @@ -8382,7 +8374,13 @@ const ScQueryEntry& rEntry = rParam.GetEntry(0); bool bColumnsMatch = (rParam.nCol1 == rEntry.nField); OSL_ENSURE( bColumnsMatch, "ScInterpreter::LookupQueryWithCache: columns don't match"); - if (!bColumnsMatch) + // At least all volatile functions that generate indirect references have + // to force non-cached lookup. + /* TODO: We could further classify volatile functions into reference + * generating and not reference generating functions to have to force less + * direct lookups here. We could even further attribute volatility per + * parameter so it would affect only the lookup range parameter. */ + if (!bColumnsMatch || GetVolatileType() != NOT_VOLATILE) bFound = lcl_LookupQuery( o_rResultPos, pDok, rParam, rEntry); else { diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/interpr4.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/interpr4.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/interpr4.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/interpr4.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1305,6 +1305,7 @@ rRange.aStart.Set( nCol, nRow, nTab ); SingleRefToVars( rCRef.Ref2, nCol, nRow, nTab); rRange.aEnd.Set( nCol, nRow, nTab ); + rRange.Justify(); if (! pDok->aTableOpList.empty() && !bDontCheckForTableOp ) { if ( IsTableOpInRange( rRange ) ) @@ -1965,6 +1966,26 @@ } } +void ScInterpreter::PushSingleRef( const ScRefAddress& rRef ) +{ + if (!IfErrorPushError()) + { + ScSingleRefData aRef; + aRef.InitFromRefAddress( rRef, aPos); + PushTempTokenWithoutError( new ScSingleRefToken( aRef ) ); + } +} + +void ScInterpreter::PushDoubleRef( const ScRefAddress& rRef1, const ScRefAddress& rRef2 ) +{ + if (!IfErrorPushError()) + { + ScComplexRefData aRef; + aRef.InitFromRefAddresses( rRef1, rRef2, aPos); + PushTempTokenWithoutError( new ScDoubleRefToken( aRef ) ); + } +} + void ScInterpreter::PushMatrix( const sc::RangeMatrix& rMat ) { if (!rMat.isRangeValid()) diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/interpr5.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/interpr5.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/interpr5.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/interpr5.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1092,7 +1092,6 @@ template static ScMatrixRef lcl_MatrixCalculation( - svl::SharedStringPool& rPool, const ScMatrix& rMat1, const ScMatrix& rMat2, ScInterpreter* pInterpreter) { static _Function Op; @@ -1111,13 +1110,19 @@ { for (j = 0; j < nMinR; j++) { + sal_uInt16 nErr; if (rMat1.IsValueOrEmpty(i,j) && rMat2.IsValueOrEmpty(i,j)) { double d = Op(rMat1.GetDouble(i,j), rMat2.GetDouble(i,j)); xResMat->PutDouble( d, i, j); } + else if (((nErr = rMat1.GetErrorIfNotString(i,j)) != 0) || + ((nErr = rMat2.GetErrorIfNotString(i,j)) != 0)) + { + xResMat->PutError( nErr, i, j); + } else - xResMat->PutString(rPool.intern(ScGlobal::GetRscString(STR_NO_VALUE)), i, j); + xResMat->PutError( errNoValue, i, j); } } } @@ -1246,11 +1251,11 @@ ScMatrixRef pResMat; if ( _bSub ) { - pResMat = lcl_MatrixCalculation(mrStrPool, *pMat1, *pMat2, this); + pResMat = lcl_MatrixCalculation( *pMat1, *pMat2, this); } else { - pResMat = lcl_MatrixCalculation(mrStrPool, *pMat1, *pMat2, this); + pResMat = lcl_MatrixCalculation( *pMat1, *pMat2, this); } if (!pResMat) @@ -1279,14 +1284,13 @@ ScMatrixRef pResMat = GetNewMat(nC, nR, true); if (pResMat) { - svl::SharedString aString = mrStrPool.intern(ScGlobal::GetRscString(STR_NO_VALUE)); if (bFlag || !_bSub ) { - pMat->SubAddOp(_bSub, fVal, aString, *pResMat); + pMat->SubAddOp(_bSub, fVal, *pResMat); } else { - pMat->SubAddOp(false, -fVal, aString, *pResMat); + pMat->SubAddOp(false, -fVal, *pResMat); } PushMatrix(pResMat); } @@ -1443,7 +1447,7 @@ } if (pMat1 && pMat2) { - ScMatrixRef pResMat = lcl_MatrixCalculation(mrStrPool, *pMat1, *pMat2, this); + ScMatrixRef pResMat = lcl_MatrixCalculation( *pMat1, *pMat2, this); if (!pResMat) PushNoValue(); else @@ -1467,10 +1471,10 @@ { SCSIZE nCount = nC * nR; for ( SCSIZE i = 0; i < nCount; i++ ) - if (pMat->IsValue(i)) + if (pMat->IsValueOrEmpty(i)) pResMat->PutDouble(pMat->GetDouble(i)*fVal, i); else - pResMat->PutString(mrStrPool.intern(ScGlobal::GetRscString(STR_NO_VALUE)), i); + pResMat->PutError( errNoValue, i); PushMatrix(pResMat); } else @@ -1516,7 +1520,7 @@ } if (pMat1 && pMat2) { - ScMatrixRef pResMat = lcl_MatrixCalculation(mrStrPool, *pMat1, *pMat2, this); + ScMatrixRef pResMat = lcl_MatrixCalculation( *pMat1, *pMat2, this); if (!pResMat) PushNoValue(); else @@ -1546,17 +1550,17 @@ SCSIZE nCount = nC * nR; if (bFlag) { for ( SCSIZE i = 0; i < nCount; i++ ) - if (pMat->IsValue(i)) + if (pMat->IsValueOrEmpty(i)) pResMat->PutDouble( div( fVal, pMat->GetDouble(i)), i); else - pResMat->PutString(mrStrPool.intern(ScGlobal::GetRscString(STR_NO_VALUE)), i); + pResMat->PutError( errNoValue, i); } else { for ( SCSIZE i = 0; i < nCount; i++ ) - if (pMat->IsValue(i)) + if (pMat->IsValueOrEmpty(i)) pResMat->PutDouble( div( pMat->GetDouble(i), fVal), i); else - pResMat->PutString(mrStrPool.intern(ScGlobal::GetRscString(STR_NO_VALUE)), i); + pResMat->PutError( errNoValue, i); } PushMatrix(pResMat); } @@ -1595,7 +1599,7 @@ fVal1 = GetDouble(); if (pMat1 && pMat2) { - ScMatrixRef pResMat = lcl_MatrixCalculation(mrStrPool, *pMat1, *pMat2, this); + ScMatrixRef pResMat = lcl_MatrixCalculation( *pMat1, *pMat2, this); if (!pResMat) PushNoValue(); else @@ -1625,17 +1629,17 @@ SCSIZE nCount = nC * nR; if (bFlag) { for ( SCSIZE i = 0; i < nCount; i++ ) - if (pMat->IsValue(i)) + if (pMat->IsValueOrEmpty(i)) pResMat->PutDouble(pow(fVal,pMat->GetDouble(i)), i); else - pResMat->PutString(mrStrPool.intern(ScGlobal::GetRscString(STR_NO_VALUE)), i); + pResMat->PutError( errNoValue, i); } else { for ( SCSIZE i = 0; i < nCount; i++ ) - if (pMat->IsValue(i)) + if (pMat->IsValueOrEmpty(i)) pResMat->PutDouble(pow(pMat->GetDouble(i),fVal), i); else - pResMat->PutString(mrStrPool.intern(ScGlobal::GetRscString(STR_NO_VALUE)), i); + pResMat->PutError( errNoValue, i); } PushMatrix(pResMat); } @@ -1792,7 +1796,7 @@ PushNoValue(); return; } // if (nC1 != nC2 || nR1 != nR2) - ScMatrixRef pResMat = lcl_MatrixCalculation(mrStrPool, *pMat1, *pMat2, this); + ScMatrixRef pResMat = lcl_MatrixCalculation( *pMat1, *pMat2, this); if (!pResMat) { PushNoValue(); diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/interpr6.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/interpr6.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/interpr6.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/interpr6.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -387,7 +387,7 @@ case ifPRODUCT: { ScMatrix::IterateResult aRes = pMat->Product(bTextAsZero); - fRes = aRes.mfFirst; + fRes *= aRes.mfFirst; fRes *= aRes.mfRest; rCount += aRes.mnCount; } @@ -395,6 +395,7 @@ case ifSUMSQ: { ScMatrix::IterateResult aRes = pMat->SumSquare(bTextAsZero); + fRes += aRes.mfFirst; fRes += aRes.mfRest; rCount += aRes.mnCount; } diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/parclass.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/parclass.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/parclass.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/parclass.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -114,7 +114,7 @@ { ocGreaterEqual, {{ Array, Array }, 0 }}, { ocGrowth, {{ Reference, Reference, Reference, Value }, 0 }}, { ocHarMean, {{ Reference }, 1 }}, - { ocHLookup, {{ Value, Reference, Value, Value }, 0 }}, + { ocHLookup, {{ Value, ReferenceOrForceArray, Value, Value }, 0 }}, { ocIRR, {{ Reference, Value }, 0 }}, { ocIndex, {{ Reference, Value, Value, Value }, 0 }}, { ocIntercept, {{ ForceArray, ForceArray }, 0 }}, @@ -126,7 +126,7 @@ { ocLess, {{ Array, Array }, 0 }}, { ocLessEqual, {{ Array, Array }, 0 }}, { ocLookup, {{ Value, ReferenceOrForceArray, ReferenceOrForceArray }, 0 }}, - { ocMatch, {{ Value, Reference, Reference }, 0 }}, + { ocMatch, {{ Value, ReferenceOrForceArray, Value }, 0 }}, { ocMatDet, {{ ForceArray }, 0 }}, { ocMatInv, {{ ForceArray }, 0 }}, { ocMatMult, {{ ForceArray, ForceArray }, 0 }}, @@ -204,7 +204,7 @@ { ocVarPA, {{ Reference }, 1 }}, { ocVarP_MS, {{ Reference }, 1 }}, { ocVarS, {{ Reference }, 1 }}, - { ocVLookup, {{ Value, Reference, Value, Value }, 0 }}, + { ocVLookup, {{ Value, ReferenceOrForceArray, Value, Value }, 0 }}, { ocXor, {{ Reference }, 1 }}, { ocZTest, {{ Reference, Value, Value }, 0 }}, { ocZTest_MS, {{ Reference, Value, Value }, 0 }}, diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/progress.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/progress.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/progress.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/progress.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -70,8 +70,9 @@ return false; } -ScProgress::ScProgress( SfxObjectShell* pObjSh, const OUString& rText, - sal_uLong nRange, bool bAllDocs, bool bWait ) +ScProgress::ScProgress(SfxObjectShell* pObjSh, const OUString& rText, + sal_uLong nRange, bool bAllDocs, bool bWait) + : bEnabled(true) { if ( pGlobalProgress || SfxProgress::GetActiveProgress( NULL ) ) @@ -114,9 +115,11 @@ } } -ScProgress::ScProgress() : - pProgress( NULL ) -{ // DummyInterpret +ScProgress::ScProgress() + : bEnabled(true) + , pProgress(NULL) +{ + // DummyInterpret } ScProgress::~ScProgress() diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/queryentry.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/queryentry.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/queryentry.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/queryentry.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -32,7 +32,7 @@ bool ScQueryEntry::Item::operator== (const Item& r) const { - return meType == r.meType && mfVal == r.mfVal && maString == r.maString; + return meType == r.meType && mfVal == r.mfVal && maString == r.maString && mbMatchEmpty == r.mbMatchEmpty; } ScQueryEntry::ScQueryEntry() : diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/queryparam.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/queryparam.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/queryparam.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/queryparam.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -22,6 +22,7 @@ #include "scmatrix.hxx" #include +#include #include namespace { @@ -171,7 +172,7 @@ } void ScQueryParamBase::FillInExcelSyntax( - svl::SharedStringPool& rPool, const OUString& rStr, SCSIZE nIndex) + svl::SharedStringPool& rPool, const OUString& rStr, SCSIZE nIndex, SvNumberFormatter* pFormatter ) { const OUString aCellStr = rStr; if (nIndex >= maEntries.size()) @@ -226,6 +227,20 @@ rEntry.eOp = SC_EQUAL; } } + + if (pFormatter) + { + sal_uInt32 nFormat = 0; + bool bNumber = pFormatter->IsNumberFormat( rItem.maString.getString(), nFormat, rItem.mfVal); + rItem.meType = bNumber ? ScQueryEntry::ByValue : ScQueryEntry::ByString; + + /* TODO: pFormatter currently is also used as a flag whether matching + * empty cells with an empty string is triggered from the interpreter. + * This could be handled independently if all queries should support + * it, needs to be evaluated if that actually is desired. */ + if (rItem.meType == ScQueryEntry::ByString) + rItem.mbMatchEmpty = (rEntry.eOp == SC_EQUAL && rItem.maString.isEmpty()); + } } ScQueryParamTable::ScQueryParamTable() : diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/refdata.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/refdata.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/refdata.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/refdata.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -41,6 +41,16 @@ SetAddress(rAdr, rPos); } +void ScSingleRefData::InitFromRefAddress( const ScRefAddress& rRef, const ScAddress& rPos ) +{ + InitFlags(); + SetColRel( rRef.IsRelCol()); + SetRowRel( rRef.IsRelRow()); + SetTabRel( rRef.IsRelTab()); + SetFlag3D( rRef.Tab() != rPos.Tab()); + SetAddress( rRef.GetAddress(), rPos); +} + void ScSingleRefData::SetAbsCol( SCCOL nVal ) { Flags.bColRel = false; @@ -229,6 +239,93 @@ return mnTab; } +// static +void ScSingleRefData::PutInOrder( ScSingleRefData& rRef1, ScSingleRefData& rRef2, const ScAddress& rPos ) +{ + sal_uInt8 nRelState1 = rRef1.Flags.bRelName ? + ((rRef1.Flags.bTabRel ? 4 : 0) | + (rRef1.Flags.bRowRel ? 2 : 0) | + (rRef1.Flags.bColRel ? 1 : 0)) : + 0; + + sal_uInt8 nRelState2 = rRef2.Flags.bRelName ? + ((rRef2.Flags.bTabRel ? 4 : 0) | + (rRef2.Flags.bRowRel ? 2 : 0) | + (rRef2.Flags.bColRel ? 1 : 0)) : + 0; + + SCCOL nCol1 = rRef1.Flags.bColRel ? rPos.Col() + rRef1.mnCol : rRef1.mnCol; + SCCOL nCol2 = rRef2.Flags.bColRel ? rPos.Col() + rRef2.mnCol : rRef2.mnCol; + if (nCol2 < nCol1) + { + rRef1.mnCol = rRef2.Flags.bColRel ? nCol2 - rPos.Col() : nCol2; + rRef2.mnCol = rRef1.Flags.bColRel ? nCol1 - rPos.Col() : nCol1; + if (rRef1.Flags.bRelName && rRef1.Flags.bColRel) + nRelState2 |= 1; + else + nRelState2 &= ~1; + if (rRef2.Flags.bRelName && rRef2.Flags.bColRel) + nRelState1 |= 1; + else + nRelState1 &= ~1; + bool bTmp = rRef1.Flags.bColRel; + rRef1.Flags.bColRel = rRef2.Flags.bColRel; + rRef2.Flags.bColRel = bTmp; + bTmp = rRef1.Flags.bColDeleted; + rRef1.Flags.bColDeleted = rRef2.Flags.bColDeleted; + rRef2.Flags.bColDeleted = bTmp; + } + + SCROW nRow1 = rRef1.Flags.bRowRel ? rPos.Row() + rRef1.mnRow : rRef1.mnRow; + SCROW nRow2 = rRef2.Flags.bRowRel ? rPos.Row() + rRef2.mnRow : rRef2.mnRow; + if (nRow2 < nRow1) + { + rRef1.mnRow = rRef2.Flags.bRowRel ? nRow2 - rPos.Row() : nRow2; + rRef2.mnRow = rRef1.Flags.bRowRel ? nRow1 - rPos.Row() : nRow1; + if (rRef1.Flags.bRelName && rRef1.Flags.bRowRel) + nRelState2 |= 2; + else + nRelState2 &= ~2; + if (rRef2.Flags.bRelName && rRef2.Flags.bRowRel) + nRelState1 |= 2; + else + nRelState1 &= ~2; + bool bTmp = rRef1.Flags.bRowRel; + rRef1.Flags.bRowRel = rRef2.Flags.bRowRel; + rRef2.Flags.bRowRel = bTmp; + bTmp = rRef1.Flags.bRowDeleted; + rRef1.Flags.bRowDeleted = rRef2.Flags.bRowDeleted; + rRef2.Flags.bRowDeleted = bTmp; + } + + SCTAB nTab1 = rRef1.Flags.bTabRel ? rPos.Tab() + rRef1.mnTab : rRef1.mnTab; + SCTAB nTab2 = rRef2.Flags.bTabRel ? rPos.Tab() + rRef2.mnTab : rRef2.mnTab; + if (nTab2 < nTab1) + { + rRef1.mnTab = rRef2.Flags.bTabRel ? nTab2 - rPos.Tab() : nTab2; + rRef2.mnTab = rRef1.Flags.bTabRel ? nTab1 - rPos.Tab() : nTab1; + if (rRef1.Flags.bRelName && rRef1.Flags.bTabRel) + nRelState2 |= 4; + else + nRelState2 &= ~4; + if (rRef2.Flags.bRelName && rRef2.Flags.bTabRel) + nRelState1 |= 4; + else + nRelState1 &= ~4; + bool bTmp = rRef1.Flags.bTabRel; + rRef1.Flags.bTabRel = rRef2.Flags.bTabRel; + rRef2.Flags.bTabRel = bTmp; + bTmp = rRef1.Flags.bTabDeleted; + rRef1.Flags.bTabDeleted = rRef2.Flags.bTabDeleted; + rRef2.Flags.bTabDeleted = bTmp; + } + + // bFlag3D stays the same on both references. + + rRef1.Flags.bRelName = (nRelState1 != 0); + rRef2.Flags.bRelName = (nRelState2 != 0); +} + bool ScSingleRefData::operator==( const ScSingleRefData& r ) const { return mnFlagValue == r.mnFlagValue && mnCol == r.mnCol && mnRow == r.mnRow && mnTab == r.mnTab; @@ -257,10 +354,38 @@ } #endif +void ScComplexRefData::InitFromRefAddresses( const ScRefAddress& rRef1, const ScRefAddress& rRef2, const ScAddress& rPos ) +{ + InitFlags(); + Ref1.SetColRel( rRef1.IsRelCol()); + Ref1.SetRowRel( rRef1.IsRelRow()); + Ref1.SetTabRel( rRef1.IsRelTab()); + Ref1.SetFlag3D( rRef1.Tab() != rPos.Tab() || rRef1.Tab() != rRef2.Tab()); + Ref2.SetColRel( rRef2.IsRelCol()); + Ref2.SetRowRel( rRef2.IsRelRow()); + Ref2.SetTabRel( rRef2.IsRelTab()); + Ref2.SetFlag3D( rRef1.Tab() != rRef2.Tab()); + SetRange( ScRange( rRef1.GetAddress(), rRef2.GetAddress()), rPos); +} + ScComplexRefData& ScComplexRefData::Extend( const ScSingleRefData & rRef, const ScAddress & rPos ) { + bool bInherit3D = (Ref1.IsFlag3D() && !Ref2.IsFlag3D() && !rRef.IsFlag3D()); ScRange aAbsRange = toAbs(rPos); - ScAddress aAbs = rRef.toAbs(rPos); + + ScSingleRefData aRef = rRef; + // If no sheet was given in the extending part, let it point to the same + // sheet as this reference's end point, inheriting the absolute/relative + // mode. + // [$]Sheet1.A5:A6:A7 on Sheet2 do still reference only Sheet1. + if (!rRef.IsFlag3D()) + { + if (Ref2.IsTabRel()) + aRef.SetRelTab( Ref2.Tab()); + else + aRef.SetAbsTab( Ref2.Tab()); + } + ScAddress aAbs = aRef.toAbs(rPos); if (aAbs.Col() < aAbsRange.aStart.Col()) aAbsRange.aStart.SetCol(aAbs.Col()); @@ -280,6 +405,39 @@ if (aAbsRange.aEnd.Tab() < aAbs.Tab()) aAbsRange.aEnd.SetTab(aAbs.Tab()); + // In Ref2 inherit absolute/relative addressing from the extending part. + // A$5:A5 => A$5:A$5:A5 => A$5:A5, and not A$5:A$5 + // A$6:$A5 => A$6:A$6:$A5 => A5:$A$6 + if (aAbsRange.aEnd.Col() == aAbs.Col()) + Ref2.SetColRel( rRef.IsColRel()); + if (aAbsRange.aEnd.Row() == aAbs.Row()) + Ref2.SetRowRel( rRef.IsRowRel()); + + // In Ref1 inherit relative sheet from extending part if given. + if (aAbsRange.aStart.Tab() == aAbs.Tab() && rRef.IsFlag3D()) + Ref1.SetTabRel( rRef.IsTabRel()); + + // In Ref2 inherit relative sheet from either Ref1 or extending part. + // Use the original 3D flags to determine which. + // $Sheet1.$A$5:$A$6 => $Sheet1.$A$5:$A$5:$A$6 => $Sheet1.$A$5:$A$6, and + // not $Sheet1.$A$5:Sheet1.$A$6 (with invisible second 3D, but relative). + if (aAbsRange.aEnd.Tab() == aAbs.Tab()) + Ref2.SetTabRel( bInherit3D ? Ref1.IsTabRel() : rRef.IsTabRel()); + + // Force 3D flag in Ref1 if different sheet or more than one sheet + // referenced. + if (aAbsRange.aStart.Tab() != rPos.Tab() || aAbsRange.aStart.Tab() != aAbsRange.aEnd.Tab()) + Ref1.SetFlag3D(true); + + // Force 3D flag in Ref2 if more than one sheet referenced. + if (aAbsRange.aStart.Tab() != aAbsRange.aEnd.Tab()) + Ref2.SetFlag3D(true); + + // Inherit 3D flag in Ref1 from extending part in case range wasn't + // extended as in A5:A5:Sheet1.A5 if on Sheet1. + if (rRef.IsFlag3D()) + Ref1.SetFlag3D( true); + SetRange(aAbsRange, rPos); return *this; @@ -311,6 +469,11 @@ Ref2.SetAddress(rRange.aEnd, rPos); } +void ScComplexRefData::PutInOrder( const ScAddress& rPos ) +{ + ScSingleRefData::PutInOrder( Ref1, Ref2, rPos); +} + #if DEBUG_FORMULA_COMPILER void ScComplexRefData::Dump( int nIndent ) const { diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/scmatrix.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/scmatrix.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/scmatrix.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/scmatrix.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -242,6 +242,7 @@ void PutEmpty(SCSIZE nC, SCSIZE nR); void PutEmptyPath(SCSIZE nC, SCSIZE nR); void PutError( sal_uInt16 nErrorCode, SCSIZE nC, SCSIZE nR ); + void PutError( sal_uInt16 nErrorCode, SCSIZE nIndex ); void PutBoolean(bool bVal, SCSIZE nC, SCSIZE nR); sal_uInt16 GetError( SCSIZE nC, SCSIZE nR) const; double GetDouble(SCSIZE nC, SCSIZE nR) const; @@ -258,6 +259,7 @@ bool IsEmptyPath( SCSIZE nC, SCSIZE nR ) const; bool IsValue( SCSIZE nIndex ) const; bool IsValue( SCSIZE nC, SCSIZE nR ) const; + bool IsValueOrEmpty( SCSIZE nIndex ) const; bool IsValueOrEmpty( SCSIZE nC, SCSIZE nR ) const; bool IsBoolean( SCSIZE nC, SCSIZE nR ) const; bool IsNumeric() const; @@ -488,6 +490,13 @@ maMat.set(nR, nC, CreateDoubleError(nErrorCode)); } +void ScMatrixImpl::PutError( sal_uInt16 nErrorCode, SCSIZE nIndex ) +{ + SCSIZE nC, nR; + CalcPosition(nIndex, nC, nR); + maMat.set(nR, nC, CreateDoubleError(nErrorCode)); +} + void ScMatrixImpl::PutBoolean(bool bVal, SCSIZE nC, SCSIZE nR) { if (ValidColRow( nC, nR)) @@ -741,6 +750,13 @@ return false; } +bool ScMatrixImpl::IsValueOrEmpty( SCSIZE nIndex ) const +{ + SCSIZE nC, nR; + CalcPosition(nIndex, nC, nR); + return IsValueOrEmpty(nC, nR); +} + bool ScMatrixImpl::IsValueOrEmpty( SCSIZE nC, SCSIZE nR ) const { ValidColRowReplicated(nC, nR); @@ -1379,7 +1395,7 @@ void compare() { - double fVal = sc::CompareFunc(mrComp.maCells[0], mrComp.maCells[1], mrComp.mbIgnoreCase, mpOptions); + double fVal = sc::CompareFunc( mrComp, mpOptions); maResValues.push_back(evaluate(fVal, mrComp.meOp)); } @@ -1871,34 +1887,11 @@ } } -namespace Op { - -template -struct return_type -{ - typedef T type; -}; - -template<> -struct return_type -{ - typedef double type; -}; - -template<> -struct return_type -{ - typedef svl::SharedString type; -}; - -} - template struct wrapped_iterator { typedef ::std::bidirectional_iterator_tag iterator_category; - typedef typename T::const_iterator::value_type old_value_type; - typedef typename Op::return_type::type value_type; + typedef double value_type; typedef value_type* pointer; typedef value_type& reference; typedef typename T::const_iterator::difference_type difference_type; @@ -1999,6 +1992,31 @@ } }; +namespace { + +MatrixImplType::position_type increment_position(const MatrixImplType::position_type& pos, size_t n) +{ + MatrixImplType::position_type ret = pos; + do + { + if (ret.second + n < ret.first->size) + { + ret.second += n; + break; + } + else + { + n -= (ret.first->size - ret.second); + ++ret.first; + ret.second = 0; + } + } + while (n > 0); + return ret; +} + +} + template struct MatrixOpWrapper { @@ -2027,7 +2045,6 @@ block_type::const_iterator itEnd = block_type::end(*node.data); MatrixIteratorWrapper aFunc(it, itEnd, maOp); pos = mrMat.set(pos,aFunc.begin(), aFunc.end()); - ++pos.first; } break; case mdds::mtm::element_boolean: @@ -2039,7 +2056,6 @@ MatrixIteratorWrapper aFunc(it, itEnd, maOp); pos = mrMat.set(pos, aFunc.begin(), aFunc.end()); - ++pos.first; } break; case mdds::mtm::element_string: @@ -2051,7 +2067,6 @@ MatrixIteratorWrapper aFunc(it, itEnd, maOp); pos = mrMat.set(pos, aFunc.begin(), aFunc.end()); - ++pos.first; } break; case mdds::mtm::element_empty: @@ -2061,15 +2076,13 @@ std::vector aVec(node.size); MatrixIteratorWrapper, T> aFunc(aVec.begin(), aVec.end(), maOp); pos = mrMat.set(pos, aFunc.begin(), aFunc.end()); - ++pos.first; } - else - pos.second += node.size; } break; default: ; } + pos = increment_position(pos, node.size); } }; @@ -2274,6 +2287,11 @@ pImpl->PutError(nErrorCode, nC, nR); } +void ScMatrix::PutError( sal_uInt16 nErrorCode, SCSIZE nIndex ) +{ + pImpl->PutError(nErrorCode, nIndex); +} + void ScMatrix::PutBoolean(bool bVal, SCSIZE nC, SCSIZE nR) { pImpl->PutBoolean(bVal, nC, nR); @@ -2354,6 +2372,11 @@ return pImpl->IsValue(nC, nR); } +bool ScMatrix::IsValueOrEmpty( SCSIZE nIndex ) const +{ + return pImpl->IsValueOrEmpty(nIndex); +} + bool ScMatrix::IsValueOrEmpty( SCSIZE nC, SCSIZE nR ) const { return pImpl->IsValueOrEmpty(nC, nR); @@ -2516,13 +2539,13 @@ { private: double mnVal; - svl::SharedString maString; + double mnError; public: - AddOp(double nVal, svl::SharedString aString): + AddOp(double nVal): mnVal(nVal), - maString(aString) + mnError( CreateDoubleError( errNoValue)) { } @@ -2536,14 +2559,14 @@ return mnVal + (double)bVal; } - svl::SharedString operator()(const svl::SharedString&) const + double operator()(const svl::SharedString&) const { - return maString; + return mnError; } - svl::SharedString operator()(char) const + double operator()(char) const { - return maString; + return mnVal; // mnVal + 0.0 } bool useFunctionForEmpty() const @@ -2556,13 +2579,13 @@ { private: double mnVal; - svl::SharedString maString; + double mnError; public: - SubOp(double nVal, svl::SharedString aString): + SubOp(double nVal): mnVal(nVal), - maString(aString) + mnError( CreateDoubleError( errNoValue)) { } @@ -2576,14 +2599,14 @@ return mnVal - (double)bVal; } - svl::SharedString operator()(const svl::SharedString&) const + double operator()(const svl::SharedString&) const { - return maString; + return mnError; } - svl::SharedString operator()(char) const + double operator()(char) const { - return maString; + return mnVal; // mnVal - 0.0 } bool useFunctionForEmpty() const @@ -2594,16 +2617,16 @@ } -void ScMatrix::SubAddOp(bool bSub, double fVal, svl::SharedString aString, ScMatrix& rMat) +void ScMatrix::SubAddOp(bool bSub, double fVal, ScMatrix& rMat) { if(bSub) { - SubOp aOp(fVal, aString); + SubOp aOp(fVal); pImpl->ApplyOperation(aOp, *rMat.pImpl); } else { - AddOp aOp(fVal, aString); + AddOp aOp(fVal); pImpl->ApplyOperation(aOp, *rMat.pImpl); } } diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/sharedformula.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/sharedformula.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/sharedformula.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/sharedformula.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -18,7 +18,7 @@ namespace sc { -void SharedFormulaUtil::splitFormulaCellGroup(const CellStoreType::position_type& aPos) +void SharedFormulaUtil::splitFormulaCellGroup(const CellStoreType::position_type& aPos, sc::EndListeningContext* pCxt) { SCROW nRow = aPos.first->position + aPos.second; @@ -55,12 +55,31 @@ } xGroup->mnLength = nRow - xGroup->mpTopCell->aPos.Row(); + ScFormulaCell& rPrevTop = *sc::formula_block::at(*aPos.first->data, aPos.second - xGroup->mnLength); + +#if USE_FORMULA_GROUP_LISTENER + // At least group area listeners will have to be adapted. As long as + // there's no update mechanism and no separated handling of group area and + // other listeners, all listeners of this group's top cell are to be reset. + if (nLength2) + { + // If a context exists it has to be used to not interfere with + // ScColumn::maBroadcasters iterators, which the EndListeningTo() + // without context would do when removing a broadcaster that had its + // last listener removed. + if (pCxt) + rPrevTop.EndListeningTo(*pCxt); + else + rPrevTop.EndListeningTo( rPrevTop.GetDocument(), NULL, ScAddress( ScAddress::UNINITIALIZED)); + rPrevTop.SetNeedsListening(true); + } +#endif + if (xGroup->mnLength == 1) { // The top group consists of only one cell. Ungroup this. ScFormulaCellGroupRef xNone; - ScFormulaCell& rPrev = *sc::formula_block::at(*aPos.first->data, aPos.second-1); - rPrev.SetCellGroup(xNone); + rPrevTop.SetCellGroup(xNone); } // Apply the lower group object to the lower cells. @@ -97,7 +116,7 @@ if (aPos.first == rCells.end()) return; - splitFormulaCellGroup(aPos); + splitFormulaCellGroup(aPos, nullptr); std::vector::iterator itEnd = rBounds.end(); for (++it; it != itEnd; ++it) { @@ -106,7 +125,7 @@ if (aPos.first == rCells.end()) return; - splitFormulaCellGroup(aPos); + splitFormulaCellGroup(aPos, nullptr); } } diff -Nru libreoffice-l10n-4.4.2/sc/source/core/tool/token.cxx libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/token.cxx --- libreoffice-l10n-4.4.2/sc/source/core/tool/token.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/core/tool/token.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -43,6 +43,7 @@ #include "types.hxx" #include "globstr.hrc" #include "addincol.hxx" +#include "dbdata.hxx" #include using ::std::vector; @@ -112,6 +113,34 @@ rRef.SetAbsTab(0); } + struct TokenPointerRange + { + FormulaToken** mpStart; + FormulaToken** mpStop; + + TokenPointerRange() : mpStart(NULL), mpStop(NULL) {} + TokenPointerRange( FormulaToken** p, sal_uInt16 n ) : + mpStart(p), mpStop( p + static_cast(n)) {} + }; + struct TokenPointers + { + TokenPointerRange maPointerRange[2]; + + TokenPointers( FormulaToken** pCode, sal_uInt16 nLen, FormulaToken** pRPN, sal_uInt16 nRPN ) + { + maPointerRange[0] = TokenPointerRange( pCode, nLen); + maPointerRange[1] = TokenPointerRange( pRPN, nRPN); + } + + static bool skipToken( size_t i, const FormulaToken* const * pp ) + { + // Handle all tokens in RPN, and code tokens only if they have a + // reference count of 1, which means they are not referenced in + // RPN. + return i == 0 && (*pp)->GetRef() > 1; + } + }; + } // namespace // Align MemPools on 4k boundaries - 64 bytes (4k is a MUST for OS/2) @@ -889,7 +918,10 @@ ScMatrixFormulaCellToken::ScMatrixFormulaCellToken( SCCOL nC, SCROW nR, const ScConstMatrixRef& pMat, formula::FormulaToken* pUL ) : - ScMatrixCellResultToken(pMat, pUL), nRows(nR), nCols(nC) {} + ScMatrixCellResultToken(pMat, pUL), nRows(nR), nCols(nC) +{ + CloneUpperLeftIfNecessary(); +} ScMatrixFormulaCellToken::ScMatrixFormulaCellToken( SCCOL nC, SCROW nR ) : ScMatrixCellResultToken(NULL, NULL), nRows(nR), nCols(nC) {} @@ -897,10 +929,7 @@ ScMatrixFormulaCellToken::ScMatrixFormulaCellToken( const ScMatrixFormulaCellToken& r ) : ScMatrixCellResultToken(r), nRows(r.nRows), nCols(r.nCols) { - // xUpperLeft is modifiable through - // SetUpperLeftDouble(), so clone it. - if (xUpperLeft) - xUpperLeft = xUpperLeft->Clone(); + CloneUpperLeftIfNecessary(); } bool ScMatrixFormulaCellToken::operator==( const FormulaToken& r ) const @@ -910,9 +939,17 @@ nCols == p->nCols && nRows == p->nRows; } +void ScMatrixFormulaCellToken::CloneUpperLeftIfNecessary() +{ + if (xUpperLeft && xUpperLeft->GetType() == svDouble) + xUpperLeft = xUpperLeft->Clone(); +} + void ScMatrixFormulaCellToken::Assign( const ScMatrixCellResultToken & r ) { ScMatrixCellResultToken::Assign( r); + + CloneUpperLeftIfNecessary(); } void ScMatrixFormulaCellToken::Assign( const formula::FormulaToken& r ) @@ -934,6 +971,7 @@ { xUpperLeft = &r; xMatrix = NULL; + CloneUpperLeftIfNecessary(); } } } @@ -2216,9 +2254,9 @@ OUString aTabName; sal_uInt16 nFileId; GetExternalTableData(pOldDoc, pNewDoc, rRef1.Tab(), aTabName, nFileId); - pCode[j]->DecRef(); ScExternalDoubleRefToken* pToken = new ScExternalDoubleRefToken(nFileId, aTabName, rRef); pToken->IncRef(); + pCode[j]->DecRef(); // ATTENTION: rRef can't be used after this point pCode[j] = pToken; } } @@ -2588,9 +2626,6 @@ bool isNameModified( const sc::UpdatedRangeNames& rUpdatedNames, SCTAB nOldTab, const formula::FormulaToken& rToken ) { - if (rToken.GetOpCode() != ocName) - return false; - SCTAB nTab = -1; if (!rToken.IsGlobal()) nTab = nOldTab; @@ -2599,6 +2634,16 @@ return rUpdatedNames.isNameUpdated(nTab, rToken.GetIndex()); } +bool isDBDataModified( const ScDocument& rDoc, const formula::FormulaToken& rToken ) +{ + // Check if this DBData has been modified. + const ScDBData* pDBData = rDoc.GetDBCollection()->getNamedDBs().findByIndex( rToken.GetIndex()); + if (!pDBData) + return true; + + return pDBData->IsModified(); +} + } sc::RefUpdateResult ScTokenArray::AdjustReferenceOnShift( const sc::RefUpdateContext& rCxt, const ScAddress& rOldPos ) @@ -2737,7 +2782,8 @@ break; case svIndex: { - if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) + if (((*p)->GetOpCode() == ocName && isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) || + ((*p)->GetOpCode() == ocDBArea && isDBDataModified(rCxt.mrDoc, **p))) aRes.mbNameModified = true; } break; @@ -2805,7 +2851,8 @@ break; case svIndex: { - if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) + if (((*p)->GetOpCode() == ocName && isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) || + ((*p)->GetOpCode() == ocDBArea && isDBDataModified(rCxt.mrDoc, **p))) aRes.mbNameModified = true; } break; @@ -2860,7 +2907,8 @@ break; case svIndex: { - if (isNameModified(rCxt.maUpdatedNames, aOldRange.aStart.Tab(), **p)) + if (((*p)->GetOpCode() == ocName && isNameModified(rCxt.maUpdatedNames, aOldRange.aStart.Tab(), **p)) || + ((*p)->GetOpCode() == ocDBArea && isDBDataModified(rCxt.mrDoc, **p))) aRes.mbNameModified = true; } break; @@ -3309,6 +3357,42 @@ return false; } +bool adjustDoubleRefOnDeleteTab(ScComplexRefData& rRef, SCTAB nDelPos, SCTAB nSheets, const ScAddress& rOldPos, const ScAddress& rNewPos) +{ + ScSingleRefData& rRef1 = rRef.Ref1; + ScSingleRefData& rRef2 = rRef.Ref2; + ScAddress aStartPos = rRef1.toAbs(rOldPos); + ScAddress aEndPos = rRef2.toAbs(rOldPos); + bool bMoreThanOneTab = aStartPos.Tab() != aEndPos.Tab(); + bool bModified = false; + if (bMoreThanOneTab && aStartPos.Tab() == nDelPos && nDelPos + nSheets <= aEndPos.Tab()) + { + if (rRef1.IsTabRel() && aStartPos.Tab() < rOldPos.Tab()) + { + rRef1.IncTab(nSheets); + bModified = true; + } + } + else + { + bModified = adjustSingleRefOnDeletedTab(rRef1, nDelPos, nSheets, rOldPos, rNewPos); + } + + if (bMoreThanOneTab && aEndPos.Tab() == nDelPos && aStartPos.Tab() <= nDelPos - nSheets) + { + if (!rRef2.IsTabRel() || rOldPos.Tab() < aEndPos.Tab()) + { + rRef2.IncTab(-nSheets); + bModified = true; + } + } + else + { + bModified |= adjustSingleRefOnDeletedTab(rRef2, nDelPos, nSheets, rOldPos, rNewPos); + } + return bModified; +} + } sc::RefUpdateResult ScTokenArray::AdjustReferenceOnDeletedTab( sc::RefUpdateDeleteTabContext& rCxt, const ScAddress& rOldPos ) @@ -3336,15 +3420,13 @@ { formula::FormulaToken* pToken = *p; ScComplexRefData& rRef = *pToken->GetDoubleRef(); - if (adjustSingleRefOnDeletedTab(rRef.Ref1, rCxt.mnDeletePos, rCxt.mnSheets, rOldPos, aNewPos)) - aRes.mbReferenceModified = true; - if (adjustSingleRefOnDeletedTab(rRef.Ref2, rCxt.mnDeletePos, rCxt.mnSheets, rOldPos, aNewPos)) - aRes.mbReferenceModified = true; + aRes.mbReferenceModified |= adjustDoubleRefOnDeleteTab(rRef, rCxt.mnDeletePos, rCxt.mnSheets, rOldPos, aNewPos); } break; case svIndex: { - if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) + if (((*p)->GetOpCode() == ocName && isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) || + ((*p)->GetOpCode() == ocDBArea && isDBDataModified(rCxt.mrDoc, **p))) aRes.mbNameModified = true; } break; @@ -3388,7 +3470,8 @@ break; case svIndex: { - if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) + if (((*p)->GetOpCode() == ocName && isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) || + ((*p)->GetOpCode() == ocDBArea && isDBDataModified(rCxt.mrDoc, **p))) aRes.mbNameModified = true; } break; @@ -3453,7 +3536,8 @@ break; case svIndex: { - if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) + if (((*p)->GetOpCode() == ocName && isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) || + ((*p)->GetOpCode() == ocDBArea && isDBDataModified(rCxt.mrDoc, **p))) aRes.mbNameModified = true; } break; @@ -3540,6 +3624,33 @@ } } +void ScTokenArray::AdjustReferenceOnCopy( const ScAddress& rNewPos ) +{ + TokenPointers aPtrs( pCode, nLen, pRPN, nRPN); + for (size_t j=0; j<2; ++j) + { + FormulaToken** pp = aPtrs.maPointerRange[j].mpStart; + FormulaToken** pEnd = aPtrs.maPointerRange[j].mpStop; + for (; pp != pEnd; ++pp) + { + if (TokenPointers::skipToken(j,pp)) + continue; + + switch ((*pp)->GetType()) + { + case svDoubleRef: + { + ScComplexRefData& rRef = *(*pp)->GetDoubleRef(); + rRef.PutInOrder( rNewPos); + } + break; + default: + ; + } + } + } +} + namespace { void clearTabDeletedFlag( ScSingleRefData& rRef, const ScAddress& rPos, SCTAB nStartTab, SCTAB nEndTab ) @@ -3656,28 +3767,35 @@ void ScTokenArray::CheckRelativeReferenceBounds( const sc::RefUpdateContext& rCxt, const ScAddress& rPos, SCROW nGroupLen, std::vector& rBounds ) const { - FormulaToken** p = pCode; - FormulaToken** pEnd = p + static_cast(nLen); - for (; p != pEnd; ++p) + TokenPointers aPtrs( pCode, nLen, pRPN, nRPN); + for (size_t j=0; j<2; ++j) { - switch ((*p)->GetType()) + FormulaToken** p = aPtrs.maPointerRange[j].mpStart; + FormulaToken** pEnd = aPtrs.maPointerRange[j].mpStop; + for (; p != pEnd; ++p) { - case svSingleRef: - { - formula::FormulaToken* pToken = *p; - checkBounds(rCxt, rPos, nGroupLen, *pToken->GetSingleRef(), rBounds); - } - break; - case svDoubleRef: + if (TokenPointers::skipToken(j,p)) + continue; + + switch ((*p)->GetType()) { - formula::FormulaToken* pToken = *p; - const ScComplexRefData& rRef = *pToken->GetDoubleRef(); - checkBounds(rCxt, rPos, nGroupLen, rRef.Ref1, rBounds); - checkBounds(rCxt, rPos, nGroupLen, rRef.Ref2, rBounds); + case svSingleRef: + { + formula::FormulaToken* pToken = *p; + checkBounds(rCxt, rPos, nGroupLen, *pToken->GetSingleRef(), rBounds); + } + break; + case svDoubleRef: + { + formula::FormulaToken* pToken = *p; + const ScComplexRefData& rRef = *pToken->GetDoubleRef(); + checkBounds(rCxt, rPos, nGroupLen, rRef.Ref1, rBounds); + checkBounds(rCxt, rPos, nGroupLen, rRef.Ref2, rBounds); + } + break; + default: + ; } - break; - default: - ; } } } @@ -3685,29 +3803,36 @@ void ScTokenArray::CheckRelativeReferenceBounds( const ScAddress& rPos, SCROW nGroupLen, const ScRange& rRange, std::vector& rBounds ) const { - FormulaToken** p = pCode; - FormulaToken** pEnd = p + static_cast(nLen); - for (; p != pEnd; ++p) + TokenPointers aPtrs( pCode, nLen, pRPN, nRPN); + for (size_t j=0; j<2; ++j) { - switch ((*p)->GetType()) + FormulaToken** p = aPtrs.maPointerRange[j].mpStart; + FormulaToken** pEnd = aPtrs.maPointerRange[j].mpStop; + for (; p != pEnd; ++p) { - case svSingleRef: - { - formula::FormulaToken* pToken = *p; - const ScSingleRefData& rRef = *pToken->GetSingleRef(); - checkBounds(rPos, nGroupLen, rRange, rRef, rBounds); - } - break; - case svDoubleRef: + if (TokenPointers::skipToken(j,p)) + continue; + + switch ((*p)->GetType()) { - formula::FormulaToken* pToken = *p; - const ScComplexRefData& rRef = *pToken->GetDoubleRef(); - checkBounds(rPos, nGroupLen, rRange, rRef.Ref1, rBounds); - checkBounds(rPos, nGroupLen, rRange, rRef.Ref2, rBounds); + case svSingleRef: + { + formula::FormulaToken* pToken = *p; + const ScSingleRefData& rRef = *pToken->GetSingleRef(); + checkBounds(rPos, nGroupLen, rRange, rRef, rBounds); + } + break; + case svDoubleRef: + { + formula::FormulaToken* pToken = *p; + const ScComplexRefData& rRef = *pToken->GetDoubleRef(); + checkBounds(rPos, nGroupLen, rRange, rRef.Ref1, rBounds); + checkBounds(rPos, nGroupLen, rRange, rRef.Ref2, rBounds); + } + break; + default: + ; } - break; - default: - ; } } } @@ -3716,91 +3841,98 @@ const sc::RefUpdateContext& rCxt, const ScAddress& rPos, SCROW nGroupLen, std::vector& rBounds ) const { const SCROW nInsRow = rCxt.maRange.aStart.Row(); - const FormulaToken* const * p = pCode; - const FormulaToken* const * pEnd = p + static_cast(nLen); - for (; p != pEnd; ++p) + TokenPointers aPtrs( pCode, nLen, pRPN, nRPN); + for (size_t j=0; j<2; ++j) { - switch ((*p)->GetType()) + const FormulaToken* const * p = aPtrs.maPointerRange[j].mpStart; + const FormulaToken* const * pEnd = aPtrs.maPointerRange[j].mpStop; + for (; p != pEnd; ++p) { - case svDoubleRef: + if (TokenPointers::skipToken(j,p)) + continue; + + switch ((*p)->GetType()) { - const formula::FormulaToken* pToken = *p; - const ScComplexRefData& rRef = *pToken->GetDoubleRef(); - bool bStartRowRelative = rRef.Ref1.IsRowRel(); - bool bEndRowRelative = rRef.Ref2.IsRowRel(); - - // For absolute references nothing needs to be done, they stay - // the same for all and if to be expanded the group will be - // adjusted later. - if (!bStartRowRelative && !bEndRowRelative) - break; // switch - - ScRange aAbsStart(rRef.toAbs(rPos)); - ScAddress aPos(rPos); - aPos.IncRow(nGroupLen); - ScRange aAbsEnd(rRef.toAbs(aPos)); - // References must be at least two rows to be expandable. - if ((aAbsStart.aEnd.Row() - aAbsStart.aStart.Row() < 1) && - (aAbsEnd.aEnd.Row() - aAbsEnd.aStart.Row() < 1)) - break; // switch - - // Only need to process if an edge may be touching the - // insertion row anywhere within the run of the group. - if (!((aAbsStart.aStart.Row() <= nInsRow && nInsRow <= aAbsEnd.aStart.Row()) || - (aAbsStart.aEnd.Row() <= nInsRow && nInsRow <= aAbsEnd.aEnd.Row()))) - break; // switch - - SCROW nStartRow = aAbsStart.aStart.Row(); - SCROW nEndRow = aAbsStart.aEnd.Row(); - // Position on first relevant range. - SCROW nOffset = 0; - if (nEndRow + 1 < nInsRow) - { - if (bEndRowRelative) - { - nOffset = nInsRow - nEndRow - 1; - nEndRow += nOffset; - if (bStartRowRelative) - nStartRow += nOffset; - } - else // bStartRowRelative==true - { - nOffset = nInsRow - nStartRow; - nStartRow += nOffset; - // Start is overtaking End, swap. - bStartRowRelative = false; - bEndRowRelative = true; - } - } - for (SCROW i = nOffset; i < nGroupLen; ++i) - { - bool bSplit = (nStartRow == nInsRow || nEndRow + 1 == nInsRow); - if (bSplit) - rBounds.push_back( rPos.Row() + i); - - if (bEndRowRelative) - ++nEndRow; - if (bStartRowRelative) + case svDoubleRef: { - ++nStartRow; - if (!bEndRowRelative && nStartRow == nEndRow) + const formula::FormulaToken* pToken = *p; + const ScComplexRefData& rRef = *pToken->GetDoubleRef(); + bool bStartRowRelative = rRef.Ref1.IsRowRel(); + bool bEndRowRelative = rRef.Ref2.IsRowRel(); + + // For absolute references nothing needs to be done, they stay + // the same for all and if to be expanded the group will be + // adjusted later. + if (!bStartRowRelative && !bEndRowRelative) + break; // switch + + ScRange aAbsStart(rRef.toAbs(rPos)); + ScAddress aPos(rPos); + aPos.IncRow(nGroupLen); + ScRange aAbsEnd(rRef.toAbs(aPos)); + // References must be at least two rows to be expandable. + if ((aAbsStart.aEnd.Row() - aAbsStart.aStart.Row() < 1) && + (aAbsEnd.aEnd.Row() - aAbsEnd.aStart.Row() < 1)) + break; // switch + + // Only need to process if an edge may be touching the + // insertion row anywhere within the run of the group. + if (!((aAbsStart.aStart.Row() <= nInsRow && nInsRow <= aAbsEnd.aStart.Row()) || + (aAbsStart.aEnd.Row() <= nInsRow && nInsRow <= aAbsEnd.aEnd.Row()))) + break; // switch + + SCROW nStartRow = aAbsStart.aStart.Row(); + SCROW nEndRow = aAbsStart.aEnd.Row(); + // Position on first relevant range. + SCROW nOffset = 0; + if (nEndRow + 1 < nInsRow) { - // Start is overtaking End, swap. - bStartRowRelative = false; - bEndRowRelative = true; + if (bEndRowRelative) + { + nOffset = nInsRow - nEndRow - 1; + nEndRow += nOffset; + if (bStartRowRelative) + nStartRow += nOffset; + } + else // bStartRowRelative==true + { + nOffset = nInsRow - nStartRow; + nStartRow += nOffset; + // Start is overtaking End, swap. + bStartRowRelative = false; + bEndRowRelative = true; + } + } + for (SCROW i = nOffset; i < nGroupLen; ++i) + { + bool bSplit = (nStartRow == nInsRow || nEndRow + 1 == nInsRow); + if (bSplit) + rBounds.push_back( rPos.Row() + i); + + if (bEndRowRelative) + ++nEndRow; + if (bStartRowRelative) + { + ++nStartRow; + if (!bEndRowRelative && nStartRow == nEndRow) + { + // Start is overtaking End, swap. + bStartRowRelative = false; + bEndRowRelative = true; + } + } + if (nInsRow < nStartRow || (!bStartRowRelative && nInsRow <= nEndRow)) + { + if (bSplit && (++i < nGroupLen)) + rBounds.push_back( rPos.Row() + i); + break; // for, out of range now + } } } - if (nInsRow < nStartRow || (!bStartRowRelative && nInsRow <= nEndRow)) - { - if (bSplit && (++i < nGroupLen)) - rBounds.push_back( rPos.Row() + i); - break; // for, out of range now - } - } + break; + default: + ; } - break; - default: - ; } } } diff -Nru libreoffice-l10n-4.4.2/sc/source/filter/excel/xelink.cxx libreoffice-l10n-4.4.6~rc3/sc/source/filter/excel/xelink.cxx --- libreoffice-l10n-4.4.2/sc/source/filter/excel/xelink.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/filter/excel/xelink.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1345,7 +1345,8 @@ for( SCROW nScRow = nScRow1; bValid && (nScRow <= nScRow2); ++nScRow ) { ::std::pair< SCCOL, SCCOL > aColRange = mxCacheTable->getColRange( nScRow ); - for( SCCOL nScCol = aColRange.first; bValid && (nScCol < aColRange.second); ++nScCol ) + const SCCOL nScEnd = ::std::min( aColRange.second, MAXCOLCOUNT ); + for( SCCOL nScCol = aColRange.first; bValid && (nScCol < nScEnd); ++nScCol ) { if( maUsedCells.IsCellMarked( nScCol, nScRow, true ) ) { diff -Nru libreoffice-l10n-4.4.2/sc/source/filter/excel/xestyle.cxx libreoffice-l10n-4.4.6~rc3/sc/source/filter/excel/xestyle.cxx --- libreoffice-l10n-4.4.2/sc/source/filter/excel/xestyle.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/filter/excel/xestyle.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -509,18 +509,22 @@ XclListColor* XclExpPaletteImpl::SearchListEntry( const Color& rColor, sal_uInt32& rnIndex ) { - rnIndex = mnLastIdx; - XclListColor* pEntry = NULL; + rnIndex = 0; if (mxColorList->empty()) return NULL; + XclListColor* pEntry = NULL; + // search optimization for equal-colored objects occurring repeatedly - if (rnIndex < mxColorList->size()) + if (mnLastIdx < mxColorList->size()) { - pEntry = &(*mxColorList)[rnIndex]; + pEntry = &(*mxColorList)[mnLastIdx]; if( pEntry->GetColor() == rColor ) + { + rnIndex = mnLastIdx; return pEntry; + } } // binary search for color diff -Nru libreoffice-l10n-4.4.2/sc/source/filter/excel/xetable.cxx libreoffice-l10n-4.4.6~rc3/sc/source/filter/excel/xetable.cxx --- libreoffice-l10n-4.4.2/sc/source/filter/excel/xetable.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/filter/excel/xetable.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -932,23 +932,82 @@ // OOXTODO: XML_cm, XML_vm, XML_ph FSEND ); - rWorksheet->startElement( XML_f, - // OOXTODO: XML_t, ST_CellFormulaType - XML_aca, XclXmlUtils::ToPsz( (mxTokArr && mxTokArr->IsVolatile()) || (mxAddRec && mxAddRec->IsVolatile()) ), - // OOXTODO: XML_ref, ST_Ref - // OOXTODO: XML_dt2D, bool - // OOXTODO: XML_dtr, bool - // OOXTODO: XML_del1, bool - // OOXTODO: XML_del2, bool - // OOXTODO: XML_r1, ST_CellRef - // OOXTODO: XML_r2, ST_CellRef - // OOXTODO: XML_ca, bool - // OOXTODO: XML_si, uint - // OOXTODO: XML_bx bool - FSEND ); - rWorksheet->writeEscaped( XclXmlUtils::ToOUString( - rStrm.GetRoot().GetCompileFormulaContext(), mrScFmlaCell.aPos, mrScFmlaCell.GetCode())); - rWorksheet->endElement( XML_f ); + bool bWriteFormula = true; + bool bTagStarted = false; + ScAddress aScPos( static_cast< SCCOL >( GetXclPos().mnCol ), + static_cast< SCROW >( GetXclPos().mnRow ), rStrm.GetRoot().GetCurrScTab() ); + + switch (mrScFmlaCell.GetMatrixFlag()) + { + case MM_NONE: + break; + case MM_REFERENCE: + bWriteFormula = false; + break; + case MM_FORMULA: + case MM_FAKE: + { + // origin of the matrix - find the used matrix range + SCCOL nMatWidth; + SCROW nMatHeight; + mrScFmlaCell.GetMatColsRows( nMatWidth, nMatHeight ); + OSL_ENSURE( nMatWidth && nMatHeight, "XclExpFormulaCell::XclExpFormulaCell - empty matrix" ); + ScRange aMatScRange( aScPos ); + ScAddress& rMatEnd = aMatScRange.aEnd; + rMatEnd.IncCol( static_cast< SCsCOL >( nMatWidth - 1 ) ); + rMatEnd.IncRow( static_cast< SCsROW >( nMatHeight - 1 ) ); + // reduce to valid range (range keeps valid, because start position IS valid + rStrm.GetRoot().GetAddressConverter().ValidateRange( aMatScRange, true ); + + OStringBuffer sFmlaCellRange; + if (ValidRange(aMatScRange)) + { + // calculate the cell range. + sFmlaCellRange.append( XclXmlUtils::ToOString( + rStrm.GetRoot().GetStringBuf(), aMatScRange.aStart ).getStr()); + sFmlaCellRange.append(":"); + sFmlaCellRange.append( XclXmlUtils::ToOString( + rStrm.GetRoot().GetStringBuf(), aMatScRange.aEnd ).getStr()); + } + + if ( aMatScRange.aStart.Col() == GetXclPos().mnCol && + aMatScRange.aStart.Row() == static_cast(GetXclPos().mnRow)) + { + rWorksheet->startElement( XML_f, + XML_aca, XclXmlUtils::ToPsz( (mxTokArr && mxTokArr->IsVolatile()) || + (mxAddRec && mxAddRec->IsVolatile())), + XML_t, mxAddRec ? "array" : NULL, + XML_ref, !sFmlaCellRange.isEmpty()? sFmlaCellRange.getStr() : NULL, + // OOXTODO: XML_dt2D, bool + // OOXTODO: XML_dtr, bool + // OOXTODO: XML_del1, bool + // OOXTODO: XML_del2, bool + // OOXTODO: XML_r1, ST_CellRef + // OOXTODO: XML_r2, ST_CellRef + // OOXTODO: XML_ca, bool + // OOXTODO: XML_si, uint + // OOXTODO: XML_bx bool + FSEND ); + bTagStarted = true; + } + } + break; + } + + if (bWriteFormula) + { + if (!bTagStarted) + { + rWorksheet->startElement( XML_f, + XML_aca, XclXmlUtils::ToPsz( (mxTokArr && mxTokArr->IsVolatile()) || + (mxAddRec && mxAddRec->IsVolatile()) ), + FSEND ); + } + rWorksheet->writeEscaped( XclXmlUtils::ToOUString( + rStrm.GetRoot().GetCompileFormulaContext(), mrScFmlaCell.aPos, mrScFmlaCell.GetCode())); + rWorksheet->endElement( XML_f ); + } + if( strcmp( sType, "inlineStr" ) == 0 ) { rWorksheet->startElement( XML_is, FSEND ); diff -Nru libreoffice-l10n-4.4.2/sc/source/filter/excel/xichart.cxx libreoffice-l10n-4.4.6~rc3/sc/source/filter/excel/xichart.cxx --- libreoffice-l10n-4.4.2/sc/source/filter/excel/xichart.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/filter/excel/xichart.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -818,36 +818,39 @@ { Reference< XDataSequence > xDataSeq; Reference< XDataProvider > xDataProv = GetDataProvider(); - if( xDataProv.is() && mxTokenArray ) + if( xDataProv.is() ) { - ScCompiler aComp( GetDocPtr(), ScAddress(), *mxTokenArray ); - aComp.SetGrammar(GetDoc().GetGrammar()); - OUStringBuffer aRangeRep; - aComp.CreateStringFromTokenArray( aRangeRep ); - try + if ( mxTokenArray ) { - xDataSeq = xDataProv->createDataSequenceByRangeRepresentation( aRangeRep.makeStringAndClear() ); - // set sequence role - ScfPropertySet aSeqProp( xDataSeq ); - aSeqProp.SetProperty( EXC_CHPROP_ROLE, rRole ); + ScCompiler aComp( GetDocPtr(), ScAddress(), *mxTokenArray ); + aComp.SetGrammar(GetDoc().GetGrammar()); + OUStringBuffer aRangeRep; + aComp.CreateStringFromTokenArray( aRangeRep ); + try + { + xDataSeq = xDataProv->createDataSequenceByRangeRepresentation( aRangeRep.makeStringAndClear() ); + // set sequence role + ScfPropertySet aSeqProp( xDataSeq ); + aSeqProp.SetProperty( EXC_CHPROP_ROLE, rRole ); + } + catch( Exception& ) + { + // OSL_FAIL( "XclImpChSourceLink::CreateDataSequence - cannot create data sequence" ); + } } - catch( Exception& ) + else if( rRole == EXC_CHPROP_ROLE_LABEL && mxString && !mxString->GetText().isEmpty() ) { -// OSL_FAIL( "XclImpChSourceLink::CreateDataSequence - cannot create data sequence" ); + try + { + OUString aString("\""); + xDataSeq = xDataProv->createDataSequenceByRangeRepresentation( aString + mxString->GetText() + aString ); + // set sequence role + ScfPropertySet aSeqProp( xDataSeq ); + aSeqProp.SetProperty( EXC_CHPROP_ROLE, rRole ); + } + catch( Exception& ) { } } } - else if( rRole == EXC_CHPROP_ROLE_LABEL && mxString && !mxString->GetText().isEmpty() ) - { - try - { - OUString aString("\""); - xDataSeq = xDataProv->createDataSequenceByRangeRepresentation( aString + mxString->GetText() + aString ); - // set sequence role - ScfPropertySet aSeqProp( xDataSeq ); - aSeqProp.SetProperty( EXC_CHPROP_ROLE, rRole ); - } - catch( Exception& ) { } - } return xDataSeq; } diff -Nru libreoffice-l10n-4.4.2/sc/source/filter/excel/xicontent.cxx libreoffice-l10n-4.4.6~rc3/sc/source/filter/excel/xicontent.cxx --- libreoffice-l10n-4.4.2/sc/source/filter/excel/xicontent.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/filter/excel/xicontent.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -75,10 +75,15 @@ void XclImpSst::ReadSst( XclImpStream& rStrm ) { rStrm.Ignore( 4 ); - sal_uInt32 nStrCount(0); - rStrm >> nStrCount; + sal_uInt32 nStrCount = rStrm.ReaduInt32(); + auto nBytesAvailable = rStrm.GetRecLeft(); + if (nStrCount > nBytesAvailable) + { + SAL_WARN("sc.filter", "xls claimed to have " << nStrCount << " strings, but only " << nBytesAvailable << " bytes available, truncating"); + nStrCount = nBytesAvailable; + } maStrings.clear(); - maStrings.reserve( static_cast< size_t >( nStrCount ) ); + maStrings.reserve(nStrCount); while( (nStrCount > 0) && rStrm.IsValid() ) { XclImpString aString; diff -Nru libreoffice-l10n-4.4.2/sc/source/filter/excel/xipivot.cxx libreoffice-l10n-4.4.6~rc3/sc/source/filter/excel/xipivot.cxx --- libreoffice-l10n-4.4.2/sc/source/filter/excel/xipivot.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/filter/excel/xipivot.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1026,13 +1026,19 @@ XclPTDataFieldInfoList::const_iterator aIt = maDataInfoList.begin(), aEnd = maDataInfoList.end(); - ScDPSaveDimension& rSaveDim = *rSaveData.GetNewDimensionByName(aFieldName); - ConvertDataField( rSaveDim, *aIt ); + ScDPSaveDimension* pSaveDim = rSaveData.GetNewDimensionByName(aFieldName); + if (!pSaveDim) + { + SAL_WARN("sc.filter","XclImpPTField::ConvertDataField - field name not found: " << aFieldName); + return; + } + + ConvertDataField( *pSaveDim, *aIt ); // multiple data fields -> clone dimension for( ++aIt; aIt != aEnd; ++aIt ) { - ScDPSaveDimension& rDupDim = rSaveData.DuplicateDimension( rSaveDim ); + ScDPSaveDimension& rDupDim = rSaveData.DuplicateDimension( *pSaveDim ); ConvertDataFieldInfo( rDupDim, *aIt ); } } diff -Nru libreoffice-l10n-4.4.2/sc/source/filter/inc/workbookhelper.hxx libreoffice-l10n-4.4.6~rc3/sc/source/filter/inc/workbookhelper.hxx --- libreoffice-l10n-4.4.2/sc/source/filter/inc/workbookhelper.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/filter/inc/workbookhelper.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -149,6 +149,7 @@ const ScDocument& getScDocument() const; ScDocumentImport& getDocImport(); + const ScDocumentImport& getDocImport() const; ScEditEngineDefaulter& getEditEngine() const; /** Returns a reference to the source/target spreadsheet document model. */ diff -Nru libreoffice-l10n-4.4.2/sc/source/filter/inc/worksheetbuffer.hxx libreoffice-l10n-4.4.6~rc3/sc/source/filter/inc/worksheetbuffer.hxx --- libreoffice-l10n-4.4.2/sc/source/filter/inc/worksheetbuffer.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/filter/inc/worksheetbuffer.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -24,6 +24,7 @@ #include #include #include "workbookhelper.hxx" +#include "documentimport.hxx" namespace com { namespace sun { namespace star { namespace i18n { class XCharacterClassification; } @@ -65,6 +66,8 @@ /** Returns the number of original sheets contained in the workbook. */ sal_Int32 getWorksheetCount() const; + /** Returns the number of all sheets, workbook + dummy ones (pivot table cache records ) */ + sal_Int32 getAllSheetCount() const; /** Returns the OOXML relation identifier of the specified worksheet. */ OUString getWorksheetRelId( sal_Int32 nWorksheet ) const; diff -Nru libreoffice-l10n-4.4.2/sc/source/filter/oox/excelfilter.cxx libreoffice-l10n-4.4.6~rc3/sc/source/filter/oox/excelfilter.cxx --- libreoffice-l10n-4.4.2/sc/source/filter/oox/excelfilter.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/filter/oox/excelfilter.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -102,24 +102,24 @@ try { + try + { + importDocumentProperties(); + } + catch( const Exception& e ) + { + SAL_WARN("sc", "exception when importing document properties " << e.Message); + } + catch( ... ) + { + SAL_WARN("sc", "exception when importing document properties"); + } /* Construct the WorkbookGlobals object referred to by every instance of the class WorkbookHelper, and execute the import filter by constructing an instance of WorkbookFragment and loading the file. */ WorkbookGlobalsRef xBookGlob(WorkbookHelper::constructGlobals(*this)); if (xBookGlob.get() && importFragment(new WorkbookFragment(*xBookGlob, aWorkbookPath))) { - try - { - importDocumentProperties(); - } - catch( const Exception& e ) - { - SAL_WARN("sc", "exception when importing document properties " << e.Message); - } - catch( ... ) - { - SAL_WARN("sc", "exception when importing document properties"); - } return true; } } diff -Nru libreoffice-l10n-4.4.2/sc/source/filter/oox/pivotcachefragment.cxx libreoffice-l10n-4.4.6~rc3/sc/source/filter/oox/pivotcachefragment.cxx --- libreoffice-l10n-4.4.2/sc/source/filter/oox/pivotcachefragment.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/filter/oox/pivotcachefragment.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -23,7 +23,9 @@ #include #include "addressconverter.hxx" #include "biffinputstream.hxx" +#include "formulabuffer.hxx" #include "pivotcachebuffer.hxx" +#include "worksheetbuffer.hxx" namespace oox { namespace xls { @@ -210,8 +212,12 @@ mnRowIdx( 0 ), mbInRecord( false ) { + sal_Int32 nSheetCount = rPivotCache.getWorksheets().getAllSheetCount(); + // prepare sheet: insert column header names into top row rPivotCache.writeSourceHeaderCells( *this ); + // resize formula buffers since we've added a new dummy sheet + rHelper.getFormulaBuffer().SetSheetCount( nSheetCount ); } ContextHandlerRef PivotCacheRecordsFragment::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) diff -Nru libreoffice-l10n-4.4.2/sc/source/filter/oox/stylesbuffer.cxx libreoffice-l10n-4.4.6~rc3/sc/source/filter/oox/stylesbuffer.cxx --- libreoffice-l10n-4.4.2/sc/source/filter/oox/stylesbuffer.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/filter/oox/stylesbuffer.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -982,7 +982,7 @@ // strike out style if( maUsedFlags.mbStrikeoutUsed ) { - ScfTools::PutItem( rItemSet, SvxCrossedOutItem( maModel.mbStrikeout ? STRIKEOUT_SINGLE : STRIKEOUT_NONE, bEdit ? EE_CHAR_STRIKEOUT : ATTR_FONT_CROSSEDOUT ), ATTR_FONT_CROSSEDOUT, bSkipPoolDefs ); + ScfTools::PutItem( rItemSet, SvxCrossedOutItem( maModel.mbStrikeout ? STRIKEOUT_SINGLE : STRIKEOUT_NONE, bEdit ? EE_CHAR_STRIKEOUT : ATTR_FONT_CROSSEDOUT ), bEdit ? EE_CHAR_STRIKEOUT : ATTR_FONT_CROSSEDOUT, bSkipPoolDefs ); } // outline style diff -Nru libreoffice-l10n-4.4.2/sc/source/filter/oox/workbookhelper.cxx libreoffice-l10n-4.4.6~rc3/sc/source/filter/oox/workbookhelper.cxx --- libreoffice-l10n-4.4.2/sc/source/filter/oox/workbookhelper.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/filter/oox/workbookhelper.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -794,6 +794,11 @@ return mrBookGlob.getDocImport(); } +const ScDocumentImport& WorkbookHelper::getDocImport() const +{ + return mrBookGlob.getDocImport(); +} + ScEditEngineDefaulter& WorkbookHelper::getEditEngine() const { return mrBookGlob.getEditEngine(); diff -Nru libreoffice-l10n-4.4.2/sc/source/filter/oox/worksheetbuffer.cxx libreoffice-l10n-4.4.6~rc3/sc/source/filter/oox/worksheetbuffer.cxx --- libreoffice-l10n-4.4.2/sc/source/filter/oox/worksheetbuffer.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/filter/oox/worksheetbuffer.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -84,6 +84,12 @@ return static_cast< sal_Int32 >( maSheetInfos.size() ); } +sal_Int32 WorksheetBuffer::getAllSheetCount() const +{ + const ScDocumentImport& rDoc = getDocImport(); + return rDoc.getSheetCount(); +} + OUString WorksheetBuffer::getWorksheetRelId( sal_Int32 nWorksheet ) const { const SheetInfo* pSheetInfo = maSheetInfos.get( nWorksheet ).get(); diff -Nru libreoffice-l10n-4.4.2/sc/source/filter/xml/xmlexprt.cxx libreoffice-l10n-4.4.6~rc3/sc/source/filter/xml/xmlexprt.cxx --- libreoffice-l10n-4.4.2/sc/source/filter/xml/xmlexprt.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/filter/xml/xmlexprt.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -3714,9 +3714,12 @@ pCurrentCell = &rMyCell; SdrCaptionObj* pNoteCaption = pNote->GetOrCreateCaption(rMyCell.maCellAddress); - Reference xShape( pNoteCaption->getUnoShape(), uno::UNO_QUERY ); - - GetShapeExport()->exportShape(xShape, SEF_DEFAULT|SEF_EXPORT_ANNOTATION, NULL); + if (pNoteCaption) + { + Reference xShape( pNoteCaption->getUnoShape(), uno::UNO_QUERY ); + if (xShape.is()) + GetShapeExport()->exportShape(xShape, SEF_DEFAULT|SEF_EXPORT_ANNOTATION, NULL); + } pCurrentCell = NULL; diff -Nru libreoffice-l10n-4.4.2/sc/source/filter/xml/xmlimprt.cxx libreoffice-l10n-4.4.6~rc3/sc/source/filter/xml/xmlimprt.cxx --- libreoffice-l10n-4.4.2/sc/source/filter/xml/xmlimprt.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/filter/xml/xmlimprt.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -2593,6 +2593,9 @@ OUString sCTName("TrackedChangesProtectionKey"); OUString sVBName("VBACompatibilityMode"); OUString sSCName("ScriptConfiguration"); + css::uno::Sequence aFilteredProps( + aConfigProps.getLength()); + sal_Int32 nFilteredPropsLen = 0; for (sal_Int32 i = nCount - 1; i >= 0; --i) { if (aConfigProps[i].Name == sCTName) @@ -2627,11 +2630,16 @@ xImportInfo->setPropertyValue( aConfigProps[i].Name, aConfigProps[i].Value ); } } + if (aConfigProps[i].Name != "LinkUpdateMode") + { + aFilteredProps[nFilteredPropsLen++] = aConfigProps[i]; + } } + aFilteredProps.realloc(nFilteredPropsLen); uno::Reference xInterface = xMultiServiceFactory->createInstance("com.sun.star.comp.SpreadsheetSettings"); uno::Reference xProperties(xInterface, uno::UNO_QUERY); if (xProperties.is()) - SvXMLUnitConverter::convertPropertySet(xProperties, aConfigProps); + SvXMLUnitConverter::convertPropertySet(xProperties, aFilteredProps); } } } diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/Accessibility/AccessibleDocument.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/Accessibility/AccessibleDocument.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/Accessibility/AccessibleDocument.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/Accessibility/AccessibleDocument.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -813,8 +813,9 @@ std::vector < uno::Reference < drawing::XShape > > aShapes; FillShapes(aShapes); - if(aShapes.size()<=0) + if (nSelectedChildIndex < 0 || static_cast(nSelectedChildIndex) >= aShapes.size()) return xAccessible; + SortedShapes::iterator aItr; if (FindShape(aShapes[nSelectedChildIndex], aItr)) xAccessible = Get(aItr - maZOrderedShapes.begin()); diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/Accessibility/AccessibleEditObject.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/Accessibility/AccessibleEditObject.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/Accessibility/AccessibleEditObject.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/Accessibility/AccessibleEditObject.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -372,13 +372,21 @@ ::std::unique_ptr< SvxEditSource > pEditSource (new ScAccessibilityEditSource(std::move(pAccessibleTextData))); mpTextHelper = new ::accessibility::AccessibleTextHelper(std::move(pEditSource)); mpTextHelper->SetEventSource(this); - mpTextHelper->SetFocus(mbHasFocus); + + const ScInputHandler* pInputHdl = SC_MOD()->GetInputHdl(); + if ( pInputHdl && pInputHdl->IsEditMode() ) + { + mpTextHelper->SetFocus(true); + } + else + { + mpTextHelper->SetFocus(mbHasFocus); + } // #i54814# activate cell in edit mode if( meObjectType == CellInEditMode ) { // do not activate cell object, if top edit line is active - const ScInputHandler* pInputHdl = SC_MOD()->GetInputHdl(); if( pInputHdl && !pInputHdl->IsTopMode() ) { SdrHint aHint( HINT_BEGEDIT ); diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/app/inputhdl.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/app/inputhdl.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/app/inputhdl.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/app/inputhdl.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -799,8 +799,7 @@ aManualTip.clear(); } -void ScInputHandler::ShowArgumentsTip( const OUString& rParagraph, OUString& rSelText, const ESelection& rSel, - bool bTryFirstSel ) +void ScInputHandler::ShowArgumentsTip( OUString& rSelText ) { ScDocShell* pDocSh = pActiveViewSh->GetViewData().GetDocShell(); const sal_Unicode cSep = ScCompiler::GetNativeSymbolChar(ocSep); @@ -927,34 +926,6 @@ } } } - else if (bTryFirstSel) - { - sal_Int32 nPosition = 0; - OUString aText = pEngine->GetWord( 0, rSel.nEndPos-1 ); - /* XXX: dubious, what is this condition supposed to exactly match? */ - if (rSel.nEndPos <= aText.getLength() && aText[ rSel.nEndPos-1 ] == '=') - { - break; - } - OUString aNew; - nPosition = aText.getLength()+1; - ScTypedCaseStrSet::const_iterator it = - findText(*pFormulaDataPara, pFormulaDataPara->end(), aText, aNew, false); - if (it != pFormulaDataPara->end()) - { - if( nPosition < rParagraph.getLength() && rParagraph[ nPosition ] =='(' ) - { - ShowTipBelow( aNew ); - bFound = true; - } - else - break; - } - else - { - break; - } - } else { break; @@ -981,7 +952,7 @@ { OUString aSelText( aParagraph.copy( 0, aSel.nEndPos )); - ShowArgumentsTip( aParagraph, aSelText, aSel, true); + ShowArgumentsTip( aSelText ); } } } @@ -1077,6 +1048,12 @@ if ( aSel.nEndPos > aParagraph.getLength() ) return; + if ( aParagraph.getLength() > aSel.nEndPos && + ( ScGlobal::pCharClass->isLetterNumeric( aParagraph, aSel.nEndPos ) || + aParagraph[ aSel.nEndPos ] == '_' || + aParagraph[ aSel.nEndPos ] == '.' ) ) + return; + // Is the cursor at the end of a word? if ( aSel.nEndPos > 0 ) { @@ -1092,6 +1069,16 @@ miAutoPosFormula = findText(*pFormulaData, miAutoPosFormula, aText, aNew, false); if (miAutoPosFormula != pFormulaData->end()) { + // check if partial function name is not Between quotes + bool bBetweenQuotes = false; + for ( int n = 0; n < aSelText.getLength(); n++ ) + { + if ( aSelText[ n ] == '"' ) + bBetweenQuotes = !bBetweenQuotes; + } + if ( bBetweenQuotes ) + return; // we're between quotes + if (aNew[aNew.getLength()-1] == cParenthesesReplacement) aNew = aNew.copy( 0, aNew.getLength()-1) + "()"; ShowTip( aNew ); @@ -1102,7 +1089,7 @@ // function name is complete: // show tip below the cell with function name and arguments of function - ShowArgumentsTip( aParagraph, aSelText, aSel, false); + ShowArgumentsTip( aSelText ); } } } diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/cctrl/tbinsert.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/cctrl/tbinsert.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/cctrl/tbinsert.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/cctrl/tbinsert.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -98,7 +98,7 @@ return nLastSlotId ? SFX_POPUPWINDOW_ONTIMEOUT : SFX_POPUPWINDOW_ONCLICK; } -void ScTbxInsertCtrl::Select( bool /* bMod1 */ ) +void ScTbxInsertCtrl::Select( sal_uInt16 /*nSelectModifier*/ ) { SfxViewShell* pCurSh( SfxViewShell::Current() ); SfxDispatcher* pDispatch( 0 ); diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/docshell/dbdocfun.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/docshell/dbdocfun.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/docshell/dbdocfun.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/docshell/dbdocfun.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -568,11 +568,17 @@ } pDBData->SetSortParam(rSortParam); + // Remember additional settings on anonymous database ranges. + if (pDBData == rDoc.GetAnonymousDBData( nTab) || rDoc.GetDBCollection()->getAnonDBs().has( pDBData)) + pDBData->UpdateFromSortParam( rSortParam); - ScRange aDirtyRange( - aLocalParam.nCol1, nStartRow, nTab, - aLocalParam.nCol2, aLocalParam.nRow2, nTab); - rDoc.SetDirty( aDirtyRange, true ); + if (nStartRow <= aLocalParam.nRow2) + { + ScRange aDirtyRange( + aLocalParam.nCol1, nStartRow, nTab, + aLocalParam.nCol2, aLocalParam.nRow2, nTab); + rDoc.SetDirty( aDirtyRange, true ); + } if (bPaint) { @@ -590,7 +596,7 @@ rDocShell.PostPaint(ScRange(nStartX, nStartY, nTab, nEndX, nEndY, nTab), nPaint); } - if (!bUniformRowHeight) + if (!bUniformRowHeight && nStartRow <= aLocalParam.nRow2) rDocShell.AdjustRowHeight(nStartRow, aLocalParam.nRow2, nTab); aModificator.SetDocumentModified(); diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/docshell/docsh4.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/docshell/docsh4.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/docshell/docsh4.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/docshell/docsh4.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -48,6 +48,7 @@ #include #include #include +#include #include #include "docuno.hxx" @@ -109,9 +110,6 @@ static_cast((set).Get(ATTR_PAGE_FOOTERSET)).GetItemSet(). \ Get(ATTR_PAGE_SHARED)).GetValue() -#define SC_PREVIEW_SIZE_X 10000 -#define SC_PREVIEW_SIZE_Y 12400 - void ScDocShell::Execute( SfxRequest& rReq ) { // SID_SC_RANGE (Range), @@ -422,12 +420,23 @@ if (nCanUpdate == com::sun::star::document::UpdateDocMode::NO_UPDATE) nSet = LM_NEVER; - else if (nCanUpdate == com::sun::star::document::UpdateDocMode::QUIET_UPDATE && - nSet == LM_ON_DEMAND) - nSet = LM_NEVER; else if (nCanUpdate == com::sun::star::document::UpdateDocMode::FULL_UPDATE) nSet = LM_ALWAYS; + if (nSet == LM_ALWAYS + && !(SvtSecurityOptions() + .isTrustedLocationUriForUpdatingLinks( + GetMedium() == nullptr + ? OUString() : GetMedium()->GetName()))) + { + nSet = LM_ON_DEMAND; + } + if (nCanUpdate == css::document::UpdateDocMode::QUIET_UPDATE + && nSet == LM_ON_DEMAND) + { + nSet = LM_NEVER; + } + if(nSet==LM_ON_DEMAND) { QueryBox aBox( GetActiveDialogParent(), WinBits(WB_YES_NO | WB_DEF_YES), @@ -1900,7 +1909,16 @@ if( nAspect == ASPECT_THUMBNAIL ) { - Rectangle aArea( 0,0, SC_PREVIEW_SIZE_X,SC_PREVIEW_SIZE_Y ); + Size aSize = aDocument.GetPageSize(aDocument.GetVisibleTab()); + const long SC_PREVIEW_SIZE_X = 10000; + const long SC_PREVIEW_SIZE_Y = 12400; + Rectangle aArea( 0,0, SC_PREVIEW_SIZE_X, SC_PREVIEW_SIZE_Y); + if (aSize.Width() > aSize.Height()) + { + aArea.Right() = SC_PREVIEW_SIZE_Y; + aArea.Bottom() = SC_PREVIEW_SIZE_X; + } + bool bNegativePage = aDocument.IsNegativePage( aDocument.GetVisibleTab() ); if ( bNegativePage ) ScDrawLayer::MirrorRectRTL( aArea ); diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/docshell/externalrefmgr.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/docshell/externalrefmgr.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/docshell/externalrefmgr.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/docshell/externalrefmgr.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -55,6 +55,7 @@ #include "scmatrix.hxx" #include #include +#include #include #include @@ -2355,6 +2356,21 @@ // make medium hidden to prevent assertion from progress bar pSet->Put( SfxBoolItem(SID_HIDDEN, true) ); + // If the current document is allowed to execute macros then the referenced + // document may execute macros according to the security configuration. + SfxObjectShell* pShell = mpDoc->GetDocumentShell(); + if (pShell) + { + SfxMedium* pMedium = pShell->GetMedium(); + if (pMedium) + { + const SfxPoolItem* pItem; + if (pMedium->GetItemSet()->GetItemState( SID_MACROEXECMODE, false, &pItem ) == SfxItemState::SET && + static_cast(pItem)->GetValue() != css::document::MacroExecMode::NEVER_EXECUTE) + pSet->Put( SfxUInt16Item( SID_MACROEXECMODE, css::document::MacroExecMode::USE_CONFIG)); + } + } + unique_ptr pMedium(new SfxMedium(aFile, STREAM_STD_READ, pFilter, pSet)); if (pMedium->GetError() != ERRCODE_NONE) return NULL; diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/drawfunc/futext.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/drawfunc/futext.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/drawfunc/futext.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/drawfunc/futext.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -735,6 +735,12 @@ //!?? ohne uebergebenen Outliner stimmen die Defaults nicht ???!? if ( pView->SdrBeginTextEdit(pObj, pPV, pWindow, true, pO) ) { + // Toggle out of paste mode if we are in it, otherwise + // pressing return in this object will instead go to the + // sheet and be considered an overwrite-cell instruction + pViewShell->GetViewData().SetPasteMode(SC_PASTE_NONE); + pViewShell->UpdateCopySourceOverlay(); + // EditEngine-UndoManager anmelden pViewShell->SetDrawTextUndo( &pO->GetUndoManager() ); diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/inc/inputhdl.hxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/inc/inputhdl.hxx --- libreoffice-l10n-4.4.2/sc/source/ui/inc/inputhdl.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/inc/inputhdl.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -156,8 +156,7 @@ bool CursorAtClosingPar(); void SkipClosingPar(); bool GetFuncName( OUString& aStart, OUString& aResult ); // fdo75264 - void ShowArgumentsTip( const OUString& rParagraph, OUString& rSelText, const ESelection& rSel, - bool bTryFirstSel ); + void ShowArgumentsTip( OUString& rSelText ); DECL_LINK( ModifyHdl, void* ); DECL_LINK( ShowHideTipVisibleParentListener, VclWindowEvent* ); DECL_LINK( ShowHideTipVisibleSecParentListener, VclWindowEvent* ); diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/inc/RandomNumberGeneratorDialog.hxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/inc/RandomNumberGeneratorDialog.hxx --- libreoffice-l10n-4.4.2/sc/source/ui/inc/RandomNumberGeneratorDialog.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/inc/RandomNumberGeneratorDialog.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -75,6 +75,7 @@ DECL_LINK( GetFocusHandler, Control* ); DECL_LINK( LoseFocusHandler, void* ); + DECL_LINK( InputRangeModified, void* ); DECL_LINK( Parameter1ValueModified, void* ); DECL_LINK( Parameter2ValueModified, void* ); DECL_LINK( DistributionChanged, void* ); diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/inc/SamplingDialog.hxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/inc/SamplingDialog.hxx --- libreoffice-l10n-4.4.2/sc/source/ui/inc/SamplingDialog.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/inc/SamplingDialog.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -76,6 +76,7 @@ DECL_LINK( LoseFocusHandler, void* ); DECL_LINK( SamplingSizeValueModified, void* ); DECL_LINK( ToggleSamplingMethod, void* ); + DECL_LINK( RefInputModifyHandler, void* ); }; #endif diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/inc/StatisticsInputOutputDialog.hxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/inc/StatisticsInputOutputDialog.hxx --- libreoffice-l10n-4.4.2/sc/source/ui/inc/StatisticsInputOutputDialog.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/inc/StatisticsInputOutputDialog.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -82,6 +82,7 @@ DECL_LINK( OkClicked, PushButton* ); DECL_LINK( GetFocusHandler, Control* ); DECL_LINK( LoseFocusHandler, void* ); + DECL_LINK( RefInputModifyHandler, void* ); }; #endif diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/inc/StatisticsTwoVariableDialog.hxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/inc/StatisticsTwoVariableDialog.hxx --- libreoffice-l10n-4.4.2/sc/source/ui/inc/StatisticsTwoVariableDialog.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/inc/StatisticsTwoVariableDialog.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -85,6 +85,7 @@ DECL_LINK( OkClicked, PushButton* ); DECL_LINK( GetFocusHandler, Control* ); DECL_LINK( LoseFocusHandler, void* ); + DECL_LINK( RefInputModifyHandler, void* ); }; #endif diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/inc/tbinsert.hxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/inc/tbinsert.hxx --- libreoffice-l10n-4.4.2/sc/source/ui/inc/tbinsert.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/inc/tbinsert.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -25,9 +25,7 @@ class ScTbxInsertCtrl : public SfxToolBoxControl { sal_uInt16 nLastSlotId; - - using SfxToolBoxControl::Select; - virtual void Select( bool bMod1 = false ); + virtual void Select( sal_uInt16 nSelectModifier ) SAL_OVERRIDE; public: SFX_DECL_TOOLBOX_CONTROL(); diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/miscdlgs/scuiautofmt.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/miscdlgs/scuiautofmt.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/miscdlgs/scuiautofmt.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/miscdlgs/scuiautofmt.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -211,7 +211,7 @@ { aFormatName = pDlg->GetInputString(); - if ( !aFormatName.isEmpty() && !aFormatName.equals(aStrStandard) ) + if ( !aFormatName.isEmpty() && !aFormatName.equals(aStrStandard) && pFormat->find(aFormatName) == pFormat->end() ) { ScAutoFormatData* pNewData = new ScAutoFormatData( *pSelFmtData ); diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/StatisticsDialogs/AnalysisOfVarianceDialog.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/StatisticsDialogs/AnalysisOfVarianceDialog.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/StatisticsDialogs/AnalysisOfVarianceDialog.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/StatisticsDialogs/AnalysisOfVarianceDialog.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -190,7 +190,7 @@ output.newLine(); double aAlphaValue = mpAlphaField->GetValue() / 100.0; - output.writeString("Alpha"); + output.writeString(SC_STRLOAD(RID_STATISTICS_DLGS, STR_LABEL_ALPHA)); output.nextColumn(); output.writeValue(aAlphaValue); aTemplate.autoReplaceAddress("%ALPHA%", output.current()); diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -104,6 +104,7 @@ mpInputRangeEdit->SetLoseFocusHdl ( aLink ); mpInputRangeButton->SetLoseFocusHdl ( aLink ); + mpInputRangeEdit->SetModifyHdl( LINK( this, ScRandomNumberGeneratorDialog, InputRangeModified )); mpParameter1Value->SetModifyHdl( LINK( this, ScRandomNumberGeneratorDialog, Parameter1ValueModified )); mpParameter2Value->SetModifyHdl( LINK( this, ScRandomNumberGeneratorDialog, Parameter2ValueModified )); @@ -157,11 +158,17 @@ OUString aReferenceString(maInputRange.Format(SCR_ABS_3D, pDoc, pDoc->GetAddressConvention())); mpInputRangeEdit->SetRefString( aReferenceString ); + + mpButtonApply->Enable(); + mpButtonOk->Enable(); } } void ScRandomNumberGeneratorDialog::SelectGeneratorAndGenerateNumbers() { + if (!maInputRange.IsValid()) + return; + sal_Int16 aSelectedIndex = mpDistributionCombo-> GetSelectEntryPos(); sal_Int64 aSelectedId = reinterpret_cast(mpDistributionCombo->GetEntryData(aSelectedIndex)); @@ -344,6 +351,28 @@ return 0; } +IMPL_LINK_NOARG(ScRandomNumberGeneratorDialog, InputRangeModified) +{ + ScRangeList aRangeList; + bool bValid = ParseWithNames( aRangeList, mpInputRangeEdit->GetText(), mpDoc); + const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr; + if (pRange) + { + maInputRange = *pRange; + mpButtonApply->Enable(); + mpButtonOk->Enable(); + // Highlight the resulting range. + mpInputRangeEdit->StartUpdateData(); + } + else + { + maInputRange = ScRange( ScAddress::INITIALIZE_INVALID); + mpButtonApply->Disable(); + mpButtonOk->Disable(); + } + return 0; +} + IMPL_LINK_NOARG(ScRandomNumberGeneratorDialog, Parameter1ValueModified) { sal_Int16 aSelectedIndex = mpDistributionCombo-> GetSelectEntryPos(); diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -32,7 +32,9 @@ mpActiveEdit ( NULL ), mViewData ( pViewData ), mDocument ( pViewData->GetDocument() ), + mInputRange ( ScAddress::INITIALIZE_INVALID ), mAddressDetails ( mDocument->GetAddressConvention(), 0, 0 ), + mOutputAddress ( ScAddress::INITIALIZE_INVALID ), mCurrentAddress ( pViewData->GetCurX(), pViewData->GetCurY(), pViewData->GetTabNo() ), mDialogLostFocus( false ) { @@ -77,6 +79,10 @@ mpOutputRangeEdit->SetLoseFocusHdl( aLink ); mpOutputRangeButton->SetLoseFocusHdl( aLink ); + aLink = LINK( this, ScSamplingDialog, RefInputModifyHandler); + mpInputRangeEdit->SetModifyHdl( aLink); + mpOutputRangeEdit->SetModifyHdl( aLink); + mpSampleSize->SetModifyHdl( LINK( this, ScSamplingDialog, SamplingSizeValueModified )); mpPeriodicMethodRadio->SetToggleHdl( LINK( this, ScSamplingDialog, ToggleSamplingMethod ) ); @@ -149,11 +155,12 @@ if (aSelectedSampleSize > 1) mpSampleSize->SetValue(aSelectedSampleSize); SamplingSizeValueModified(NULL); - - // Enable OK, Cancel if output range is set - mpButtonOk->Enable(!mpOutputRangeEdit->GetText().isEmpty()); } } + + // Enable OK if both, input range and output address are set. + if (mInputRange.IsValid() && mOutputAddress.IsValid()) + mpButtonOk->Enable(); } ScRange ScSamplingDialog::PerformPeriodicSampling(ScDocShell* pDocShell) @@ -313,4 +320,66 @@ return 0; } +IMPL_LINK_NOARG(ScSamplingDialog, RefInputModifyHandler) +{ + if ( mpActiveEdit ) + { + if ( mpActiveEdit == mpInputRangeEdit ) + { + ScRangeList aRangeList; + bool bValid = ParseWithNames( aRangeList, mpInputRangeEdit->GetText(), mDocument); + const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr; + if (pRange) + { + mInputRange = *pRange; + // Highlight the resulting range. + mpInputRangeEdit->StartUpdateData(); + } + else + { + mInputRange = ScRange( ScAddress::INITIALIZE_INVALID); + } + } + else if ( mpActiveEdit == mpOutputRangeEdit ) + { + ScRangeList aRangeList; + bool bValid = ParseWithNames( aRangeList, mpOutputRangeEdit->GetText(), mDocument); + const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr; + if (pRange) + { + mOutputAddress = pRange->aStart; + + // Crop output range to top left address for Edit field. + if (pRange->aStart != pRange->aEnd) + { + sal_uInt16 nFormat = ( mOutputAddress.Tab() == mCurrentAddress.Tab() ) ? SCA_ABS : SCA_ABS_3D; + OUString aReferenceString = mOutputAddress.Format(nFormat, mDocument, mDocument->GetAddressConvention()); + mpOutputRangeEdit->SetRefString( aReferenceString ); + } + + // Change sampling size according to output range selection + sal_Int64 aSelectedSampleSize = pRange->aEnd.Row() - pRange->aStart.Row() + 1; + if (aSelectedSampleSize > 1) + mpSampleSize->SetValue(aSelectedSampleSize); + SamplingSizeValueModified(NULL); + + // Highlight the resulting range. + mpOutputRangeEdit->StartUpdateData(); + } + else + { + mOutputAddress = ScAddress( ScAddress::INITIALIZE_INVALID); + } + } + } + + // Enable OK if both, input range and output address are set. + if (mInputRange.IsValid() && mOutputAddress.IsValid()) + mpButtonOk->Enable(); + else + mpButtonOk->Disable(); + + return 0; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -59,7 +59,9 @@ ScAnyRefDlg ( pSfxBindings, pChildWindow, pParent, rID, rUIXMLDescription ), mViewData ( pViewData ), mDocument ( pViewData->GetDocument() ), + mInputRange ( ScAddress::INITIALIZE_INVALID ), mAddressDetails ( mDocument->GetAddressConvention(), 0, 0 ), + mOutputAddress ( ScAddress::INITIALIZE_INVALID ), mGroupedBy ( BY_COLUMN ), mpActiveEdit ( NULL ), mCurrentAddress ( pViewData->GetCurX(), pViewData->GetCurY(), pViewData->GetTabNo() ), @@ -106,6 +108,10 @@ mpOutputRangeEdit->SetLoseFocusHdl( aLink ); mpOutputRangeButton->SetLoseFocusHdl( aLink ); + aLink = LINK( this, ScStatisticsInputOutputDialog, RefInputModifyHandler); + mpInputRangeEdit->SetModifyHdl( aLink); + mpOutputRangeEdit->SetModifyHdl( aLink); + mpOutputRangeEdit->GrabFocus(); mpGroupByColumnsRadio->SetToggleHdl( LINK( this, ScStatisticsInputOutputDialog, GroupByChanged ) ); @@ -159,11 +165,14 @@ sal_uInt16 nFormat = ( mOutputAddress.Tab() == mCurrentAddress.Tab() ) ? SCA_ABS : SCA_ABS_3D; aReferenceString = mOutputAddress.Format(nFormat, pDocument, pDocument->GetAddressConvention()); mpOutputRangeEdit->SetRefString( aReferenceString ); - - // Enable OK, Cancel if output range is set - mpButtonOk->Enable(!mpOutputRangeEdit->GetText().isEmpty()); } } + + // Enable OK if both, input range and output address are set. + if (mInputRange.IsValid() && mOutputAddress.IsValid()) + mpButtonOk->Enable(); + else + mpButtonOk->Disable(); } IMPL_LINK( ScStatisticsInputOutputDialog, OkClicked, PushButton*, /*pButton*/ ) @@ -203,6 +212,62 @@ return 0; } + +IMPL_LINK_NOARG( ScStatisticsInputOutputDialog, RefInputModifyHandler ) +{ + if ( mpActiveEdit ) + { + if ( mpActiveEdit == mpInputRangeEdit ) + { + ScRangeList aRangeList; + bool bValid = ParseWithNames( aRangeList, mpInputRangeEdit->GetText(), mDocument); + const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr; + if (pRange) + { + mInputRange = *pRange; + // Highlight the resulting range. + mpInputRangeEdit->StartUpdateData(); + } + else + { + mInputRange = ScRange( ScAddress::INITIALIZE_INVALID); + } + } + else if ( mpActiveEdit == mpOutputRangeEdit ) + { + ScRangeList aRangeList; + bool bValid = ParseWithNames( aRangeList, mpOutputRangeEdit->GetText(), mDocument); + const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr; + if (pRange) + { + mOutputAddress = pRange->aStart; + + // Crop output range to top left address for Edit field. + if (pRange->aStart != pRange->aEnd) + { + sal_uInt16 nFormat = ( mOutputAddress.Tab() == mCurrentAddress.Tab() ) ? SCA_ABS : SCA_ABS_3D; + OUString aReferenceString = mOutputAddress.Format(nFormat, mDocument, mDocument->GetAddressConvention()); + mpOutputRangeEdit->SetRefString( aReferenceString ); + } + + // Highlight the resulting range. + mpOutputRangeEdit->StartUpdateData(); + } + else + { + mOutputAddress = ScAddress( ScAddress::INITIALIZE_INVALID); + } + } + } + + // Enable OK if both, input range and output address are set. + if (mInputRange.IsValid() && mOutputAddress.IsValid()) + mpButtonOk->Enable(); + else + mpButtonOk->Disable(); + + return 0; +} void ScStatisticsInputOutputDialog::CalculateInputAndWriteToOutput() { diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -31,7 +31,10 @@ ScAnyRefDlg ( pSfxBindings, pChildWindow, pParent, rID, rUIXMLDescription ), mViewData ( pViewData ), mDocument ( pViewData->GetDocument() ), + mVariable1Range ( ScAddress::INITIALIZE_INVALID ), + mVariable2Range ( ScAddress::INITIALIZE_INVALID ), mAddressDetails ( mDocument->GetAddressConvention(), 0, 0 ), + mOutputAddress ( ScAddress::INITIALIZE_INVALID ), mGroupedBy ( BY_COLUMN ), mpActiveEdit ( NULL ), mCurrentAddress ( pViewData->GetCurX(), pViewData->GetCurY(), pViewData->GetTabNo() ), @@ -88,6 +91,11 @@ mpOutputRangeEdit->SetLoseFocusHdl( aLink ); mpOutputRangeButton->SetLoseFocusHdl( aLink ); + aLink = LINK( this, ScStatisticsTwoVariableDialog, RefInputModifyHandler); + mpVariable1RangeEdit->SetModifyHdl( aLink); + mpVariable2RangeEdit->SetModifyHdl( aLink); + mpOutputRangeEdit->SetModifyHdl( aLink); + mpOutputRangeEdit->GrabFocus(); mpGroupByColumnsRadio->SetToggleHdl( LINK( this, ScStatisticsTwoVariableDialog, GroupByChanged ) ); @@ -167,11 +175,14 @@ sal_uInt16 nFormat = ( mOutputAddress.Tab() == mCurrentAddress.Tab() ) ? SCA_ABS : SCA_ABS_3D; aReferenceString = mOutputAddress.Format(nFormat, pDocument, pDocument->GetAddressConvention()); mpOutputRangeEdit->SetRefString( aReferenceString ); - - // Enable OK, Cancel if output range is set - mpButtonOk->Enable(!mpOutputRangeEdit->GetText().isEmpty()); } } + + // Enable OK if all ranges are set. + if (mVariable1Range.IsValid() && mVariable2Range.IsValid() && mOutputAddress.IsValid()) + mpButtonOk->Enable(); + else + mpButtonOk->Disable(); } IMPL_LINK( ScStatisticsTwoVariableDialog, OkClicked, PushButton*, /*pButton*/ ) @@ -221,6 +232,78 @@ return 0; } + +IMPL_LINK_NOARG( ScStatisticsTwoVariableDialog, RefInputModifyHandler ) +{ + if ( mpActiveEdit ) + { + if ( mpActiveEdit == mpVariable1RangeEdit ) + { + ScRangeList aRangeList; + bool bValid = ParseWithNames( aRangeList, mpVariable1RangeEdit->GetText(), mDocument); + const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr; + if (pRange) + { + mVariable1Range = *pRange; + // Highlight the resulting range. + mpVariable1RangeEdit->StartUpdateData(); + } + else + { + mVariable1Range = ScRange( ScAddress::INITIALIZE_INVALID); + } + } + else if ( mpActiveEdit == mpVariable2RangeEdit ) + { + ScRangeList aRangeList; + bool bValid = ParseWithNames( aRangeList, mpVariable2RangeEdit->GetText(), mDocument); + const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr; + if (pRange) + { + mVariable2Range = *pRange; + // Highlight the resulting range. + mpVariable2RangeEdit->StartUpdateData(); + } + else + { + mVariable2Range = ScRange( ScAddress::INITIALIZE_INVALID); + } + } + else if ( mpActiveEdit == mpOutputRangeEdit ) + { + ScRangeList aRangeList; + bool bValid = ParseWithNames( aRangeList, mpOutputRangeEdit->GetText(), mDocument); + const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr; + if (pRange) + { + mOutputAddress = pRange->aStart; + + // Crop output range to top left address for Edit field. + if (pRange->aStart != pRange->aEnd) + { + sal_uInt16 nFormat = ( mOutputAddress.Tab() == mCurrentAddress.Tab() ) ? SCA_ABS : SCA_ABS_3D; + OUString aReferenceString = mOutputAddress.Format(nFormat, mDocument, mDocument->GetAddressConvention()); + mpOutputRangeEdit->SetRefString( aReferenceString ); + } + + // Highlight the resulting range. + mpOutputRangeEdit->StartUpdateData(); + } + else + { + mOutputAddress = ScAddress( ScAddress::INITIALIZE_INVALID); + } + } + } + + // Enable OK if all ranges are set. + if (mVariable1Range.IsValid() && mVariable2Range.IsValid() && mOutputAddress.IsValid()) + mpButtonOk->Enable(); + else + mpButtonOk->Disable(); + + return 0; +} void ScStatisticsTwoVariableDialog::CalculateInputAndWriteToOutput() { diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/undo/undoblk.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/undo/undoblk.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/undo/undoblk.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/undo/undoblk.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1239,7 +1239,14 @@ // do not undo objects and note captions, they are handled via drawing undo InsertDeleteFlags nUndoFlags = (IDF_ALL & ~IDF_OBJECTS) | IDF_NOCAPTIONS; - rDoc.DeleteAreaTab( aRange, nUndoFlags ); + // Additionally discard/forget caption ownership during deletion, as + // Drag&Drop is a special case in that the Undo holds captions of the + // transfered target range, which would get deleted and + // SdrGroupUndo::Undo() would attempt to access invalidated captions and + // crash, tdf#92995 + InsertDeleteFlags nDelFlags = nUndoFlags | IDF_FORGETCAPTIONS; + + rDoc.DeleteAreaTab( aRange, nDelFlags ); pRefUndoDoc->CopyToDocument( aRange, nUndoFlags, false, &rDoc ); if ( rDoc.HasAttrib( aRange, HASATTR_MERGED ) ) rDoc.ExtendMerge( aRange, true ); diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/view/cellsh1.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/view/cellsh1.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/view/cellsh1.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/view/cellsh1.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1016,7 +1016,7 @@ case SID_SEARCH_RESULTS_DIALOG: { const SfxPoolItem* pItem = NULL; - if (pReqArgs->HasItem(SID_SEARCH_RESULTS_DIALOG, &pItem)) + if (pReqArgs && pReqArgs->HasItem(SID_SEARCH_RESULTS_DIALOG, &pItem)) { bool bVisible = static_cast(pItem)->GetValue(); SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame(); diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/view/cellsh2.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/view/cellsh2.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/view/cellsh2.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/view/cellsh2.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -979,6 +979,7 @@ aImport.SetExtOptions( aOptions ); aImport.SetApi( false ); aImport.SetImportBroadcast( true ); + aImport.SetOverwriting( true ); aStream.Seek( 0 ); aImport.ImportStream( aStream, OUString(), FORMAT_STRING ); diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/view/gridwin4.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/view/gridwin4.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/view/gridwin4.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/view/gridwin4.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -693,6 +693,11 @@ aOutputData.DrawShadow(); aOutputData.DrawFrame(); + + // Show Note Mark + if ( rOpts.GetOption( VOPT_NOTES ) ) + aOutputData.DrawNoteMarks(); + if ( !bLogicText ) aOutputData.DrawStrings(false); // in pixel MapMode @@ -709,11 +714,6 @@ DrawButtons( nX1, nX2, aTabInfo, pContentDev ); // Pixel - // Notiz-Anzeiger - - if ( rOpts.GetOption( VOPT_NOTES ) ) - aOutputData.DrawNoteMarks(); - aOutputData.DrawClipMarks(); // Szenario / ChangeTracking muss auf jeden Fall nach DrawGrid sein, auch bei !bGridFirst diff -Nru libreoffice-l10n-4.4.2/sc/source/ui/view/output2.cxx libreoffice-l10n-4.4.6~rc3/sc/source/ui/view/output2.cxx --- libreoffice-l10n-4.4.2/sc/source/ui/view/output2.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sc/source/ui/view/output2.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -2012,32 +2012,40 @@ OUString aShort = aString; - double fVisibleRatio = 1.0; - double fTextWidth = aVars.GetTextSize().Width(); - sal_Int32 nTextLen = aString.getLength(); - if (eOutHorJust == SVX_HOR_JUSTIFY_LEFT && aAreaParam.mnRightClipLength > 0) + // But never fiddle with numeric values. + // (Which was the cause of tdf#86024). + // The General automatic format output takes + // care of this, or fixed width numbers either fit + // or display as ###. + if (!bCellIsValue) { - fVisibleRatio = (fTextWidth - aAreaParam.mnRightClipLength) / fTextWidth; - if (0.0 < fVisibleRatio && fVisibleRatio < 1.0) + double fVisibleRatio = 1.0; + double fTextWidth = aVars.GetTextSize().Width(); + sal_Int32 nTextLen = aString.getLength(); + if (eOutHorJust == SVX_HOR_JUSTIFY_LEFT && aAreaParam.mnRightClipLength > 0) { - // Only show the left-end segment. - sal_Int32 nShortLen = fVisibleRatio*nTextLen + 1; - aShort = aShort.copy(0, nShortLen); + fVisibleRatio = (fTextWidth - aAreaParam.mnRightClipLength) / fTextWidth; + if (0.0 < fVisibleRatio && fVisibleRatio < 1.0) + { + // Only show the left-end segment. + sal_Int32 nShortLen = fVisibleRatio*nTextLen + 1; + aShort = aShort.copy(0, nShortLen); + } } - } - else if (eOutHorJust == SVX_HOR_JUSTIFY_RIGHT && aAreaParam.mnLeftClipLength > 0) - { - fVisibleRatio = (fTextWidth - aAreaParam.mnLeftClipLength) / fTextWidth; - if (0.0 < fVisibleRatio && fVisibleRatio < 1.0) + else if (eOutHorJust == SVX_HOR_JUSTIFY_RIGHT && aAreaParam.mnLeftClipLength > 0) { - // Only show the right-end segment. - sal_Int32 nShortLen = fVisibleRatio*nTextLen + 1; - aShort = aShort.copy(nTextLen-nShortLen); + fVisibleRatio = (fTextWidth - aAreaParam.mnLeftClipLength) / fTextWidth; + if (0.0 < fVisibleRatio && fVisibleRatio < 1.0) + { + // Only show the right-end segment. + sal_Int32 nShortLen = fVisibleRatio*nTextLen + 1; + aShort = aShort.copy(nTextLen-nShortLen); - // Adjust the text position after shortening of the string. - double fShortWidth = pFmtDevice->GetTextWidth(aShort); - double fOffset = fTextWidth - fShortWidth; - aDrawTextPos.Move(fOffset, 0); + // Adjust the text position after shortening of the string. + double fShortWidth = pFmtDevice->GetTextWidth(aShort); + double fOffset = fTextWidth - fShortWidth; + aDrawTextPos.Move(fOffset, 0); + } } } diff -Nru libreoffice-l10n-4.4.2/scaddins/source/analysis/analysis.cxx libreoffice-l10n-4.4.6~rc3/scaddins/source/analysis/analysis.cxx --- libreoffice-l10n-4.4.2/scaddins/source/analysis/analysis.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/scaddins/source/analysis/analysis.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -119,14 +119,10 @@ void AnalysisAddIn::InitData( void ) { - if( pResMgr ) - delete pResMgr; - - OString aModName( "analysis" ); - pResMgr = ResMgr::CreateResMgr( aModName.getStr(), LanguageTag( aFuncLoc) ); + delete pResMgr; + pResMgr = ResMgr::CreateResMgr("analysis", LanguageTag(aFuncLoc)); - if( pFD ) - delete pFD; + delete pFD; if( pResMgr ) pFD = new FuncDataList( *pResMgr ); @@ -152,17 +148,11 @@ AnalysisAddIn::~AnalysisAddIn() { - if( pFD ) - delete pFD; - - if( pFactDoubles ) - delete[] pFactDoubles; - - if( pCDL ) - delete pCDL; - - if( pDefLocales ) - delete[] pDefLocales; + delete pResMgr; + delete pCDL; + delete[] pFactDoubles; + delete pFD; + delete[] pDefLocales; } sal_Int32 AnalysisAddIn::getDateMode( @@ -234,8 +224,7 @@ uno::Reference< uno::XInterface > SAL_CALL AnalysisAddIn_CreateInstance( const uno::Reference< lang::XMultiServiceFactory >& xServiceFact ) { - static uno::Reference< uno::XInterface > xInst = (cppu::OWeakObject*) new AnalysisAddIn( comphelper::getComponentContext(xServiceFact) ); - return xInst; + return (cppu::OWeakObject*) new AnalysisAddIn( comphelper::getComponentContext(xServiceFact) ); } // XServiceName diff -Nru libreoffice-l10n-4.4.2/scaddins/source/datefunc/datefunc.cxx libreoffice-l10n-4.4.6~rc3/scaddins/source/datefunc/datefunc.cxx --- libreoffice-l10n-4.4.2/scaddins/source/datefunc/datefunc.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/scaddins/source/datefunc/datefunc.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -166,8 +166,7 @@ uno::Reference< uno::XInterface > SAL_CALL ScaDateAddIn_CreateInstance( const uno::Reference< lang::XMultiServiceFactory >& ) { - static uno::Reference< uno::XInterface > xInst = (cppu::OWeakObject*) new ScaDateAddIn(); - return xInst; + return (cppu::OWeakObject*) new ScaDateAddIn(); } extern "C" { @@ -208,12 +207,9 @@ ScaDateAddIn::~ScaDateAddIn() { - if( pFuncDataList ) - delete pFuncDataList; - if( pDefLocales ) - delete[] pDefLocales; - - // pResMgr already deleted (_all_ resource managers are deleted _before_ this dtor is called) + delete pFuncDataList; + delete pResMgr; + delete[] pDefLocales; } static const sal_Char* pLang[] = { "de", "en" }; @@ -252,14 +248,9 @@ void ScaDateAddIn::InitData() { - if( pResMgr ) - delete pResMgr; - - OString aModName( "date" ); - pResMgr = ResMgr::CreateResMgr( aModName.getStr(), LanguageTag( aFuncLoc) ); - - if( pFuncDataList ) - delete pFuncDataList; + delete pResMgr; + pResMgr = ResMgr::CreateResMgr("date", LanguageTag(aFuncLoc)); + delete pFuncDataList; pFuncDataList = pResMgr ? new ScaFuncDataList( *pResMgr ) : NULL; diff -Nru libreoffice-l10n-4.4.2/scaddins/source/pricing/pricing.cxx libreoffice-l10n-4.4.6~rc3/scaddins/source/pricing/pricing.cxx --- libreoffice-l10n-4.4.2/scaddins/source/pricing/pricing.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/scaddins/source/pricing/pricing.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -171,11 +171,9 @@ uno::Reference< uno::XInterface > SAL_CALL ScaPricingAddIn_CreateInstance( const uno::Reference< lang::XMultiServiceFactory >& ) { - static uno::Reference< uno::XInterface > xInst = (cppu::OWeakObject*) new ScaPricingAddIn(); - return xInst; + return (cppu::OWeakObject*) new ScaPricingAddIn(); } - extern "C" { SAL_DLLPUBLIC_EXPORT void * SAL_CALL pricing_component_getFactory( @@ -214,12 +212,9 @@ ScaPricingAddIn::~ScaPricingAddIn() { - if( pFuncDataList ) - delete pFuncDataList; - if( pDefLocales ) - delete[] pDefLocales; - - // pResMgr already deleted (_all_ resource managers are deleted _before_ this dtor is called) + delete pFuncDataList; + delete pResMgr; + delete[] pDefLocales; } static const sal_Char* pLang[] = { "de", "en" }; @@ -258,15 +253,9 @@ void ScaPricingAddIn::InitData() { - - if( pResMgr ) - delete pResMgr; - - OString aModName( "pricing" ); - pResMgr = ResMgr::CreateResMgr( aModName.getStr(), LanguageTag( aFuncLoc) ); - - if( pFuncDataList ) - delete pFuncDataList; + delete pResMgr; + pResMgr = ResMgr::CreateResMgr("pricing", LanguageTag( aFuncLoc) ); + delete pFuncDataList; pFuncDataList = pResMgr ? new ScaFuncDataList( *pResMgr ) : NULL; diff -Nru libreoffice-l10n-4.4.2/scp2/source/ooo/file_ooo.scp libreoffice-l10n-4.4.6~rc3/scp2/source/ooo/file_ooo.scp --- libreoffice-l10n-4.4.2/scp2/source/ooo/file_ooo.scp 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/scp2/source/ooo/file_ooo.scp 2015-10-27 20:55:54.000000000 +0000 @@ -482,6 +482,7 @@ UI_FILELIST_ALL_LANG(fps, fps) UI_FILELIST_ALL_LANG(sabpilot, modules/sabpilot) UI_FILELIST_ALL_LANG(scalc, modules/scalc) +UI_FILELIST_ALL_LANG(scanner, modules/scanner) UI_FILELIST_ALL_LANG(schart, modules/schart) UI_FILELIST_ALL_LANG(sdraw, modules/sdraw) UI_FILELIST_ALL_LANG(sfx, sfx) diff -Nru libreoffice-l10n-4.4.2/scp2/source/ooo/module_lang_template.scp libreoffice-l10n-4.4.6~rc3/scp2/source/ooo/module_lang_template.scp --- libreoffice-l10n-4.4.2/scp2/source/ooo/module_lang_template.scp 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/scp2/source/ooo/module_lang_template.scp 2015-10-27 20:55:54.000000000 +0000 @@ -36,6 +36,7 @@ gid_File_Share_Config_Sofficecfg_uiconfig_fps_Lang, gid_File_Share_Config_Sofficecfg_uiconfig_sabpilot_Lang, gid_File_Share_Config_Sofficecfg_uiconfig_scalc_Lang, + gid_File_Share_Config_Sofficecfg_uiconfig_scanner_Lang, gid_File_Share_Config_Sofficecfg_uiconfig_schart_Lang, gid_File_Share_Config_Sofficecfg_uiconfig_sdraw_Lang, gid_File_Share_Config_Sofficecfg_uiconfig_sfx_Lang, diff -Nru libreoffice-l10n-4.4.2/sd/CppunitTest_sd_import_tests.mk libreoffice-l10n-4.4.6~rc3/sd/CppunitTest_sd_import_tests.mk --- libreoffice-l10n-4.4.2/sd/CppunitTest_sd_import_tests.mk 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/CppunitTest_sd_import_tests.mk 2015-10-27 20:55:54.000000000 +0000 @@ -76,8 +76,10 @@ desktop/source/deployment/deployment \ embeddedobj/util/embobj \ filter/source/config/cache/filterconfig1 \ + filter/source/odfflatxml/odfflatxml \ filter/source/svg/svgfilter \ filter/source/xmlfilteradaptor/xmlfa \ + filter/source/xmlfilterdetect/xmlfd \ forms/util/frm \ framework/util/fwk \ i18npool/util/i18npool \ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/n902652.pptx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/n902652.pptx differ diff -Nru libreoffice-l10n-4.4.2/sd/qa/unit/data/odg/gradient-angle.fodg libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/odg/gradient-angle.fodg --- libreoffice-l10n-4.4.2/sd/qa/unit/data/odg/gradient-angle.fodg 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/odg/gradient-angle.fodg 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,212 @@ + + + + ms 2015-10-09T14:51:21.0864478012015-10-09T14:54:47.829092906ms PT3M27S1LibreOfficeDev/5.1.0.0.alpha1$Linux_X86_64 LibreOffice_project/83c5214889c712646e45dc1c19b6d3c13a05aa83 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/crash-1.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/crash-1.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/crash-2.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/crash-2.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/crash-3.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/crash-3.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-10.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-10.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-11.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-11.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-12.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-12.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-13.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-13.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-14.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-14.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-15.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-15.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-16.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-16.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-17.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-17.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-18.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-18.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-19.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-19.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-1.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-1.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-20.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-20.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-21.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-21.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-22.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-22.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-2.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-2.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-3.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-3.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-4.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-4.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-5.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-5.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-6.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-6.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-7.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-7.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-8.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-8.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/ppt/pass/hang-9.ppt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/ppt/pass/hang-9.ppt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/pptx/bnc910045.pptx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/pptx/bnc910045.pptx differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/pptx/tdf93097.pptx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/pptx/tdf93097.pptx differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sd/qa/unit/data/tdf90403.pptx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/tdf90403.pptx differ diff -Nru libreoffice-l10n-4.4.2/sd/qa/unit/data/xml/n902652_0.xml libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/xml/n902652_0.xml --- libreoffice-l10n-4.4.2/sd/qa/unit/data/xml/n902652_0.xml 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/xml/n902652_0.xml 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru libreoffice-l10n-4.4.2/sd/qa/unit/data/xml/tdf90403_0.xml libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/xml/tdf90403_0.xml --- libreoffice-l10n-4.4.2/sd/qa/unit/data/xml/tdf90403_0.xml 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/qa/unit/data/xml/tdf90403_0.xml 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,4 @@ + + + + diff -Nru libreoffice-l10n-4.4.2/sd/qa/unit/import-tests.cxx libreoffice-l10n-4.4.6~rc3/sd/qa/unit/import-tests.cxx --- libreoffice-l10n-4.4.2/sd/qa/unit/import-tests.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/qa/unit/import-tests.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -70,6 +70,7 @@ void testN759180(); void testN778859(); void testMasterPageStyleParent(); + void testGradientAngle(); void testFdo64512(); void testFdo71075(); void testN828390_2(); @@ -96,6 +97,8 @@ void testBnc862510_7(); void testPDFImport(); void testPDFImportSkipImages(); + void testBnc910045(); + void testTdf93097(); CPPUNIT_TEST_SUITE(SdImportTest); @@ -104,6 +107,7 @@ CPPUNIT_TEST(testN759180); CPPUNIT_TEST(testN778859); CPPUNIT_TEST(testMasterPageStyleParent); + CPPUNIT_TEST(testGradientAngle); CPPUNIT_TEST(testFdo64512); CPPUNIT_TEST(testFdo71075); CPPUNIT_TEST(testN828390_2); @@ -129,6 +133,9 @@ CPPUNIT_TEST(testBnc862510_6); CPPUNIT_TEST(testBnc862510_7); CPPUNIT_TEST(testPDFImport); + CPPUNIT_TEST(testPDFImportSkipImages); + CPPUNIT_TEST(testBnc910045); + CPPUNIT_TEST(testTdf93097); CPPUNIT_TEST_SUITE_END(); }; @@ -176,6 +183,8 @@ { "n762695.pptx", "xml/n762695_", PPTX, -1 }, { "n593612.pptx", "xml/n593612_", PPTX, -1 }, { "fdo71434.pptx", "xml/fdo71434_", PPTX, -1 }, + { "n902652.pptx", "xml/n902652_", PPTX, -1 }, + { "tdf90403.pptx", "xml/tdf90403_", PPTX, -1 }, // { "pptx/n828390.pptx", "pptx/xml/n828390_", PPTX, PPTX }, // Example }; @@ -418,6 +427,62 @@ xDocShRef->DoClose(); } +void SdImportTest::testGradientAngle() +{ + sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/odg/gradient-angle.fodg"), FODG); + + uno::Reference const xDoc( + xDocShRef->GetDoc()->getUnoModel(), uno::UNO_QUERY); + + awt::Gradient gradient; + uno::Reference const xGradients( + xDoc->createInstance("com.sun.star.drawing.GradientTable"), + uno::UNO_QUERY); + + CPPUNIT_ASSERT(xGradients->getByName("Gradient 38") >>= gradient); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), gradient.Angle); // was: 3600 + + CPPUNIT_ASSERT(xGradients->getByName("Gradient 10") >>= gradient); + CPPUNIT_ASSERT_EQUAL(sal_Int16(270), gradient.Angle); // 27deg + + CPPUNIT_ASSERT(xGradients->getByName("Gradient 11") >>= gradient); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1145), gradient.Angle); // 2rad + + CPPUNIT_ASSERT(xGradients->getByName("Gradient 12") >>= gradient); + CPPUNIT_ASSERT_EQUAL(sal_Int16(900), gradient.Angle); // 100grad + + CPPUNIT_ASSERT(xGradients->getByName("Gradient 13") >>= gradient); + CPPUNIT_ASSERT_EQUAL(sal_Int16(3599), gradient.Angle); // -1 + + CPPUNIT_ASSERT(xGradients->getByName("Gradient 14") >>= gradient); + CPPUNIT_ASSERT_EQUAL(sal_Int16(3028), gradient.Angle); // -1rad + + CPPUNIT_ASSERT(xGradients->getByName("Gradient 15") >>= gradient); + CPPUNIT_ASSERT_EQUAL(sal_Int16(300), gradient.Angle); // 3900 + + CPPUNIT_ASSERT(xGradients->getByName("Gradient 16") >>= gradient); + CPPUNIT_ASSERT_EQUAL(sal_Int16(105), gradient.Angle); // 10.5deg + + CPPUNIT_ASSERT(xGradients->getByName("Gradient 17") >>= gradient); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1800), gradient.Angle); // \pi rad + + uno::Reference const xTranspGradients( + xDoc->createInstance("com.sun.star.drawing.TransparencyGradientTable"), + uno::UNO_QUERY); + + CPPUNIT_ASSERT(xTranspGradients->getByName("Transparency 2") >>= gradient); + CPPUNIT_ASSERT_EQUAL(sal_Int16(10), gradient.Angle); // 1 + + CPPUNIT_ASSERT(xTranspGradients->getByName("Transparency 1") >>= gradient); + CPPUNIT_ASSERT_EQUAL(sal_Int16(900), gradient.Angle); // 90deg + + CPPUNIT_ASSERT(xTranspGradients->getByName("Transparency 3") >>= gradient); + CPPUNIT_ASSERT_EQUAL(sal_Int16(572), gradient.Angle); // 1.0rad + + CPPUNIT_ASSERT(xTranspGradients->getByName("Transparency 4") >>= gradient); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1800), gradient.Angle); // 1000grad +} + void SdImportTest::testN778859() { ::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/pptx/n778859.pptx"), PPTX); @@ -1111,6 +1176,37 @@ xDocShRef->DoClose(); } +void SdImportTest::testBnc910045() +{ + // Problem with table style which defines cell color with fill style + ::sd::DrawDocShellRef xDocShRef = loadURL( getURLFromSrc("/sd/qa/unit/data/pptx/bnc910045.pptx"), PPTX ); + + SdDrawDocument *pDoc = xDocShRef->GetDoc(); + CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL ); + const SdrPage *pPage = pDoc->GetPage(1); + CPPUNIT_ASSERT_MESSAGE( "no page", pPage != NULL ); + + sdr::table::SdrTableObj *pTableObj = dynamic_cast(pPage->GetObj(0)); + CPPUNIT_ASSERT( pTableObj ); + uno::Reference< table::XCellRange > xTable(pTableObj->getTable(), uno::UNO_QUERY_THROW); + uno::Reference< beans::XPropertySet > xCell; + sal_Int32 nColor; + + xCell.set(xTable->getCellByPosition(0, 0), uno::UNO_QUERY_THROW); + xCell->getPropertyValue("FillColor") >>= nColor; + CPPUNIT_ASSERT_EQUAL(sal_Int32(5210557), nColor); +} + +void SdImportTest::testTdf93097() +{ + // Throwing metadata import aborted the filter, check that metadata is now imported. + sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/pptx/tdf93097.pptx"), PPTX); + uno::Reference xDocumentPropertiesSupplier(xDocShRef->GetModel(), uno::UNO_QUERY); + uno::Reference xDocumentProperties = xDocumentPropertiesSupplier->getDocumentProperties(); + CPPUNIT_ASSERT_EQUAL(OUString("ss"), xDocumentProperties->getTitle()); + xDocShRef->DoClose(); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff -Nru libreoffice-l10n-4.4.2/sd/qa/unit/sdmodeltestbase.hxx libreoffice-l10n-4.4.6~rc3/sd/qa/unit/sdmodeltestbase.hxx --- libreoffice-l10n-4.4.2/sd/qa/unit/sdmodeltestbase.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/qa/unit/sdmodeltestbase.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -48,6 +48,7 @@ #define PPTX_FORMAT_TYPE ( SFX_FILTER_IMPORT | SFX_FILTER_EXPORT | SFX_FILTER_ALIEN | SFX_FILTER_STARONEFILTER | SFX_FILTER_PREFERED ) #define HTML_FORMAT_TYPE ( SFX_FILTER_EXPORT | SFX_FILTER_ALIEN ) #define PDF_FORMAT_TYPE ( SFX_FILTER_STARONEFILTER | SFX_FILTER_ALIEN | SFX_FILTER_IMPORT | SFX_FILTER_PREFERED ) +#define FODG_FORMAT_TYPE (SFX_FILTER_STARONEFILTER | SFX_FILTER_OWN |SFX_FILTER_IMPORT | SFX_FILTER_EXPORT) /** List of file formats we support in Impress unit tests. @@ -64,6 +65,7 @@ { "pptx", "Impress Office Open XML", "Office Open XML Presentation", "", PPTX_FORMAT_TYPE }, { "html", "graphic_HTML", "graphic_HTML", "", HTML_FORMAT_TYPE }, { "pdf", "draw_pdf_import", "pdf_Portable_Document_Format", "", PDF_FORMAT_TYPE }, + { "fodg", "OpenDocument Drawing Flat XML", "Flat XML ODF Drawing", "", FODG_FORMAT_TYPE }, { 0, 0, 0, 0, 0 } }; @@ -72,6 +74,7 @@ #define PPTX 2 #define HTML 3 #define PDF 4 +#define FODG 5 /// Base class for filter tests loading or roundtriping a document, and asserting the document model. class SdModelTestBase : public test::BootstrapFixture, public unotest::MacrosTest diff -Nru libreoffice-l10n-4.4.2/sd/source/filter/eppt/epptso.cxx libreoffice-l10n-4.4.6~rc3/sd/source/filter/eppt/epptso.cxx --- libreoffice-l10n-4.4.2/sd/source/filter/eppt/epptso.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/filter/eppt/epptso.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1140,7 +1140,7 @@ aFile = aFile.replaceAll( "/", "\\" ); aTarget = aFile; } - else if ( pFieldEntry->aFieldUrl[0] == '#' ) + else if ( pFieldEntry->aFieldUrl.startsWith("#") ) { OUString aPage( INetURLObject::decode( pFieldEntry->aFieldUrl, '%', INetURLObject::DECODE_WITH_CHARSET ) ); aPage = aPage.copy( 1 ); @@ -3570,6 +3570,22 @@ } } +class ContainerGuard +{ +private: + PptEscherEx* m_pPptEscherEx; +public: + ContainerGuard(PptEscherEx* pPptEscherEx, sal_uInt16 nRecord) + : m_pPptEscherEx(pPptEscherEx) + { + m_pPptEscherEx->OpenContainer(nRecord); + } + ~ContainerGuard() + { + m_pPptEscherEx->CloseContainer(); + } +}; + void PPTWriter::ImplCreateTable( uno::Reference< drawing::XShape >& rXShape, EscherSolverContainer& aSolverContainer, EscherPropertyContainer& aPropOpt ) { @@ -3617,8 +3633,8 @@ if ( y == nRowCount - 1 && nPosition != maRect.Bottom()) maRect.Bottom() = nPosition; } - mpPptEscherEx->OpenContainer( ESCHER_SpgrContainer ); - mpPptEscherEx->OpenContainer( ESCHER_SpContainer ); + std::unique_ptr xSpgrContainer(new ContainerGuard(mpPptEscherEx, ESCHER_SpgrContainer)); + std::unique_ptr xSpContainer(new ContainerGuard(mpPptEscherEx, ESCHER_SpContainer)); mpPptEscherEx->AddAtom( 16, ESCHER_Spgr, 1 ); mpStrm ->WriteInt32( maRect.Left() ) // Bounding box for the grouped shapes to which they are attached .WriteInt32( maRect.Top() ) @@ -3630,214 +3646,212 @@ aSolverContainer.AddShape( rXShape, nShapeId ); EscherPropertyContainer aPropOpt2; - if ( nRowCount ) - { - SvMemoryStream aMemStrm; - aMemStrm.ObjectOwnsMemory( false ); - aMemStrm.WriteUInt16( nRowCount ) - .WriteUInt16( nRowCount ) - .WriteUInt16( 4 ); - - std::vector< std::pair< sal_Int32, sal_Int32 > >::const_iterator aIter( aRows.begin() ); - while( aIter != aRows.end() ) - aMemStrm.WriteInt32( (*aIter++).second ); - - aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x1000100 ); - aPropOpt2.AddOpt( ESCHER_Prop_tableProperties, 1 ); - aPropOpt2.AddOpt( ESCHER_Prop_tableRowProperties, true, aMemStrm.Tell(), static_cast< sal_uInt8* >( const_cast< void* >( aMemStrm.GetData() ) ), aMemStrm.Tell() ); - aPropOpt.CreateShapeProperties( rXShape ); - aPropOpt.Commit( *mpStrm ); - aPropOpt2.Commit( *mpStrm, 3, ESCHER_UDefProp ); - if ( GetCurrentGroupLevel() > 0 ) - mpPptEscherEx->AddChildAnchor( maRect ); - else - mpPptEscherEx->AddClientAnchor( maRect ); - mpPptEscherEx->CloseContainer(); + SvMemoryStream aMemStrm; + aMemStrm.ObjectOwnsMemory( false ); + aMemStrm.WriteUInt16( nRowCount ) + .WriteUInt16( nRowCount ) + .WriteUInt16( 4 ); + + std::vector< std::pair< sal_Int32, sal_Int32 > >::const_iterator aIter( aRows.begin() ); + while( aIter != aRows.end() ) + aMemStrm.WriteInt32( (*aIter++).second ); + + aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x1000100 ); + aPropOpt2.AddOpt( ESCHER_Prop_tableProperties, 1 ); + aPropOpt2.AddOpt( ESCHER_Prop_tableRowProperties, true, aMemStrm.Tell(), static_cast< sal_uInt8* >( const_cast< void* >( aMemStrm.GetData() ) ), aMemStrm.Tell() ); + aPropOpt.CreateShapeProperties( rXShape ); + aPropOpt.Commit( *mpStrm ); + aPropOpt2.Commit( *mpStrm, 3, ESCHER_UDefProp ); + if ( GetCurrentGroupLevel() > 0 ) + mpPptEscherEx->AddChildAnchor( maRect ); + else + mpPptEscherEx->AddClientAnchor( maRect ); + xSpContainer.reset(); //ESCHER_SpContainer - uno::Reference< table::XCellRange > xCellRange( xTable, uno::UNO_QUERY_THROW ); - for( sal_Int32 nRow = 0; nRow < xRows->getCount(); nRow++ ) + uno::Reference< table::XCellRange > xCellRange( xTable, uno::UNO_QUERY_THROW ); + for( sal_Int32 nRow = 0; nRow < xRows->getCount(); nRow++ ) + { + for( sal_Int32 nColumn = 0; nColumn < xColumns->getCount(); nColumn++ ) { - for( sal_Int32 nColumn = 0; nColumn < xColumns->getCount(); nColumn++ ) + uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn, nRow ), uno::UNO_QUERY_THROW ); + if ( !xCell->isMerged() ) { - uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn, nRow ), uno::UNO_QUERY_THROW ); - if ( !xCell->isMerged() ) - { - sal_Int32 nLeft = aColumns[ nColumn ].first; - sal_Int32 nTop = aRows[ nRow ].first; - sal_Int32 nRight = GetCellRight( nColumn, maRect,aColumns,xCell ); - sal_Int32 nBottom = GetCellBottom( nRow, maRect,aRows,xCell ); + sal_Int32 nLeft = aColumns[ nColumn ].first; + sal_Int32 nTop = aRows[ nRow ].first; + sal_Int32 nRight = GetCellRight( nColumn, maRect,aColumns,xCell ); + sal_Int32 nBottom = GetCellBottom( nRow, maRect,aRows,xCell ); - mbFontIndependentLineSpacing = false; - mXPropSet = uno::Reference< beans::XPropertySet >( xCell, uno::UNO_QUERY_THROW ); - mXText = uno::Reference< text::XSimpleText >( xCell, uno::UNO_QUERY_THROW ); - mnTextSize = mXText->getString().getLength(); - - ::com::sun::star::uno::Any aAny; - if ( GetPropertyValue( aAny, mXPropSet, OUString( "FontIndependentLineSpacing" ) ), sal_True ) - aAny >>= mbFontIndependentLineSpacing; + mbFontIndependentLineSpacing = false; + mXPropSet = uno::Reference< beans::XPropertySet >( xCell, uno::UNO_QUERY_THROW ); + mXText = uno::Reference< text::XSimpleText >( xCell, uno::UNO_QUERY_THROW ); + mnTextSize = mXText->getString().getLength(); - EscherPropertyContainer aPropOptSp; - mpPptEscherEx->OpenContainer( ESCHER_SpContainer ); - ImplCreateShape( ESCHER_ShpInst_Rectangle, 0xa02, aSolverContainer ); // Flags: Connector | HasSpt | Child - aPropOptSp.CreateFillProperties( mXPropSet, true ); - aPropOptSp.AddOpt( ESCHER_Prop_fNoLineDrawDash, 0x90000 ); - aPropOptSp.CreateTextProperties( mXPropSet, mnTxId += 0x60, false, true ); - aPropOptSp.AddOpt( ESCHER_Prop_WrapText, ESCHER_WrapSquare ); + ::com::sun::star::uno::Any aAny; + if ( GetPropertyValue( aAny, mXPropSet, OUString( "FontIndependentLineSpacing" ) ), sal_True ) + aAny >>= mbFontIndependentLineSpacing; + + EscherPropertyContainer aPropOptSp; + std::unique_ptr xCellContainer(new ContainerGuard(mpPptEscherEx, ESCHER_SpContainer)); + ImplCreateShape( ESCHER_ShpInst_Rectangle, 0xa02, aSolverContainer ); // Flags: Connector | HasSpt | Child + aPropOptSp.CreateFillProperties( mXPropSet, true ); + aPropOptSp.AddOpt( ESCHER_Prop_fNoLineDrawDash, 0x90000 ); + aPropOptSp.CreateTextProperties( mXPropSet, mnTxId += 0x60, false, true ); + aPropOptSp.AddOpt( ESCHER_Prop_WrapText, ESCHER_WrapSquare ); - SvMemoryStream aClientTextBox( 0x200, 0x200 ); - SvMemoryStream aExtBu( 0x200, 0x200 ); + SvMemoryStream aClientTextBox( 0x200, 0x200 ); + SvMemoryStream aExtBu( 0x200, 0x200 ); - ImplWriteTextStyleAtom( aClientTextBox, EPP_TEXTTYPE_Other, 0, NULL, aExtBu, &aPropOptSp ); + ImplWriteTextStyleAtom( aClientTextBox, EPP_TEXTTYPE_Other, 0, NULL, aExtBu, &aPropOptSp ); - // need write client data for extend bullet - if ( aExtBu.Tell() ) - { - SvMemoryStream* pClientData = new SvMemoryStream( 0x200, 0x200 ); - ImplProgTagContainer( pClientData, &aExtBu ); - mpStrm->WriteUInt32( ( ( ESCHER_ClientData << 16 ) | 0xf ) ) - .WriteUInt32( pClientData->Tell() ); + // need write client data for extend bullet + if ( aExtBu.Tell() ) + { + SvMemoryStream* pClientData = new SvMemoryStream( 0x200, 0x200 ); + ImplProgTagContainer( pClientData, &aExtBu ); + mpStrm->WriteUInt32( ( ( ESCHER_ClientData << 16 ) | 0xf ) ) + .WriteUInt32( pClientData->Tell() ); - mpStrm->Write( pClientData->GetData(), pClientData->Tell() ); - delete pClientData, pClientData = NULL; - } + mpStrm->Write( pClientData->GetData(), pClientData->Tell() ); + delete pClientData, pClientData = NULL; + } - aPropOptSp.Commit( *mpStrm ); - mpPptEscherEx->AddAtom( 16, ESCHER_ChildAnchor ); - mpStrm ->WriteInt32( nLeft ) - .WriteInt32( nTop ) - .WriteInt32( nRight ) - .WriteInt32( nBottom ); + aPropOptSp.Commit( *mpStrm ); + mpPptEscherEx->AddAtom( 16, ESCHER_ChildAnchor ); + mpStrm ->WriteInt32( nLeft ) + .WriteInt32( nTop ) + .WriteInt32( nRight ) + .WriteInt32( nBottom ); - mpStrm->WriteUInt32( ( ( ESCHER_ClientTextbox << 16 ) | 0xf ) ) - .WriteUInt32( aClientTextBox.Tell() ); + mpStrm->WriteUInt32( ( ( ESCHER_ClientTextbox << 16 ) | 0xf ) ) + .WriteUInt32( aClientTextBox.Tell() ); - mpStrm->Write( aClientTextBox.GetData(), aClientTextBox.Tell() ); - mpPptEscherEx->CloseContainer(); - } + mpStrm->Write( aClientTextBox.GetData(), aClientTextBox.Tell() ); + xCellContainer.reset(); } } + } - static const char sTopBorder[] = "TopBorder"; - static const char sBottomBorder[] = "BottomBorder"; - static const char sLeftBorder[] = "LeftBorder"; - static const char sRightBorder[] = "RightBorder"; + static const char sTopBorder[] = "TopBorder"; + static const char sBottomBorder[] = "BottomBorder"; + static const char sLeftBorder[] = "LeftBorder"; + static const char sRightBorder[] = "RightBorder"; - // creating horz lines - for( sal_Int32 nLine = 0; nLine < ( xRows->getCount() + 1 ); nLine++ ) + // creating horz lines + for( sal_Int32 nLine = 0; nLine < ( xRows->getCount() + 1 ); nLine++ ) + { + for( sal_Int32 nColumn = 0; nColumn < xColumns->getCount(); nColumn++ ) { - for( sal_Int32 nColumn = 0; nColumn < xColumns->getCount(); nColumn++ ) - { - CellBorder aCellBorder; - aCellBorder.mnPos = aColumns[ nColumn ].first; - aCellBorder.mnLength = aColumns[ nColumn ].second; - bool bTop = false; - //write nLine*nColumn cell's top border - if ( nLine < xRows->getCount() ) - { // top border - uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn, nLine ), uno::UNO_QUERY_THROW ); - if ( !xCell->isMerged() ) - { - uno::Reference< beans::XPropertySet > xPropSet2( xCell, uno::UNO_QUERY_THROW ); - table::BorderLine aBorderLine; - if ( xPropSet2->getPropertyValue( sTopBorder ) >>= aBorderLine ) - aCellBorder.maCellBorder = aBorderLine; - sal_Int32 nRight = GetCellRight( nColumn, maRect,aColumns,xCell ); - bTop = ImplCreateCellBorder( &aCellBorder, aCellBorder.mnPos, - aRows[ nLine ].first, nRight, aRows[ nLine ].first ); - } + CellBorder aCellBorder; + aCellBorder.mnPos = aColumns[ nColumn ].first; + aCellBorder.mnLength = aColumns[ nColumn ].second; + bool bTop = false; + //write nLine*nColumn cell's top border + if ( nLine < xRows->getCount() ) + { // top border + uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn, nLine ), uno::UNO_QUERY_THROW ); + if ( !xCell->isMerged() ) + { + uno::Reference< beans::XPropertySet > xPropSet2( xCell, uno::UNO_QUERY_THROW ); + table::BorderLine aBorderLine; + if ( xPropSet2->getPropertyValue( sTopBorder ) >>= aBorderLine ) + aCellBorder.maCellBorder = aBorderLine; + sal_Int32 nRight = GetCellRight( nColumn, maRect,aColumns,xCell ); + bTop = ImplCreateCellBorder( &aCellBorder, aCellBorder.mnPos, + aRows[ nLine ].first, nRight, aRows[ nLine ].first ); } + } - //if nLine*nColumn cell's top border is empty, check (nLine-1)*nColumn cell's bottom border - //and write the last row's bottom border - if (( nLine && !bTop ) || (nLine == xRows->getCount())) - { // bottom border - sal_Int32 nRow = nLine; - - while( nRow ) - { //find last no merged cell - uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn, nRow - 1 ), uno::UNO_QUERY_THROW ); - if ( !xCell->isMerged() ) + //if nLine*nColumn cell's top border is empty, check (nLine-1)*nColumn cell's bottom border + //and write the last row's bottom border + if (( nLine && !bTop ) || (nLine == xRows->getCount())) + { // bottom border + sal_Int32 nRow = nLine; + + while( nRow ) + { //find last no merged cell + uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn, nRow - 1 ), uno::UNO_QUERY_THROW ); + if ( !xCell->isMerged() ) + { + sal_Int32 nRight = GetCellRight( nColumn, maRect,aColumns,xCell ); + sal_Int32 nBottom = GetCellBottom( nRow - 1, maRect,aRows,xCell ); + if ( nBottom == ( aRows[ nLine-1 ].first + aRows[ nLine-1 ].second ) ) { - sal_Int32 nRight = GetCellRight( nColumn, maRect,aColumns,xCell ); - sal_Int32 nBottom = GetCellBottom( nRow - 1, maRect,aRows,xCell ); - if ( nBottom == ( aRows[ nLine-1 ].first + aRows[ nLine-1 ].second ) ) - { - uno::Reference< table::XMergeableCell > xCellOwn( xCellRange->getCellByPosition( nColumn, nRow - 1 ), uno::UNO_QUERY_THROW ); - uno::Reference< beans::XPropertySet > xPropSet2( xCellOwn, uno::UNO_QUERY_THROW ); - table::BorderLine aBorderLine; - if ( xPropSet2->getPropertyValue( sBottomBorder ) >>= aBorderLine ) - aCellBorder.maCellBorder = aBorderLine; - ImplCreateCellBorder( &aCellBorder, aCellBorder.mnPos, - nBottom, nRight, nBottom); - } - nRow=0; + uno::Reference< table::XMergeableCell > xCellOwn( xCellRange->getCellByPosition( nColumn, nRow - 1 ), uno::UNO_QUERY_THROW ); + uno::Reference< beans::XPropertySet > xPropSet2( xCellOwn, uno::UNO_QUERY_THROW ); + table::BorderLine aBorderLine; + if ( xPropSet2->getPropertyValue( sBottomBorder ) >>= aBorderLine ) + aCellBorder.maCellBorder = aBorderLine; + ImplCreateCellBorder( &aCellBorder, aCellBorder.mnPos, + nBottom, nRight, nBottom); } - else - nRow--; + nRow=0; } + else + nRow--; } } } + } - // creating vertical lines - for( sal_Int32 nLine = 0; nLine < ( xColumns->getCount() + 1 ); nLine++ ) + // creating vertical lines + for( sal_Int32 nLine = 0; nLine < ( xColumns->getCount() + 1 ); nLine++ ) + { + for( sal_Int32 nRow = 0; nRow < xRows->getCount(); nRow++ ) { - for( sal_Int32 nRow = 0; nRow < xRows->getCount(); nRow++ ) - { - CellBorder aCellBorder; - aCellBorder.mnPos = aRows[ nRow].first; - aCellBorder.mnLength = aRows[ nRow].second; - bool bLeft = false; - if ( nLine < xColumns->getCount() ) - { // left border - uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nLine, nRow ), uno::UNO_QUERY_THROW ); + CellBorder aCellBorder; + aCellBorder.mnPos = aRows[ nRow].first; + aCellBorder.mnLength = aRows[ nRow].second; + bool bLeft = false; + if ( nLine < xColumns->getCount() ) + { // left border + uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nLine, nRow ), uno::UNO_QUERY_THROW ); + if (!xCell->isMerged() ) + { + uno::Reference< beans::XPropertySet > xCellSet( xCell, uno::UNO_QUERY_THROW ); + table::BorderLine aBorderLine; + if ( xCellSet->getPropertyValue( sLeftBorder ) >>= aBorderLine ) + aCellBorder.maCellBorder = aBorderLine; + sal_Int32 nBottom = GetCellBottom( nRow, maRect, aRows,xCell ); + bLeft = ImplCreateCellBorder( &aCellBorder, aColumns[nLine].first, aCellBorder.mnPos, + aColumns[nLine].first, nBottom ); + } + } + if ( ( nLine && !bLeft )||(nLine == xColumns->getCount())) + { // right border + sal_Int32 nColumn = nLine; + while ( nColumn ) + { + uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn - 1, nRow ), uno::UNO_QUERY_THROW ); if (!xCell->isMerged() ) { - uno::Reference< beans::XPropertySet > xCellSet( xCell, uno::UNO_QUERY_THROW ); - table::BorderLine aBorderLine; - if ( xCellSet->getPropertyValue( sLeftBorder ) >>= aBorderLine ) - aCellBorder.maCellBorder = aBorderLine; - sal_Int32 nBottom = GetCellBottom( nRow, maRect, aRows,xCell ); - bLeft = ImplCreateCellBorder( &aCellBorder, aColumns[nLine].first, aCellBorder.mnPos, - aColumns[nLine].first, nBottom ); - } - } - if ( ( nLine && !bLeft )||(nLine == xColumns->getCount())) - { // right border - sal_Int32 nColumn = nLine; - while ( nColumn ) - { - uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn - 1, nRow ), uno::UNO_QUERY_THROW ); - if (!xCell->isMerged() ) + sal_Int32 nRight = GetCellRight( nColumn-1, maRect, aColumns,xCell ); + sal_Int32 nBottom = GetCellBottom( nRow, maRect, aRows, xCell ); + if ( nRight == (aColumns[nLine-1].first + aColumns[nLine-1].second) ) { - sal_Int32 nRight = GetCellRight( nColumn-1, maRect, aColumns,xCell ); - sal_Int32 nBottom = GetCellBottom( nRow, maRect, aRows, xCell ); - if ( nRight == (aColumns[nLine-1].first + aColumns[nLine-1].second) ) - { - uno::Reference< table::XMergeableCell > xCellOwn( xCellRange->getCellByPosition( nColumn - 1, nRow ), uno::UNO_QUERY_THROW ); - uno::Reference< beans::XPropertySet > xCellSet( xCellOwn, uno::UNO_QUERY_THROW ); - table::BorderLine aBorderLine; - if ( xCellSet->getPropertyValue( sRightBorder ) >>= aBorderLine ) - aCellBorder.maCellBorder = aBorderLine; - ImplCreateCellBorder( &aCellBorder, nRight, aCellBorder.mnPos, - nRight, nBottom ); - } - nColumn = 0; + uno::Reference< table::XMergeableCell > xCellOwn( xCellRange->getCellByPosition( nColumn - 1, nRow ), uno::UNO_QUERY_THROW ); + uno::Reference< beans::XPropertySet > xCellSet( xCellOwn, uno::UNO_QUERY_THROW ); + table::BorderLine aBorderLine; + if ( xCellSet->getPropertyValue( sRightBorder ) >>= aBorderLine ) + aCellBorder.maCellBorder = aBorderLine; + ImplCreateCellBorder( &aCellBorder, nRight, aCellBorder.mnPos, + nRight, nBottom ); } - else - nColumn --; + nColumn = 0; } + else + nColumn --; } } } } + + xSpgrContainer.reset(); //ESCHER_SpgrContainer } } catch( uno::Exception& ) { } - mpPptEscherEx->CloseContainer(); } void TextObjBinary::Write( SvStream* pStrm ) diff -Nru libreoffice-l10n-4.4.2/sd/source/filter/eppt/pptx-epptooxml.cxx libreoffice-l10n-4.4.6~rc3/sd/source/filter/eppt/pptx-epptooxml.cxx --- libreoffice-l10n-4.4.2/sd/source/filter/eppt/pptx-epptooxml.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/filter/eppt/pptx-epptooxml.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1107,7 +1107,7 @@ WriteAnimationCondition( pFS, aCondSeq[ i ], false, bMainSeqChild ); } else WriteAnimationCondition( pFS, aAny, false, bMainSeqChild ); - pFS->endElementNS( XML_p, XML_stCondLst ); + pFS->endElementNS( XML_p, XML_endCondLst ); } Reference< XEnumerationAccess > xEnumerationAccess( rXNode, UNO_QUERY ); diff -Nru libreoffice-l10n-4.4.2/sd/source/filter/ppt/pptin.cxx libreoffice-l10n-4.4.6~rc3/sd/source/filter/ppt/pptin.cxx --- libreoffice-l10n-4.4.2/sd/source/filter/ppt/pptin.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/filter/ppt/pptin.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -278,7 +278,6 @@ if ( nSlideCount && pSection->GetProperty( PID_HEADINGPAIR, aPropItem ) ) { sal_uInt32 nSlideTitleIndex = 0, nSlideTitleCount = 0; - sal_uInt32 i, nTemp; OUString aUString; @@ -289,13 +288,14 @@ { nVecCount >>= 1; sal_uInt32 nEntryCount = 0; - for ( i = 0; i < nVecCount; i++ ) + for (sal_uInt32 i = 0; i < nVecCount; ++i) { if ( !aPropItem.Read( aUString, VT_EMPTY, false ) ) break; aPropItem.ReadUInt32( nType ); if ( ( nType != VT_I4 ) && ( nType != VT_UI4 ) ) break; + sal_uInt32 nTemp(0); aPropItem.ReadUInt32( nTemp ); if ( aUString == "Slide Titles" || aUString == "Folientitel" ) { @@ -310,17 +310,33 @@ aPropItem.ReadUInt32( nType ) .ReadUInt32( nVecCount ); - if ( ( nVecCount >= ( nSlideTitleIndex + nSlideTitleCount ) ) - && ( nType == ( VT_LPSTR | VT_VECTOR ) ) ) + bool bVecOk = ( ( nVecCount >= (nSlideTitleIndex + nSlideTitleCount) ) + && ( nType == ( VT_LPSTR | VT_VECTOR ) ) ); + + if (bVecOk) { - for ( i = 0; i != nSlideTitleIndex; i++ ) + for (sal_uInt32 i = 0; i != nSlideTitleIndex; ++i) { - aPropItem.ReadUInt32( nTemp ); - aPropItem.SeekRel( nTemp ); + sal_uInt32 nTemp(0); + aPropItem.ReadUInt32(nTemp); + if (!aPropItem.good()) + { + bVecOk = false; + break; + } + auto nPos = aPropItem.Tell() + nTemp; + if (nPos != aPropItem.Seek(nPos)) + { + bVecOk = false; + break; + } } - for ( i = 0; i < nSlideTitleCount; i++ ) + } + if (bVecOk) + { + for (sal_uInt32 i = 0; i < nSlideTitleCount; ++i) { - if ( !aPropItem.Read( aUString, nType, false ) ) + if (!aPropItem.Read(aUString, nType, false)) break; OUString aString( aUString ); @@ -350,7 +366,8 @@ if ( pSection ) { Dictionary aDict; - if ( pSection->GetDictionary( aDict ) ) + pSection->GetDictionary(aDict); + if (!aDict.empty()) { Dictionary::const_iterator iter = aDict.find( OUString("_PID_HLINKS") ); @@ -519,7 +536,8 @@ break; rStCtrl.SeekRel( 8 ); rStCtrl.ReadUInt32( pPtr->nIndex ); - aHyperE.SeekToEndOfRecord( rStCtrl ); + if (!aHyperE.SeekToEndOfRecord(rStCtrl)) + break; } } } @@ -725,11 +743,17 @@ PptSlidePersistEntry* pE = pPersist; while( ( pE->aSlideAtom.nFlags & 4 ) && pE->aSlideAtom.nMasterId ) { - sal_uInt16 nNextMaster = pMasterPages->FindPage( pE->aSlideAtom.nMasterId ); + auto nOrigMasterId = pE->aSlideAtom.nMasterId; + sal_uInt16 nNextMaster = pMasterPages->FindPage(nOrigMasterId); if ( nNextMaster == PPTSLIDEPERSIST_ENTRY_NOTFOUND ) break; else pE = &(*pList)[ nNextMaster ]; + if (pE->aSlideAtom.nMasterId == nOrigMasterId) + { + SAL_WARN("filter.ms", "loop in atom chain"); + break; + } } SdrObject* pObj = ImportPageBackgroundObject( *pMPage, pE->nBackgroundOffset, true ); // import background if ( pObj ) @@ -741,7 +765,8 @@ DffRecordHeader aPageHd; if ( SeekToAktPage( &aPageHd ) ) { - while( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < aPageHd.GetRecEndFilePos() ) ) + auto nEndRecPos = SanitizeEndPos(rStCtrl, aPageHd.GetRecEndFilePos()); + while( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < nEndRecPos ) ) { DffRecordHeader aHd; ReadDffRecordHeader( rStCtrl, aHd ); @@ -762,7 +787,8 @@ if ( SeekToRec( rStCtrl, DFF_msofbtSpgrContainer, nEscherF002End, &aEscherObjListHd ) ) { sal_uInt32 nObjCount = 0; - while( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < aEscherObjListHd.GetRecEndFilePos() ) ) + auto nListEndRecPos = SanitizeEndPos(rStCtrl, aEscherObjListHd.GetRecEndFilePos()); + while( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < nListEndRecPos ) ) { DffRecordHeader aHd2; ReadDffRecordHeader( rStCtrl, aHd2 ); @@ -771,7 +797,8 @@ if ( nObjCount++ ) // skipping the first object { Rectangle aEmpty; - aHd2.SeekToBegOfRecord( rStCtrl ); + if (!aHd2.SeekToBegOfRecord( rStCtrl )) + break; SdrObject* pImpObj = ImportObj( rStCtrl, (void*)&aProcessData, aEmpty, aEmpty ); if ( pImpObj ) { @@ -780,7 +807,8 @@ } } } - aHd2.SeekToEndOfRecord( rStCtrl ); + if (!aHd2.SeekToEndOfRecord(rStCtrl)) + break; } } } @@ -793,7 +821,8 @@ DffRecordHeader aProgTagHd; if ( SeekToContentOfProgTag( 10, rStCtrl, aPageHd, aProgTagHd ) ) { - while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < aProgTagHd.GetRecEndFilePos() ) ) + auto nTagEndRecPos = SanitizeEndPos(rStCtrl, aProgTagHd.GetRecEndFilePos()); + while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < nTagEndRecPos ) ) { DffRecordHeader aProgTagContentHd; ReadDffRecordHeader( rStCtrl, aProgTagContentHd ); @@ -807,13 +836,19 @@ } break; } - aProgTagContentHd.SeekToEndOfRecord( rStCtrl ); + if (!aProgTagContentHd.SeekToEndOfRecord(rStCtrl)) + break; } } } break; } - aHd.SeekToEndOfRecord( rStCtrl ); + bool bSuccess = aHd.SeekToEndOfRecord(rStCtrl); + if (!bSuccess) + { + SAL_WARN("filter.ms", "Count not seek to end of record"); + break; + } } } rStCtrl.Seek( nFPosMerk ); @@ -896,7 +931,8 @@ if ( SeekToAktPage( &aPageHd ) ) { aPageHd.SeekToContent( rStCtrl ); - while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < aPageHd.GetRecEndFilePos() ) ) + auto nEndRecPos = SanitizeEndPos(rStCtrl, aPageHd.GetRecEndFilePos()); + while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < nEndRecPos ) ) { DffRecordHeader aHd; ReadDffRecordHeader( rStCtrl, aHd ); @@ -907,7 +943,8 @@ DffRecordHeader aProgTagHd; if ( SeekToContentOfProgTag( 10, rStCtrl, aPageHd, aProgTagHd ) ) { - while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < aProgTagHd.GetRecEndFilePos() ) ) + auto nHdEndRecPos = SanitizeEndPos(rStCtrl, aProgTagHd.GetRecEndFilePos()); + while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < nHdEndRecPos ) ) { DffRecordHeader aProgTagContentHd; ReadDffRecordHeader( rStCtrl, aProgTagContentHd ); @@ -927,7 +964,8 @@ case PPT_PST_SlideTime10Atom : // ??? don't know, this atom is always 8 bytes big break; // and is appearing in nearly every l10 progtag } - aProgTagContentHd.SeekToEndOfRecord( rStCtrl ); + if (!aProgTagContentHd.SeekToEndOfRecord(rStCtrl)) + break; } } } @@ -939,7 +977,8 @@ break; } - aHd.SeekToEndOfRecord( rStCtrl ); + if (!aHd.SeekToEndOfRecord(rStCtrl)) + break; } ImportPageEffect( (SdPage*)pPage, bNewAnimationsUsed ); } @@ -1483,7 +1522,7 @@ DffRecordHeader aPageRecHd; if ( SeekToAktPage( &aPageRecHd ) ) { - sal_uLong nPageRecEnd = aPageRecHd.GetRecEndFilePos(); + sal_uLong nPageRecEnd = SanitizeEndPos(rStCtrl, aPageRecHd.GetRecEndFilePos()); bool bTryTwice = ( eAktPageKind == PPT_SLIDEPAGE ); bool bSSSlideInfoAtom = false; @@ -1762,7 +1801,8 @@ } } } - aHd.SeekToEndOfRecord( rStCtrl ); + if (!aHd.SeekToEndOfRecord(rStCtrl)) + break; } if ( bTryTwice && ( bSSSlideInfoAtom == false ) ) { @@ -1776,12 +1816,12 @@ assert( !pPageList->is_null( nMasterNum ) ); const PptSlidePersistEntry& rE = (*pPageList)[ nMasterNum ]; sal_uInt32 nOfs = rE.aPersistAtom.nReserved; - if ( nOfs ) - { - rStCtrl.Seek( nOfs ); - nPageRecEnd = nOfs + 16; - continue; - } + if ( nOfs ) + { + rStCtrl.Seek( nOfs ); + nPageRecEnd = nOfs + 16; + continue; + } } } @@ -1924,7 +1964,10 @@ } } if ( !bDone ) - aSoundRecHd.SeekToEndOfRecord( rStCtrl ); + { + if (!aSoundRecHd.SeekToEndOfRecord(rStCtrl)) + break; + } } } } @@ -1940,7 +1983,8 @@ if ( pHd ) { pHd->SeekToContent( rStCtrl ); - while ( ( rStCtrl.Tell() < pHd->GetRecEndFilePos() ) && aRetVal.isEmpty() ) + auto nEndRecPos = SanitizeEndPos(rStCtrl, pHd->GetRecEndFilePos()); + while ( ( rStCtrl.Tell() < nEndRecPos ) && aRetVal.isEmpty() ) { DffRecordHeader aHdMovie; ReadDffRecordHeader( rStCtrl, aHdMovie ); @@ -1960,7 +2004,8 @@ if ( nRef == nMediaRef ) { aExVideoHd.SeekToContent( rStCtrl ); - while( rStCtrl.Tell() < aExVideoHd.GetRecEndFilePos() ) + auto nHdEndRecPos = SanitizeEndPos(rStCtrl, aExVideoHd.GetRecEndFilePos()); + while (rStCtrl.Tell() < nHdEndRecPos) { DffRecordHeader aHd; ReadDffRecordHeader( rStCtrl, aHd ); @@ -1982,7 +2027,8 @@ } break; } - aHd.SeekToEndOfRecord( rStCtrl ); + if (!aHd.SeekToEndOfRecord(rStCtrl)) + break; } break; } @@ -1991,7 +2037,8 @@ } break; } - aHdMovie.SeekToEndOfRecord( rStCtrl ); + if (!aHdMovie.SeekToEndOfRecord(rStCtrl)) + break; } } return aRetVal; @@ -2529,7 +2576,7 @@ DffRecordHeader& rHdClientData = *maShapeRecords.Current(); while( true ) { - sal_uInt32 nClientDataLen = rHdClientData.GetRecEndFilePos(); + sal_uInt32 nClientDataLen = SanitizeEndPos(rSt, rHdClientData.GetRecEndFilePos()); DffRecordHeader aHd; do { @@ -2640,7 +2687,8 @@ } break; } - aHd.SeekToEndOfRecord( rSt ); + if (!aHd.SeekToEndOfRecord(rSt)) + break; } while( ( rSt.GetError() == 0 ) && ( rSt.Tell() < nClientDataLen ) ); diff -Nru libreoffice-l10n-4.4.2/sd/source/filter/ppt/propread.cxx libreoffice-l10n-4.4.6~rc3/sd/source/filter/ppt/propread.cxx --- libreoffice-l10n-4.4.2/sd/source/filter/ppt/propread.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/filter/ppt/propread.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -73,7 +73,7 @@ bool PropItem::Read( OUString& rString, sal_uInt32 nStringType, bool bAlign ) { - sal_uInt32 i, nItemSize, nType, nItemPos; + sal_uInt32 nType, nItemPos; bool bRetValue = false; nItemPos = Tell(); @@ -86,14 +86,24 @@ else nType = nStringType & VT_TYPEMASK; - nItemSize = 0; // Initialize in case stream fails. - ReadUInt32( nItemSize ); + sal_uInt32 nItemSize(0); // Initialize in case stream fails. + ReadUInt32(nItemSize); switch( nType ) { case VT_LPSTR : { - if ( nItemSize ) + if (nItemSize) + { + auto nMaxSizePossible = remainingSize(); + if (nItemSize > nMaxSizePossible) + { + SAL_WARN("sd.filter", "String of Len " << nItemSize << " claimed, only " << nMaxSizePossible << " possible"); + nItemSize = nMaxSizePossible; + } + } + + if (nItemSize) { try { @@ -103,8 +113,8 @@ nItemSize >>= 1; if ( nItemSize > 1 ) { - sal_Unicode* pWString = (sal_Unicode*)pString; - for ( i = 0; i < nItemSize; i++ ) + sal_Unicode* pWString = reinterpret_cast(pString); + for (sal_uInt32 i = 0; i < nItemSize; ++i) ReadUInt16( pWString[ i ] ); rString = OUString(pWString, lcl_getMaxSafeStrLen(nItemSize)); } @@ -138,14 +148,24 @@ case VT_LPWSTR : { - if ( nItemSize ) + if (nItemSize) + { + auto nMaxSizePossible = remainingSize() / sizeof(sal_Unicode); + if (nItemSize > nMaxSizePossible) + { + SAL_WARN("sd.filter", "String of Len " << nItemSize << " claimed, only " << nMaxSizePossible << " possible"); + nItemSize = nMaxSizePossible; + } + } + + if (nItemSize) { try { sal_Unicode* pString = new sal_Unicode[ nItemSize ]; - for ( i = 0; i < nItemSize; i++ ) + for (sal_uInt32 i = 0; i < nItemSize; ++i) ReadUInt16( pString[ i ] ); - if ( pString[ i - 1 ] == 0 ) + if ( pString[ nItemSize - 1 ] == 0 ) { if ( (sal_uInt16)nItemSize > 1 ) rString = OUString(pString, lcl_getMaxSafeStrLen(nItemSize)); @@ -249,10 +269,8 @@ maEntries.push_back( new PropEntry( nId, pBuf, nBufSize, mnTextEnc ) ); } -bool Section::GetDictionary( Dictionary& rDict ) +void Section::GetDictionary(Dictionary& rDict) { - bool bRetValue = false; - boost::ptr_vector::iterator iter; for (iter = maEntries.begin(); iter != maEntries.end(); ++iter) { @@ -260,53 +278,55 @@ break; } - if ( iter != maEntries.end() ) + if (iter == maEntries.end()) + return; + + SvMemoryStream aStream( iter->mpBuf, iter->mnSize, STREAM_READ ); + aStream.Seek( STREAM_SEEK_TO_BEGIN ); + sal_uInt32 nDictCount(0); + aStream.ReadUInt32( nDictCount ); + for (sal_uInt32 i = 0; i < nDictCount; ++i) { - sal_uInt32 nDictCount, nId, nSize, nPos; - SvMemoryStream aStream( (sal_Int8*)iter->mpBuf, iter->mnSize, STREAM_READ ); - aStream.Seek( STREAM_SEEK_TO_BEGIN ); - aStream.ReadUInt32( nDictCount ); - for ( sal_uInt32 i = 0; i < nDictCount; i++ ) + sal_uInt32 nId(0), nSize(0); + aStream.ReadUInt32(nId).ReadUInt32(nSize); + if (!aStream.good() || nSize > aStream.remainingSize()) + break; + if (mnTextEnc == RTL_TEXTENCODING_UCS2) + nSize >>= 1; + if (!nSize) + continue; + OUString aString; + try { - aStream.ReadUInt32( nId ).ReadUInt32( nSize ); - if ( nSize ) + if ( mnTextEnc == RTL_TEXTENCODING_UCS2 ) { - OUString aString; - nPos = aStream.Tell(); - try - { - sal_Char* pString = new sal_Char[ nSize ]; - aStream.Read( pString, nSize ); - if ( mnTextEnc == RTL_TEXTENCODING_UCS2 ) - { - nSize >>= 1; - aStream.Seek( nPos ); - sal_Unicode* pWString = (sal_Unicode*)pString; - for ( i = 0; i < nSize; i++ ) - aStream.ReadUInt16( pWString[ i ] ); - aString = OUString(pWString, lcl_getMaxSafeStrLen(nSize)); - } - else - aString = OUString(pString, lcl_getMaxSafeStrLen(nSize), mnTextEnc); - delete[] pString; - } - catch( const std::bad_alloc& ) - { - OSL_FAIL( "sd Section::GetDictionary bad alloc" ); - } - if ( aString.isEmpty() ) - break; - rDict.insert( std::make_pair(aString,nId) ); + sal_Unicode* pWString = new sal_Unicode[nSize]; + for (sal_uInt32 j = 0; j < nSize; ++j) + aStream.ReadUInt16(pWString[j]); + aString = OUString(pWString, lcl_getMaxSafeStrLen(nSize)); + delete[] pWString; + } + else + { + sal_Char* pString = new sal_Char[nSize]; + aStream.Read(pString, nSize); + aString = OUString(pString, lcl_getMaxSafeStrLen(nSize), mnTextEnc); + delete[] pString; } - bRetValue = true; } + catch( const std::bad_alloc& ) + { + OSL_FAIL( "sd Section::GetDictionary bad alloc" ); + } + if (aString.isEmpty()) + break; + rDict.insert( std::make_pair(aString,nId) ); } - return bRetValue; } void Section::Read( SvStorageStream *pStrm ) { - sal_uInt32 i, nSecOfs, nSecSize, nPropCount, nPropId, nPropOfs, nPropType, nPropSize, nCurrent, nVectorCount, nTemp, nStrmSize; + sal_uInt32 nSecOfs, nPropSize, nStrmSize; nSecOfs = pStrm->Tell(); pStrm->Seek( STREAM_SEEK_TO_END ); @@ -314,16 +334,22 @@ pStrm->Seek( nSecOfs ); mnTextEnc = RTL_TEXTENCODING_MS_1252; + sal_uInt32 nSecSize(0), nPropCount(0); pStrm->ReadUInt32( nSecSize ).ReadUInt32( nPropCount ); - while( nPropCount-- && ( pStrm->GetError() == ERRCODE_NONE ) ) + while (nPropCount--) { - pStrm->ReadUInt32( nPropId ).ReadUInt32( nPropOfs ); - nCurrent = pStrm->Tell(); - pStrm->Seek( nPropOfs + nSecOfs ); + sal_uInt32 nPropId(0), nPropOfs(0); + pStrm->ReadUInt32(nPropId).ReadUInt32(nPropOfs); + if (!pStrm->good()) + break; + auto nCurrent = pStrm->Tell(); + sal_uInt64 nOffset = nPropOfs + nSecOfs; + if (nOffset != pStrm->Seek(nOffset)) + break; if ( nPropId ) // do not read dictionary { - - pStrm->ReadUInt32( nPropType ); + sal_uInt32 nPropType(0), nVectorCount(0); + pStrm->ReadUInt32(nPropType); nPropSize = 4; @@ -338,13 +364,14 @@ bool bVariant = ( nPropType == VT_VARIANT ); - for ( i = 0; nPropSize && ( i < nVectorCount ); i++ ) + for (sal_uInt32 i = 0; nPropSize && ( i < nVectorCount ); ++i) { if ( bVariant ) { pStrm->ReadUInt32( nPropType ); nPropSize += 4; } + sal_uInt32 nTemp(0); switch( nPropType ) { case VT_UI1 : @@ -412,7 +439,11 @@ if ( nPropSize ) { if ( ( nVectorCount - i ) > 1 ) - pStrm->Seek( nPropOfs + nSecOfs + nPropSize ); + { + nOffset = nPropOfs + nSecOfs + nPropSize; + if (nOffset != pStrm->Seek(nOffset)) + break; + } } else break; @@ -429,7 +460,7 @@ if( nPropSize > nSecSize - nSecOfs ) nPropSize = nSecSize - nSecOfs; sal_uInt8* pBuf = new sal_uInt8[ nPropSize ]; - pStrm->Read( pBuf, nPropSize ); + nPropSize = pStrm->Read(pBuf, nPropSize); AddProperty( nPropId, pBuf, nPropSize ); delete[] pBuf; } @@ -438,11 +469,11 @@ PropItem aPropItem; if ( GetProperty( 1, aPropItem ) ) { - sal_uInt16 nCodePage; aPropItem.ReadUInt32( nPropType ); if ( nPropType == VT_I2 ) { - aPropItem.ReadUInt16( nCodePage ); + sal_uInt16 nCodePage(0); + aPropItem.ReadUInt16(nCodePage); if ( nCodePage == 1200 ) { @@ -464,14 +495,25 @@ } else { - sal_uInt32 nDictCount, nSize; - pStrm->ReadUInt32( nDictCount ); - for ( i = 0; i < nDictCount; i++ ) + sal_uInt32 nDictCount(0); + pStrm->ReadUInt32(nDictCount); + auto nMaxRecordsPossible = pStrm->remainingSize() / (sizeof(sal_uInt32)*2); + if (nDictCount > nMaxRecordsPossible) + { + SAL_WARN("sd.filter", "Dictionary count of " << nDictCount << " claimed, only " << nMaxRecordsPossible << " possible"); + nDictCount = nMaxRecordsPossible; + } + for (sal_uInt32 i = 0; i < nDictCount; ++i) { + sal_uInt32 nSize(0); pStrm->ReadUInt32( nSize ).ReadUInt32( nSize ); - pStrm->SeekRel( nSize ); + if (!pStrm->good()) + break; + sal_uInt64 nPos = pStrm->Tell() + nSize; + if (nPos != pStrm->Seek(nPos)) + break; } - nSize = pStrm->Tell(); + sal_uInt32 nSize = pStrm->Tell(); pStrm->Seek( nPropOfs + nSecOfs ); nSize -= pStrm->Tell(); if ( nSize > nStrmSize ) @@ -480,11 +522,11 @@ break; } sal_uInt8* pBuf = new sal_uInt8[ nSize ]; - pStrm->Read( pBuf, nSize ); + nSize = pStrm->Read(pBuf, nSize); AddProperty( 0xffffffff, pBuf, nSize ); delete[] pBuf; } - pStrm->Seek( nCurrent ); + pStrm->Seek(nCurrent); } pStrm->Seek( nSecOfs + nSecSize ); } diff -Nru libreoffice-l10n-4.4.2/sd/source/filter/ppt/propread.hxx libreoffice-l10n-4.4.6~rc3/sd/source/filter/ppt/propread.hxx --- libreoffice-l10n-4.4.2/sd/source/filter/ppt/propread.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/filter/ppt/propread.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -145,8 +145,8 @@ Section( const Section& rSection ); Section& operator=( const Section& rSection ); - bool GetProperty( sal_uInt32 nId, PropItem& rPropItem ); - bool GetDictionary( Dictionary& rDict ); + bool GetProperty( sal_uInt32 nId, PropItem& rPropItem ); + void GetDictionary( Dictionary& rDict ); const sal_uInt8* GetFMTID() const { return aFMTID; }; void Read( SvStorageStream* pStrm ); }; diff -Nru libreoffice-l10n-4.4.2/sd/source/ui/app/sdmod2.cxx libreoffice-l10n-4.4.6~rc3/sd/source/ui/app/sdmod2.cxx --- libreoffice-l10n-4.4.2/sd/source/ui/app/sdmod2.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/ui/app/sdmod2.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -268,6 +268,13 @@ { aRepresentation = pPage->GetName(); } + else + { + DocumentType eDocType = pDoc ? pDoc->GetDocumentType() : DOCUMENT_TYPE_IMPRESS; + aRepresentation = ( ( eDocType == DOCUMENT_TYPE_IMPRESS ) + ? SdResId(STR_FIELD_PLACEHOLDER_SLIDENAME).toString() + : SdResId(STR_FIELD_PLACEHOLDER_PAGENAME).toString() ); + } pInfo->SetRepresentation( aRepresentation ); } diff -Nru libreoffice-l10n-4.4.2/sd/source/ui/app/sdxfer.cxx libreoffice-l10n-4.4.6~rc3/sd/source/ui/app/sdxfer.cxx --- libreoffice-l10n-4.4.2/sd/source/ui/app/sdxfer.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/ui/app/sdxfer.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -518,13 +518,27 @@ } else if( nFormat == FORMAT_GDIMETAFILE ) { - if( mpSdViewIntern ) + if (mpSdViewIntern) + { + const bool bToggleOnlineSpell = mpSdDrawDocumentIntern && mpSdDrawDocumentIntern->GetOnlineSpell(); + if (bToggleOnlineSpell) + mpSdDrawDocumentIntern->SetOnlineSpell(false); bOK = SetGDIMetaFile( mpSdViewIntern->GetMarkedObjMetaFile( true ), rFlavor ); + if (bToggleOnlineSpell) + mpSdDrawDocumentIntern->SetOnlineSpell(true); + } } else if( FORMAT_BITMAP == nFormat || SOT_FORMATSTR_ID_PNG == nFormat ) { - if( mpSdViewIntern ) + if (mpSdViewIntern) + { + const bool bToggleOnlineSpell = mpSdDrawDocumentIntern && mpSdDrawDocumentIntern->GetOnlineSpell(); + if (bToggleOnlineSpell) + mpSdDrawDocumentIntern->SetOnlineSpell(false); bOK = SetBitmapEx( mpSdViewIntern->GetMarkedObjBitmapEx(true), rFlavor ); + if (bToggleOnlineSpell) + mpSdDrawDocumentIntern->SetOnlineSpell(true); + } } else if( ( nFormat == FORMAT_STRING ) && mpBookmark ) { diff -Nru libreoffice-l10n-4.4.2/sd/source/ui/app/strings.src libreoffice-l10n-4.4.6~rc3/sd/source/ui/app/strings.src --- libreoffice-l10n-4.4.2/sd/source/ui/app/strings.src 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/ui/app/strings.src 2015-10-27 20:55:54.000000000 +0000 @@ -1066,6 +1066,16 @@ Text [ en-US ] = "" ; }; +String STR_FIELD_PLACEHOLDER_SLIDENAME +{ + Text [ en-US ] = "" ; +}; + +String STR_FIELD_PLACEHOLDER_PAGENAME +{ + Text [ en-US ] = "" ; +}; + String STR_PLACEHOLDER_DESCRIPTION_NOTES { Text [ en-US ] = "Notes Area"; diff -Nru libreoffice-l10n-4.4.2/sd/source/ui/func/fudraw.cxx libreoffice-l10n-4.4.6~rc3/sd/source/ui/func/fudraw.cxx --- libreoffice-l10n-4.4.2/sd/source/ui/func/fudraw.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/ui/func/fudraw.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -164,7 +164,12 @@ if (rMarkList.GetMarkCount() == 1) { SdrMark* pMark = rMarkList.GetMark(0); - bIsImageSelected = pMark->GetMarkedSdrObj()->GetObjIdentifier() == OBJ_GRAF; + // tdf#89758 Extra check to avoid interactive crop preview from being + // proportionally scaled by default. + if (mpView->GetDragMode() != SDRDRAG_CROP) + { + bIsImageSelected = pMark->GetMarkedSdrObj()->GetObjIdentifier() == OBJ_GRAF; + } } } diff -Nru libreoffice-l10n-4.4.2/sd/source/ui/func/fuolbull.cxx libreoffice-l10n-4.4.6~rc3/sd/source/ui/func/fuolbull.cxx --- libreoffice-l10n-4.4.2/sd/source/ui/func/fuolbull.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/ui/func/fuolbull.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -182,17 +182,12 @@ sal_uInt16 nIdx = pItem->GetValue(); bool bToggle = false; - bool bSwitchOff = false; if( nIdx == (sal_uInt16)0xFFFF ) { // If the nIdx is (sal_uInt16)0xFFFF, means set bullet status to on/off nIdx = 1; bToggle = true; } - else if (nIdx == DEFAULT_NONE) - { - bSwitchOff = true; - } nIdx--; sal_uInt32 nNumItemId = SID_ATTR_NUMBERING_RULE; @@ -266,18 +261,11 @@ if ( pOLV ) { - if ( bSwitchOff ) - { - pOLV->SwitchOffBulletsNumbering( true ); - } - else - { - pOLV->ToggleBulletsNumbering( bToggle, nSId == FN_SVX_SET_BULLET, bInMasterView ? 0 : pNumRule ); - } + pOLV->ToggleBulletsNumbering( bToggle, nSId == FN_SVX_SET_BULLET, bInMasterView ? 0 : pNumRule ); } else { - mpView->ChangeMarkedObjectsBulletsNumbering( bToggle, nSId == FN_SVX_SET_BULLET, bInMasterView ? 0 : pNumRule, bSwitchOff ); + mpView->ChangeMarkedObjectsBulletsNumbering( bToggle, nSId == FN_SVX_SET_BULLET, bInMasterView ? 0 : pNumRule, false ); } if ( bInMasterView ) { diff -Nru libreoffice-l10n-4.4.2/sd/source/ui/func/fusel.cxx libreoffice-l10n-4.4.6~rc3/sd/source/ui/func/fusel.cxx --- libreoffice-l10n-4.4.2/sd/source/ui/func/fusel.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/ui/func/fusel.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -667,9 +667,12 @@ **************************************************************/ if (mpView->PickObj(aMDPos, mpView->getHitTolLog(), pObj, pPV, SDRSEARCH_ALSOONMASTER | SDRSEARCH_BEFOREMARK)) { - mpView->UnmarkAllObj(); - mpView->MarkObj(pObj,pPV,false,false); - return true; + if (pPV->IsObjSelectable(pObj)) + { + mpView->UnmarkAllObj(); + mpView->MarkObj(pObj,pPV,false,false); + return true; + } } /************************************************************** * Toggle between selection and rotation diff -Nru libreoffice-l10n-4.4.2/sd/source/ui/func/futext.cxx libreoffice-l10n-4.4.6~rc3/sd/source/ui/func/futext.cxx --- libreoffice-l10n-4.4.2/sd/source/ui/func/futext.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/ui/func/futext.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -656,9 +656,12 @@ **************************************************************/ if (mpView->PickObj(aMDPos, mpView->getHitTolLog(), pObj, pPV, SDRSEARCH_ALSOONMASTER | SDRSEARCH_BEFOREMARK)) { - mpView->UnmarkAllObj(); - mpView->MarkObj(pObj,pPV,false,false); - return (bReturn); + if (pPV->IsObjSelectable(pObj)) + { + mpView->UnmarkAllObj(); + mpView->MarkObj(pObj,pPV,false,false); + return bReturn; + } } } } diff -Nru libreoffice-l10n-4.4.2/sd/source/ui/inc/strings.hrc libreoffice-l10n-4.4.6~rc3/sd/source/ui/inc/strings.hrc --- libreoffice-l10n-4.4.2/sd/source/ui/inc/strings.hrc 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/ui/inc/strings.hrc 2015-10-27 20:55:54.000000000 +0000 @@ -367,6 +367,8 @@ #define STR_UNDO_HANGULHANJACONVERSION (RID_APP_START+696) #define STR_FIELD_PLACEHOLDER_COUNT (RID_APP_START+697) +#define STR_FIELD_PLACEHOLDER_SLIDENAME (RID_APP_START+698) +#define STR_FIELD_PLACEHOLDER_PAGENAME (RID_APP_START+699) #define STR_LEFT_PANE_DRAW_TITLE (RID_APP_START+700) #define STR_LEFT_PANE_IMPRESS_TITLE (RID_APP_START+701) diff -Nru libreoffice-l10n-4.4.2/sd/source/ui/remotecontrol/BluetoothServer.cxx libreoffice-l10n-4.4.6~rc3/sd/source/ui/remotecontrol/BluetoothServer.cxx --- libreoffice-l10n-4.4.2/sd/source/ui/remotecontrol/BluetoothServer.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/ui/remotecontrol/BluetoothServer.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1345,7 +1345,7 @@ } SOCKADDR aName; - int aNameSize = sizeof(aAddr); + int aNameSize = sizeof(aName); getsockname( aSocket, &aName, &aNameSize ); // Retrieve the local address and port CSADDR_INFO aAddrInfo; diff -Nru libreoffice-l10n-4.4.2/sd/source/ui/unoidl/unomodel.cxx libreoffice-l10n-4.4.6~rc3/sd/source/ui/unoidl/unomodel.cxx --- libreoffice-l10n-4.4.2/sd/source/ui/unoidl/unomodel.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/ui/unoidl/unomodel.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -929,6 +929,12 @@ return (::cppu::OWeakObject * )new SvxUnoTextField( text::textfield::Type::PRESENTATION_DATE_TIME ); } + if( aServiceSpecifier == "com.sun.star.text.TextField.PageName" || + aServiceSpecifier == "com.sun.star.text.textfield.PageName" ) + { + return (::cppu::OWeakObject * )new SvxUnoTextField( text::textfield::Type::PAGE_NAME ); + } + if( aServiceSpecifier == "com.sun.star.xml.NamespaceMap" ) { static sal_uInt16 aWhichIds[] = { SDRATTR_XMLATTRIBUTES, EE_CHAR_XMLATTRIBS, EE_PARA_XMLATTRIBS, 0 }; @@ -1845,6 +1851,25 @@ return bPrintable; } + +namespace +{ + sal_Int16 CalcOutputPageNum(vcl::PDFExtOutDevData* pPDFExtOutDevData, SdDrawDocument *pDoc, sal_Int16 nPageNumber) + { + //export all pages, simple one to one case + if (pPDFExtOutDevData && pPDFExtOutDevData->GetIsExportHiddenSlides()) + return nPageNumber-1; + //check all preceding pages, and only count non-hidden ones + sal_Int16 nRet = 0; + for (sal_Int16 i = 0; i < nPageNumber-1; ++i) + { + if (!(pDoc->GetSdPage(i, PK_STANDARD))->IsExcluded()) + ++nRet; + } + return nRet; + } +} + void SAL_CALL SdXImpressDocument::render( sal_Int32 nRenderer, const uno::Any& rSelection, const uno::Sequence< beans::PropertyValue >& rxOptions ) throw (lang::IllegalArgumentException, uno::RuntimeException, std::exception) @@ -2129,9 +2154,12 @@ OUString aPageName = mpDoc->GetSdPage( (sal_uInt16)nPageNumber - 1 , PK_STANDARD )->GetName(); if( !aPageName.isEmpty() ) { + // Destination PageNum + const sal_Int32 nDestPageNum = CalcOutputPageNum(pPDFExtOutDevData, mpDoc, nPageNumber); + // insert the bookmark to this page into the NamedDestinations if( pPDFExtOutDevData->GetIsExportNamedDestinations() ) - pPDFExtOutDevData->CreateNamedDest( aPageName, aPageRect, nPageNumber - 1 ); + pPDFExtOutDevData->CreateNamedDest(aPageName, aPageRect, nDestPageNum); // add the name to the outline, (almost) same code as in sc/source/ui/unoobj/docuno.cxx // issue #i40318. @@ -2140,7 +2168,7 @@ { // Destination Export const sal_Int32 nDestId = - pPDFExtOutDevData->CreateDest( aPageRect , nPageNumber - 1 ); + pPDFExtOutDevData->CreateDest(aPageRect , nDestPageNum); // Create a new outline item: pPDFExtOutDevData->CreateOutlineItem( -1 , aPageName, nDestId ); diff -Nru libreoffice-l10n-4.4.2/sd/source/ui/view/drtxtob1.cxx libreoffice-l10n-4.4.6~rc3/sd/source/ui/view/drtxtob1.cxx --- libreoffice-l10n-4.4.2/sd/source/ui/view/drtxtob1.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/ui/view/drtxtob1.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -396,19 +396,8 @@ { FuText::ChangeFontSize( nSlot == SID_GROW_FONT_SIZE, pOLV, pFontList, mpView ); if( pOLV ) - { - SfxItemSet aSet( pOLV->GetEditView().GetAttribs() ); - SfxItemSet aNewAttrs (pOLV->GetEditView().GetEmptyItemSet() ); - - aNewAttrs.Put( aSet.Get( EE_CHAR_FONTHEIGHT ), EE_CHAR_FONTHEIGHT ); - aNewAttrs.Put( aSet.Get( EE_CHAR_FONTHEIGHT_CJK ), EE_CHAR_FONTHEIGHT_CJK ); - aNewAttrs.Put( aSet.Get( EE_CHAR_FONTHEIGHT_CTL ), EE_CHAR_FONTHEIGHT_CTL ); - - mpView->SetAttributes( aNewAttrs ); - } - Invalidate(); - // to refresh preview (in outline mode), slot has to be invalidated: - mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, true, false ); + pOLV->SetAttribs( pOLV->GetEditView().GetEmptyItemSet() ); + mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_ATTR_CHAR_FONTHEIGHT ); } rReq.Done(); } diff -Nru libreoffice-l10n-4.4.2/sd/source/ui/view/drviewsf.cxx libreoffice-l10n-4.4.6~rc3/sd/source/ui/view/drviewsf.cxx --- libreoffice-l10n-4.4.2/sd/source/ui/view/drviewsf.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sd/source/ui/view/drviewsf.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -576,9 +576,6 @@ boost::scoped_ptr pNumRule; const SfxPoolItem* pTmpItem=NULL; sal_uInt16 nNumItemId = SID_ATTR_NUMBERING_RULE; - - rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,DEFAULT_NONE)); - rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,DEFAULT_NONE)); sal_uInt16 nActNumLvl = mpDrawView->GetSelectionLevel(); pTmpItem=GetNumBulletItem(aNewAttr, nNumItemId); diff -Nru libreoffice-l10n-4.4.2/sdext/source/pdfimport/tree/drawtreevisiting.cxx libreoffice-l10n-4.4.6~rc3/sdext/source/pdfimport/tree/drawtreevisiting.cxx --- libreoffice-l10n-4.4.2/sdext/source/pdfimport/tree/drawtreevisiting.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sdext/source/pdfimport/tree/drawtreevisiting.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -190,74 +190,55 @@ bool bWasTransformed ) { - double rel_x = rElem.x, rel_y = rElem.y; - rProps[ "draw:z-index" ] = OUString::number( rElem.ZOrder ); rProps[ "draw:style-name"] = rEmitContext.rStyles.getStyleName( rElem.StyleId ); - rProps[ "svg:width" ] = convertPixelToUnitString( rElem.w ); - rProps[ "svg:height" ] = convertPixelToUnitString( rElem.h ); if (rElem.IsForText) rProps["draw:text-style-name"] = rEmitContext.rStyles.getStyleName(rElem.TextStyleId); const GraphicsContext& rGC = rEmitContext.rProcessor.getGraphicsContext( rElem.GCId ); - if( rGC.Transformation.isIdentity() || bWasTransformed ) + + if (bWasTransformed) { - rProps[ "svg:x" ] = convertPixelToUnitString( rel_x ); - rProps[ "svg:y" ] = convertPixelToUnitString( rel_y ); + rProps[ "svg:x" ] = convertPixelToUnitString(rElem.x); + rProps[ "svg:y" ] = convertPixelToUnitString(rElem.y); + rProps[ "svg:width" ] = convertPixelToUnitString(rElem.w); + rProps[ "svg:height" ] = convertPixelToUnitString(rElem.h); } else { - basegfx::B2DTuple aScale, aTranslation; - double fRotate, fShearX; - - rGC.Transformation.decompose( aScale, aTranslation, fRotate, fShearX ); + OUStringBuffer aBuf(256); - OUStringBuffer aBuf( 256 ); - - // TODO(F2): general transformation case missing; if implemented, note - // that ODF rotation is oriented the other way - - // vertical mirroring is done by horizontally mirroring and rotaing 180 degree - // quaint ! - if( rElem.MirrorVertical ) - fRotate += M_PI; - - // First check here is to skip image frame case - if (rElem.IsForText && - (aScale.getX() < 0) && - (aScale.getY() > 0) && - (basegfx::fTools::equalZero(aScale.getX() + aScale.getY(), 0.0001))) - { - fRotate += M_PI; - } + basegfx::B2DHomMatrix mat(rGC.Transformation); - // build transformation string - if( fShearX != 0.0 ) - { - aBuf.appendAscii( "skewX( " ); - aBuf.append( fShearX ); - aBuf.appendAscii( " )" ); - } - if( fRotate != 0.0 ) + if (rElem.MirrorVertical) { - if( !aBuf.isEmpty() ) - aBuf.append( ' ' ); - aBuf.appendAscii( "rotate( " ); - aBuf.append( -fRotate ); - aBuf.appendAscii( " )" ); - - } - if( !aBuf.isEmpty() ) - aBuf.append( ' ' ); - aBuf.appendAscii( "translate( " ); - aBuf.append( convertPixelToUnitString( rel_x ) ); - aBuf.append( ' ' ); - aBuf.append( convertPixelToUnitString( rel_y ) ); - aBuf.appendAscii( " )" ); + basegfx::B2DHomMatrix mat2; + mat2.translate(-0.5, -0.5); + mat2.scale(-1, -1); + mat2.translate(0.5, 0.5); + mat = mat * mat2; + } + + double scale = convPx2mm(100); + mat.scale(scale, scale); + + aBuf.appendAscii("matrix("); + aBuf.append(mat.get(0, 0)); + aBuf.append(' '); + aBuf.append(mat.get(1, 0)); + aBuf.append(' '); + aBuf.append(mat.get(0, 1)); + aBuf.append(' '); + aBuf.append(mat.get(1, 1)); + aBuf.append(' '); + aBuf.append(mat.get(0, 2)); + aBuf.append(' '); + aBuf.append(mat.get(1, 2)); + aBuf.appendAscii(")"); - rProps[ "draw:transform" ] = aBuf.makeStringAndClear(); + rProps["draw:transform"] = aBuf.makeStringAndClear(); } } @@ -905,7 +886,7 @@ double fRotate, fShearX; basegfx::B2DTuple aScale, aTranslation; rGC.Transformation.decompose(aScale, aTranslation, fRotate, fShearX); - double textScale = -100 * aScale.getX() / aScale.getY(); + double textScale = 100 * aScale.getX() / aScale.getY(); if (((textScale >= 1) && (textScale <= 99)) || ((textScale >= 101) && (textScale <= 999))) { diff -Nru libreoffice-l10n-4.4.2/sdext/source/pdfimport/tree/pdfiprocessor.cxx libreoffice-l10n-4.4.6~rc3/sdext/source/pdfimport/tree/pdfiprocessor.cxx --- libreoffice-l10n-4.4.2/sdext/source/pdfimport/tree/pdfiprocessor.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sdext/source/pdfimport/tree/pdfiprocessor.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -282,15 +282,22 @@ { double ascent = getFont(getCurrentContext().FontId).ascent; - double ascentdx = rFontMatrix.m01 * ascent * fontSize; - double ascentdy = rFontMatrix.m11 * ascent * fontSize; + basegfx::B2DHomMatrix fontMatrix( + rFontMatrix.m00, rFontMatrix.m01, 0.0, + rFontMatrix.m10, rFontMatrix.m11, 0.0); + fontMatrix.scale(fontSize, fontSize); + + basegfx::B2DHomMatrix totalTextMatrix1(fontMatrix); + basegfx::B2DHomMatrix totalTextMatrix2(fontMatrix); + totalTextMatrix1.translate(rRect.X1, rRect.Y1); + totalTextMatrix2.translate(rRect.X2, rRect.Y2); + + basegfx::B2DHomMatrix corrMatrix; + corrMatrix.scale(1.0, -1.0); + corrMatrix.translate(0.0, ascent); + totalTextMatrix1 = totalTextMatrix1 * corrMatrix; + totalTextMatrix2 = totalTextMatrix2 * corrMatrix; - basegfx::B2DHomMatrix totalTextMatrix1( - rFontMatrix.m00, rFontMatrix.m01, rRect.X1 + ascentdx, - rFontMatrix.m10, rFontMatrix.m11, rRect.Y1 + ascentdy); - basegfx::B2DHomMatrix totalTextMatrix2( - rFontMatrix.m00, rFontMatrix.m01, rRect.X2 + ascentdx, - rFontMatrix.m10, rFontMatrix.m11, rRect.Y2 + ascentdy); totalTextMatrix1 *= getCurrentContext().Transformation; totalTextMatrix2 *= getCurrentContext().Transformation; @@ -334,72 +341,23 @@ void PDFIProcessor::setupImage(ImageId nImage) { - const GraphicsContext& rGC( getCurrentContext() ); + const GraphicsContext& rGC(getCurrentContext()); - basegfx::B2DHomMatrix aTrans( rGC.Transformation ); - - // check for rotation, which is the other way around in ODF basegfx::B2DTuple aScale, aTranslation; double fRotate, fShearX; - rGC.Transformation.decompose( aScale, aTranslation, fRotate, fShearX ); - // TODDO(F4): correcting rotation when fShearX != 0 ? - if( fRotate != 0.0 ) - { - - // try to create a Transformation that corrects for the wrong rotation - aTrans.identity(); - aTrans.scale( aScale.getX(), aScale.getY() ); - aTrans.rotate( -fRotate ); - - basegfx::B2DRange aRect( 0, 0, 1, 1 ); - aRect.transform( aTrans ); - - // TODO(F3) treat translation correctly - // the corrections below work for multiples of 90 degree - // which is a common case (landscape/portrait/seascape) - // we need a general solution here; however this needs to - // work in sync with DrawXmlEmitter::fillFrameProps and WriterXmlEmitter::fillFrameProps - // admittedly this is a lame workaround and fails for arbitrary rotation - double fQuadrant = fmod( fRotate, 2.0*M_PI ) / M_PI_2; - int nQuadrant = (int)fQuadrant; - if( nQuadrant < 0 ) - nQuadrant += 4; - if( nQuadrant == 1 ) - { - aTranslation.setX( aTranslation.getX() + aRect.getHeight() + aRect.getWidth()); - aTranslation.setY( aTranslation.getY() + aRect.getHeight() ); - } - if( nQuadrant == 3 ) - aTranslation.setX( aTranslation.getX() - aRect.getHeight() ); - - aTrans.translate( aTranslation.getX(), - aTranslation.getY() ); - } + rGC.Transformation.decompose(aScale, aTranslation, fRotate, fShearX); - bool bMirrorVertical = aScale.getY() > 0; - - // transform unit rect to determine view box - basegfx::B2DRange aRect( 0, 0, 1, 1 ); - aRect.transform( aTrans ); - - // TODO(F3): Handle clip const sal_Int32 nGCId = getGCId(rGC); FrameElement* pFrame = m_pElFactory->createFrameElement( m_pCurElement, nGCId ); ImageElement* pImageElement = m_pElFactory->createImageElement( pFrame, nGCId, nImage ); - pFrame->x = pImageElement->x = aRect.getMinX(); - pFrame->y = pImageElement->y = aRect.getMinY(); - pFrame->w = pImageElement->w = aRect.getWidth(); - pFrame->h = pImageElement->h = aRect.getHeight(); + pFrame->x = pImageElement->x = aTranslation.getX(); + pFrame->y = pImageElement->y = aTranslation.getY(); + pFrame->w = pImageElement->w = aScale.getX(); + pFrame->h = pImageElement->h = aScale.getY(); pFrame->ZOrder = m_nNextZOrder++; - if( bMirrorVertical ) - { + if (aScale.getY() > 0) pFrame->MirrorVertical = pImageElement->MirrorVertical = true; - pFrame->x += aRect.getWidth(); - pImageElement->x += aRect.getWidth(); - pFrame->y += aRect.getHeight(); - pImageElement->y += aRect.getHeight(); - } } void PDFIProcessor::drawMask(const uno::Sequence& xBitmap, diff -Nru libreoffice-l10n-4.4.2/setup_native/scripts/osx_install_languagepack.applescript libreoffice-l10n-4.4.6~rc3/setup_native/scripts/osx_install_languagepack.applescript --- libreoffice-l10n-4.4.2/setup_native/scripts/osx_install_languagepack.applescript 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/setup_native/scripts/osx_install_languagepack.applescript 2015-10-27 20:55:54.000000000 +0000 @@ -140,7 +140,8 @@ end if *) -set tarCommand to "/usr/bin/tar -C " & quoted form of (choice as string) & " -xjf " & quoted form of sourcedir & "/tarball.tar.bz2" +-- touch extensions folder to have LO register bundled dictionaries +set tarCommand to "/usr/bin/tar -C " & quoted form of (choice as string) & " -xjf " & quoted form of sourcedir & "/tarball.tar.bz2 && touch " & quoted form of (choice as string) & "/Contents/Resources/extensions" try do shell script tarCommand diff -Nru libreoffice-l10n-4.4.2/sfx2/source/appl/appbaslib.cxx libreoffice-l10n-4.4.6~rc3/sfx2/source/appl/appbaslib.cxx --- libreoffice-l10n-4.4.2/sfx2/source/appl/appbaslib.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/source/appl/appbaslib.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -43,6 +43,19 @@ { } +void SfxBasicManagerHolder::Notify(SfxBroadcaster& rBC, SfxHint const& rHint) +{ + if (!mpBasicManager || &rBC != mpBasicManager) + return; + SfxSimpleHint const*const pSimpleHint(dynamic_cast(&rHint)); + if (pSimpleHint && SFX_HINT_DYING == pSimpleHint->GetId()) + { + mpBasicManager = nullptr; + mxBasicContainer.clear(); + mxDialogContainer.clear(); + } +} + void SfxBasicManagerHolder::reset( BasicManager* _pBasicManager ) { impl_releaseContainers(); @@ -59,6 +72,7 @@ if ( mpBasicManager ) { + StartListening(*mpBasicManager); try { mxBasicContainer.set( mpBasicManager->GetScriptLibraryContainer(), UNO_QUERY_THROW ); diff -Nru libreoffice-l10n-4.4.2/sfx2/source/appl/app.cxx libreoffice-l10n-4.4.6~rc3/sfx2/source/appl/app.cxx --- libreoffice-l10n-4.4.2/sfx2/source/appl/app.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/source/appl/app.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -593,6 +593,8 @@ // get symbol basicide_macro_organizer pSymbol = (basicide_macro_organizer) aMod.getFunctionSymbol("basicide_macro_organizer"); + aMod.release(); + SAL_WARN_IF(!pSymbol, "sfx.doc", "SfxApplication::MacroOrganizer, no symbol!"); if (!pSymbol) return; diff -Nru libreoffice-l10n-4.4.2/sfx2/source/appl/appopen.cxx libreoffice-l10n-4.4.6~rc3/sfx2/source/appl/appopen.cxx --- libreoffice-l10n-4.4.2/sfx2/source/appl/appopen.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/source/appl/appopen.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1118,10 +1118,14 @@ } } - if ( pLinkItem ) + if (pLinkItem) { - SfxPoolItem* pRet = rReq.GetReturnValue()->Clone(); - pLinkItem->GetValue().Call(pRet); + const SfxPoolItem* pRetValue = rReq.GetReturnValue(); + if (pRetValue) + { + SfxPoolItem* pClone = pRetValue->Clone(); + pLinkItem->GetValue().Call(pClone); + } delete pLinkItem; } } diff -Nru libreoffice-l10n-4.4.2/sfx2/source/appl/fileobj.cxx libreoffice-l10n-4.4.6~rc3/sfx2/source/appl/fileobj.cxx --- libreoffice-l10n-4.4.2/sfx2/source/appl/fileobj.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/source/appl/fileobj.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -47,7 +47,9 @@ #define FILETYPE_OBJECT 3 SvFileObject::SvFileObject() - : pOldParent(NULL) + : nPostUserEventId(0) + , pDelMed(NULL) + , pOldParent(NULL) , nType(FILETYPE_TEXT) , bLoadAgain(true) , bSynchron(false) @@ -64,14 +66,16 @@ SvFileObject::~SvFileObject() { - if ( xMed.Is() ) + if (xMed.Is()) { xMed->SetDoneLink( Link() ); xMed.Clear(); } + if (nPostUserEventId) + Application::RemoveUserEvent(nPostUserEventId); + delete pDelMed; } - bool SvFileObject::GetData( ::com::sun::star::uno::Any & rData, const OUString & rMimeType, bool bGetSynchron ) @@ -482,10 +486,10 @@ if( pThis->xMed.Is() ) { pThis->xMed->SetDoneLink( Link() ); - - Application::PostUserEvent( + pThis->pDelMed = new SfxMediumRef(pThis->xMed); + pThis->nPostUserEventId = Application::PostUserEvent( STATIC_LINK( pThis, SvFileObject, DelMedium_Impl ), - new SfxMediumRef( pThis->xMed )); + pThis->pDelMed); pThis->xMed.Clear(); } } @@ -495,7 +499,9 @@ IMPL_STATIC_LINK( SvFileObject, DelMedium_Impl, SfxMediumRef*, pDelMed ) { - (void)pThis; + pThis->nPostUserEventId = 0; + assert(pThis->pDelMed == pDelMed); + pThis->pDelMed = NULL; delete pDelMed; return 0; } diff -Nru libreoffice-l10n-4.4.2/sfx2/source/appl/fileobj.hxx libreoffice-l10n-4.4.6~rc3/sfx2/source/appl/fileobj.hxx --- libreoffice-l10n-4.4.2/sfx2/source/appl/fileobj.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/source/appl/fileobj.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -33,7 +33,9 @@ OUString sReferer; Link aEndEditLink; SfxMediumRef xMed; - vcl::Window* pOldParent; + ImplSVEvent* nPostUserEventId; + SfxMediumRef* pDelMed; + vcl::Window* pOldParent; sal_uInt8 nType; diff -Nru libreoffice-l10n-4.4.2/sfx2/source/appl/linkmgr2.cxx libreoffice-l10n-4.4.6~rc3/sfx2/source/appl/linkmgr2.cxx --- libreoffice-l10n-4.4.2/sfx2/source/appl/linkmgr2.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/source/appl/linkmgr2.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -272,7 +272,7 @@ if( pFile ) *pFile = sTopic; if( pLinkStr ) - *pLinkStr = sCmd.copy( nTmp ); + *pLinkStr = nTmp != -1 ? sCmd.copy(nTmp) : OUString(); bRet = true; } break; diff -Nru libreoffice-l10n-4.4.2/sfx2/source/appl/newhelp.cxx libreoffice-l10n-4.4.6~rc3/sfx2/source/appl/newhelp.cxx --- libreoffice-l10n-4.4.2/sfx2/source/appl/newhelp.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/source/appl/newhelp.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1147,7 +1147,7 @@ { OUString aTitle = GetEntry(i); OUString* pURL = reinterpret_cast(GetEntryData(i)); - aHistOpt.AppendItem(eHELPBOOKMARKS, *pURL, sEmpty, aTitle, sEmpty, sEmpty); + aHistOpt.AppendItem(eHELPBOOKMARKS, *pURL, sEmpty, aTitle, sEmpty, boost::none); delete pURL; } } diff -Nru libreoffice-l10n-4.4.2/sfx2/source/appl/sfxpicklist.cxx libreoffice-l10n-4.4.6~rc3/sfx2/source/appl/sfxpicklist.cxx --- libreoffice-l10n-4.4.2/sfx2/source/appl/sfxpicklist.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/source/appl/sfxpicklist.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -193,26 +193,33 @@ aFilter = pFilter->GetFilterName(); // generate a thumbnail - OUString aThumbnail; + boost::optional aThumbnail; // don't generate thumbnail when in headless mode, or on non-desktop (?) #if HAVE_FEATURE_DESKTOP - SFX_ITEMSET_ARG( pMed->GetItemSet(), pEncryptionDataItem, SfxUnoAnyItem, SID_ENCRYPTIONDATA, false ); - - if (!pDocSh->IsModified() && !pEncryptionDataItem && !Application::IsHeadlessModeEnabled()) + if (!pDocSh->IsModified() && !Application::IsHeadlessModeEnabled()) { // not modified => the document matches what is in the shell - boost::shared_ptr pMetaFile = pDocSh->GetPreviewMetaFile(); - BitmapEx aResultBitmap; - if (pMetaFile->CreateThumbnail(aResultBitmap)) + SFX_ITEMSET_ARG( pMed->GetItemSet(), pEncryptionDataItem, SfxUnoAnyItem, SID_ENCRYPTIONDATA, false ); + if ( pEncryptionDataItem ) + { + // encrypted document, will show a generic document icon instead + aThumbnail = OUString(); + } + else { - SvMemoryStream aStream(65535, 65535); - vcl::PNGWriter aWriter(aResultBitmap); - if (aWriter.Write(aStream)) + boost::shared_ptr pMetaFile = pDocSh->GetPreviewMetaFile(); + BitmapEx aResultBitmap; + if (pMetaFile->CreateThumbnail(aResultBitmap)) { - Sequence aSequence(static_cast(aStream.GetData()), aStream.Tell()); - OUStringBuffer aBuffer; - ::sax::Converter::encodeBase64(aBuffer, aSequence); - aThumbnail = aBuffer.makeStringAndClear(); + SvMemoryStream aStream(65535, 65535); + vcl::PNGWriter aWriter(aResultBitmap); + if (aWriter.Write(aStream)) + { + Sequence aSequence(static_cast(aStream.GetData()), aStream.Tell()); + OUStringBuffer aBuffer; + ::sax::Converter::encodeBase64(aBuffer, aSequence); + aThumbnail = aBuffer.makeStringAndClear(); + } } } } diff -Nru libreoffice-l10n-4.4.2/sfx2/source/dialog/dinfdlg.cxx libreoffice-l10n-4.4.6~rc3/sfx2/source/dialog/dinfdlg.cxx --- libreoffice-l10n-4.4.2/sfx2/source/dialog/dinfdlg.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/source/dialog/dinfdlg.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -753,12 +753,11 @@ { get(m_pBmp, "icon"); get(m_pNameED, "nameed"); -//FIXME m_pNameED->SetAccessibleName( SfxResId( EDIT_FILE_NAME ).toString() ); get(m_pChangePassBtn, "changepass"); get(m_pShowTypeFT, "showtype"); get(m_pReadOnlyCB, "readonlycb"); - get(m_pFileValFt, "showlocation"); + get(m_pFileValEd, "showlocation"); get(m_pShowSizeFT, "showsize"); m_aUnknownSize = m_pShowSizeFT->GetText(); m_pShowSizeFT->SetText(OUString()); @@ -1072,10 +1071,10 @@ // we know it's a folder -> don't need the final slash, but it's better for WB_PATHELLIPSIS aPath.removeFinalSlash(); OUString aText( aPath.PathToFileName() ); //! (pb) MaxLen? - m_pFileValFt->SetText( aText ); + m_pFileValEd->SetText( aText ); } else if ( aURL.GetProtocol() != INET_PROT_PRIVATE ) - m_pFileValFt->SetText( aURL.GetPartBeforeLastName() ); + m_pFileValEd->SetText( aURL.GetPartBeforeLastName() ); // handle access data bool m_bUseUserData = rInfoItem.IsUseUserData(); diff -Nru libreoffice-l10n-4.4.2/sfx2/source/doc/docfile.cxx libreoffice-l10n-4.4.6~rc3/sfx2/source/doc/docfile.cxx --- libreoffice-l10n-4.4.2/sfx2/source/doc/docfile.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/source/doc/docfile.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -560,8 +560,9 @@ { // On windows we try to re-use XOutStream from xStream if that exists; // because opening new SvFileStream in this situation may fail with ERROR_SHARING_VIOLATION - #ifdef WNT - if (pImp->xStream.is()) + // TODO: this is a horrible hack that should probably be removed, + // somebody needs to investigate this more thoroughly... + if (getenv("SFX_MEDIUM_REUSE_STREAM") && pImp->xStream.is()) { assert(pImp->xStream->getOutputStream().is()); // need that... pImp->m_pOutStream = utl::UcbStreamHelper::CreateStream( @@ -569,15 +570,11 @@ } else { - pImp->m_pOutStream = new SvFileStream( - pImp->m_aName, STREAM_STD_READWRITE); - } // On Unix don't try to re-use XOutStream from xStream if that exists; // it causes fdo#59022 (fails opening files via SMB on Linux) - #else - pImp->m_pOutStream = new SvFileStream( - pImp->m_aName, STREAM_STD_READWRITE); - #endif + pImp->m_pOutStream = new SvFileStream( + pImp->m_aName, STREAM_STD_READWRITE); + } CloseStorage(); } } @@ -1004,9 +1001,6 @@ bContentReadonly = IsReadonlyAccordingACL( aPhysPath.getStr() ); } #endif - - if ( bContentReadonly ) - pImp->m_bOriginallyReadOnly = true; } // do further checks only if the file not readonly in fs @@ -2471,6 +2465,18 @@ } SetIsRemote_Impl(); + + osl::DirectoryItem item; + if (osl::DirectoryItem::get(GetName(), item) == osl::FileBase::E_None) { + osl::FileStatus stat(osl_FileStatus_Mask_Attributes); + if (item.getFileStatus(stat) == osl::FileBase::E_None + && stat.isValid(osl_FileStatus_Mask_Attributes)) + { + if ((stat.getAttributes() & osl_File_Attribute_ReadOnly) != 0) { + pImp->m_bOriginallyReadOnly = true; + } + } + } } @@ -2868,14 +2874,15 @@ } } + bool readOnly = false; SFX_ITEMSET_ARG( pImp->m_pSet, pReadOnlyItem, SfxBoolItem, SID_DOC_READONLY, false ); if ( pReadOnlyItem && pReadOnlyItem->GetValue() ) - pImp->m_bOriginallyReadOnly = true; + readOnly = true; SFX_ITEMSET_ARG( pImp->m_pSet, pFileNameItem, SfxStringItem, SID_FILE_NAME, false ); if (!pFileNameItem) throw uno::RuntimeException(); pImp->m_aLogicName = pFileNameItem->GetValue(); - pImp->m_nStorOpenMode = pImp->m_bOriginallyReadOnly ? SFX_STREAM_READONLY : SFX_STREAM_READWRITE; + pImp->m_nStorOpenMode = readOnly ? SFX_STREAM_READONLY : SFX_STREAM_READWRITE; Init_Impl(); } diff -Nru libreoffice-l10n-4.4.2/sfx2/source/doc/oleprops.cxx libreoffice-l10n-4.4.6~rc3/sfx2/source/doc/oleprops.cxx --- libreoffice-l10n-4.4.2/sfx2/source/doc/oleprops.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/source/doc/oleprops.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1226,19 +1226,22 @@ // read sections sal_Size nSectPosPos = rStrm.Tell(); - for( sal_Int32 nSectIdx = 0; (nSectIdx < nSectCount) && (rStrm.GetErrorCode() == SVSTREAM_OK) && !rStrm.IsEof(); ++nSectIdx ) + for (sal_Int32 nSectIdx = 0; nSectIdx < nSectCount; ++nSectIdx) { // read section guid/position pair - rStrm.Seek( nSectPosPos ); + rStrm.Seek(nSectPosPos); SvGlobalName aSectGuid; - sal_uInt32 nSectPos; rStrm >> aSectGuid; - rStrm.ReadUInt32( nSectPos ); + sal_uInt32 nSectPos(0); + rStrm.ReadUInt32(nSectPos); + if (!rStrm.good()) + break; nSectPosPos = rStrm.Tell(); // read section - rStrm.Seek( static_cast< sal_Size >( nSectPos ) ); - if( rStrm.GetErrorCode() == SVSTREAM_OK ) - LoadObject( rStrm, AddSection( aSectGuid ) ); + rStrm.Seek(nSectPos); + LoadObject(rStrm, AddSection(aSectGuid)); + if (!rStrm.good()) + break; } } diff -Nru libreoffice-l10n-4.4.2/sfx2/source/doc/templatedlg.cxx libreoffice-l10n-4.4.6~rc3/sfx2/source/doc/templatedlg.cxx --- libreoffice-l10n-4.4.2/sfx2/source/doc/templatedlg.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/source/doc/templatedlg.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -229,11 +229,11 @@ mpTemplateBar->SetItemBits(mpTemplateBar->GetItemId(TEMPLATEBAR_MOVE), ToolBoxItemBits::DROPDOWNONLY); // Set toolbox handlers - mpViewBar->SetClickHdl(LINK(this,SfxTemplateManagerDlg,TBXViewHdl)); + mpViewBar->SetSelectHdl(LINK(this,SfxTemplateManagerDlg,TBXViewHdl)); mpViewBar->SetDropdownClickHdl(LINK(this,SfxTemplateManagerDlg,TBXDropdownHdl)); - mpActionBar->SetClickHdl(LINK(this,SfxTemplateManagerDlg,TBXActionHdl)); + mpActionBar->SetSelectHdl(LINK(this,SfxTemplateManagerDlg,TBXActionHdl)); mpActionBar->SetDropdownClickHdl(LINK(this,SfxTemplateManagerDlg,TBXDropdownHdl)); - mpTemplateBar->SetClickHdl(LINK(this,SfxTemplateManagerDlg,TBXTemplateHdl)); + mpTemplateBar->SetSelectHdl(LINK(this,SfxTemplateManagerDlg,TBXTemplateHdl)); mpTemplateBar->SetDropdownClickHdl(LINK(this,SfxTemplateManagerDlg,TBXDropdownHdl)); mpSearchEdit->SetUpdateDataHdl(LINK(this,SfxTemplateManagerDlg,SearchUpdateHdl)); mpSearchEdit->EnableUpdateData(); @@ -1160,7 +1160,7 @@ { MessageDialog aQueryDlg(this, SfxResId(STR_QMSG_SEL_TEMPLATE_DELETE), VCL_MESSAGE_QUESTION, VCL_BUTTONS_YES_NO); - if ( aQueryDlg.Execute() == RET_NO ) + if ( aQueryDlg.Execute() != RET_YES ) return; OUString aTemplateList; @@ -1245,7 +1245,7 @@ { MessageDialog aQueryDlg(this, SfxResId(STR_QMSG_SEL_FOLDER_DELETE), VCL_MESSAGE_QUESTION, VCL_BUTTONS_YES_NO); - if ( aQueryDlg.Execute() == RET_NO ) + if ( aQueryDlg.Execute() != RET_YES ) return; OUString aFolderList; diff -Nru libreoffice-l10n-4.4.2/sfx2/source/inc/appbaslib.hxx libreoffice-l10n-4.4.6~rc3/sfx2/source/inc/appbaslib.hxx --- libreoffice-l10n-4.4.2/sfx2/source/inc/appbaslib.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/source/inc/appbaslib.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -20,6 +20,8 @@ #ifndef INCLUDED_SFX2_SOURCE_INC_APPBASLIB_HXX #define INCLUDED_SFX2_SOURCE_INC_APPBASLIB_HXX +#include + #include #include #include @@ -29,6 +31,7 @@ /** helper class which holds and manipulates a BasicManager */ class SfxBasicManagerHolder + : public SfxListener { private: BasicManager* mpBasicManager; @@ -84,6 +87,7 @@ */ bool LegacyPsswdBinaryLimitExceeded( ::com::sun::star::uno::Sequence< OUString >& sModules ); + virtual void Notify(SfxBroadcaster& rBC, SfxHint const& rHint) SAL_OVERRIDE; private: void impl_releaseContainers(); diff -Nru libreoffice-l10n-4.4.2/sfx2/source/sidebar/SidebarController.cxx libreoffice-l10n-4.4.6~rc3/sfx2/source/sidebar/SidebarController.cxx --- libreoffice-l10n-4.4.2/sfx2/source/sidebar/SidebarController.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/source/sidebar/SidebarController.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -344,62 +344,33 @@ if (mpCurrentDeck) { SfxSplitWindow* pSplitWindow = GetSplitWindow(); - if (pSplitWindow) //in sidebar mode + WindowAlign eAlign = pSplitWindow ? pSplitWindow->GetAlign() : WINDOWALIGN_RIGHT; + long nDeckX, nTabX; + if (eAlign == WINDOWALIGN_LEFT) // attach the Sidebar towards the left-side of screen { - // Find out that which side of the Window do we need to attach the Sidebar? - if ( pSplitWindow->GetAlign() == WINDOWALIGN_RIGHT ) // attach the Sidebar towards the right-side of screen - { - // Place the deck first. - { - if (bIsDeckVisible) - { - mpCurrentDeck->setPosSizePixel(0,0, nWidth-nTabBarDefaultWidth, nHeight); - mpCurrentDeck->Show(); - mpCurrentDeck->RequestLayout(); - } - else - mpCurrentDeck->Hide(); - } - - // Now place the tab bar. - mpTabBar->setPosSizePixel(nWidth-nTabBarDefaultWidth,0,nTabBarDefaultWidth,nHeight); - mpTabBar->Show(); - } - else if ( pSplitWindow->GetAlign() == WINDOWALIGN_LEFT) // attach the Sidebar towards the left-side of screen - { - // Place the tab bar first. - mpTabBar->setPosSizePixel(0,0,nTabBarDefaultWidth,nHeight); - mpTabBar->Show(); - - // Now place the deck. - if (bIsDeckVisible) - { - mpCurrentDeck->setPosSizePixel(nTabBarDefaultWidth,0, nWidth-nTabBarDefaultWidth, nHeight); - mpCurrentDeck->Show(); - mpCurrentDeck->RequestLayout(); - } - else - mpCurrentDeck->Hide(); - } + nDeckX = nTabBarDefaultWidth; + nTabX = 0; } - else //floating window mode + else // attach the Sidebar towards the right-side of screen { - // Place the deck first. - { - if (bIsDeckVisible) - { - mpCurrentDeck->setPosSizePixel(0,0, nWidth-nTabBarDefaultWidth, nHeight); - mpCurrentDeck->Show(); - mpCurrentDeck->RequestLayout(); - } - else - mpCurrentDeck->Hide(); - } + nDeckX = 0; + nTabX = nWidth-nTabBarDefaultWidth; + } - // Now place the tab bar. - mpTabBar->setPosSizePixel(nWidth-nTabBarDefaultWidth,0,nTabBarDefaultWidth,nHeight); - mpTabBar->Show(); + // Place the deck first. + if (bIsDeckVisible) + { + mpCurrentDeck->setPosSizePixel(nDeckX, 0, nWidth - nTabBarDefaultWidth, nHeight); + mpCurrentDeck->Show(); + mpCurrentDeck->RequestLayout(); } + else + mpCurrentDeck->Hide(); + + // Now place the tab bar. + mpTabBar->setPosSizePixel(nTabX, 0, nTabBarDefaultWidth, nHeight); + mpTabBar->Show(); + } // Determine if the closer of the deck can be shown. @@ -693,11 +664,24 @@ } aNewPanels.resize(nWriteIndex); + SfxSplitWindow* pSplitWindow = GetSplitWindow(); + sal_Int32 nTabBarDefaultWidth = TabBar::GetDefaultWidth() * mpTabBar->GetDPIScaleFactor(); + WindowAlign eAlign = pSplitWindow ? pSplitWindow->GetAlign() : WINDOWALIGN_RIGHT; + long nDeckX; + if (eAlign == WINDOWALIGN_LEFT) // attach the Sidebar towards the left-side of screen + { + nDeckX = nTabBarDefaultWidth; + } + else // attach the Sidebar towards the right-side of screen + { + nDeckX = 0; + } + // Activate the deck and the new set of panels. mpCurrentDeck->setPosSizePixel( + nDeckX, 0, - 0, - mpParentWindow->GetSizePixel().Width()-TabBar::GetDefaultWidth() * mpTabBar->GetDPIScaleFactor(), + mpParentWindow->GetSizePixel().Width() - nTabBarDefaultWidth, mpParentWindow->GetSizePixel().Height()); mpCurrentDeck->SetPanels(aNewPanels); diff -Nru libreoffice-l10n-4.4.2/sfx2/source/sidebar/Theme.cxx libreoffice-l10n-4.4.6~rc3/sfx2/source/sidebar/Theme.cxx --- libreoffice-l10n-4.4.2/sfx2/source/sidebar/Theme.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/source/sidebar/Theme.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -429,15 +429,15 @@ void SAL_CALL Theme::disposing (void) { ChangeListeners aListeners; - maChangeListeners.swap(aListeners); + aListeners.swap(maChangeListeners); const lang::EventObject aEvent (static_cast(this)); for (ChangeListeners::const_iterator - iContainer(maChangeListeners.begin()), - iContainerEnd(maChangeListeners.end()); - iContainerEnd!=iContainerEnd; - ++iContainerEnd) + iContainer(aListeners.begin()), + iContainerEnd(aListeners.end()); + iContainer != iContainerEnd; + ++iContainer) { for (ChangeListenerContainer::const_iterator iListener(iContainer->second.begin()), diff -Nru libreoffice-l10n-4.4.2/sfx2/uiconfig/ui/documentinfopage.ui libreoffice-l10n-4.4.6~rc3/sfx2/uiconfig/ui/documentinfopage.ui --- libreoffice-l10n-4.4.2/sfx2/uiconfig/ui/documentinfopage.ui 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/uiconfig/ui/documentinfopage.ui 2015-10-27 20:55:54.000000000 +0000 @@ -261,20 +261,6 @@ - - True - False - True - 0 - True - 56 - - - 1 - 3 - - - True False @@ -410,6 +396,17 @@ + + True + True + False + + + 1 + 3 + + + diff -Nru libreoffice-l10n-4.4.2/sfx2/uiconfig/ui/newstyle.ui libreoffice-l10n-4.4.6~rc3/sfx2/uiconfig/ui/newstyle.ui --- libreoffice-l10n-4.4.2/sfx2/uiconfig/ui/newstyle.ui 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sfx2/uiconfig/ui/newstyle.ui 2015-10-27 20:55:54.000000000 +0000 @@ -23,6 +23,7 @@ gtk-ok True + False True True True diff -Nru libreoffice-l10n-4.4.2/solenv/bin/modules/installer/simplepackage.pm libreoffice-l10n-4.4.6~rc3/solenv/bin/modules/installer/simplepackage.pm --- libreoffice-l10n-4.4.2/solenv/bin/modules/installer/simplepackage.pm 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/solenv/bin/modules/installer/simplepackage.pm 2015-10-27 20:55:54.000000000 +0000 @@ -393,10 +393,16 @@ chdir $localfrom; } - else + elsif ($volume_name_classic_app eq 'LibreOffice' || $volume_name_classic_app eq 'LibreOfficeDev') { - if (($volume_name_classic_app eq 'LibreOffice' || $volume_name_classic_app eq 'LibreOfficeDev') && - defined($ENV{'MACOSX_CODESIGNING_IDENTITY'}) && $ENV{'MACOSX_CODESIGNING_IDENTITY'} ne "" ) + my $subdir = "$tempdir/$packagename/$volume_name_classic_app.app/Contents/Resources"; + if ( ! -d $subdir ) { installer::systemactions::create_directory($subdir); } + # iterate over OS X localizations + foreach $lang ("ca", "cs", "da", "de", "el", "en", "es", "fi", "fr", "hr", "hu", "id", "it", "ja", "ko", "ms", "nl", "no", "pl", "pt", "pt_PT", "ro", "ru", "sk", "sv", "th", "tr", "uk", "vi", "zh_CN", "zh_TW") + { + installer::systemactions::create_directory($subdir . "/" . $lang . ".lproj"); + } + if ( defined($ENV{'MACOSX_CODESIGNING_IDENTITY'}) && $ENV{'MACOSX_CODESIGNING_IDENTITY'} ne "" ) { $systemcall = "$ENV{'SRCDIR'}/solenv/bin/macosx-codesign-app-bundle $localtempdir/$folder/$volume_name_classic_app.app"; print "... $systemcall ...\n"; diff -Nru libreoffice-l10n-4.4.2/solenv/gbuild/LinkTarget.mk libreoffice-l10n-4.4.6~rc3/solenv/gbuild/LinkTarget.mk --- libreoffice-l10n-4.4.2/solenv/gbuild/LinkTarget.mk 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/solenv/gbuild/LinkTarget.mk 2015-10-27 20:55:54.000000000 +0000 @@ -1313,6 +1313,14 @@ $(foreach package,$(2),$(call gb_LinkTarget_use_package,$(1),$(package))) endef +# use a GeneratedPackage, possibly from another module +# call gb_LinkTarget_use_generated_package,linktarget,package +define gb_LinkTarget_use_generated_package +$(call gb_LinkTarget_get_headers_target,$(1)) :| \ + $(call gb_GeneratedPackage_get_target,$(strip $(2))) + +endef + # Use sources from unpacked tarball of an external project # call gb_LinkTarget_use_unpacked,linktarget,unpackedtarget define gb_LinkTarget_use_unpacked diff -Nru libreoffice-l10n-4.4.2/solenv/gcc-wrappers/wrapper.cxx libreoffice-l10n-4.4.6~rc3/solenv/gcc-wrappers/wrapper.cxx --- libreoffice-l10n-4.4.2/solenv/gcc-wrappers/wrapper.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/solenv/gcc-wrappers/wrapper.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -188,6 +188,11 @@ command=command.substr(0,pos+strlen("ccache"))+".exe"; } + if (args[0] != ' ') + { + args.insert(0, " "); // lpCommandLine *must* start with space! + } + //cerr << "CMD= " << command << " " << args << endl; // Commandline may be modified by CreateProcess diff -Nru libreoffice-l10n-4.4.2/solenv/gdb/boost/ptr_container.py libreoffice-l10n-4.4.6~rc3/solenv/gdb/boost/ptr_container.py --- libreoffice-l10n-4.4.2/solenv/gdb/boost/ptr_container.py 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/solenv/gdb/boost/ptr_container.py 2015-10-27 20:55:54.000000000 +0000 @@ -70,7 +70,7 @@ return self def __next__(self): - (index, value) = self.impl.next() + (index, value) = six.advance_iterator(self.impl) return (index, value.cast(self.type).dereference()) def _import_std(self): @@ -137,7 +137,7 @@ return self def __next__(self): - (index, value) = self.impl.next() + (index, value) = six.advance_iterator(self.impl) if self.key: value = value.cast(self.key_type) else: @@ -190,7 +190,7 @@ def __next__(self): if self.step: - self.value = self.impl.next() + self.value = six.advance_iterator(self.impl) value = self.value[0] else: value = self.value[1].cast(self.value_type).dereference() @@ -216,7 +216,7 @@ return self def __next__(self): - return ("", self.impl.next()[1].cast(self.value_type).dereference()) + return ("", six.advance_iterator(self.impl)[1].cast(self.value_type).dereference()) printer = None diff -Nru libreoffice-l10n-4.4.2/solenv/gdb/boost/unordered.py libreoffice-l10n-4.4.6~rc3/solenv/gdb/boost/unordered.py --- libreoffice-l10n-4.4.2/solenv/gdb/boost/unordered.py 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/solenv/gdb/boost/unordered.py 2015-10-27 20:55:54.000000000 +0000 @@ -63,7 +63,7 @@ def __next__(self): if self.step: - self.value = self.impl.next() + self.value = six.advance_iterator(self.impl) value = self.value[0] else: value = self.value[1] @@ -87,7 +87,7 @@ return self def __next__(self): - return ("", self.impl.next()[1]) + return ("", six.advance_iterator(self.impl)[1]) printer = None diff -Nru libreoffice-l10n-4.4.2/solenv/gdb/libreoffice/svl.py libreoffice-l10n-4.4.6~rc3/solenv/gdb/libreoffice/svl.py --- libreoffice-l10n-4.4.2/solenv/gdb/libreoffice/svl.py 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/solenv/gdb/libreoffice/svl.py 2015-10-27 20:55:54.000000000 +0000 @@ -12,6 +12,71 @@ from libreoffice.util import printing +class ItemSetPrinter(object): + '''Prints SfxItemSets''' + + def __init__(self, typename, value): + self.typename = typename + self.value = value + + def to_string(self): + whichranges = self.which_ranges() + return "SfxItemSet of pool %s with parent %s and Which ranges: %s" \ + % (self.value['_pPool'], self.value['_pParent'], whichranges) + + def which_ranges(self): + whichranges = self.value['_pWhichRanges'] + index = 0 + whiches = [] + while (whichranges[index]): + whiches.append((int(whichranges[index]), int(whichranges[index+1]))) + index = index + 2 + return whiches + + def children(self): + whichranges = self.which_ranges() + size = 0 + whichids = [] + for (whichfrom, whichto) in whichranges: + size += whichto - whichfrom + 1 + whichids += [which for which in range(whichfrom, whichto+1)] + return self._iterator(self.value['_aItems'], size, whichids) + + class _iterator(six.Iterator): + + def __init__(self, data, count, whichids): + self.data = data + self.whichids = whichids + self.count = count + self.pos = 0 + self._check_invariant() + + def __iter__(self): + return self + + def __next__(self): + if self.pos == self.count: + raise StopIteration() + + which = self.whichids[self.pos] + elem = self.data[self.pos] + self.pos = self.pos + 1 + + self._check_invariant() + if (elem == -1): + elem = "(Invalid)" + elif (elem != 0): + # let's try how well that works... + elem = elem.cast(elem.dynamic_type).dereference() + return (str(which), elem) + + def _check_invariant(self): + assert self.count >= 0 + assert self.data + assert self.pos >= 0 + assert self.pos <= self.count + assert len(self.whichids) == self.count + class SvArrayPrinter(object): '''Prints macro-declared arrays from svl module''' @@ -97,6 +162,7 @@ printer = printing.Printer("libreoffice/svl") + printer.add('SfxItemSet', ItemSetPrinter) # macro-based arrays from svl module printer.add('SvArray', SvArrayPrinter, SvArrayPrinter.query) diff -Nru libreoffice-l10n-4.4.2/solenv/gdb/libreoffice/sw.py libreoffice-l10n-4.4.6~rc3/solenv/gdb/libreoffice/sw.py --- libreoffice-l10n-4.4.2/solenv/gdb/libreoffice/sw.py 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/solenv/gdb/libreoffice/sw.py 2015-10-27 20:55:54.000000000 +0000 @@ -213,7 +213,7 @@ # accessing this is completely non-obvious... # also, node.dynamic_cast(node.dynamic_type) is null? value = " TextNode " + \ - unicode(node.cast(node.dynamic_type).dereference()['m_Text']) + six.text_type(node.cast(node.dynamic_type).dereference()['m_Text']) elif str(node.dynamic_type.target()) == "SwOLENode": value = " OLENode " elif str(node.dynamic_type.target()) == "SwGrfNode": Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/src/1f467e5bb703f12cbbb09d5cf67ecf4a-converttexttonumber-1-5-0.oxt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/src/1f467e5bb703f12cbbb09d5cf67ecf4a-converttexttonumber-1-5-0.oxt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/src/451ccf439a36a568653b024534669971-ConvertTextToNumber-1.3.2.oxt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/src/451ccf439a36a568653b024534669971-ConvertTextToNumber-1.3.2.oxt differ diff -Nru libreoffice-l10n-4.4.2/src/fetch.log libreoffice-l10n-4.4.6~rc3/src/fetch.log --- libreoffice-l10n-4.4.2/src/fetch.log 2015-03-27 12:57:23.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/src/fetch.log 2015-10-28 02:53:04.000000000 +0000 @@ -1,328 +1,328 @@ -Fri Mar 27 12:53:03 UTC 2015 +Wed Oct 28 02:48:43 UTC 2015 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 360k 100 360k 0 0 361k 0 --:--:-- --:--:-- --:--:-- 361k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 16 360k 16 62189 0 0 75534 0 0:00:04 --:--:-- 0:00:04 75563 100 360k 100 360k 0 0 231k 0 0:00:01 0:00:01 --:--:-- 231k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 512k 0 1201 0 0 4454 0 0:01:57 --:--:-- 0:01:57 4448 100 512k 100 512k 0 0 571k 0 --:--:-- --:--:-- --:--:-- 571k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 25 512k 25 133k 0 0 608k 0 --:--:-- --:--:-- --:--:-- 607k 100 512k 100 512k 0 0 981k 0 --:--:-- --:--:-- --:--:-- 980k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 6 1838k 6 121k 0 0 345k 0 0:00:05 --:--:-- 0:00:05 345k 59 1838k 59 1087k 0 0 790k 0 0:00:02 0:00:01 0:00:01 790k 100 1838k 100 1838k 0 0 830k 0 0:00:02 0:00:02 --:--:-- 830k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 27 1838k 27 511k 0 0 806k 0 0:00:02 --:--:-- 0:00:02 805k 100 1838k 100 1838k 0 0 1209k 0 0:00:01 0:00:01 --:--:-- 1210k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 721k 100 721k 0 0 1004k 0 --:--:-- --:--:-- --:--:-- 1003k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 721k 100 721k 0 0 1047k 0 --:--:-- --:--:-- --:--:-- 1047k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 184k 100 184k 0 0 719k 0 --:--:-- --:--:-- --:--:-- 722k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 56 184k 56 103k 0 0 314k 0 --:--:-- --:--:-- --:--:-- 313k 100 184k 100 184k 0 0 478k 0 --:--:-- --:--:-- --:--:-- 478k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 956k 100 956k 0 0 1138k 0 --:--:-- --:--:-- --:--:-- 1138k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 94 956k 94 901k 0 0 993k 0 --:--:-- --:--:-- --:--:-- 992k 100 956k 100 956k 0 0 1028k 0 --:--:-- --:--:-- --:--:-- 1027k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 853k 0 1199 0 0 9000 0 0:01:37 --:--:-- 0:01:37 8947 100 853k 100 853k 0 0 1099k 0 --:--:-- --:--:-- --:--:-- 1099k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 63 853k 63 541k 0 0 568k 0 0:00:01 --:--:-- 0:00:01 568k 100 853k 100 853k 0 0 723k 0 0:00:01 0:00:01 --:--:-- 723k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 55.4M 0 262k 0 0 959k 0 0:00:59 --:--:-- 0:00:59 959k 3 55.4M 3 1738k 0 0 1362k 0 0:00:41 0:00:01 0:00:40 1362k 6 55.4M 6 3585k 0 0 1577k 0 0:00:35 0:00:02 0:00:33 1577k 9 55.4M 9 5311k 0 0 1609k 0 0:00:35 0:00:03 0:00:32 1609k 12 55.4M 12 6830k 0 0 1583k 0 0:00:35 0:00:04 0:00:31 1583k 15 55.4M 15 8565k 0 0 1622k 0 0:00:35 0:00:05 0:00:30 1658k 18 55.4M 18 10.0M 0 0 1645k 0 0:00:34 0:00:06 0:00:28 1717k 21 55.4M 21 11.7M 0 0 1656k 0 0:00:34 0:00:07 0:00:27 1692k 24 55.4M 24 13.4M 0 0 1664k 0 0:00:34 0:00:08 0:00:26 1701k 27 55.4M 27 15.1M 0 0 1673k 0 0:00:33 0:00:09 0:00:24 1750k 30 55.4M 30 16.8M 0 0 1679k 0 0:00:33 0:00:10 0:00:23 1739k 33 55.4M 33 18.4M 0 0 1678k 0 0:00:33 0:00:11 0:00:22 1720k 36 55.4M 36 20.1M 0 0 1678k 0 0:00:33 0:00:12 0:00:21 1710k 39 55.4M 39 21.7M 0 0 1676k 0 0:00:33 0:00:13 0:00:20 1696k 42 55.4M 42 23.3M 0 0 1674k 0 0:00:33 0:00:14 0:00:19 1676k 44 55.4M 44 24.8M 0 0 1667k 0 0:00:34 0:00:15 0:00:19 1643k 47 55.4M 47 26.4M 0 0 1664k 0 0:00:34 0:00:16 0:00:18 1633k 50 55.4M 50 28.1M 0 0 1669k 0 0:00:34 0:00:17 0:00:17 1646k 53 55.4M 53 29.7M 0 0 1669k 0 0:00:34 0:00:18 0:00:16 1650k 56 55.4M 56 31.5M 0 0 1674k 0 0:00:33 0:00:19 0:00:14 1674k 59 55.4M 59 33.2M 0 0 1678k 0 0:00:33 0:00:20 0:00:13 1710k 62 55.4M 62 34.8M 0 0 1676k 0 0:00:33 0:00:21 0:00:12 1715k 65 55.4M 65 36.5M 0 0 1679k 0 0:00:33 0:00:22 0:00:11 1716k 68 55.4M 68 38.2M 0 0 1682k 0 0:00:33 0:00:23 0:00:10 1728k 71 55.4M 71 39.9M 0 0 1684k 0 0:00:33 0:00:24 0:00:09 1722k 75 55.4M 75 41.6M 0 0 1685k 0 0:00:33 0:00:25 0:00:08 1717k 77 55.4M 77 43.0M 0 0 1677k 0 0:00:33 0:00:26 0:00:07 1681k 80 55.4M 80 44.4M 0 0 1668k 0 0:00:34 0:00:27 0:00:07 1618k 83 55.4M 83 46.0M 0 0 1668k 0 0:00:34 0:00:28 0:00:06 1605k 86 55.4M 86 47.7M 0 0 1669k 0 0:00:34 0:00:29 0:00:05 1597k 89 55.4M 89 49.4M 0 0 1672k 0 0:00:33 0:00:30 0:00:03 1603k 92 55.4M 92 51.1M 0 0 1674k 0 0:00:33 0:00:31 0:00:02 1657k 95 55.4M 95 52.8M 0 0 1677k 0 0:00:33 0:00:32 0:00:01 1728k 98 55.4M 98 54.4M 0 0 1676k 0 0:00:33 0:00:33 --:--:-- 1722k 100 55.4M 100 55.4M 0 0 1676k 0 0:00:33 0:00:33 --:--:-- 1720k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 1 55.4M 1 673k 0 0 918k 0 0:01:01 --:--:-- 0:01:01 918k 4 55.4M 4 2335k 0 0 1347k 0 0:00:42 0:00:01 0:00:41 1347k 7 55.4M 7 4015k 0 0 1469k 0 0:00:38 0:00:02 0:00:36 1469k 10 55.4M 10 5742k 0 0 1538k 0 0:00:36 0:00:03 0:00:33 1538k 12 55.4M 12 7126k 0 0 1505k 0 0:00:37 0:00:04 0:00:33 1505k 15 55.4M 15 8704k 0 0 1518k 0 0:00:37 0:00:05 0:00:32 1606k 18 55.4M 18 10.1M 0 0 1545k 0 0:00:36 0:00:06 0:00:30 1613k 21 55.4M 21 11.8M 0 0 1574k 0 0:00:36 0:00:07 0:00:29 1632k 24 55.4M 24 13.6M 0 0 1600k 0 0:00:35 0:00:08 0:00:27 1646k 27 55.4M 27 15.4M 0 0 1620k 0 0:00:35 0:00:09 0:00:26 1729k 30 55.4M 30 17.1M 0 0 1632k 0 0:00:34 0:00:10 0:00:24 1762k 33 55.4M 33 18.8M 0 0 1642k 0 0:00:34 0:00:11 0:00:23 1774k 37 55.4M 37 20.6M 0 0 1659k 0 0:00:34 0:00:12 0:00:22 1791k 40 55.4M 40 22.3M 0 0 1666k 0 0:00:34 0:00:13 0:00:21 1782k 43 55.4M 43 24.0M 0 0 1670k 0 0:00:33 0:00:14 0:00:19 1766k 46 55.4M 46 25.7M 0 0 1672k 0 0:00:33 0:00:15 0:00:18 1760k 49 55.4M 49 27.4M 0 0 1679k 0 0:00:33 0:00:16 0:00:17 1764k 52 55.4M 52 29.1M 0 0 1685k 0 0:00:33 0:00:17 0:00:16 1752k 55 55.4M 55 30.9M 0 0 1691k 0 0:00:33 0:00:18 0:00:15 1760k 58 55.4M 58 32.6M 0 0 1696k 0 0:00:33 0:00:19 0:00:14 1772k 62 55.4M 62 34.4M 0 0 1701k 0 0:00:33 0:00:20 0:00:13 1789k 65 55.4M 65 36.2M 0 0 1705k 0 0:00:33 0:00:21 0:00:12 1794k 68 55.4M 68 37.9M 0 0 1709k 0 0:00:33 0:00:22 0:00:11 1792k 71 55.4M 71 39.6M 0 0 1711k 0 0:00:33 0:00:23 0:00:10 1784k 74 55.4M 74 41.3M 0 0 1712k 0 0:00:33 0:00:24 0:00:09 1776k 77 55.4M 77 42.9M 0 0 1710k 0 0:00:33 0:00:25 0:00:08 1749k 80 55.4M 80 44.5M 0 0 1707k 0 0:00:33 0:00:26 0:00:07 1713k 83 55.4M 83 46.1M 0 0 1703k 0 0:00:33 0:00:27 0:00:06 1677k 86 55.4M 86 47.8M 0 0 1705k 0 0:00:33 0:00:28 0:00:05 1680k 89 55.4M 89 49.6M 0 0 1710k 0 0:00:33 0:00:29 0:00:04 1700k 92 55.4M 92 51.4M 0 0 1713k 0 0:00:33 0:00:30 0:00:03 1727k 95 55.4M 95 53.1M 0 0 1714k 0 0:00:33 0:00:31 0:00:02 1750k 98 55.4M 98 54.8M 0 0 1715k 0 0:00:33 0:00:32 0:00:01 1780k 100 55.4M 100 55.4M 0 0 1717k 0 0:00:33 0:00:33 --:--:-- 1797k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 6 709k 6 44756 0 0 370k 0 0:00:01 --:--:-- 0:00:01 370k 100 709k 100 709k 0 0 1326k 0 --:--:-- --:--:-- --:--:-- 1324k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 46 709k 46 327k 0 0 635k 0 0:00:01 --:--:-- 0:00:01 634k 100 709k 100 709k 0 0 686k 0 0:00:01 0:00:01 --:--:-- 686k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 2 22.4M 2 525k 0 0 984k 0 0:00:23 --:--:-- 0:00:23 984k 9 22.4M 9 2156k 0 0 1405k 0 0:00:16 0:00:01 0:00:15 1405k 16 22.4M 16 3755k 0 0 1482k 0 0:00:15 0:00:02 0:00:13 1482k 23 22.4M 23 5341k 0 0 1511k 0 0:00:15 0:00:03 0:00:12 1510k 30 22.4M 30 7045k 0 0 1553k 0 0:00:14 0:00:04 0:00:10 1553k 37 22.4M 37 8717k 0 0 1575k 0 0:00:14 0:00:05 0:00:09 1638k 45 22.4M 45 10.1M 0 0 1597k 0 0:00:14 0:00:06 0:00:08 1656k 52 22.4M 52 11.8M 0 0 1610k 0 0:00:14 0:00:07 0:00:07 1676k 60 22.4M 60 13.5M 0 0 1628k 0 0:00:14 0:00:08 0:00:06 1710k 67 22.4M 67 15.2M 0 0 1639k 0 0:00:14 0:00:09 0:00:05 1718k 75 22.4M 75 16.9M 0 0 1644k 0 0:00:13 0:00:10 0:00:03 1720k 82 22.4M 82 18.4M 0 0 1642k 0 0:00:14 0:00:11 0:00:03 1700k 89 22.4M 89 20.2M 0 0 1651k 0 0:00:13 0:00:12 0:00:01 1713k 97 22.4M 97 21.8M 0 0 1651k 0 0:00:13 0:00:13 --:--:-- 1690k 100 22.4M 100 22.4M 0 0 1655k 0 0:00:13 0:00:13 --:--:-- 1688k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 22.4M 0 127k 0 0 290k 0 0:01:19 --:--:-- 0:01:19 290k 2 22.4M 2 669k 0 0 465k 0 0:00:49 0:00:01 0:00:48 465k 5 22.4M 5 1352k 0 0 553k 0 0:00:41 0:00:02 0:00:39 553k 10 22.4M 10 2306k 0 0 671k 0 0:00:34 0:00:03 0:00:31 671k 14 22.4M 14 3432k 0 0 773k 0 0:00:29 0:00:04 0:00:25 773k 19 22.4M 19 4511k 0 0 829k 0 0:00:27 0:00:05 0:00:22 877k 23 22.4M 23 5397k 0 0 838k 0 0:00:27 0:00:06 0:00:21 945k 27 22.4M 27 6261k 0 0 842k 0 0:00:27 0:00:07 0:00:20 982k 34 22.4M 34 7909k 0 0 937k 0 0:00:24 0:00:08 0:00:16 1120k 42 22.4M 42 9674k 0 0 1025k 0 0:00:22 0:00:09 0:00:13 1248k 49 22.4M 49 11.1M 0 0 1092k 0 0:00:21 0:00:10 0:00:11 1377k 55 22.4M 55 12.5M 0 0 1126k 0 0:00:20 0:00:11 0:00:09 1496k 63 22.4M 63 14.2M 0 0 1170k 0 0:00:19 0:00:12 0:00:07 1658k 71 22.4M 71 15.9M 0 0 1216k 0 0:00:18 0:00:13 0:00:05 1687k 77 22.4M 77 17.4M 0 0 1238k 0 0:00:18 0:00:14 0:00:04 1640k 85 22.4M 85 19.2M 0 0 1273k 0 0:00:18 0:00:15 0:00:03 1653k 93 22.4M 93 20.9M 0 0 1303k 0 0:00:17 0:00:16 0:00:01 1707k 100 22.4M 100 22.4M 0 0 1329k 0 0:00:17 0:00:17 --:--:-- 1734k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 457k 100 457k 0 0 1071k 0 --:--:-- --:--:-- --:--:-- 1073k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 457k 100 457k 0 0 728k 0 --:--:-- --:--:-- --:--:-- 727k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 649k 100 649k 0 0 1328k 0 --:--:-- --:--:-- --:--:-- 1327k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 65 649k 65 427k 0 0 1180k 0 --:--:-- --:--:-- --:--:-- 1179k 100 649k 100 649k 0 0 1320k 0 --:--:-- --:--:-- --:--:-- 1319k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 24 2188k 24 534k 0 0 1086k 0 0:00:02 --:--:-- 0:00:02 1085k 100 2188k 100 2188k 0 0 1489k 0 0:00:01 0:00:01 --:--:-- 1490k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 50 2188k 50 1102k 0 0 1318k 0 0:00:01 --:--:-- 0:00:01 1317k 100 2188k 100 2188k 0 0 1503k 0 0:00:01 0:00:01 --:--:-- 1504k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 720k 100 720k 0 0 1356k 0 --:--:-- --:--:-- --:--:-- 1357k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 26 720k 26 189k 0 0 568k 0 0:00:01 --:--:-- 0:00:01 568k 100 720k 100 720k 0 0 1006k 0 --:--:-- --:--:-- --:--:-- 1005k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 4 9.8M 4 450k 0 0 1134k 0 0:00:08 --:--:-- 0:00:08 1132k 19 9.8M 19 2013k 0 0 1441k 0 0:00:07 0:00:01 0:00:06 1441k 36 9.8M 36 3673k 0 0 1532k 0 0:00:06 0:00:02 0:00:04 1532k 52 9.8M 52 5319k 0 0 1566k 0 0:00:06 0:00:03 0:00:03 1566k 69 9.8M 69 7062k 0 0 1606k 0 0:00:06 0:00:04 0:00:02 1606k 86 9.8M 86 8769k 0 0 1625k 0 0:00:06 0:00:05 0:00:01 1664k 99 9.8M 99 9.7M 0 0 783k 0 0:00:12 0:00:12 --:--:-- 703k 100 9.8M 100 9.8M 0 0 791k 0 0:00:12 0:00:12 --:--:-- 620k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 1 9.8M 1 124k 0 0 212k 0 0:00:47 --:--:-- 0:00:47 212k 14 9.8M 14 1454k 0 0 920k 0 0:00:10 0:00:01 0:00:09 920k 29 9.8M 29 3001k 0 0 1163k 0 0:00:08 0:00:02 0:00:06 1162k 46 9.8M 46 4696k 0 0 1311k 0 0:00:07 0:00:03 0:00:04 1311k 63 9.8M 63 6387k 0 0 1394k 0 0:00:07 0:00:04 0:00:03 1394k 80 9.8M 80 8110k 0 0 1453k 0 0:00:06 0:00:05 0:00:01 1598k 97 9.8M 97 9887k 0 0 1502k 0 0:00:06 0:00:06 --:--:-- 1686k 100 9.8M 100 9.8M 0 0 1508k 0 0:00:06 0:00:06 --:--:-- 1724k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 97 542k 97 530k 0 0 947k 0 --:--:-- --:--:-- --:--:-- 946k 100 542k 100 542k 0 0 953k 0 --:--:-- --:--:-- --:--:-- 953k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 542k 100 542k 0 0 987k 0 --:--:-- --:--:-- --:--:-- 989k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 931k 100 931k 0 0 1190k 0 --:--:-- --:--:-- --:--:-- 1190k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 21 931k 21 196k 0 0 832k 0 0:00:01 --:--:-- 0:00:01 830k 100 931k 100 931k 0 0 1256k 0 --:--:-- --:--:-- --:--:-- 1256k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 91 42487 91 38958 0 0 258k 0 --:--:-- --:--:-- --:--:-- 258k 100 42487 100 42487 0 0 279k 0 --:--:-- --:--:-- --:--:-- 278k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 49659 100 49659 0 0 148k 0 --:--:-- --:--:-- --:--:-- 149k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 46 2743k 46 1273k 0 0 1310k 0 0:00:02 --:--:-- 0:00:02 1311k 100 2743k 100 2743k 0 0 1508k 0 0:00:01 0:00:01 --:--:-- 1509k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 2743k 0 1203 0 0 8137 0 0:05:45 --:--:-- 0:05:45 8128 44 2743k 44 1209k 0 0 1108k 0 0:00:02 0:00:01 0:00:01 1107k 99 2743k 99 2716k 0 0 1289k 0 0:00:02 0:00:02 --:--:-- 1289k 100 2743k 100 2743k 0 0 1292k 0 0:00:02 0:00:02 --:--:-- 1292k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 9 455k 9 44758 0 0 367k 0 0:00:01 --:--:-- 0:00:01 367k 100 455k 100 455k 0 0 998k 0 --:--:-- --:--:-- --:--:-- 997k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 455k 100 455k 0 0 1020k 0 --:--:-- --:--:-- --:--:-- 1022k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 9 452k 9 46208 0 0 15334 0 0:00:30 0:00:03 0:00:27 15336 100 452k 100 452k 0 0 144k 0 0:00:03 0:00:03 --:--:-- 144k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 452k 100 452k 0 0 1184k 0 --:--:-- --:--:-- --:--:-- 1187k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 96 413k 96 399k 0 0 878k 0 --:--:-- --:--:-- --:--:-- 878k 100 413k 100 413k 0 0 899k 0 --:--:-- --:--:-- --:--:-- 899k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 413k 100 413k 0 0 595k 0 --:--:-- --:--:-- --:--:-- 595k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 549k 100 549k 0 0 1083k 0 --:--:-- --:--:-- --:--:-- 1083k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 47 549k 47 259k 0 0 882k 0 --:--:-- --:--:-- --:--:-- 881k 100 549k 100 549k 0 0 1052k 0 --:--:-- --:--:-- --:--:-- 1050k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 3 13.1M 3 467k 0 0 1087k 0 0:00:12 --:--:-- 0:00:12 1087k 16 13.1M 16 2160k 0 0 1511k 0 0:00:08 0:00:01 0:00:07 1511k 29 13.1M 29 3964k 0 0 1617k 0 0:00:08 0:00:02 0:00:06 1616k 41 13.1M 41 5607k 0 0 1634k 0 0:00:08 0:00:03 0:00:05 1634k 54 13.1M 54 7295k 0 0 1646k 0 0:00:08 0:00:04 0:00:04 1646k 66 13.1M 66 9026k 0 0 1661k 0 0:00:08 0:00:05 0:00:03 1710k 79 13.1M 79 10.4M 0 0 1667k 0 0:00:08 0:00:06 0:00:02 1712k 92 13.1M 92 12.1M 0 0 1669k 0 0:00:08 0:00:07 0:00:01 1695k 100 13.1M 100 13.1M 0 0 1663k 0 0:00:08 0:00:08 --:--:-- 1685k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 5 13.1M 5 684k 0 0 936k 0 0:00:14 --:--:-- 0:00:14 936k 16 13.1M 16 2221k 0 0 1283k 0 0:00:10 0:00:01 0:00:09 1283k 28 13.1M 28 3876k 0 0 1419k 0 0:00:09 0:00:02 0:00:07 1419k 41 13.1M 41 5661k 0 0 1517k 0 0:00:08 0:00:03 0:00:05 1517k 55 13.1M 55 7442k 0 0 1573k 0 0:00:08 0:00:04 0:00:04 1573k 68 13.1M 68 9196k 0 0 1604k 0 0:00:08 0:00:05 0:00:03 1702k 81 13.1M 81 10.6M 0 0 1626k 0 0:00:08 0:00:06 0:00:02 1745k 94 13.1M 94 12.4M 0 0 1650k 0 0:00:08 0:00:07 0:00:01 1776k 100 13.1M 100 13.1M 0 0 1660k 0 0:00:08 0:00:08 --:--:-- 1780k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 8 1512k 8 135k 0 0 601k 0 0:00:02 --:--:-- 0:00:02 601k 100 1512k 100 1512k 0 0 1402k 0 0:00:01 0:00:01 --:--:-- 1404k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 31 1512k 31 469k 0 0 882k 0 0:00:01 --:--:-- 0:00:01 881k 99 1512k 99 1497k 0 0 977k 0 0:00:01 0:00:01 --:--:-- 977k 100 1512k 100 1512k 0 0 927k 0 0:00:01 0:00:01 --:--:-- 927k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 14 332k 14 49114 0 0 414k 0 --:--:-- --:--:-- --:--:-- 413k 100 332k 100 332k 0 0 1061k 0 --:--:-- --:--:-- --:--:-- 1059k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 332k 100 332k 0 0 463k 0 --:--:-- --:--:-- --:--:-- 463k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 67 1457k 67 976k 0 0 1281k 0 0:00:01 --:--:-- 0:00:01 1281k 100 1457k 100 1457k 0 0 1346k 0 0:00:01 0:00:01 --:--:-- 1347k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 40 1457k 40 593k 0 0 516k 0 0:00:02 0:00:01 0:00:01 515k 97 1457k 97 1427k 0 0 656k 0 0:00:02 0:00:02 --:--:-- 656k 100 1457k 100 1457k 0 0 665k 0 0:00:02 0:00:02 --:--:-- 665k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 94 840k 94 796k 0 0 1239k 0 --:--:-- --:--:-- --:--:-- 1238k 100 840k 100 840k 0 0 1269k 0 --:--:-- --:--:-- --:--:-- 1269k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 71 840k 71 603k 0 0 710k 0 0:00:01 --:--:-- 0:00:01 710k 100 840k 100 840k 0 0 695k 0 0:00:01 0:00:01 --:--:-- 695k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 24 5166k 24 1267k 0 0 1346k 0 0:00:03 --:--:-- 0:00:03 1345k 57 5166k 57 2949k 0 0 1518k 0 0:00:03 0:00:01 0:00:02 1518k 90 5166k 90 4654k 0 0 1581k 0 0:00:03 0:00:02 0:00:01 1581k 100 5166k 100 5166k 0 0 1600k 0 0:00:03 0:00:03 --:--:-- 1600k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 4 5166k 4 232k 0 0 391k 0 0:00:13 --:--:-- 0:00:13 391k 29 5166k 29 1541k 0 0 954k 0 0:00:05 0:00:01 0:00:04 954k 56 5166k 56 2927k 0 0 1131k 0 0:00:04 0:00:02 0:00:02 1131k 83 5166k 83 4301k 0 0 1197k 0 0:00:04 0:00:03 0:00:01 1197k 100 5166k 100 5166k 0 0 1223k 0 0:00:04 0:00:04 --:--:-- 1223k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 10 6776k 10 731k 0 0 1121k 0 0:00:06 --:--:-- 0:00:06 1120k 34 6776k 34 2360k 0 0 1428k 0 0:00:04 0:00:01 0:00:03 1428k 59 6776k 59 4056k 0 0 1529k 0 0:00:04 0:00:02 0:00:02 1529k 84 6776k 84 5743k 0 0 1572k 0 0:00:04 0:00:03 0:00:01 1572k 100 6776k 100 6776k 0 0 1590k 0 0:00:04 0:00:04 --:--:-- 1590k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 4 6776k 4 284k 0 0 909k 0 0:00:07 --:--:-- 0:00:07 906k 26 6776k 26 1775k 0 0 1354k 0 0:00:05 0:00:01 0:00:04 1353k 52 6776k 52 3564k 0 0 1541k 0 0:00:04 0:00:02 0:00:02 1541k 77 6776k 77 5277k 0 0 1592k 0 0:00:04 0:00:03 0:00:01 1591k 100 6776k 100 6776k 0 0 1626k 0 0:00:04 0:00:04 --:--:-- 1626k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 33 1003k 33 338k 0 0 1054k 0 --:--:-- --:--:-- --:--:-- 1051k 100 1003k 100 1003k 0 0 1346k 0 --:--:-- --:--:-- --:--:-- 1345k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 1003k 100 1003k 0 0 1045k 0 --:--:-- --:--:-- --:--:-- 1045k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 21 3436k 21 725k 0 0 1363k 0 0:00:02 --:--:-- 0:00:02 1364k 69 3436k 69 2383k 0 0 1559k 0 0:00:02 0:00:01 0:00:01 1559k 100 3436k 100 3436k 0 0 1607k 0 0:00:02 0:00:02 --:--:-- 1608k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 3436k 0 1206 0 0 7324 0 0:08:00 --:--:-- 0:08:00 7309 31 3436k 31 1073k 0 0 977k 0 0:00:03 0:00:01 0:00:02 977k 78 3436k 78 2691k 0 0 1283k 0 0:00:02 0:00:02 --:--:-- 1282k 100 3436k 100 3436k 0 0 1358k 0 0:00:02 0:00:02 --:--:-- 1357k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 37 962k 37 361k 0 0 1002k 0 --:--:-- --:--:-- --:--:-- 1000k 100 962k 100 962k 0 0 1320k 0 --:--:-- --:--:-- --:--:-- 1319k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 58 962k 58 561k 0 0 1070k 0 --:--:-- --:--:-- --:--:-- 1069k 100 962k 100 962k 0 0 1232k 0 --:--:-- --:--:-- --:--:-- 1231k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 623k 100 623k 0 0 1251k 0 --:--:-- --:--:-- --:--:-- 1254k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 623k 100 623k 0 0 1139k 0 --:--:-- --:--:-- --:--:-- 1139k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 6 22.1M 6 1509k 0 0 1479k 0 0:00:15 0:00:01 0:00:14 1478k 14 22.1M 14 3184k 0 0 1575k 0 0:00:14 0:00:02 0:00:12 1575k 21 22.1M 21 4788k 0 0 1585k 0 0:00:14 0:00:03 0:00:11 1584k 28 22.1M 28 6547k 0 0 1628k 0 0:00:13 0:00:04 0:00:09 1628k 36 22.1M 36 8219k 0 0 1637k 0 0:00:13 0:00:05 0:00:08 1648k 43 22.1M 43 9787k 0 0 1625k 0 0:00:13 0:00:06 0:00:07 1654k 50 22.1M 50 11.1M 0 0 1625k 0 0:00:13 0:00:07 0:00:06 1644k 57 22.1M 57 12.6M 0 0 1615k 0 0:00:14 0:00:08 0:00:06 1634k 64 22.1M 64 14.2M 0 0 1621k 0 0:00:13 0:00:09 0:00:04 1616k 71 22.1M 71 15.9M 0 0 1627k 0 0:00:13 0:00:10 0:00:03 1617k 79 22.1M 79 17.6M 0 0 1636k 0 0:00:13 0:00:11 0:00:02 1649k 86 22.1M 86 19.2M 0 0 1638k 0 0:00:13 0:00:12 0:00:01 1657k 94 22.1M 94 20.9M 0 0 1643k 0 0:00:13 0:00:13 --:--:-- 1687k 100 22.1M 100 22.1M 0 0 1647k 0 0:00:13 0:00:13 --:--:-- 1696k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 22.1M 0 1201 0 0 7860 0 0:49:14 --:--:-- 0:49:14 7849 5 22.1M 5 1158k 0 0 1046k 0 0:00:21 0:00:01 0:00:20 1046k 12 22.1M 12 2839k 0 0 1347k 0 0:00:16 0:00:02 0:00:14 1347k 19 22.1M 19 4435k 0 0 1427k 0 0:00:15 0:00:03 0:00:12 1427k 27 22.1M 27 6254k 0 0 1522k 0 0:00:14 0:00:04 0:00:10 1522k 35 22.1M 35 7944k 0 0 1555k 0 0:00:14 0:00:05 0:00:09 1602k 43 22.1M 43 9756k 0 0 1597k 0 0:00:14 0:00:06 0:00:08 1719k 50 22.1M 50 11.2M 0 0 1619k 0 0:00:13 0:00:07 0:00:06 1734k 58 22.1M 58 12.9M 0 0 1639k 0 0:00:13 0:00:08 0:00:05 1771k 65 22.1M 65 14.4M 0 0 1621k 0 0:00:13 0:00:09 0:00:04 1702k 72 22.1M 72 16.0M 0 0 1625k 0 0:00:13 0:00:10 0:00:03 1696k 80 22.1M 80 17.8M 0 0 1641k 0 0:00:13 0:00:11 0:00:02 1695k 87 22.1M 87 19.4M 0 0 1645k 0 0:00:13 0:00:12 0:00:01 1680k 95 22.1M 95 21.1M 0 0 1652k 0 0:00:13 0:00:13 --:--:-- 1672k 100 22.1M 100 22.1M 0 0 1653k 0 0:00:13 0:00:13 --:--:-- 1716k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 6 725k 6 44759 0 0 379k 0 0:00:01 --:--:-- 0:00:01 376k 100 725k 100 725k 0 0 1314k 0 --:--:-- --:--:-- --:--:-- 1314k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 49 725k 49 357k 0 0 1158k 0 --:--:-- --:--:-- --:--:-- 1155k 100 725k 100 725k 0 0 1418k 0 --:--:-- --:--:-- --:--:-- 1417k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 202k 100 202k 0 0 910k 0 --:--:-- --:--:-- --:--:-- 913k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 202k 100 202k 0 0 639k 0 --:--:-- --:--:-- --:--:-- 641k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 49 417k 49 208k 0 0 789k 0 --:--:-- --:--:-- --:--:-- 788k 100 417k 100 417k 0 0 984k 0 --:--:-- --:--:-- --:--:-- 985k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 97 417k 97 406k 0 0 1007k 0 --:--:-- --:--:-- --:--:-- 1006k 100 417k 100 417k 0 0 1015k 0 --:--:-- --:--:-- --:--:-- 1014k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 10 5615k 10 610k 0 0 731k 0 0:00:07 --:--:-- 0:00:07 730k 26 5615k 26 1461k 0 0 807k 0 0:00:06 0:00:01 0:00:05 807k 44 5615k 44 2472k 0 0 873k 0 0:00:06 0:00:02 0:00:04 872k 59 5615k 59 3339k 0 0 865k 0 0:00:06 0:00:03 0:00:03 865k 75 5615k 75 4263k 0 0 873k 0 0:00:06 0:00:04 0:00:02 873k 92 5615k 92 5215k 0 0 870k 0 0:00:06 0:00:05 0:00:01 892k 100 5615k 100 5615k 0 0 913k 0 0:00:06 0:00:06 --:--:-- 956k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 16 5615k 16 951k 0 0 1001k 0 0:00:05 --:--:-- 0:00:05 1001k 45 5615k 45 2576k 0 0 1321k 0 0:00:04 0:00:01 0:00:03 1321k 74 5615k 74 4199k 0 0 1423k 0 0:00:03 0:00:02 0:00:01 1423k 100 5615k 100 5615k 0 0 1493k 0 0:00:03 0:00:03 --:--:-- 1493k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 68 1152k 68 793k 0 0 1363k 0 --:--:-- --:--:-- --:--:-- 1361k 100 1152k 100 1152k 0 0 1475k 0 --:--:-- --:--:-- --:--:-- 1474k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 1152k 100 1152k 0 0 1175k 0 --:--:-- --:--:-- --:--:-- 1175k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 79 1363k 79 1090k 0 0 1438k 0 --:--:-- --:--:-- --:--:-- 1438k 100 1363k 100 1363k 0 0 1459k 0 --:--:-- --:--:-- --:--:-- 1459k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 1363k 0 1206 0 0 7542 0 0:03:05 --:--:-- 0:03:05 7537 100 1363k 100 1363k 0 0 1276k 0 0:00:01 0:00:01 --:--:-- 1277k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 33 2869k 33 973k 0 0 1242k 0 0:00:02 --:--:-- 0:00:02 1242k 90 2869k 90 2608k 0 0 1462k 0 0:00:01 0:00:01 --:--:-- 1462k 100 2869k 100 2869k 0 0 1485k 0 0:00:01 0:00:01 --:--:-- 1485k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 37 2869k 37 1080k 0 0 1069k 0 0:00:02 0:00:01 0:00:01 1069k 87 2869k 87 2499k 0 0 1243k 0 0:00:02 0:00:02 --:--:-- 1243k 100 2869k 100 2869k 0 0 1276k 0 0:00:02 0:00:02 --:--:-- 1276k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 744k 100 744k 0 0 1345k 0 --:--:-- --:--:-- --:--:-- 1346k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 92 744k 92 688k 0 0 961k 0 --:--:-- --:--:-- --:--:-- 960k 100 744k 100 744k 0 0 980k 0 --:--:-- --:--:-- --:--:-- 979k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 77 206k 77 161k 0 0 771k 0 --:--:-- --:--:-- --:--:-- 768k 100 206k 100 206k 0 0 784k 0 --:--:-- --:--:-- --:--:-- 783k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 206k 100 206k 0 0 672k 0 --:--:-- --:--:-- --:--:-- 674k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 47 2860k 47 1352k 0 0 1488k 0 0:00:01 --:--:-- 0:00:01 1487k 100 2860k 100 2860k 0 0 1573k 0 0:00:01 0:00:01 --:--:-- 1574k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 16 2860k 16 479k 0 0 834k 0 0:00:03 --:--:-- 0:00:03 833k 72 2860k 72 2065k 0 0 1312k 0 0:00:02 0:00:01 0:00:01 1312k 100 2860k 100 2860k 0 0 1411k 0 0:00:02 0:00:02 --:--:-- 1411k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 149k 0 1199 0 0 20070 0 0:00:07 --:--:-- 0:00:07 19983 100 149k 100 149k 0 0 780k 0 --:--:-- --:--:-- --:--:-- 778k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 149k 100 149k 0 0 522k 0 --:--:-- --:--:-- --:--:-- 522k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 976k 100 976k 0 0 1226k 0 --:--:-- --:--:-- --:--:-- 1228k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 6 976k 6 62188 0 0 347k 0 0:00:02 --:--:-- 0:00:02 347k 100 976k 100 976k 0 0 1371k 0 --:--:-- --:--:-- --:--:-- 1371k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 1357k 100 1357k 0 0 1516k 0 --:--:-- --:--:-- --:--:-- 1516k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 17 1357k 17 242k 0 0 570k 0 0:00:02 --:--:-- 0:00:02 569k 100 1357k 100 1357k 0 0 1054k 0 0:00:01 0:00:01 --:--:-- 1054k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 35.7M 0 1192 0 0 9836 0 1:03:30 --:--:-- 1:03:30 9770 3 35.7M 3 1188k 0 0 1146k 0 0:00:31 0:00:01 0:00:30 1145k 7 35.7M 7 2760k 0 0 1355k 0 0:00:27 0:00:02 0:00:25 1355k 11 35.7M 11 4375k 0 0 1441k 0 0:00:25 0:00:03 0:00:22 1440k 16 35.7M 16 6064k 0 0 1502k 0 0:00:24 0:00:04 0:00:20 1502k 21 35.7M 21 7797k 0 0 1548k 0 0:00:23 0:00:05 0:00:18 1586k 25 35.7M 25 9497k 0 0 1572k 0 0:00:23 0:00:06 0:00:17 1661k 30 35.7M 30 10.9M 0 0 1595k 0 0:00:22 0:00:07 0:00:15 1693k 35 35.7M 35 12.5M 0 0 1596k 0 0:00:22 0:00:08 0:00:14 1691k 38 35.7M 38 13.9M 0 0 1579k 0 0:00:23 0:00:09 0:00:14 1641k 43 35.7M 43 15.4M 0 0 1579k 0 0:00:23 0:00:10 0:00:13 1610k 47 35.7M 47 17.0M 0 0 1583k 0 0:00:23 0:00:11 0:00:12 1596k 52 35.7M 52 18.6M 0 0 1589k 0 0:00:23 0:00:12 0:00:11 1580k 56 35.7M 56 20.3M 0 0 1595k 0 0:00:22 0:00:13 0:00:09 1594k 61 35.7M 61 22.0M 0 0 1606k 0 0:00:22 0:00:14 0:00:08 1656k 66 35.7M 66 23.6M 0 0 1612k 0 0:00:22 0:00:15 0:00:07 1678k 70 35.7M 70 25.3M 0 0 1617k 0 0:00:22 0:00:16 0:00:06 1691k 75 35.7M 75 26.9M 0 0 1617k 0 0:00:22 0:00:17 0:00:05 1685k 79 35.7M 79 28.5M 0 0 1622k 0 0:00:22 0:00:18 0:00:04 1693k 84 35.7M 84 30.3M 0 0 1630k 0 0:00:22 0:00:19 0:00:03 1695k 89 35.7M 89 31.8M 0 0 1628k 0 0:00:22 0:00:20 0:00:02 1676k 92 35.7M 92 33.1M 0 0 1614k 0 0:00:22 0:00:21 0:00:01 1604k 97 35.7M 97 34.8M 0 0 1617k 0 0:00:22 0:00:22 --:--:-- 1619k 100 35.7M 100 35.7M 0 0 1621k 0 0:00:22 0:00:22 --:--:-- 1615k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 35.7M 0 1201 0 0 6536 0 1:35:34 --:--:-- 1:35:34 6527 3 35.7M 3 1244k 0 0 1130k 0 0:00:32 0:00:01 0:00:31 1130k 7 35.7M 7 2622k 0 0 1246k 0 0:00:29 0:00:02 0:00:27 1246k 11 35.7M 11 4364k 0 0 1407k 0 0:00:26 0:00:03 0:00:23 1406k 16 35.7M 16 6091k 0 0 1484k 0 0:00:24 0:00:04 0:00:20 1484k 21 35.7M 21 7841k 0 0 1537k 0 0:00:23 0:00:05 0:00:18 1594k 26 35.7M 26 9644k 0 0 1580k 0 0:00:23 0:00:06 0:00:17 1680k 31 35.7M 31 11.0M 0 0 1600k 0 0:00:22 0:00:07 0:00:15 1749k 35 35.7M 35 12.7M 0 0 1617k 0 0:00:22 0:00:08 0:00:14 1748k 40 35.7M 40 14.4M 0 0 1624k 0 0:00:22 0:00:09 0:00:13 1738k 44 35.7M 44 16.0M 0 0 1628k 0 0:00:22 0:00:10 0:00:12 1721k 49 35.7M 49 17.7M 0 0 1636k 0 0:00:22 0:00:11 0:00:11 1704k 54 35.7M 54 19.4M 0 0 1649k 0 0:00:22 0:00:12 0:00:10 1719k 59 35.7M 59 21.2M 0 0 1658k 0 0:00:22 0:00:13 0:00:09 1725k 64 35.7M 64 22.8M 0 0 1662k 0 0:00:22 0:00:14 0:00:08 1732k 68 35.7M 68 24.6M 0 0 1671k 0 0:00:21 0:00:15 0:00:06 1757k 73 35.7M 73 26.3M 0 0 1677k 0 0:00:21 0:00:16 0:00:05 1766k 78 35.7M 78 28.0M 0 0 1682k 0 0:00:21 0:00:17 0:00:04 1760k 83 35.7M 83 29.7M 0 0 1684k 0 0:00:21 0:00:18 0:00:03 1752k 88 35.7M 88 31.5M 0 0 1689k 0 0:00:21 0:00:19 0:00:02 1764k 93 35.7M 93 33.2M 0 0 1695k 0 0:00:21 0:00:20 0:00:01 1768k 97 35.7M 97 34.9M 0 0 1697k 0 0:00:21 0:00:21 --:--:-- 1764k 100 35.7M 100 35.7M 0 0 1700k 0 0:00:21 0:00:21 --:--:-- 1771k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 5 4475k 5 226k 0 0 885k 0 0:00:05 --:--:-- 0:00:05 885k 38 4475k 38 1728k 0 0 1375k 0 0:00:03 0:00:01 0:00:02 1374k 76 4475k 76 3432k 0 0 1519k 0 0:00:02 0:00:02 --:--:-- 1519k 100 4475k 100 4475k 0 0 1539k 0 0:00:02 0:00:02 --:--:-- 1539k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 11 4475k 11 513k 0 0 1089k 0 0:00:04 --:--:-- 0:00:04 1089k 47 4475k 47 2140k 0 0 1462k 0 0:00:03 0:00:01 0:00:02 1462k 86 4475k 86 3866k 0 0 1569k 0 0:00:02 0:00:02 --:--:-- 1569k 100 4475k 100 4475k 0 0 1596k 0 0:00:02 0:00:02 --:--:-- 1596k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 311k 100 311k 0 0 1141k 0 --:--:-- --:--:-- --:--:-- 1146k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 311k 100 311k 0 0 703k 0 --:--:-- --:--:-- --:--:-- 704k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 254k 100 254k 0 0 1019k 0 --:--:-- --:--:-- --:--:-- 1020k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 254k 0 1205 0 0 6892 0 0:00:37 --:--:-- 0:00:37 6885 100 254k 100 254k 0 0 712k 0 --:--:-- --:--:-- --:--:-- 712k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 80 1102k 80 890k 0 0 1246k 0 --:--:-- --:--:-- --:--:-- 1245k 100 1102k 100 1102k 0 0 1318k 0 --:--:-- --:--:-- --:--:-- 1317k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 79 1102k 79 874k 0 0 1301k 0 --:--:-- --:--:-- --:--:-- 1301k 100 1102k 100 1102k 0 0 1373k 0 --:--:-- --:--:-- --:--:-- 1373k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 72082 100 72082 0 0 498k 0 --:--:-- --:--:-- --:--:-- 499k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 72082 100 72082 0 0 358k 0 --:--:-- --:--:-- --:--:-- 359k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 636k 100 636k 0 0 1266k 0 --:--:-- --:--:-- --:--:-- 1267k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 636k 100 636k 0 0 1124k 0 --:--:-- --:--:-- --:--:-- 1126k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 4 1077k 4 44756 0 0 338k 0 0:00:03 --:--:-- 0:00:03 338k 100 1077k 100 1077k 0 0 1282k 0 --:--:-- --:--:-- --:--:-- 1281k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 1077k 100 1077k 0 0 1309k 0 --:--:-- --:--:-- --:--:-- 1310k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 3 5051k 3 184k 0 0 794k 0 0:00:06 --:--:-- 0:00:06 793k 34 5051k 34 1738k 0 0 1416k 0 0:00:03 0:00:01 0:00:02 1415k 64 5051k 64 3278k 0 0 1471k 0 0:00:03 0:00:02 0:00:01 1471k 96 5051k 96 4883k 0 0 1512k 0 0:00:03 0:00:03 --:--:-- 1512k 100 5051k 100 5051k 0 0 1521k 0 0:00:03 0:00:03 --:--:-- 1521k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 5051k 0 15723 0 0 137k 0 0:00:36 --:--:-- 0:00:36 137k 28 5051k 28 1440k 0 0 1314k 0 0:00:03 0:00:01 0:00:02 1314k 63 5051k 63 3190k 0 0 1522k 0 0:00:03 0:00:02 0:00:01 1522k 95 5051k 95 4827k 0 0 1560k 0 0:00:03 0:00:03 --:--:-- 1559k 100 5051k 100 5051k 0 0 1567k 0 0:00:03 0:00:03 --:--:-- 1567k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 71 1613k 71 1156k 0 0 1353k 0 0:00:01 --:--:-- 0:00:01 1352k 100 1613k 100 1613k 0 0 1423k 0 0:00:01 0:00:01 --:--:-- 1424k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 65 1613k 65 1050k 0 0 1285k 0 0:00:01 --:--:-- 0:00:01 1284k 100 1613k 100 1613k 0 0 1376k 0 0:00:01 0:00:01 --:--:-- 1377k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 25 3355k 25 857k 0 0 1271k 0 0:00:02 --:--:-- 0:00:02 1270k 74 3355k 74 2508k 0 0 1494k 0 0:00:02 0:00:01 0:00:01 1494k 100 3355k 100 3355k 0 0 1525k 0 0:00:02 0:00:02 --:--:-- 1526k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 17 3355k 17 592k 0 0 1001k 0 0:00:03 --:--:-- 0:00:03 1000k 66 3355k 66 2238k 0 0 1406k 0 0:00:02 0:00:01 0:00:01 1406k 100 3355k 100 3355k 0 0 1522k 0 0:00:02 0:00:02 --:--:-- 1522k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 55 751k 55 419k 0 0 966k 0 --:--:-- --:--:-- --:--:-- 964k 100 751k 100 751k 0 0 1173k 0 --:--:-- --:--:-- --:--:-- 1173k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 12 751k 12 98489 0 0 269k 0 0:00:02 --:--:-- 0:00:02 268k 100 751k 100 751k 0 0 767k 0 --:--:-- --:--:-- --:--:-- 767k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 44 1878k 44 830k 0 0 1130k 0 0:00:01 --:--:-- 0:00:01 1130k 100 1878k 100 1878k 0 0 1403k 0 0:00:01 0:00:01 --:--:-- 1404k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 1 1878k 1 21531 0 0 67256 0 0:00:28 --:--:-- 0:00:28 67074 71 1878k 71 1336k 0 0 1011k 0 0:00:01 0:00:01 --:--:-- 1010k 100 1878k 100 1878k 0 0 1135k 0 0:00:01 0:00:01 --:--:-- 1134k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 150k 100 150k 0 0 760k 0 --:--:-- --:--:-- --:--:-- 761k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 150k 100 150k 0 0 450k 0 --:--:-- --:--:-- --:--:-- 451k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 39 110k 39 44759 0 0 360k 0 --:--:-- --:--:-- --:--:-- 358k 100 110k 100 110k 0 0 668k 0 --:--:-- --:--:-- --:--:-- 667k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 110k 100 110k 0 0 613k 0 --:--:-- --:--:-- --:--:-- 615k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 1142k 100 1142k 0 0 1337k 0 --:--:-- --:--:-- --:--:-- 1338k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 95 1142k 95 1094k 0 0 1058k 0 0:00:01 0:00:01 --:--:-- 1058k 100 1142k 100 1142k 0 0 1063k 0 0:00:01 0:00:01 --:--:-- 1062k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 27 5019k 27 1370k 0 0 1354k 0 0:00:03 0:00:01 0:00:02 1354k 61 5019k 61 3093k 0 0 1537k 0 0:00:03 0:00:02 0:00:01 1536k 94 5019k 94 4751k 0 0 1576k 0 0:00:03 0:00:03 --:--:-- 1576k 100 5019k 100 5019k 0 0 1588k 0 0:00:03 0:00:03 --:--:-- 1588k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 21 5019k 21 1101k 0 0 1198k 0 0:00:04 --:--:-- 0:00:04 1198k 56 5019k 56 2847k 0 0 1483k 0 0:00:03 0:00:01 0:00:02 1482k 91 5019k 91 4615k 0 0 1580k 0 0:00:03 0:00:02 0:00:01 1580k 100 5019k 100 5019k 0 0 1574k 0 0:00:03 0:00:03 --:--:-- 1575k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 847k 100 847k 0 0 1142k 0 --:--:-- --:--:-- --:--:-- 1143k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 847k 100 847k 0 0 1269k 0 --:--:-- --:--:-- --:--:-- 1271k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 1302k 100 1302k 0 0 1311k 0 --:--:-- --:--:-- --:--:-- 1310k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 90 1302k 90 1175k 0 0 1205k 0 0:00:01 --:--:-- 0:00:01 1205k 100 1302k 100 1302k 0 0 1249k 0 0:00:01 0:00:01 --:--:-- 1249k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 64 2232k 64 1433k 0 0 1432k 0 0:00:01 0:00:01 --:--:-- 1433k 100 2232k 100 2232k 0 0 1528k 0 0:00:01 0:00:01 --:--:-- 1530k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 38 2232k 38 860k 0 0 964k 0 0:00:02 --:--:-- 0:00:02 963k 100 2232k 100 2232k 0 0 1321k 0 0:00:01 0:00:01 --:--:-- 1321k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 9 6496k 9 605k 0 0 1259k 0 0:00:05 --:--:-- 0:00:05 1258k 35 6496k 35 2313k 0 0 1562k 0 0:00:04 0:00:01 0:00:03 1561k 61 6496k 61 3991k 0 0 1607k 0 0:00:04 0:00:02 0:00:02 1606k 87 6496k 87 5675k 0 0 1630k 0 0:00:03 0:00:03 --:--:-- 1630k 100 6496k 100 6496k 0 0 1647k 0 0:00:03 0:00:03 --:--:-- 1647k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 6496k 0 1206 0 0 5695 0 0:19:28 --:--:-- 0:19:28 5688 19 6496k 19 1244k 0 0 1067k 0 0:00:06 0:00:01 0:00:05 1067k 45 6496k 45 2954k 0 0 1364k 0 0:00:04 0:00:02 0:00:02 1364k 71 6496k 71 4636k 0 0 1462k 0 0:00:04 0:00:03 0:00:01 1462k 98 6496k 98 6404k 0 0 1536k 0 0:00:04 0:00:04 --:--:-- 1536k 100 6496k 100 6496k 0 0 1540k 0 0:00:04 0:00:04 --:--:-- 1621k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 455k 100 455k 0 0 1298k 0 --:--:-- --:--:-- --:--:-- 1301k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 455k 100 455k 0 0 891k 0 --:--:-- --:--:-- --:--:-- 893k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 2 697k 2 15716 0 0 176k 0 0:00:03 --:--:-- 0:00:03 174k 100 697k 100 697k 0 0 1275k 0 --:--:-- --:--:-- --:--:-- 1275k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 38 697k 38 269k 0 0 922k 0 --:--:-- --:--:-- --:--:-- 921k 100 697k 100 697k 0 0 1273k 0 --:--:-- --:--:-- --:--:-- 1272k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 100k 100 100k 0 0 569k 0 --:--:-- --:--:-- --:--:-- 571k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 100k 100 100k 0 0 492k 0 --:--:-- --:--:-- --:--:-- 495k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 25 1073k 25 270k 0 0 988k 0 0:00:01 --:--:-- 0:00:01 987k 100 1073k 100 1073k 0 0 1299k 0 --:--:-- --:--:-- --:--:-- 1299k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 48 1073k 48 520k 0 0 1187k 0 --:--:-- --:--:-- --:--:-- 1187k 100 1073k 100 1073k 0 0 1336k 0 --:--:-- --:--:-- --:--:-- 1336k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 419k 100 419k 0 0 1252k 0 --:--:-- --:--:-- --:--:-- 1255k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 419k 100 419k 0 0 1098k 0 --:--:-- --:--:-- --:--:-- 1100k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 1142k 100 1142k 0 0 1256k 0 --:--:-- --:--:-- --:--:-- 1255k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 1142k 0 1203 0 0 6460 0 0:03:01 --:--:-- 0:03:01 6467 100 1142k 100 1142k 0 0 1130k 0 0:00:01 0:00:01 --:--:-- 1131k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 494k 0 1198 0 0 7688 0 0:01:05 --:--:-- 0:01:05 7679 100 494k 100 494k 0 0 925k 0 --:--:-- --:--:-- --:--:-- 925k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 494k 0 1205 0 0 7321 0 0:01:09 --:--:-- 0:01:09 7303 100 494k 100 494k 0 0 878k 0 --:--:-- --:--:-- --:--:-- 877k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 13 4795k 13 636k 0 0 1218k 0 0:00:03 --:--:-- 0:00:03 1216k 43 4795k 43 2104k 0 0 1336k 0 0:00:03 0:00:01 0:00:02 1335k 74 4795k 74 3577k 0 0 1418k 0 0:00:03 0:00:02 0:00:01 1418k 100 4795k 100 4795k 0 0 1490k 0 0:00:03 0:00:03 --:--:-- 1491k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 10 4795k 10 497k 0 0 1053k 0 0:00:04 --:--:-- 0:00:04 1053k 42 4795k 42 2034k 0 0 1382k 0 0:00:03 0:00:01 0:00:02 1382k 78 4795k 78 3768k 0 0 1524k 0 0:00:03 0:00:02 0:00:01 1524k 100 4795k 100 4795k 0 0 1541k 0 0:00:03 0:00:03 --:--:-- 1541k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 29 863k 29 254k 0 0 1018k 0 --:--:-- --:--:-- --:--:-- 1015k 100 863k 100 863k 0 0 1326k 0 --:--:-- --:--:-- --:--:-- 1326k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 28 863k 28 247k 0 0 800k 0 0:00:01 --:--:-- 0:00:01 799k 100 863k 100 863k 0 0 1135k 0 --:--:-- --:--:-- --:--:-- 1135k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 8 7597k 8 659k 0 0 1192k 0 0:00:06 --:--:-- 0:00:06 1191k 30 7597k 30 2281k 0 0 1469k 0 0:00:05 0:00:01 0:00:04 1468k 51 7597k 51 3941k 0 0 1544k 0 0:00:04 0:00:02 0:00:02 1543k 75 7597k 75 5726k 0 0 1611k 0 0:00:04 0:00:03 0:00:01 1611k 98 7597k 98 7451k 0 0 1636k 0 0:00:04 0:00:04 --:--:-- 1636k 100 7597k 100 7597k 0 0 1640k 0 0:00:04 0:00:04 --:--:-- 1701k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 4 7597k 4 330k 0 0 641k 0 0:00:11 --:--:-- 0:00:11 641k 22 7597k 22 1712k 0 0 1131k 0 0:00:06 0:00:01 0:00:05 1130k 45 7597k 45 3428k 0 0 1363k 0 0:00:05 0:00:02 0:00:03 1363k 67 7597k 67 5141k 0 0 1462k 0 0:00:05 0:00:03 0:00:02 1462k 87 7597k 87 6640k 0 0 1471k 0 0:00:05 0:00:04 0:00:01 1471k 100 7597k 100 7597k 0 0 1500k 0 0:00:05 0:00:05 --:--:-- 1597k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 397k 100 397k 0 0 1150k 0 --:--:-- --:--:-- --:--:-- 1151k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 32 397k 32 128k 0 0 324k 0 0:00:01 --:--:-- 0:00:01 324k 100 397k 100 397k 0 0 701k 0 --:--:-- --:--:-- --:--:-- 701k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 5 9464k 5 549k 0 0 1187k 0 0:00:07 --:--:-- 0:00:07 1187k 22 9464k 22 2112k 0 0 1444k 0 0:00:06 0:00:01 0:00:05 1444k 39 9464k 39 3703k 0 0 1503k 0 0:00:06 0:00:02 0:00:04 1503k 57 9464k 57 5414k 0 0 1564k 0 0:00:06 0:00:03 0:00:03 1564k 74 9464k 74 7064k 0 0 1582k 0 0:00:05 0:00:04 0:00:01 1582k 92 9464k 92 8727k 0 0 1597k 0 0:00:05 0:00:05 --:--:-- 1635k 100 9464k 100 9464k 0 0 1610k 0 0:00:05 0:00:05 --:--:-- 1665k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 7 9464k 7 712k 0 0 901k 0 0:00:10 --:--:-- 0:00:10 901k 23 9464k 23 2264k 0 0 1261k 0 0:00:07 0:00:01 0:00:06 1261k 41 9464k 41 3906k 0 0 1399k 0 0:00:06 0:00:02 0:00:04 1399k 58 9464k 58 5573k 0 0 1468k 0 0:00:06 0:00:03 0:00:03 1468k 77 9464k 77 7288k 0 0 1521k 0 0:00:06 0:00:04 0:00:02 1521k 94 9464k 94 8988k 0 0 1551k 0 0:00:06 0:00:05 0:00:01 1654k 100 9464k 100 9464k 0 0 1563k 0 0:00:06 0:00:06 --:--:-- 1691k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 12 5316k 12 673k 0 0 1350k 0 0:00:03 --:--:-- 0:00:03 1349k 44 5316k 44 2350k 0 0 1568k 0 0:00:03 0:00:01 0:00:02 1568k 74 5316k 74 3974k 0 0 1589k 0 0:00:03 0:00:02 0:00:01 1589k 100 5316k 100 5316k 0 0 1623k 0 0:00:03 0:00:03 --:--:-- 1623k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 16 5316k 16 853k 0 0 1389k 0 0:00:03 --:--:-- 0:00:03 1389k 48 5316k 48 2586k 0 0 1600k 0 0:00:03 0:00:01 0:00:02 1600k 68 5316k 68 3632k 0 0 1388k 0 0:00:03 0:00:02 0:00:01 1388k 82 5316k 82 4360k 0 0 1191k 0 0:00:04 0:00:03 0:00:01 1191k 100 5316k 100 5316k 0 0 1179k 0 0:00:04 0:00:04 --:--:-- 1180k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 2 4329k 2 120k 0 0 742k 0 0:00:05 --:--:-- 0:00:05 742k 39 4329k 39 1728k 0 0 1487k 0 0:00:02 0:00:01 0:00:01 1487k 76 4329k 76 3329k 0 0 1539k 0 0:00:02 0:00:02 --:--:-- 1539k 100 4329k 100 4329k 0 0 1529k 0 0:00:02 0:00:02 --:--:-- 1529k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 21 5138k 21 1128k 0 0 1106k 0 0:00:04 0:00:01 0:00:03 1105k 55 5138k 55 2832k 0 0 1402k 0 0:00:03 0:00:02 0:00:01 1401k 87 5138k 87 4490k 0 0 1486k 0 0:00:03 0:00:03 --:--:-- 1486k 100 5138k 100 5138k 0 0 1517k 0 0:00:03 0:00:03 --:--:-- 1517k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 17 1626k 17 279k 0 0 1037k 0 0:00:01 --:--:-- 0:00:01 1037k 100 1626k 100 1626k 0 0 1452k 0 0:00:01 0:00:01 --:--:-- 1453k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 40 1626k 40 654k 0 0 1097k 0 0:00:01 --:--:-- 0:00:01 1096k 100 1626k 100 1626k 0 0 1332k 0 0:00:01 0:00:01 --:--:-- 1333k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 7 350k 7 27334 0 0 248k 0 0:00:01 --:--:-- 0:00:01 247k 100 350k 100 350k 0 0 1139k 0 --:--:-- --:--:-- --:--:-- 1138k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 95 350k 95 332k 0 0 995k 0 --:--:-- --:--:-- --:--:-- 993k 100 350k 100 350k 0 0 1011k 0 --:--:-- --:--:-- --:--:-- 1010k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 38 2526k 38 963k 0 0 1267k 0 0:00:01 --:--:-- 0:00:01 1266k 100 2526k 100 2526k 0 0 1506k 0 0:00:01 0:00:01 --:--:-- 1507k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 47 2526k 47 1203k 0 0 1254k 0 0:00:02 --:--:-- 0:00:02 1253k 100 2526k 100 2526k 0 0 1470k 0 0:00:01 0:00:01 --:--:-- 1470k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 9 15.3M 9 1512k 0 0 1462k 0 0:00:10 0:00:01 0:00:09 1461k 20 15.3M 20 3164k 0 0 1555k 0 0:00:10 0:00:02 0:00:08 1555k 30 15.3M 30 4846k 0 0 1595k 0 0:00:09 0:00:03 0:00:06 1595k 42 15.3M 42 6610k 0 0 1638k 0 0:00:09 0:00:04 0:00:05 1638k 52 15.3M 52 8274k 0 0 1643k 0 0:00:09 0:00:05 0:00:04 1655k 63 15.3M 63 9.7M 0 0 1657k 0 0:00:09 0:00:06 0:00:03 1697k 73 15.3M 73 11.3M 0 0 1645k 0 0:00:09 0:00:07 0:00:02 1682k 84 15.3M 84 13.0M 0 0 1662k 0 0:00:09 0:00:08 0:00:01 1702k 96 15.3M 96 14.7M 0 0 1673k 0 0:00:09 0:00:09 --:--:-- 1701k 100 15.3M 100 15.3M 0 0 1678k 0 0:00:09 0:00:09 --:--:-- 1717k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 15.3M 0 135k 0 0 721k 0 0:00:21 --:--:-- 0:00:21 718k 11 15.3M 11 1817k 0 0 1525k 0 0:00:10 0:00:01 0:00:09 1524k 22 15.3M 22 3550k 0 0 1622k 0 0:00:09 0:00:02 0:00:07 1622k 33 15.3M 33 5290k 0 0 1658k 0 0:00:09 0:00:03 0:00:06 1658k 44 15.3M 44 7041k 0 0 1681k 0 0:00:09 0:00:04 0:00:05 1681k 55 15.3M 55 8660k 0 0 1669k 0 0:00:09 0:00:05 0:00:04 1704k 66 15.3M 66 10.2M 0 0 1689k 0 0:00:09 0:00:06 0:00:03 1728k 77 15.3M 77 11.9M 0 0 1697k 0 0:00:09 0:00:07 0:00:02 1730k 88 15.3M 88 13.5M 0 0 1698k 0 0:00:09 0:00:08 0:00:01 1724k 99 15.3M 99 15.2M 0 0 1702k 0 0:00:09 0:00:09 --:--:-- 1720k 100 15.3M 100 15.3M 0 0 1704k 0 0:00:09 0:00:09 --:--:-- 1749k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 4 16.0M 4 731k 0 0 1344k 0 0:00:12 --:--:-- 0:00:12 1344k 14 16.0M 14 2406k 0 0 1554k 0 0:00:10 0:00:01 0:00:09 1554k 23 16.0M 23 3823k 0 0 1502k 0 0:00:10 0:00:02 0:00:08 1502k 33 16.0M 33 5531k 0 0 1560k 0 0:00:10 0:00:03 0:00:07 1560k 44 16.0M 44 7266k 0 0 1599k 0 0:00:10 0:00:04 0:00:06 1599k 54 16.0M 54 9066k 0 0 1635k 0 0:00:10 0:00:05 0:00:05 1666k 65 16.0M 65 10.5M 0 0 1647k 0 0:00:10 0:00:06 0:00:04 1675k 75 16.0M 75 12.1M 0 0 1648k 0 0:00:10 0:00:07 0:00:03 1722k 85 16.0M 85 13.7M 0 0 1647k 0 0:00:10 0:00:08 0:00:02 1708k 95 16.0M 95 15.3M 0 0 1649k 0 0:00:09 0:00:09 --:--:-- 1695k 100 16.0M 100 16.0M 0 0 1649k 0 0:00:09 0:00:09 --:--:-- 1666k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 8 16.0M 8 1379k 0 0 1557k 0 0:00:10 --:--:-- 0:00:10 1556k 17 16.0M 17 2844k 0 0 1508k 0 0:00:10 0:00:01 0:00:09 1508k 27 16.0M 27 4547k 0 0 1572k 0 0:00:10 0:00:02 0:00:08 1572k 37 16.0M 37 6156k 0 0 1584k 0 0:00:10 0:00:03 0:00:07 1583k 48 16.0M 48 7960k 0 0 1628k 0 0:00:10 0:00:04 0:00:06 1628k 59 16.0M 59 9749k 0 0 1656k 0 0:00:09 0:00:05 0:00:04 1674k 69 16.0M 69 11.1M 0 0 1655k 0 0:00:09 0:00:06 0:00:03 1710k 78 16.0M 78 12.7M 0 0 1650k 0 0:00:09 0:00:07 0:00:02 1695k 89 16.0M 89 14.3M 0 0 1652k 0 0:00:09 0:00:08 0:00:01 1706k 99 16.0M 99 16.0M 0 0 1661k 0 0:00:09 0:00:09 --:--:-- 1693k 100 16.0M 100 16.0M 0 0 1661k 0 0:00:09 0:00:09 --:--:-- 1669k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 30 1746k 30 537k 0 0 1254k 0 0:00:01 --:--:-- 0:00:01 1252k 100 1746k 100 1746k 0 0 1486k 0 0:00:01 0:00:01 --:--:-- 1487k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 71 1746k 71 1256k 0 0 1431k 0 0:00:01 --:--:-- 0:00:01 1430k 100 1746k 100 1746k 0 0 1524k 0 0:00:01 0:00:01 --:--:-- 1525k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 11 1435k 11 167k 0 0 783k 0 0:00:01 --:--:-- 0:00:01 780k 100 1435k 100 1435k 0 0 1412k 0 0:00:01 0:00:01 --:--:-- 1412k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 68 1435k 68 979k 0 0 1426k 0 0:00:01 --:--:-- 0:00:01 1425k 100 1435k 100 1435k 0 0 1480k 0 --:--:-- --:--:-- --:--:-- 1479k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 5 1586k 5 95577 0 0 621k 0 0:00:02 --:--:-- 0:00:02 618k 97 1586k 97 1539k 0 0 1336k 0 0:00:01 0:00:01 --:--:-- 1336k 100 1586k 100 1586k 0 0 1356k 0 0:00:01 0:00:01 --:--:-- 1355k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 51 1586k 51 817k 0 0 1200k 0 0:00:01 --:--:-- 0:00:01 1199k 100 1586k 100 1586k 0 0 1350k 0 0:00:01 0:00:01 --:--:-- 1350k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 475k 100 475k 0 0 953k 0 --:--:-- --:--:-- --:--:-- 954k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 475k 100 475k 0 0 1096k 0 --:--:-- --:--:-- --:--:-- 1097k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 31 1486k 31 467k 0 0 1154k 0 0:00:01 --:--:-- 0:00:01 1154k 100 1486k 100 1486k 0 0 1517k 0 --:--:-- --:--:-- --:--:-- 1516k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 77 1486k 77 1156k 0 0 1161k 0 0:00:01 --:--:-- 0:00:01 1161k 100 1486k 100 1486k 0 0 1236k 0 0:00:01 0:00:01 --:--:-- 1237k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 9796 100 9796 0 0 146k 0 --:--:-- --:--:-- --:--:-- 147k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 9796 100 9796 0 0 90976 0 --:--:-- --:--:-- --:--:-- 91551 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 186k 100 186k 0 0 732k 0 --:--:-- --:--:-- --:--:-- 735k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 186k 100 186k 0 0 395k 0 --:--:-- --:--:-- --:--:-- 396k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 96939 100 96939 0 0 622k 0 --:--:-- --:--:-- --:--:-- 622k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 16 96939 16 15726 0 0 132k 0 --:--:-- --:--:-- --:--:-- 132k 100 96939 100 96939 0 0 487k 0 --:--:-- --:--:-- --:--:-- 487k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 6 15.7M 6 1087k 0 0 1382k 0 0:00:11 --:--:-- 0:00:11 1381k 16 15.7M 16 2727k 0 0 1526k 0 0:00:10 0:00:01 0:00:09 1525k 23 15.7M 23 3833k 0 0 1374k 0 0:00:11 0:00:02 0:00:09 1374k 29 15.7M 29 4727k 0 0 1239k 0 0:00:13 0:00:03 0:00:10 1239k 34 15.7M 34 5519k 0 0 1140k 0 0:00:14 0:00:04 0:00:10 1140k 39 15.7M 39 6386k 0 0 1103k 0 0:00:14 0:00:05 0:00:09 1059k 44 15.7M 44 7134k 0 0 1051k 0 0:00:15 0:00:06 0:00:09 881k 49 15.7M 49 7964k 0 0 1019k 0 0:00:15 0:00:07 0:00:08 822k 57 15.7M 57 9270k 0 0 1054k 0 0:00:15 0:00:08 0:00:07 913k 67 15.7M 67 10.5M 0 0 1109k 0 0:00:14 0:00:09 0:00:05 1078k 76 15.7M 76 12.0M 0 0 1145k 0 0:00:14 0:00:10 0:00:04 1194k 86 15.7M 86 13.5M 0 0 1180k 0 0:00:13 0:00:11 0:00:02 1355k 96 15.7M 96 15.2M 0 0 1218k 0 0:00:13 0:00:12 0:00:01 1530k 100 15.7M 100 15.7M 0 0 1226k 0 0:00:13 0:00:13 --:--:-- 1573k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 6 15.7M 6 1070k 0 0 1245k 0 0:00:12 --:--:-- 0:00:12 1244k 16 15.7M 16 2702k 0 0 1450k 0 0:00:11 0:00:01 0:00:10 1449k 27 15.7M 27 4436k 0 0 1551k 0 0:00:10 0:00:02 0:00:08 1551k 38 15.7M 38 6140k 0 0 1591k 0 0:00:10 0:00:03 0:00:07 1590k 49 15.7M 49 7917k 0 0 1629k 0 0:00:09 0:00:04 0:00:05 1629k 60 15.7M 60 9694k 0 0 1654k 0 0:00:09 0:00:05 0:00:04 1724k 70 15.7M 70 11.1M 0 0 1667k 0 0:00:09 0:00:06 0:00:03 1748k 81 15.7M 81 12.8M 0 0 1679k 0 0:00:09 0:00:07 0:00:02 1752k 92 15.7M 92 14.5M 0 0 1684k 0 0:00:09 0:00:08 0:00:01 1755k 100 15.7M 100 15.7M 0 0 1684k 0 0:00:09 0:00:09 --:--:-- 1740k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 503k 100 503k 0 0 1179k 0 --:--:-- --:--:-- --:--:-- 1182k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 3 503k 3 15725 0 0 149k 0 0:00:03 --:--:-- 0:00:03 149k 100 503k 100 503k 0 0 1165k 0 --:--:-- --:--:-- --:--:-- 1165k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 617k 0 1198 0 0 19417 0 0:00:32 --:--:-- 0:00:32 19322 100 617k 100 617k 0 0 1359k 0 --:--:-- --:--:-- --:--:-- 1357k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 617k 100 617k 0 0 1197k 0 --:--:-- --:--:-- --:--:-- 1198k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 372k 100 372k 0 0 1065k 0 --:--:-- --:--:-- --:--:-- 1068k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 372k 0 1205 0 0 20010 0 0:00:19 --:--:-- 0:00:19 20083 100 372k 100 372k 0 0 1028k 0 --:--:-- --:--:-- --:--:-- 1027k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 21 484k 21 103k 0 0 588k 0 --:--:-- --:--:-- --:--:-- 586k 100 484k 100 484k 0 0 1160k 0 --:--:-- --:--:-- --:--:-- 1159k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 484k 100 484k 0 0 765k 0 --:--:-- --:--:-- --:--:-- 767k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 23150 100 23150 0 0 245k 0 --:--:-- --:--:-- --:--:-- 248k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 23150 100 23150 0 0 227k 0 --:--:-- --:--:-- --:--:-- 228k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 557k 100 557k 0 0 1281k 0 --:--:-- --:--:-- --:--:-- 1285k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 557k 100 557k 0 0 912k 0 --:--:-- --:--:-- --:--:-- 914k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 36 159k 36 59284 0 0 433k 0 --:--:-- --:--:-- --:--:-- 432k 100 159k 100 159k 0 0 735k 0 --:--:-- --:--:-- --:--:-- 733k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 159k 0 1213 0 0 6052 0 0:00:26 --:--:-- 0:00:26 6034 100 159k 100 159k 0 0 468k 0 --:--:-- --:--:-- --:--:-- 468k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 12288 100 12288 0 0 151k 0 --:--:-- --:--:-- --:--:-- 151k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 12288 100 12288 0 0 165k 0 --:--:-- --:--:-- --:--:-- 166k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 18 5006k 18 931k 0 0 1210k 0 0:00:04 --:--:-- 0:00:04 1209k 49 5006k 49 2467k 0 0 1393k 0 0:00:03 0:00:01 0:00:02 1393k 83 5006k 83 4172k 0 0 1506k 0 0:00:03 0:00:02 0:00:01 1506k 100 5006k 100 5006k 0 0 1547k 0 0:00:03 0:00:03 --:--:-- 1547k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 8 5006k 8 446k 0 0 691k 0 0:00:07 --:--:-- 0:00:07 691k 40 5006k 40 2045k 0 0 1243k 0 0:00:04 0:00:01 0:00:03 1242k 72 5006k 72 3611k 0 0 1365k 0 0:00:03 0:00:02 0:00:01 1364k 100 5006k 100 5006k 0 0 1456k 0 0:00:03 0:00:03 --:--:-- 1456k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 63 933k 63 591k 0 0 1174k 0 --:--:-- --:--:-- --:--:-- 1172k 100 933k 100 933k 0 0 1309k 0 --:--:-- --:--:-- --:--:-- 1309k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 933k 0 1208 0 0 5898 0 0:02:42 --:--:-- 0:02:42 5892 100 933k 100 933k 0 0 1172k 0 --:--:-- --:--:-- --:--:-- 1172k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 25 4122k 25 1046k 0 0 1382k 0 0:00:02 --:--:-- 0:00:02 1382k 64 4122k 64 2668k 0 0 1518k 0 0:00:02 0:00:01 0:00:01 1517k 100 4122k 100 4122k 0 0 1586k 0 0:00:02 0:00:02 --:--:-- 1586k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 4 4122k 4 181k 0 0 487k 0 0:00:08 --:--:-- 0:00:08 487k 28 4122k 28 1189k 0 0 874k 0 0:00:04 0:00:01 0:00:03 873k 59 4122k 59 2452k 0 0 1038k 0 0:00:03 0:00:02 0:00:01 1038k 93 4122k 93 3848k 0 0 1145k 0 0:00:03 0:00:03 --:--:-- 1144k 100 4122k 100 4122k 0 0 1168k 0 0:00:03 0:00:03 --:--:-- 1168k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 9 525k 9 49112 0 0 394k 0 0:00:01 --:--:-- 0:00:01 393k 100 525k 100 525k 0 0 1087k 0 --:--:-- --:--:-- --:--:-- 1087k + 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 525k 100 525k 0 0 785k 0 --:--:-- --:--:-- --:--:-- 785k Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/src/openssl-1.0.1j.tar.gz and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/src/openssl-1.0.1j.tar.gz differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/src/openssl-1.0.2a.tar.gz and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/src/openssl-1.0.2a.tar.gz differ diff -Nru libreoffice-l10n-4.4.2/stoc/source/inspect/introspection.cxx libreoffice-l10n-4.4.6~rc3/stoc/source/inspect/introspection.cxx --- libreoffice-l10n-4.4.2/stoc/source/inspect/introspection.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/stoc/source/inspect/introspection.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1599,7 +1599,7 @@ throw (css::uno::RuntimeException, std::exception) { osl::MutexGuard g(m_aMutex); - if (rBHelper.bDisposed) { + if (rBHelper.bDisposed || rBHelper.bInDispose) { throw css::lang::DisposedException( getImplementationName(), static_cast(this)); } diff -Nru libreoffice-l10n-4.4.2/svl/source/numbers/zforfind.cxx libreoffice-l10n-4.4.6~rc3/svl/source/numbers/zforfind.cxx --- libreoffice-l10n-4.4.2/svl/source/numbers/zforfind.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svl/source/numbers/zforfind.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -109,6 +109,7 @@ { nMonth = 0; nMonthPos = 0; + nDayOfWeek = 0; nTimePos = 0; nSign = 0; nESign = 0; @@ -2099,9 +2100,38 @@ { const sal_Int32 nMonthStart = nPos; short nTempMonth = GetMonth(rString, nPos); + if (nTempMonth < 0) + { + // Short month and day names may be identical in some locales, e.g. + // "mar" for "martes" or "marzo" in Spanish. + // Do not let a month name immediately take precedence if a day + // name was meant instead. Assume that both could be valid, until + // encountered differently or the final evaluation in + // IsNumberFormat() checks, but continue with weighing the month + // name higher unless we have both day of week and month name here. + sal_Int32 nTempPos = nMonthStart; + nDayOfWeek = GetDayOfWeek( rString, nTempPos); + if (nDayOfWeek < 0) + { + SkipChar( '.', rString, nTempPos ); // abbreviated + SkipString( pFormatter->GetLocaleData()->getLongDateDayOfWeekSep(), rString, nTempPos ); + SkipBlanks( rString, nTempPos); + short nTempTempMonth = GetMonth( rString, nTempPos); + if (nTempTempMonth) + { + // Fall into the else branch below that handles both. + nTempMonth = 0; + nPos = nMonthStart; + nDayOfWeek = 0; + // Do not set nDayOfWeek hereafter, anywhere. + } + } + } if ( nTempMonth ) // month (Jan 1)? { - if (nPos < rString.getLength()) // Jan1 without separator is not a date + // Jan1 without separator is not a date, unless it is followed by a + // separator and a (year) number. + if (nPos < rString.getLength() || (nAnzStrings >= 4 && nAnzNums >= 2)) { eScannedType = NUMBERFORMAT_DATE; // !!! it IS a date !!! nMonth = nTempMonth; @@ -2119,14 +2149,14 @@ } else { - int nDayOfWeek = GetDayOfWeek( rString, nPos ); - if ( nDayOfWeek ) + int nTempDayOfWeek = GetDayOfWeek( rString, nPos ); + if ( nTempDayOfWeek ) { // day of week is just parsed away eScannedType = NUMBERFORMAT_DATE; // !!! it IS a date !!! if ( nPos < rString.getLength() ) { - if ( nDayOfWeek < 0 ) + if ( nTempDayOfWeek < 0 ) { // abbreviated if ( rString[ nPos ] == (sal_Unicode)'.' ) @@ -2144,7 +2174,9 @@ nTempMonth = GetMonth(rString, nPos); if ( nTempMonth ) // month (Jan 1)? { - if (nPos < rString.getLength()) // Jan1 without separator is not a date + // Jan1 without separator is not a date, unless it is followed by a + // separator and a (year) number. + if (nPos < rString.getLength() || (nAnzStrings >= 4 && nAnzNums >= 2)) { nMonth = nTempMonth; nMonthPos = 1; // month a the beginning @@ -2800,12 +2832,12 @@ nPos = nPos + rSep.getLength(); SkipBlanks(rString, nPos); } - int nDayOfWeek = GetDayOfWeek( rString, nPos ); - if ( nDayOfWeek ) + int nTempDayOfWeek = GetDayOfWeek( rString, nPos ); + if ( nTempDayOfWeek ) { if ( nPos < rString.getLength() ) { - if ( nDayOfWeek < 0 ) + if ( nTempDayOfWeek < 0 ) { // short if ( rString[ nPos ] == (sal_Unicode)'.' ) { @@ -3496,6 +3528,14 @@ break; case NUMBERFORMAT_DATE: + if (nMonth < 0 && nDayOfWeek < 0 && nAnzNums == 3) + { + // If both, short month name and day of week name were + // detected, and also numbers for full date, assume that we + // have a day of week instead of month name. + nMonth = 0; + nMonthPos = 0; + } if (nMonth) { // month name and numbers if (nAnzNums > 2) @@ -3542,6 +3582,15 @@ break; case NUMBERFORMAT_DATETIME: + if (nMonth < 0 && nDayOfWeek < 0 && nAnzNums >= 5) + { + // If both, abbreviated month name and day of week name + // were detected, and also at least numbers for full date + // plus time including minutes, assume that we have a day + // of week instead of month name. + nMonth = 0; + nMonthPos = 0; + } if (nMonth) { // month name and numbers if (nDecPos) diff -Nru libreoffice-l10n-4.4.2/svl/source/numbers/zforfind.hxx libreoffice-l10n-4.4.6~rc3/svl/source/numbers/zforfind.hxx --- libreoffice-l10n-4.4.2/svl/source/numbers/zforfind.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svl/source/numbers/zforfind.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -108,6 +108,7 @@ // negative => short format short nMonthPos; // 1 = front, 2 = middle // 3 = end + int nDayOfWeek; // Temporary (!) day of week (1..7,-1..-7) if date sal_uInt16 nTimePos; // Index of first time separator (+1) short nDecPos; // Index of substring containing "," (+1) short nNegCheck; // '( )' for negative diff -Nru libreoffice-l10n-4.4.2/svl/source/numbers/zformat.cxx libreoffice-l10n-4.4.6~rc3/svl/source/numbers/zformat.cxx --- libreoffice-l10n-4.4.2/svl/source/numbers/zformat.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svl/source/numbers/zformat.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -60,6 +60,11 @@ const sal_uInt16 UPPER_PRECISION = 300; // entirely arbitrary... const double EXP_LOWER_BOUND = 1.0E-4; // prefer scientific notation below this value. +const double EXP_ABS_UPPER_BOUND = 1.0E15; // use exponential notation above that absolute value. + // Back in time was E16 that lead + // to display rounding errors, see + // also sal/rtl/math.cxx + // doubleToString() } // namespace @@ -1722,7 +1727,7 @@ { sal_uInt16 nStandardPrec = rScan.GetStandardPrec(); - if ( fabs(fNumber) > 1.0E15 ) // #58531# was E16 + if ( fabs(fNumber) > EXP_ABS_UPPER_BOUND ) { nStandardPrec = ::std::min(nStandardPrec, static_cast(14)); // limits to 14 decimals OutString = ::rtl::math::doubleToUString( fNumber, @@ -1969,7 +1974,7 @@ nPrec = ::std::min(nPrec, static_cast(14)); // limit to 14 decimals. rOutString = ::rtl::math::doubleToUString(fNumber, rtl_math_StringFormat_E, - nPrec, rFormatter.GetNumDecimalSep()[0]); + nPrec, rFormatter.GetNumDecimalSep()[0], true); } sal_Int32 lcl_GetForcedDenominator(const ImpSvNumberformatInfo &rInfo, sal_uInt16 nAnz) @@ -2110,27 +2115,40 @@ } fNumber = -fNumber; } + /* TODO: why did we insist on 10 decimals for the non-exponent + * case? doubleToUString() handles rtl_math_DecimalPlaces_Max + * gracefully when used with rtl_math_StringFormat_Automatic, + * so all that special casing and mumbo-jumbo in the else + * branch below might not be needed at all. */ + if (fNumber > EXP_ABS_UPPER_BOUND) + { + sBuff.append( ::rtl::math::doubleToUString( fNumber, + rtl_math_StringFormat_Automatic, + rtl_math_DecimalPlaces_Max, + GetFormatter().GetNumDecimalSep()[0], true)); + } + else { OUString sTemp; ImpGetOutputStdToPrecision(fNumber, sTemp, 10); // Use 10 decimals for general 'unlimited' format. sBuff.append(sTemp); - } - if (fNumber < EXP_LOWER_BOUND) - { - sal_Int32 nLen = sBuff.getLength(); - if (!nLen) + if (fNumber < EXP_LOWER_BOUND) { - return false; - } - // #i112250# With the 10-decimal limit, small numbers are formatted as "0". - // Switch to scientific in that case, too: - if (nLen > 11 || ((nLen == 1 && sBuff[0] == '0') && fNumber != 0.0)) - { - sal_uInt16 nStandardPrec = rScan.GetStandardPrec(); - nStandardPrec = ::std::min(nStandardPrec, static_cast(14)); // limits to 14 decimals - sBuff = ::rtl::math::doubleToUString( fNumber, - rtl_math_StringFormat_E, nStandardPrec /*2*/, - GetFormatter().GetNumDecimalSep()[0], true); + sal_Int32 nLen = sBuff.getLength(); + if (!nLen) + { + return false; + } + // #i112250# With the 10-decimal limit, small numbers are formatted as "0". + // Switch to scientific in that case, too: + if (nLen > 11 || ((nLen == 1 && sBuff[0] == '0') && fNumber != 0.0)) + { + sal_uInt16 nStandardPrec = rScan.GetStandardPrec(); + nStandardPrec = ::std::min(nStandardPrec, static_cast(14)); // limits to 14 decimals + sBuff = ::rtl::math::doubleToUString( fNumber, + rtl_math_StringFormat_E, nStandardPrec /*2*/, + GetFormatter().GetNumDecimalSep()[0], true); + } } } if (bSign) diff -Nru libreoffice-l10n-4.4.2/svtools/source/contnr/treelist.cxx libreoffice-l10n-4.4.6~rc3/svtools/source/contnr/treelist.cxx --- libreoffice-l10n-4.4.2/svtools/source/contnr/treelist.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svtools/source/contnr/treelist.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -355,8 +355,8 @@ if( aCloneLink.IsSet() ) return reinterpret_cast(aCloneLink.Call( pSource )); SvTreeListEntry* pEntry = CreateEntry(); - pSource->Clone( pEntry ); - return pSource; + pEntry->Clone(pSource); + return pEntry; } SvTreeListEntry* SvTreeList::CreateEntry() const diff -Nru libreoffice-l10n-4.4.2/svx/inc/getallcharpropids.hxx libreoffice-l10n-4.4.6~rc3/svx/inc/getallcharpropids.hxx --- libreoffice-l10n-4.4.2/svx/inc/getallcharpropids.hxx 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/inc/getallcharpropids.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,35 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SVX_INC_GETALLCHARPROPIDS_HXX +#define INCLUDED_SVX_INC_GETALLCHARPROPIDS_HXX + +#include + +#include + +#include + +class SfxItemSet; + +std::vector GetAllCharPropIds(const SfxItemSet& rSet); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff -Nru libreoffice-l10n-4.4.2/svx/source/accessibility/ChildrenManagerImpl.cxx libreoffice-l10n-4.4.6~rc3/svx/source/accessibility/ChildrenManagerImpl.cxx --- libreoffice-l10n-4.4.2/svx/source/accessibility/ChildrenManagerImpl.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/accessibility/ChildrenManagerImpl.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -276,13 +276,23 @@ // 6. If children have to be created immediately and not on demand then // create the missing accessible objects now. - if ( ! bCreateNewObjectsOnDemand) - CreateAccessibilityObjects (maVisibleChildren); + if (!bCreateNewObjectsOnDemand) + { + //operate on a copy of the list and restore it afterwards to guard + //against the pathological case where maVisibleChildren gets modified + //by other calls to this object while CreateAccessibilityObjects + //executes which can happen when java is disabled and the "enable-java" + //dialog appears during the instantiation of the linguistic components + //triggered by the creation of shapes belonging to the a11y objects + // + //i.e. launch start-center, launch impress with java disabled and + //a java-using linguistic component installed + maVisibleChildren.swap(aChildList); + CreateAccessibilityObjects(aChildList); + maVisibleChildren.swap(aChildList); + } } - - - void ChildrenManagerImpl::CreateListOfVisibleShapes ( ChildDescriptorListType& raDescriptorList) { diff -Nru libreoffice-l10n-4.4.2/svx/source/core/extedit.cxx libreoffice-l10n-4.4.6~rc3/svx/source/core/extedit.cxx --- libreoffice-l10n-4.4.2/svx/source/core/extedit.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/core/extedit.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -113,9 +113,8 @@ OUString aTempFileBase; OUString aTempFileName; - oslFileHandle pHandle; osl::FileBase::RC rc = - osl::FileBase::createTempFile(0, &pHandle, &aTempFileBase); + osl::FileBase::createTempFile(nullptr, nullptr, &aTempFileBase); if (osl::FileBase::E_None != rc) { SAL_WARN("svx", "ExternalToolEdit::Edit: cannot create temp file"); diff -Nru libreoffice-l10n-4.4.2/svx/source/customshapes/EnhancedCustomShapeEngine.cxx libreoffice-l10n-4.4.6~rc3/svx/source/customshapes/EnhancedCustomShapeEngine.cxx --- libreoffice-l10n-4.4.2/svx/source/customshapes/EnhancedCustomShapeEngine.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/customshapes/EnhancedCustomShapeEngine.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -273,7 +273,7 @@ throw ( RuntimeException, std::exception ) { Reference< drawing::XShape > xShape; - SdrObject* pSdrObjCustomShape( GetSdrObjectFromXShape( mxShape ) ); + SdrObject* pSdrObjCustomShape( PTR_CAST( SdrObjCustomShape, GetSdrObjectFromXShape( mxShape ) ) ); if ( pSdrObjCustomShape ) { // retrieving the TextPath property to check if feature is enabled diff -Nru libreoffice-l10n-4.4.2/svx/source/engine3d/scene3d.cxx libreoffice-l10n-4.4.6~rc3/svx/source/engine3d/scene3d.cxx --- libreoffice-l10n-4.4.2/svx/source/engine3d/scene3d.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/engine3d/scene3d.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -380,14 +380,7 @@ void E3dScene::StructureChanged() { E3dObject::StructureChanged(); - - if(!GetModel() || !GetModel()->isLocked()) - { - // #i123539# optimization for 3D chart object generation: do not reset - // already calculated scene projection data every time an object gets - // initialized - SetRectsDirty(); - } + SetRectsDirty(); ImpCleanup3DDepthMapper(); } diff -Nru libreoffice-l10n-4.4.2/svx/source/gallery2/galctrl.cxx libreoffice-l10n-4.4.6~rc3/svx/source/gallery2/galctrl.cxx --- libreoffice-l10n-4.4.2/svx/source/gallery2/galctrl.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/gallery2/galctrl.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -272,7 +272,6 @@ } } - GalleryIconView::GalleryIconView( GalleryBrowser2* pParent, GalleryTheme* pTheme ) : ValueSet( pParent, WB_TABSTOP | WB_3DLOOK | WB_BORDER | WB_ITEMBORDER | WB_DOUBLEBORDER | WB_VSCROLL | WB_FLATVALUESET ), DropTargetHelper( this ), diff -Nru libreoffice-l10n-4.4.2/svx/source/sdr/contact/viewcontactofsdrpathobj.cxx libreoffice-l10n-4.4.6~rc3/svx/source/sdr/contact/viewcontactofsdrpathobj.cxx --- libreoffice-l10n-4.4.2/svx/source/sdr/contact/viewcontactofsdrpathobj.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/sdr/contact/viewcontactofsdrpathobj.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -20,13 +20,14 @@ #include #include +#include #include #include +#include #include #include - namespace sdr { namespace contact @@ -40,26 +41,14 @@ { } - drawinglayer::primitive2d::Primitive2DSequence ViewContactOfSdrPathObj::createViewIndependentPrimitive2DSequence() const + static sal_uInt32 ensureGeometry(basegfx::B2DPolyPolygon& rUnitPolyPolygon) { - const SfxItemSet& rItemSet = GetPathObj().GetMergedItemSet(); - const drawinglayer::attribute::SdrLineFillShadowTextAttribute aAttribute( - drawinglayer::primitive2d::createNewSdrLineFillShadowTextAttribute( - rItemSet, - GetPathObj().getText(0), - false)); - basegfx::B2DPolyPolygon aUnitPolyPolygon(GetPathObj().GetPathPoly()); - Point aGridOff = GetPathObj().GetGridOffset(); - // Hack for calc, transform position of object according - // to current zoom so as objects relative position to grid - // appears stable - aUnitPolyPolygon.transform( basegfx::tools::createTranslateB2DHomMatrix( aGridOff.X(), aGridOff.Y() ) ); - sal_uInt32 nPolyCount(aUnitPolyPolygon.count()); + sal_uInt32 nPolyCount(rUnitPolyPolygon.count()); sal_uInt32 nPointCount(0); for(sal_uInt32 a(0); a < nPolyCount; a++) { - nPointCount += aUnitPolyPolygon.getB2DPolygon(a).count(); + nPointCount += rUnitPolyPolygon.getB2DPolygon(a).count(); } if(!nPointCount) @@ -68,20 +57,66 @@ basegfx::B2DPolygon aFallbackLine; aFallbackLine.append(basegfx::B2DPoint(0.0, 0.0)); aFallbackLine.append(basegfx::B2DPoint(1000.0, 1000.0)); - aUnitPolyPolygon = basegfx::B2DPolyPolygon(aFallbackLine); + rUnitPolyPolygon = basegfx::B2DPolyPolygon(aFallbackLine); nPolyCount = 1; } + return nPolyCount; + } + + drawinglayer::primitive2d::Primitive2DSequence ViewContactOfSdrPathObj::createViewIndependentPrimitive2DSequence() const + { + const SfxItemSet& rItemSet = GetPathObj().GetMergedItemSet(); + const drawinglayer::attribute::SdrLineFillShadowTextAttribute aAttribute( + drawinglayer::primitive2d::createNewSdrLineFillShadowTextAttribute( + rItemSet, + GetPathObj().getText(0), + false)); + basegfx::B2DPolyPolygon aUnitPolyPolygon(GetPathObj().GetPathPoly()); + Point aGridOff = GetPathObj().GetGridOffset(); + // Hack for calc, transform position of object according + // to current zoom so as objects relative position to grid + // appears stable + aUnitPolyPolygon.transform( basegfx::tools::createTranslateB2DHomMatrix( aGridOff.X(), aGridOff.Y() ) ); + sal_uInt32 nPolyCount(ensureGeometry(aUnitPolyPolygon)); + // prepare object transformation and unit polygon (direct model data) basegfx::B2DHomMatrix aObjectMatrix; - const bool bIsLine( + bool bIsLine( !aUnitPolyPolygon.areControlPointsUsed() && 1 == nPolyCount && 2 == aUnitPolyPolygon.getB2DPolygon(0).count()); if(bIsLine) { + const SdrPage* pPage = GetPathObj().GetPage(); + if (pPage) + { + //tdf#63955 if we have an extremely long line then clip it + //to a very generous range of -1 page width/height vs +1 + //page width/height to avoid oom and massive churn + //generating a huge polygon chain to cover the length in + //applyLineDashing if this line is dashed + double fPageWidth = pPage->GetWdt(); + double fPageHeight = pPage->GetHgt(); + basegfx::B2DRange aClipRange(-fPageWidth, -fPageHeight, + fPageWidth*2, fPageHeight*2); + aUnitPolyPolygon = basegfx::tools::clipPolyPolygonOnRange(aUnitPolyPolygon, + aClipRange, true, true); + nPolyCount = ensureGeometry(aUnitPolyPolygon); + + // re-check that we have't been clipped out to oblivion + bIsLine = + !aUnitPolyPolygon.areControlPointsUsed() + && 1 == nPolyCount + && 2 == aUnitPolyPolygon.getB2DPolygon(0).count(); + } + } + + if(bIsLine) + { + // special handling for single line mode (2 points) const basegfx::B2DPolygon aSubPolygon(aUnitPolyPolygon.getB2DPolygon(0)); const basegfx::B2DPoint aStart(aSubPolygon.getB2DPoint(0)); diff -Nru libreoffice-l10n-4.4.2/svx/source/sdr/contact/viewobjectcontactofgraphic.cxx libreoffice-l10n-4.4.6~rc3/svx/source/sdr/contact/viewobjectcontactofgraphic.cxx --- libreoffice-l10n-4.4.2/svx/source/sdr/contact/viewobjectcontactofgraphic.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/sdr/contact/viewobjectcontactofgraphic.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -134,22 +134,30 @@ rGrafObj.mbInsidePaint = false; } - // Invalidate paint areas. - GetViewContact().ActionChanged(); - bRetval = true; } } } else { - // it is not swapped out, somehow it was loaded. In that case, forget + // it is not swapped out, somehow[1] it was loaded. In that case, forget // about an existing triggered event - if(mpAsynchLoadEvent) + if (mpAsynchLoadEvent) { // just delete it, this will remove it from the EventHandler and // will trigger forgetAsynchGraphicLoadingEvent from the destructor delete mpAsynchLoadEvent; + + // Invalidate paint areas. + // [1] If a calc document with graphics is loaded then OnLoad will + // be emitted before the graphic are due to be swapped in asynchronously + // In sfx2 we generate a preview on receiving onload, which forces + // the graphics to be swapped in to generate the preview. When + // the timer triggers it find the graphics already swapped in. So + // we should still invalidate the paint area on finding the graphic + // swapped in seeing as we're still waiting in calc to draw the + // graphics on receipt of their contents. + GetViewContact().ActionChanged(); } } @@ -189,9 +197,6 @@ rGrafObj.mbInsidePaint = false; } - // Invalidate paint areas. - GetViewContact().ActionChanged(); - bRetval = true; } } diff -Nru libreoffice-l10n-4.4.2/svx/source/sidebar/graphic/GraphicPropertyPanel.cxx libreoffice-l10n-4.4.6~rc3/svx/source/sidebar/graphic/GraphicPropertyPanel.cxx --- libreoffice-l10n-4.4.2/svx/source/sidebar/graphic/GraphicPropertyPanel.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/sidebar/graphic/GraphicPropertyPanel.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -58,6 +58,7 @@ get(mpMtrBrightness, "setbrightness"); get(mpMtrContrast, "setcontrast"); get(mpLBColorMode, "setcolormode"); + mpLBColorMode->set_width_request(mpLBColorMode->get_preferred_size().Width()); get(mpMtrTrans, "settransparency"); get(mpMtrRed, "setred"); get(mpMtrGreen, "setgreen"); diff -Nru libreoffice-l10n-4.4.2/svx/source/sidebar/nbdtmg.cxx libreoffice-l10n-4.4.6~rc3/svx/source/sidebar/nbdtmg.cxx --- libreoffice-l10n-4.4.2/svx/source/sidebar/nbdtmg.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/sidebar/nbdtmg.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1300,7 +1300,7 @@ { aNumberings = xDefNum->getDefaultContinuousNumberingLevels( aLocale ); - sal_Int32 nLength = aNumberings.getLength() > DEFAULT_NUM_VALUSET_COUNT ? DEFAULT_NUM_VALUSET_COUNT :aNumberings.getLength(); + sal_Int32 nLength = aNumberings.getLength(); const Sequence* pValuesArr = aNumberings.getConstArray(); for(sal_Int32 i = 0; i < nLength; i++) diff -Nru libreoffice-l10n-4.4.2/svx/source/sidebar/PanelLayout.cxx libreoffice-l10n-4.4.6~rc3/svx/source/sidebar/PanelLayout.cxx --- libreoffice-l10n-4.4.2/svx/source/sidebar/PanelLayout.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/sidebar/PanelLayout.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -51,6 +51,7 @@ return; if (!isLayoutEnabled(this)) return; + InvalidateSizeCache(); m_aPanelLayoutTimer.Start(); } diff -Nru libreoffice-l10n-4.4.2/svx/source/svdraw/svdedtv1.cxx libreoffice-l10n-4.4.6~rc3/svx/source/svdraw/svdedtv1.cxx --- libreoffice-l10n-4.4.2/svx/source/svdraw/svdedtv1.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/svdraw/svdedtv1.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -28,6 +28,7 @@ #include #include +#include "getallcharpropids.hxx" #include "svdglob.hxx" #include "svx/svditer.hxx" #include "svx/svdstr.hrc" diff -Nru libreoffice-l10n-4.4.2/svx/source/svdraw/svdmrkv.cxx libreoffice-l10n-4.4.6~rc3/svx/source/svdraw/svdmrkv.cxx --- libreoffice-l10n-4.4.2/svx/source/svdraw/svdmrkv.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/svdraw/svdmrkv.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1184,6 +1184,33 @@ } } +bool SdrPageView::IsObjSelectable(SdrObject *pObj) const +{ + SdrLayerID nLay=pObj->GetLayer(); + bool bRaus=!pObj->IsInserted(); // Obj deleted? + if (!pObj->Is3DObj()) { + bRaus=bRaus || pObj->GetPage()!=GetPage(); // Obj suddenly in different Page or Group + } + bRaus=bRaus || GetLockedLayers().IsSet(nLay) || // Layer locked? + !GetVisibleLayers().IsSet(nLay); // Layer invisible? + + if( !bRaus ) + bRaus = !pObj->IsVisible(); // invisible objects can not be selected + + if (!bRaus) { + // Grouped objects can now be selected. + // After EnterGroup the higher-level objects, + // have to be deselected, though. + const SdrObjList* pOOL=pObj->GetObjList(); + const SdrObjList* pVOL=GetObjList(); + while (pOOL!=NULL && pOOL!=pVOL) { + pOOL=pOOL->GetUpList(); + } + bRaus=pOOL!=pVOL; + } + return !bRaus; +} + void SdrMarkView::CheckMarked() { for (size_t nm=GetMarkedObjectCount(); nm>0;) { @@ -1191,29 +1218,7 @@ SdrMark* pM=GetSdrMarkByIndex(nm); SdrObject* pObj=pM->GetMarkedSdrObj(); SdrPageView* pPV=pM->GetPageView(); - SdrLayerID nLay=pObj->GetLayer(); - bool bRaus=!pObj->IsInserted(); // Obj deleted? - if (!pObj->Is3DObj()) { - bRaus=bRaus || pObj->GetPage()!=pPV->GetPage(); // Obj suddenly in different Page or Group - } - bRaus=bRaus || pPV->GetLockedLayers().IsSet(nLay) || // Layer locked? - !pPV->GetVisibleLayers().IsSet(nLay); // Layer invisible? - - if( !bRaus ) - bRaus = !pObj->IsVisible(); // invisible objects can not be selected - - if (!bRaus) { - // Grouped objects can now be selected. - // After EnterGroup the higher-level objects, - // have to be deselected, though. - const SdrObjList* pOOL=pObj->GetObjList(); - const SdrObjList* pVOL=pPV->GetObjList(); - while (pOOL!=NULL && pOOL!=pVOL) { - pOOL=pOOL->GetUpList(); - } - bRaus=pOOL!=pVOL; - } - + bool bRaus=!pPV->IsObjSelectable(pObj); if (bRaus) { GetMarkedObjectListWriteAccess().DeleteMark(nm); diff -Nru libreoffice-l10n-4.4.2/svx/source/svdraw/svdoashp.cxx libreoffice-l10n-4.4.6~rc3/svx/source/svdraw/svdoashp.cxx --- libreoffice-l10n-4.4.2/svx/source/svdraw/svdoashp.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/svdraw/svdoashp.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -3002,6 +3002,7 @@ } // reset object shear and rotations + fObjectRotation = 0.0; aGeo.nRotationAngle = 0; aGeo.RecalcSinCos(); aGeo.nShearAngle = 0; diff -Nru libreoffice-l10n-4.4.2/svx/source/svdraw/svdoedge.cxx libreoffice-l10n-4.4.6~rc3/svx/source/svdraw/svdoedge.cxx --- libreoffice-l10n-4.4.2/svx/source/svdraw/svdoedge.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/svdraw/svdoedge.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -2264,7 +2264,7 @@ ResizeXPoly(*pEdgeTrack,rRefPnt,aXFact,aYFact); // if resize is not from paste, forget user distances - if(!GetModel()->IsPasteResize()) + if (!GetModel() || !GetModel()->IsPasteResize()) { aEdgeInfo.aObj1Line2 = Point(); aEdgeInfo.aObj1Line3 = Point(); diff -Nru libreoffice-l10n-4.4.2/svx/source/svdraw/svdundo.cxx libreoffice-l10n-4.4.6~rc3/svx/source/svdraw/svdundo.cxx --- libreoffice-l10n-4.4.2/svx/source/svdraw/svdundo.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/svdraw/svdundo.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -679,73 +679,11 @@ -class SdrUndoObjList::ObjListListener : public SfxListener -{ -public: - ObjListListener(SdrUndoObjList& rThat, SdrObject& rObject, SfxBroadcaster& rBroadcaster); - virtual ~ObjListListener(); - -private: - virtual void Notify(SfxBroadcaster& rBroadcaster, const SfxHint& rHint) SAL_OVERRIDE; - -private: - SdrUndoObjList& m_rThat; - SdrObject& m_rObject; - SfxBroadcaster* m_pBroadcaster; -}; - -SdrUndoObjList::ObjListListener::ObjListListener(SdrUndoObjList& rThat, SdrObject& rObject, SfxBroadcaster& rBroadcaster) - : m_rThat(rThat) - , m_rObject(rObject) - , m_pBroadcaster(&rBroadcaster) -{ - StartListening(*m_pBroadcaster); -} - -SdrUndoObjList::ObjListListener::~ObjListListener() -{ - if (m_pBroadcaster) - EndListening(*m_pBroadcaster); -} - -void SdrUndoObjList::ObjListListener::Notify(SfxBroadcaster&, const SfxHint& rHint) -{ - const SdrHint* const pSdrHint(dynamic_cast(&rHint)); - if (pSdrHint) - { - if (pSdrHint->GetObject() == &m_rObject) - { - switch (pSdrHint->GetKind()) - { - case HINT_OBJCHG : - if (IsListening(*m_pBroadcaster)) - { - const sal_uInt32 nNewOrdNum(m_rObject.GetOrdNum()); - if (nNewOrdNum != m_rThat.GetOrdNum()) - m_rThat.SetOrdNum(nNewOrdNum); - } - break; - case HINT_OBJREMOVED : - SAL_WARN_IF(!IsListening(*m_pBroadcaster), "svx.sdr", "Object is not in any list"); - EndListening(*m_pBroadcaster); - break; - case HINT_OBJINSERTED : - SAL_WARN_IF(IsListening(*m_pBroadcaster), "svx.sdr", "Object is already in a list"); - StartListening(*m_pBroadcaster); - break; - default : - break; - } - } - } -} - SdrUndoObjList::SdrUndoObjList(SdrObject& rNewObj, bool bOrdNumDirect) : SdrUndoObj(rNewObj) , bOwner(false) , pView(NULL) , pPageView(NULL) - , m_pListener(NULL) { pObjList=pObj->GetObjList(); if (bOrdNumDirect) @@ -756,16 +694,12 @@ { nOrdNum=pObj->GetOrdNum(); } - - m_pListener = new ObjListListener(*this, *pObj, *pObj->GetModel()); } SdrUndoObjList::~SdrUndoObjList() { SolarMutexGuard aGuard; - delete m_pListener; - if (pObj!=NULL && IsOwner()) { // Attribute have to go back to the regular Pool diff -Nru libreoffice-l10n-4.4.2/svx/source/table/cell.cxx libreoffice-l10n-4.4.6~rc3/svx/source/table/cell.cxx --- libreoffice-l10n-4.4.2/svx/source/table/cell.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/table/cell.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -42,6 +42,7 @@ #include "svx/unoshtxt.hxx" #include "svx/svdmodel.hxx" +#include "getallcharpropids.hxx" #include "tableundo.hxx" #include "cell.hxx" #include "svx/unoshprp.hxx" @@ -139,8 +140,6 @@ } -extern std::vector GetAllCharPropIds(const SfxItemSet& rSet); - namespace sdr { namespace properties diff -Nru libreoffice-l10n-4.4.2/svx/source/tbxctrls/tbcontrl.cxx libreoffice-l10n-4.4.6~rc3/svx/source/tbxctrls/tbcontrl.cxx --- libreoffice-l10n-4.4.2/svx/source/tbxctrls/tbcontrl.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/tbxctrls/tbcontrl.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -127,7 +127,7 @@ virtual ~SvxStyleBox_Impl(); void SetFamily( SfxStyleFamily eNewFamily ); - inline bool IsVisible() { return bVisible; } + bool IsVisible() const { return bVisible; } virtual bool PreNotify( NotifyEvent& rNEvt ) SAL_OVERRIDE; virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE; @@ -136,10 +136,12 @@ virtual void UserDraw( const UserDrawEvent& rUDEvt ) SAL_OVERRIDE; - inline void SetVisibilityListener( const Link& aVisListener ) { aVisibilityListener = aVisListener; } + void SetVisibilityListener( const Link& aVisListener ) { aVisibilityListener = aVisListener; } void SetDefaultStyle( const OUString& rDefault ) { sDefaultStyle = rDefault; } + void CalcOptimalExtraUserWidth(); + protected: virtual void Select() SAL_OVERRIDE; @@ -162,6 +164,9 @@ void ReleaseFocus(); Color TestColorsVisible(const Color &FontCol, const Color &BackCol); + void UserDrawEntry(const UserDrawEvent& rUDEvt, const OUString &rStyleName); + void SetupEntry(sal_uInt16 nItem, const Rectangle& rRect, OutputDevice *pDevice, const OUString &rStyleName, bool bIsNotSelected); + bool AdjustFontForItemHeight(OutputDevice* pDevice, Rectangle& rTextRect, long nHeight); DECL_LINK( MenuSelectHdl, Menu * ); }; @@ -299,6 +304,9 @@ SvxStyleToolBoxControl& rControl; }; +#define BUTTON_WIDTH 20 +#define ITEM_HEIGHT 30 + SvxStyleBox_Impl::SvxStyleBox_Impl(vcl::Window* pParent, const OUString& rCommand, SfxStyleFamily eFamily, @@ -326,7 +334,7 @@ aLogicalSize = PixelToLogic( GetSizePixel(), MAP_APPFONT ); EnableAutocomplete( true ); EnableUserDraw( true ); - SetUserItemSize( Size( 0, 30 ) ); + SetUserItemSize( Size( 0, ITEM_HEIGHT ) ); } SvxStyleBox_Impl::~SvxStyleBox_Impl() @@ -550,18 +558,51 @@ } } -void SvxStyleBox_Impl::UserDraw( const UserDrawEvent& rUDEvt ) +bool SvxStyleBox_Impl::AdjustFontForItemHeight(OutputDevice* pDevice, Rectangle& rTextRect, long nHeight) { - sal_uInt16 nItem = rUDEvt.GetItemId(); + if (rTextRect.Bottom() > nHeight) + { + // the text does not fit, adjust the font size + double ratio = static_cast< double >( nHeight ) / rTextRect.Bottom(); + vcl::Font aFont(pDevice->GetFont()); + Size aPixelSize(aFont.GetSize()); + aPixelSize.Width() *= ratio; + aPixelSize.Height() *= ratio; + aFont.SetSize(aPixelSize); + pDevice->SetFont(aFont); + return true; + } + return false; +} - if ( nItem == 0 || nItem == GetEntryCount() - 1 ) +void SvxStyleBox_Impl::UserDrawEntry(const UserDrawEvent& rUDEvt, const OUString &rStyleName) +{ + OutputDevice *pDevice = rUDEvt.GetDevice(); + + // IMG_TXT_DISTANCE in ilstbox.hxx is 6, then 1 is added as + // nBorder, and we are adding 1 in order to look better when + // italics is present + const int nLeftDistance = 8; + + Rectangle aTextRect; + pDevice->GetTextBoundRect(aTextRect, rStyleName); + + Point aPos( rUDEvt.GetRect().TopLeft() ); + aPos.X() += nLeftDistance; + + if (!AdjustFontForItemHeight(pDevice, aTextRect, rUDEvt.GetRect().GetHeight())) + aPos.Y() += ( rUDEvt.GetRect().GetHeight() - aTextRect.Bottom() ) / 2; + + pDevice->DrawText(aPos, rStyleName); +} + +void SvxStyleBox_Impl::SetupEntry(sal_uInt16 nItem, const Rectangle& rRect, OutputDevice* pDevice, const OUString& rStyleName, bool bIsNotSelected) +{ + if (nItem == 0 || nItem == GetEntryCount() - 1) { - Rectangle aRect(rUDEvt.GetRect()); - unsigned int nId = (aRect.getY() / aRect.GetSize().Height()); + unsigned int nId = (rRect.getY() / rRect.GetSize().Height()); if(nId < MAX_STYLES_ENTRIES && m_pButtons[nId]) m_pButtons[nId]->Hide(); - // draw the non-style entries, ie. "Clear Formatting" or "More..." - DrawEntry( rUDEvt, true, true ); } else { @@ -569,23 +610,16 @@ SfxStyleSheetBasePool* pPool = pShell->GetStyleSheetPool(); SfxStyleSheetBase* pStyle = NULL; - OUString aStyleName( GetEntry( nItem ) ); - if ( pPool ) { pPool->SetSearchMask( eStyleFamily, SFXSTYLEBIT_ALL ); pStyle = pPool->First(); - while ( pStyle && OUString( pStyle->GetName() ) != aStyleName ) + while (pStyle && pStyle->GetName() != rStyleName) pStyle = pPool->Next(); } - if ( !pStyle ) - { - // cannot find the style for whatever reason - DrawEntry( rUDEvt, true, true ); - } - else + if (pStyle ) { const SfxItemSet& aItemSet = pStyle->GetItemSet(); @@ -594,8 +628,6 @@ if ( pFontItem && pFontHeightItem ) { - OutputDevice *pDevice = rUDEvt.GetDevice(); - Size aFontSize( 0, pFontHeightItem->GetHeight() ); Size aPixelSize( pDevice->LogicToPixel( aFontSize, pShell->GetMapUnit() ) ); @@ -647,25 +679,21 @@ // setup the device & draw vcl::Font aOldFont( pDevice->GetFont() ); - Color aOldColor( pDevice->GetTextColor() ); - Color aOldFillColor( pDevice->GetFillColor() ); Color aFontCol = COL_AUTO, aBackCol = COL_AUTO; pDevice->SetFont( aFont ); - bool IsNotSelected = rUDEvt.GetItemId() != GetSelectEntryPos(); - pItem = aItemSet.GetItem( SID_ATTR_CHAR_COLOR ); // text color, when nothing is selected - if ( (NULL != pItem) && IsNotSelected) + if ( (NULL != pItem) && bIsNotSelected) aFontCol = Color( static_cast< const SvxColorItem* >( pItem )->GetValue() ); sal_uInt16 style = drawing::FillStyle_NONE; // which kind of Fill style is selected pItem = aItemSet.GetItem( XATTR_FILLSTYLE ); // only when ok and not selected - if ( (NULL != pItem) && IsNotSelected) + if ( (NULL != pItem) && bIsNotSelected) style = static_cast< const XFillStyleItem* >( pItem )->GetValue(); switch(style) @@ -680,13 +708,13 @@ if ( aBackCol != COL_AUTO ) { pDevice->SetFillColor( aBackCol ); - pDevice->DrawRect( rUDEvt.GetRect() ); + pDevice->DrawRect(rRect); } } break; //TODO Draw the other background styles: gradient, hatching and bitmap - } + } // when the font and background color are too similar, adjust the Font-Color if( (aFontCol != COL_AUTO) || (aBackCol != COL_AUTO) ) @@ -697,65 +725,89 @@ pDevice->SetTextColor( aFontCol ); // handle the push-button - if (IsNotSelected) + if (bIsNotSelected) { - Rectangle aRect(rUDEvt.GetRect()); - unsigned int nId = (aRect.getY() / aRect.GetSize().Height()); + unsigned int nId = (rRect.getY() / rRect.GetSize().Height()); if(nId < MAX_STYLES_ENTRIES && m_pButtons[nId]) m_pButtons[nId]->Hide(); } else { - Rectangle aRect(rUDEvt.GetRect()); - unsigned int nId = (aRect.getY() / aRect.GetSize().Height()); + unsigned int nId = (rRect.getY() / rRect.GetSize().Height()); if(nId < MAX_STYLES_ENTRIES) { if(m_pButtons[nId] == NULL) { m_pButtons[nId] = new MenuButton(static_cast(pDevice), WB_FLATBUTTON | WB_NOPOINTERFOCUS); - m_pButtons[nId]->SetSizePixel(Size(20, aRect.GetSize().Height())); + m_pButtons[nId]->SetSizePixel(Size(BUTTON_WIDTH, rRect.GetSize().Height())); m_pButtons[nId]->SetPopupMenu(&m_aMenu); } - m_pButtons[nId]->SetPosPixel(Point(aRect.GetWidth() - 20, aRect.getY())); + m_pButtons[nId]->SetPosPixel(Point(rRect.GetWidth() - BUTTON_WIDTH, rRect.getY())); m_pButtons[nId]->Show(); } } + } + } + } +} - // IMG_TXT_DISTANCE in ilstbox.hxx is 6, then 1 is added as - // nBorder, and we are adding 1 in order to look better when - // italics is present - const int nLeftDistance = 8; - - Rectangle aTextRect; - pDevice->GetTextBoundRect( aTextRect, aStyleName ); - - Point aPos( rUDEvt.GetRect().TopLeft() ); - aPos.X() += nLeftDistance; - if ( aTextRect.Bottom() > rUDEvt.GetRect().GetHeight() ) - { - // the text does not fit, adjust the font size - double ratio = static_cast< double >( rUDEvt.GetRect().GetHeight() ) / aTextRect.Bottom(); - aPixelSize.Width() *= ratio; - aPixelSize.Height() *= ratio; - aFont.SetSize( aPixelSize ); - pDevice->SetFont( aFont ); - } - else - aPos.Y() += ( rUDEvt.GetRect().GetHeight() - aTextRect.Bottom() ) / 2; +void SvxStyleBox_Impl::UserDraw( const UserDrawEvent& rUDEvt ) +{ + sal_uInt16 nItem = rUDEvt.GetItemId(); + OUString aStyleName( GetEntry( nItem ) ); - pDevice->DrawText( aPos, aStyleName ); + OutputDevice *pDevice = rUDEvt.GetDevice(); + pDevice->Push(PushFlags::FILLCOLOR | PushFlags::FONT | PushFlags::TEXTCOLOR); - pDevice->SetFillColor( aOldFillColor ); - pDevice->SetTextColor( aOldColor ); - pDevice->SetFont( aOldFont ); + const Rectangle& rRect(rUDEvt.GetRect()); + bool bIsNotSelected = rUDEvt.GetItemId() != GetSelectEntryPos(); - // draw separator, if present - DrawEntry( rUDEvt, false, false ); - } - else - DrawEntry( rUDEvt, true, true ); + SetupEntry(nItem, rRect, pDevice, aStyleName, bIsNotSelected); + + UserDrawEntry(rUDEvt, aStyleName); + + pDevice->Pop(); + // draw separator, if present + DrawEntry( rUDEvt, false, false ); +} + +void SvxStyleBox_Impl::CalcOptimalExtraUserWidth() +{ + long nMaxNormalFontWidth = 0; + sal_Int32 nEntryCount = GetEntryCount(); + for (sal_Int32 i = 0; i < nEntryCount; ++i) + { + OUString sStyleName(GetEntry(i)); + Rectangle aTextRectForDefaultFont; + GetTextBoundRect(aTextRectForDefaultFont, sStyleName); + + const long nWidth = aTextRectForDefaultFont.GetWidth(); + + nMaxNormalFontWidth = std::max(nWidth, nMaxNormalFontWidth); + } + + long nMaxUserDrawFontWidth = nMaxNormalFontWidth; + for (sal_Int32 i = 1; i < nEntryCount-1; ++i) + { + OUString sStyleName(GetEntry(i)); + + Push(PushFlags::FILLCOLOR | PushFlags::FONT | PushFlags::TEXTCOLOR); + SetupEntry(i, Rectangle(0, 0, RECT_MAX, ITEM_HEIGHT), this, sStyleName, false); + Rectangle aTextRectForActualFont; + GetTextBoundRect(aTextRectForActualFont, sStyleName); + if (AdjustFontForItemHeight(this, aTextRectForActualFont, ITEM_HEIGHT)) + { + //Font didn't fit, so it was changed, refetch with final font size + GetTextBoundRect(aTextRectForActualFont, sStyleName); } + Pop(); + + const long nWidth = aTextRectForActualFont.GetWidth() + BUTTON_WIDTH; + + nMaxUserDrawFontWidth = std::max(nWidth, nMaxUserDrawFontWidth); } + + SetUserItemSize(Size(nMaxUserDrawFontWidth - nMaxNormalFontWidth, ITEM_HEIGHT)); } // test is the color between Font- and background-color to be identify @@ -2094,7 +2146,7 @@ if ( pStyleSheetPool && pBox && nActFamily!=0xffff ) { const SfxStyleFamily eFamily = GetActFamily(); - sal_uInt16 nCount = pStyleSheetPool->Count(); + sal_uInt16 nCount = pStyleSheetPool->Count(); SfxStyleSheetBase* pStyle = NULL; bool bDoFill = false; @@ -2195,6 +2247,8 @@ sal_uInt16 nLines = static_cast( std::min( pBox->GetEntryCount(), static_cast(MAX_STYLES_ENTRIES))); pBox->SetDropDownLineCount( nLines ); + + pBox->CalcOptimalExtraUserWidth(); } } } diff -Nru libreoffice-l10n-4.4.2/svx/source/unodraw/unobrushitemhelper.cxx libreoffice-l10n-4.4.6~rc3/svx/source/unodraw/unobrushitemhelper.cxx --- libreoffice-l10n-4.4.2/svx/source/unodraw/unobrushitemhelper.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/unodraw/unobrushitemhelper.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -50,19 +50,8 @@ const sal_uInt8 nTransparency(rBrush.GetColor().GetTransparency()); - if(0xff != nTransparency) - { - // we have a color fill - const Color aColor(rBrush.GetColor().GetRGBColor()); - - rToSet.Put(XFillStyleItem(drawing::FillStyle_SOLID)); - rToSet.Put(XFillColorItem(OUString(), aColor)); - - // #125189# nTransparency is in range [0..254], convert to [0..100] which is used in - // XFillTransparenceItem (caution with the range which is in an *item-specific* range) - rToSet.Put(XFillTransparenceItem((((sal_Int32)nTransparency * 100) + 127) / 254)); - } - else if(GPOS_NONE != rBrush.GetGraphicPos()) + // tdf#89478 check for image first + if (GPOS_NONE != rBrush.GetGraphicPos()) { // we have a graphic fill, set fill style rToSet.Put(XFillStyleItem(drawing::FillStyle_BITMAP)); @@ -131,6 +120,18 @@ rToSet.Put(XFillTransparenceItem(nGraphicTransparency)); } } + else if (0xff != nTransparency) + { + // we have a color fill + const Color aColor(rBrush.GetColor().GetRGBColor()); + + rToSet.Put(XFillStyleItem(drawing::FillStyle_SOLID)); + rToSet.Put(XFillColorItem(OUString(), aColor)); + + // #125189# nTransparency is in range [0..254], convert to [0..100] which is used in + // XFillTransparenceItem (caution with the range which is in an *item-specific* range) + rToSet.Put(XFillTransparenceItem((((sal_Int32)nTransparency * 100) + 127) / 254)); + } else { // GPOS_NONE == rBrush.GetGraphicPos() && 0xff == rBrush.GetColor().GetTransparency(), @@ -191,7 +192,7 @@ } //UUUU -SvxBrushItem getSvxBrushItemFromSourceSet(const SfxItemSet& rSourceSet, sal_uInt16 nBackgroundID, bool bSearchInParents) +SvxBrushItem getSvxBrushItemFromSourceSet(const SfxItemSet& rSourceSet, sal_uInt16 nBackgroundID, bool bSearchInParents, bool bXMLImportHack) { const XFillStyleItem* pXFillStyleItem(static_cast< const XFillStyleItem* >(rSourceSet.GetItem(XATTR_FILLSTYLE, bSearchInParents))); @@ -200,8 +201,8 @@ // no fill, still need to rescue the evtl. set RGB color, but use as transparent color (we have drawing::FillStyle_NONE) Color aFillColor(static_cast< const XFillColorItem& >(rSourceSet.Get(XATTR_FILLCOLOR, bSearchInParents)).GetColorValue()); - // when fill style is none, then don't allow anything other than 0 or auto. - if (aFillColor.GetColor() != 0) + // for writerfilter: when fill style is none, then don't allow anything other than 0 or auto. + if (!bXMLImportHack && aFillColor.GetColor() != 0) aFillColor.SetColor(COL_AUTO); aFillColor.SetTransparency(0xff); diff -Nru libreoffice-l10n-4.4.2/svx/source/unodraw/unoprov.cxx libreoffice-l10n-4.4.6~rc3/svx/source/unodraw/unoprov.cxx --- libreoffice-l10n-4.4.2/svx/source/unodraw/unoprov.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/unodraw/unoprov.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -588,6 +588,7 @@ { OUString(UNO_NAME_EDIT_CHAR_CASEMAP), 0, cppu::UnoType::get(), 0, 0 }, { OUString(UNO_NAME_EDIT_CHAR_COLOR), 0, cppu::UnoType::get(), 0, 0 }, { OUString("CharBackColor"), 0, cppu::UnoType::get(), 0, 0 }, + { OUString("CharBackTransparent"), 0, cppu::UnoType::get(), 0, 0 }, { OUString("CharRelief"), 0, cppu::UnoType::get(), 0, 0 }, { OUString("CharUnderlineColor"), 0, cppu::UnoType::get(), 0, 0 }, { OUString("CharKerning"), 0, cppu::UnoType::get(), 0, 0 }, diff -Nru libreoffice-l10n-4.4.2/svx/source/unodraw/unoshap2.cxx libreoffice-l10n-4.4.6~rc3/svx/source/unodraw/unoshap2.cxx --- libreoffice-l10n-4.4.2/svx/source/unodraw/unoshap2.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/source/unodraw/unoshap2.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -669,6 +669,7 @@ { RTL_CONSTASCII_STRINGPARAM("CharWordMode"), RTL_CONSTASCII_STRINGPARAM("FontWordLineMode" ) }, { RTL_CONSTASCII_STRINGPARAM(UNO_NAME_EDIT_CHAR_COLOR), RTL_CONSTASCII_STRINGPARAM("TextColor") }, { RTL_CONSTASCII_STRINGPARAM("CharBackColor"), RTL_CONSTASCII_STRINGPARAM("CharBackColor") }, + { RTL_CONSTASCII_STRINGPARAM("CharBackTransparent"), RTL_CONSTASCII_STRINGPARAM("CharBackTransparent") }, { RTL_CONSTASCII_STRINGPARAM("CharRelief"), RTL_CONSTASCII_STRINGPARAM("FontRelief") }, { RTL_CONSTASCII_STRINGPARAM("CharUnderlineColor"), RTL_CONSTASCII_STRINGPARAM("TextLineColor") }, { RTL_CONSTASCII_STRINGPARAM(UNO_NAME_EDIT_PARA_ADJUST), RTL_CONSTASCII_STRINGPARAM("Align") }, diff -Nru libreoffice-l10n-4.4.2/svx/uiconfig/ui/colorwindow.ui libreoffice-l10n-4.4.6~rc3/svx/uiconfig/ui/colorwindow.ui --- libreoffice-l10n-4.4.2/svx/uiconfig/ui/colorwindow.ui 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/uiconfig/ui/colorwindow.ui 2015-10-27 20:55:54.000000000 +0000 @@ -1,5 +1,5 @@ - + @@ -93,8 +93,8 @@ True False - 0 Recent + 0 False @@ -142,17 +142,6 @@ 9 - - - True - False - - - False - True - 10 - - diff -Nru libreoffice-l10n-4.4.2/svx/uiconfig/ui/sidebararea.ui libreoffice-l10n-4.4.6~rc3/svx/uiconfig/ui/sidebararea.ui --- libreoffice-l10n-4.4.2/svx/uiconfig/ui/sidebararea.ui 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/svx/uiconfig/ui/sidebararea.ui 2015-10-27 20:55:54.000000000 +0000 @@ -1,7 +1,14 @@ + - - + + + + 0 + 100 + 1 + 10 + True False @@ -36,8 +43,6 @@ 0 0 - 1 - 1 @@ -53,8 +58,6 @@ 0 1 - 1 - 1 @@ -64,7 +67,6 @@ True - True False @@ -91,7 +93,6 @@ - False False True Select the effect to apply. @@ -107,8 +108,6 @@ 1 1 - 1 - 1 @@ -126,8 +125,6 @@ 0 2 - 1 - 1 @@ -137,8 +134,6 @@ True Select the type of transparency to apply. Select the type of transparency to apply. - 0 - 1 None Solid @@ -153,8 +148,6 @@ 0 3 - 1 - 1 @@ -198,7 +191,7 @@ True 100 • - True + adjustment1 False 5 True @@ -213,8 +206,6 @@ 1 3 - 1 - 1 @@ -234,9 +225,14 @@ 0 0 - 1 - 1 + + both + + + + + diff -Nru libreoffice-l10n-4.4.2/sw/CppunitTest_sw_odfexport.mk libreoffice-l10n-4.4.6~rc3/sw/CppunitTest_sw_odfexport.mk --- libreoffice-l10n-4.4.2/sw/CppunitTest_sw_odfexport.mk 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/CppunitTest_sw_odfexport.mk 2015-10-27 20:55:54.000000000 +0000 @@ -56,6 +56,9 @@ embeddedobj/util/embobj \ filter/source/config/cache/filterconfig1 \ filter/source/storagefilterdetect/storagefd \ + filter/source/odfflatxml/odfflatxml \ + filter/source/xmlfilterdetect/xmlfd \ + filter/source/xmlfilteradaptor/xmlfa \ framework/util/fwk \ i18npool/util/i18npool \ linguistic/source/lng \ diff -Nru libreoffice-l10n-4.4.2/sw/CppunitTest_sw_rtfexport.mk libreoffice-l10n-4.4.6~rc3/sw/CppunitTest_sw_rtfexport.mk --- libreoffice-l10n-4.4.2/sw/CppunitTest_sw_rtfexport.mk 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/CppunitTest_sw_rtfexport.mk 2015-10-27 20:55:54.000000000 +0000 @@ -48,36 +48,7 @@ $(eval $(call gb_CppunitTest_use_ure,sw_rtfexport)) $(eval $(call gb_CppunitTest_use_vcl,sw_rtfexport)) -$(eval $(call gb_CppunitTest_use_components,sw_rtfexport,\ - basic/util/sb \ - comphelper/util/comphelp \ - configmgr/source/configmgr \ - embeddedobj/util/embobj \ - filter/source/config/cache/filterconfig1 \ - filter/source/storagefilterdetect/storagefd \ - framework/util/fwk \ - i18npool/util/i18npool \ - linguistic/source/lng \ - package/source/xstor/xstor \ - package/util/package2 \ - sax/source/expatwrap/expwrap \ - sfx2/util/sfx \ - starmath/util/sm \ - svl/source/fsstor/fsstorage \ - svtools/util/svt \ - sw/util/msword \ - sw/util/sw \ - sw/util/swd \ - toolkit/util/tk \ - ucb/source/core/ucb1 \ - ucb/source/ucp/file/ucpfile1 \ - unotools/util/utl \ - unoxml/source/service/unoxml \ - uui/util/uui \ - writerfilter/util/writerfilter \ - xmloff/util/xo \ - oox/util/oox \ -)) +$(eval $(call gb_CppunitTest_use_rdb,sw_rtfexport,services)) $(eval $(call gb_CppunitTest_use_configuration,sw_rtfexport)) diff -Nru libreoffice-l10n-4.4.2/sw/inc/authfld.hxx libreoffice-l10n-4.4.6~rc3/sw/inc/authfld.hxx --- libreoffice-l10n-4.4.2/sw/inc/authfld.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/inc/authfld.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -154,7 +154,7 @@ OUString ConditionalExpand(ToxAuthorityField eField) const; //To handle Citation - OUString ExpandCitation(ToxAuthorityField eField) const; + SW_DLLPUBLIC OUString ExpandCitation(ToxAuthorityField eField) const; SwAuthorityField(SwAuthorityFieldType* pType, const OUString& rFieldContents); SwAuthorityField(SwAuthorityFieldType* pType, sal_IntPtr nHandle); diff -Nru libreoffice-l10n-4.4.2/sw/inc/doc.hxx libreoffice-l10n-4.4.6~rc3/sw/inc/doc.hxx --- libreoffice-l10n-4.4.2/sw/inc/doc.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/inc/doc.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -102,7 +102,6 @@ class SwFmtINetFmt; class SwFmtRefMark; class SwFrmFmt; -class SwFrmFmtAnchorMap; class SwFrmFmts; class SwFtnIdxs; class SwFtnInfo; @@ -306,7 +305,6 @@ SwGrfFmtColl *mpDfltGrfFmtColl; SwFrmFmts *mpFrmFmtTbl; //< Format table - SwFrmFmtAnchorMap *mpFrmFmtAnchorMap; SwCharFmts *mpCharFmtTbl; SwFrmFmts *mpSpzFrmFmtTbl; SwSectionFmts *mpSectionFmtTbl; @@ -816,9 +814,6 @@ const SwCharFmt *GetDfltCharFmt() const { return mpDfltCharFmt;} SwCharFmt *GetDfltCharFmt() { return mpDfltCharFmt;} - const SwFrmFmtAnchorMap* GetFrmFmtAnchorMap() const { return mpFrmFmtAnchorMap; } - SwFrmFmtAnchorMap* GetFrmFmtAnchorMap() { return mpFrmFmtAnchorMap; } - // @return the interface of the management of (auto)styles IStyleAccess& GetIStyleAccess() { return *mpStyleAccess; } @@ -1111,10 +1106,12 @@ Parameters and : indicates, if a new list is created by applying the given list style. If equals false, may contain the - list Id of a list, which has to be continued by applying the given list style */ - void SetNumRule( const SwPaM&, + list Id of a list, which has to be continued by applying the given list style + + Returns the set ListId if bSetItem is true */ + OUString SetNumRule( const SwPaM&, const SwNumRule&, - const bool bCreateNewList, + bool bCreateNewList, const OUString& sContinuedListId = OUString(), bool bSetItem = true, const bool bResetIndentAttrs = false ); diff -Nru libreoffice-l10n-4.4.2/sw/inc/drawdoc.hxx libreoffice-l10n-4.4.6~rc3/sw/inc/drawdoc.hxx --- libreoffice-l10n-4.4.2/sw/inc/drawdoc.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/inc/drawdoc.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -33,6 +33,8 @@ const SwDoc& GetDoc() const { return *pDoc; } SwDoc& GetDoc() { return *pDoc; } + /// Put needed items for XPropertyList entries from the DrawModel. + void PutAreaListItems(SfxItemSet& rSet) const; virtual SdrPage* AllocPage(bool bMasterPage) SAL_OVERRIDE; diff -Nru libreoffice-l10n-4.4.2/sw/inc/fldbas.hxx libreoffice-l10n-4.4.6~rc3/sw/inc/fldbas.hxx --- libreoffice-l10n-4.4.2/sw/inc/fldbas.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/inc/fldbas.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -319,8 +319,6 @@ */ OUString ExpandField(bool const bCached, ToxAuthorityField eField = AUTH_FIELD_IDENTIFIER) const; - OUString ExpandCitation(ToxAuthorityField eField = AUTH_FIELD_IDENTIFIER) const; - /// @return name or content. virtual OUString GetFieldName() const; diff -Nru libreoffice-l10n-4.4.2/sw/inc/frmfmt.hxx libreoffice-l10n-4.4.6~rc3/sw/inc/frmfmt.hxx --- libreoffice-l10n-4.4.2/sw/inc/frmfmt.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/inc/frmfmt.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -23,8 +23,6 @@ #include #include #include -#include -#include #include "swdllapi.h" class SwFlyFrm; @@ -303,27 +301,6 @@ SW_DLLPUBLIC bool IsFlyFrmFmtInHeader(const SwFrmFmt& rFmt); -/** - Fast mapping from node positions to SwFrmFmt objects anchored at them. - - SwFrmFmt::GetAnchor().GetCntntAnchor() provides the position where the object is anchored. - This class provides the reverse mapping. It intentionally uses SwNodeIndex instead of SwPosition - to allow simpler implementation, do SwIndex checking explicitly if needed. -*/ -class SwFrmFmtAnchorMap -{ -public: - SwFrmFmtAnchorMap( const SwDoc* doc ); - void Add( SwFrmFmt* fmt, const SwNodeIndex& index ); - void Remove( SwFrmFmt* fmt, const SwNodeIndex& index ); - typedef std::multimap< SwNodeIndex, SwFrmFmt* >::const_iterator const_iterator; - typedef std::pair< const_iterator, const_iterator > const_iterator_pair; - const_iterator_pair equal_range( const SwNodeIndex& pos ) const; -private: - std::multimap< SwNodeIndex, SwFrmFmt* > items; - const SwDoc* doc; -}; - #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff -Nru libreoffice-l10n-4.4.2/sw/inc/IDocumentContentOperations.hxx libreoffice-l10n-4.4.6~rc3/sw/inc/IDocumentContentOperations.hxx --- libreoffice-l10n-4.4.2/sw/inc/IDocumentContentOperations.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/inc/IDocumentContentOperations.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -70,6 +70,9 @@ The position can be in the same or in an another document. It can also be within the range! + \warning The range has to include at least two nodes or has to be a + SwDoc::IsColumnSelection! + Normally this function should work only with content nodes. But there is a special case used by SwDoc::Paste, which starts the SwPaM at the content start node. This position doesn't contain any content: diff -Nru libreoffice-l10n-4.4.2/sw/inc/IDocumentMarkAccess.hxx libreoffice-l10n-4.4.6~rc3/sw/inc/IDocumentMarkAccess.hxx --- libreoffice-l10n-4.4.2/sw/inc/IDocumentMarkAccess.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/inc/IDocumentMarkAccess.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -77,7 +77,7 @@ */ virtual ::sw::mark::IMark* makeMark(const SwPaM& rPaM, const OUString& rProposedName, - MarkType eMark) =0; + MarkType eMark, bool = false) = 0; virtual sw::mark::IFieldmark* makeFieldBookmark( const SwPaM& rPaM, const OUString& rName, diff -Nru libreoffice-l10n-4.4.2/sw/inc/IDocumentSettingAccess.hxx libreoffice-l10n-4.4.6~rc3/sw/inc/IDocumentSettingAccess.hxx --- libreoffice-l10n-4.4.2/sw/inc/IDocumentSettingAccess.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/inc/IDocumentSettingAccess.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -28,6 +28,7 @@ class SvxForbiddenCharactersTable; namespace com { namespace sun { namespace star { namespace i18n { struct ForbiddenCharacters; } } } } + /** Provides access to settings of a document */ class IDocumentSettingAccess @@ -80,6 +81,7 @@ // MS Word still wraps text around objects with less space than LO would. SURROUND_TEXT_WRAP_SMALL, PROP_LINE_SPACING_SHRINKS_FIRST_LINE, + SUBTRACT_FLYS, // COMPATIBILITY FLAGS END BROWSE_MODE, diff -Nru libreoffice-l10n-4.4.2/sw/inc/IDocumentUndoRedo.hxx libreoffice-l10n-4.4.6~rc3/sw/inc/IDocumentUndoRedo.hxx --- libreoffice-l10n-4.4.2/sw/inc/IDocumentUndoRedo.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/inc/IDocumentUndoRedo.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -193,6 +193,10 @@ */ virtual bool IsUndoNodes(SwNodes const& rNodes) const = 0; + /** Get the number of Undo actions. + */ + virtual size_t GetUndoActionCount(const bool bCurrentLevel = true) const = 0; + protected: virtual ~IDocumentUndoRedo() {}; }; diff -Nru libreoffice-l10n-4.4.2/sw/inc/node.hxx libreoffice-l10n-4.4.6~rc3/sw/inc/node.hxx --- libreoffice-l10n-4.4.2/sw/inc/node.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/inc/node.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -98,6 +98,11 @@ long m_nSerial; #endif + /// all SwFrmFmt that are anchored at the node + /// invariant: SwFrmFmt is in the list iff + /// SwFrmFmt::GetAnchor().GetCntntAnchor() points to this node + std::unique_ptr> m_pAnchoredFlys; + protected: SwStartNode* pStartOfSection; @@ -281,6 +286,10 @@ sal_uInt8 HasPrevNextLayNode() const; + std::vector const* GetAnchoredFlys() const { return m_pAnchoredFlys.get(); } + void AddAnchoredFly(SwFrmFmt *); + void RemoveAnchoredFly(SwFrmFmt *); + /** * Dumps the node structure to the given destination (file nodes.xml in the current directory by default) * @since 3.5 diff -Nru libreoffice-l10n-4.4.2/sw/inc/swunohelper.hxx libreoffice-l10n-4.4.6~rc3/sw/inc/swunohelper.hxx --- libreoffice-l10n-4.4.2/sw/inc/swunohelper.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/inc/swunohelper.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -77,7 +77,7 @@ ///UUUU helper to check if fill style is set to color or bitmap /// and thus formally used SvxBrushItem parts need to be mapped /// for backwards compatibility -bool needToMapFillItemsToSvxBrushItemTypes(const SfxItemSet& rSet); +bool needToMapFillItemsToSvxBrushItemTypes(const SfxItemSet& rSet, sal_uInt16 const nMemberId); } diff -Nru libreoffice-l10n-4.4.2/sw/ooxmlexport_setup.mk libreoffice-l10n-4.4.6~rc3/sw/ooxmlexport_setup.mk --- libreoffice-l10n-4.4.2/sw/ooxmlexport_setup.mk 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/ooxmlexport_setup.mk 2015-10-27 20:55:54.000000000 +0000 @@ -33,6 +33,9 @@ drawinglayer/drawinglayer \ embeddedobj/util/embobj \ filter/source/config/cache/filterconfig1 \ + filter/source/odfflatxml/odfflatxml \ + filter/source/xmlfilterdetect/xmlfd \ + filter/source/xmlfilteradaptor/xmlfa \ forms/util/frm \ framework/util/fwk \ i18npool/util/i18npool \ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ooxml/pass/fill.docx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ooxml/pass/fill.docx differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ooxml/pass/tdf92157-1-minimized.docx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ooxml/pass/tdf92157-1-minimized.docx differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww5/pass/crash-1.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww5/pass/crash-1.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww5/pass/crash-2.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww5/pass/crash-2.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww5/pass/crash-3.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww5/pass/crash-3.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww5/pass/hang-1.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww5/pass/hang-1.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww5/pass/hang-2.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww5/pass/hang-2.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww6/pass/crash-1.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww6/pass/crash-1.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww6/pass/crash-2.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww6/pass/crash-2.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww6/pass/crash-3.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww6/pass/crash-3.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww6/pass/crash-4.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww6/pass/crash-4.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww6/pass/crash-6.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww6/pass/crash-6.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww6/pass/crash-7.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww6/pass/crash-7.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww6/pass/hang-1.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww6/pass/hang-1.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww8/pass/crash-1.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww8/pass/crash-1.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww8/pass/crash-2.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww8/pass/crash-2.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww8/pass/crash-3.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww8/pass/crash-3.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww8/pass/hang-1.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww8/pass/hang-1.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww8/pass/hang-2.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww8/pass/hang-2.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww8/pass/hang-3.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww8/pass/hang-3.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww8/pass/hang-4.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww8/pass/hang-4.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww8/pass/hang-5.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww8/pass/hang-5.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww8/pass/hang-6.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww8/pass/hang-6.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww8/pass/hang-7.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww8/pass/hang-7.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww8/pass/hang-8.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww8/pass/hang-8.doc differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/core/data/ww8/pass/hang-9.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/core/data/ww8/pass/hang-9.doc differ diff -Nru libreoffice-l10n-4.4.2/sw/qa/core/filters-test.cxx libreoffice-l10n-4.4.6~rc3/sw/qa/core/filters-test.cxx --- libreoffice-l10n-4.4.2/sw/qa/core/filters-test.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/core/filters-test.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -151,6 +151,10 @@ getURLFromSrc("/sw/qa/core/data/ww8/"), OUString(FILTER_WW8)); + testDir(OUString("MS WinWord 6.0"), + getURLFromSrc("/sw/qa/core/data/ww6/"), + OUString(sWW6)); + testDir(OUString("MS WinWord 5"), getURLFromSrc("/sw/qa/core/data/ww5/"), OUString(sWW5)); diff -Nru libreoffice-l10n-4.4.2/sw/qa/core/macros-test.cxx libreoffice-l10n-4.4.6~rc3/sw/qa/core/macros-test.cxx --- libreoffice-l10n-4.4.2/sw/qa/core/macros-test.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/core/macros-test.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -69,6 +69,7 @@ void testVba(); #endif void testBookmarkDeleteAndJoin(); + void testBookmarkDeleteTdf90816(); void testFdo55289(); void testFdo68983(); CPPUNIT_TEST_SUITE(SwMacrosTest); @@ -79,6 +80,7 @@ CPPUNIT_TEST(testVba); #endif CPPUNIT_TEST(testBookmarkDeleteAndJoin); + CPPUNIT_TEST(testBookmarkDeleteTdf90816); CPPUNIT_TEST(testFdo55289); CPPUNIT_TEST(testFdo68983); @@ -204,6 +206,35 @@ } } +void SwMacrosTest::testBookmarkDeleteTdf90816() +{ + SwDoc *const pDoc = new SwDoc; + pDoc->GetIDocumentUndoRedo().DoUndo(true); // bug is in SwUndoDelete + SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1); + SwPaM aPaM(aIdx); + + IDocumentContentOperations & rIDCO(pDoc->getIDocumentContentOperations()); + rIDCO.AppendTxtNode(*aPaM.GetPoint()); + rIDCO.InsertString(aPaM, OUString("ABC")); + aPaM.Move(fnMoveBackward, fnGoCntnt); + aPaM.SetMark(); + aPaM.Move(fnMoveBackward, fnGoCntnt); + IDocumentMarkAccess & rIDMA = *pDoc->getIDocumentMarkAccess(); + sw::mark::IMark *pMark = + rIDMA.makeMark(aPaM, "test", IDocumentMarkAccess::MarkType::BOOKMARK); + CPPUNIT_ASSERT(pMark); + + // delete the same selection as the bookmark + rIDCO.DeleteAndJoin(aPaM, false); + + // bookmark still there? + auto iter = rIDMA.getAllMarksBegin(); + CPPUNIT_ASSERT_MESSAGE("the bookmark was deleted", + iter != rIDMA.getAllMarksEnd()); + CPPUNIT_ASSERT(*aPaM.Start() == (*iter)->GetMarkPos()); + CPPUNIT_ASSERT(*aPaM.End() == (*iter)->GetOtherMarkPos()); +} + void SwMacrosTest::testFdo55289() { SwDoc *const pDoc = new SwDoc; Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/htmlexport/data/tdf90905.odt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/htmlexport/data/tdf90905.odt differ diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/htmlexport/htmlexport.cxx libreoffice-l10n-4.4.6~rc3/sw/qa/extras/htmlexport/htmlexport.cxx --- libreoffice-l10n-4.4.2/sw/qa/extras/htmlexport/htmlexport.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/htmlexport/htmlexport.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -243,6 +243,16 @@ assertXPath(pDoc, "/html/body/p/a[2]", "href", "http://www.youtube.com/results?search_query=%E7%B2%B5%E8%AA%9Emv&sm=12"); } +DECLARE_HTMLEXPORT_TEST(testExportInternalUrl, "tdf90905.odt") +{ + htmlDocPtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + // Internal url should be valid + assertXPath(pDoc, "/html/body/p[1]/a", "href", "#0.0.1.Text|outline"); + assertXPath(pDoc, "/html/body/p[2]/a", "href", "#bookmark"); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/inc/swmodeltestbase.hxx libreoffice-l10n-4.4.6~rc3/sw/qa/extras/inc/swmodeltestbase.hxx --- libreoffice-l10n-4.4.2/sw/qa/extras/inc/swmodeltestbase.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/inc/swmodeltestbase.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -264,6 +264,7 @@ header(); preTest(filename); load(mpTestDocumentPath, filename); + postLoad(filename); reload(mpFilter, filename); postTest(filename); verify(); @@ -313,6 +314,11 @@ { } + /// Override this function if some special file-specific setup is needed during export test: after load, but before save. + virtual void postLoad(const char* /*pFilename*/) + { + } + /** * Override this function if some special filename-specific teardown is needed */ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/mailmerge/data/empty.odt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/mailmerge/data/empty.odt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/mailmerge/data/tdf89214.odt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/mailmerge/data/tdf89214.odt differ diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/mailmerge/mailmerge.cxx libreoffice-l10n-4.4.6~rc3/sw/qa/extras/mailmerge/mailmerge.cxx --- libreoffice-l10n-4.4.2/sw/qa/extras/mailmerge/mailmerge.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/mailmerge/mailmerge.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -334,6 +334,23 @@ } } +DECLARE_SHELL_MAILMERGE_TEST(testTdf89214, "tdf89214.odt", "10-testing-addresses.ods", "testing-addresses") +{ + executeMailMerge(); + + uno::Reference xTextDocument(mxMMComponent, uno::UNO_QUERY); + uno::Reference xParagraph(getParagraphOrTable(3, xTextDocument->getText()), uno::UNO_QUERY); + // Make sure that we assert the right paragraph. + CPPUNIT_ASSERT_EQUAL(OUString("a"), xParagraph->getString()); + // This paragraph had a bullet numbering, make sure that the list id is not empty. + CPPUNIT_ASSERT(!getProperty(xParagraph, "ListId").isEmpty()); +} + +DECLARE_SHELL_MAILMERGE_TEST(testTdf90230, "empty.odt", "10-testing-addresses.ods", "testing-addresses") +{ + // MM of an empty document caused an assertion in the SwIndexReg dtor. + executeMailMerge(); +} #endif CPPUNIT_PLUGIN_IMPLEMENT(); diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/odfexport/data/CrossRefHeadingBookmark.fodt libreoffice-l10n-4.4.6~rc3/sw/qa/extras/odfexport/data/CrossRefHeadingBookmark.fodt --- libreoffice-l10n-4.4.2/sw/qa/extras/odfexport/data/CrossRefHeadingBookmark.fodt 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/odfexport/data/CrossRefHeadingBookmark.fodt 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,120 @@ + + + + ms 2015-08-24T21:49:45.305718699LibreOfficeDev/4.3.7.2$Linux_X86_64 LibreOffice_project/8a35821d8636a03b8bf4e15b48f59794652c68ba + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text + + + cross-reference to 1.1 (Numbered paragraph - Number) and 1.1(Numbered paragraph - no context) + + + + + + + Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/odfexport/data/redlineTextFrame.odt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/odfexport/data/redlineTextFrame.odt differ diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/odfexport/data/tdf92379.fodt libreoffice-l10n-4.4.6~rc3/sw/qa/extras/odfexport/data/tdf92379.fodt --- libreoffice-l10n-4.4.2/sw/qa/extras/odfexport/data/tdf92379.fodt 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/odfexport/data/tdf92379.fodt 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,89 @@ + + + + ms 2015-08-24T21:49:45.305718699LibreOfficeDev/4.3.7.2$Linux_X86_64 LibreOffice_project/8a35821d8636a03b8bf4e15b48f59794652c68ba + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/odfexport/odfexport.cxx libreoffice-l10n-4.4.6~rc3/sw/qa/extras/odfexport/odfexport.cxx --- libreoffice-l10n-4.4.2/sw/qa/extras/odfexport/odfexport.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/odfexport/odfexport.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -37,6 +38,15 @@ #define DECLARE_ODFEXPORT_TEST(TestName, filename) DECLARE_SW_ROUNDTRIP_TEST(TestName, filename, Test) +DECLARE_ODFEXPORT_TEST(testredlineTextFrame, "redlineTextFrame.odt") +{ + //Note this is for a crash test + //Counting the Number of Frames and checking with the expected count + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount()); +} + DECLARE_ODFEXPORT_TEST(testFdo38244, "fdo38244.odt") { // See ooxmlexport's testFdo38244(). @@ -63,6 +73,86 @@ CPPUNIT_ASSERT_EQUAL(OUString("M"), getProperty(xPropertySet, "Initials")); } +DECLARE_ODFEXPORT_TEST(testTdf92379, "tdf92379.fodt") +{ + // frame style fo:background-color was not imported + uno::Reference xStyles(getStyles("FrameStyles")); + uno::Reference xStyle(xStyles->getByName("encarts"), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffcc99), getProperty(xStyle, "BackColorRGB")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xStyle, "BackColorTransparency")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(xStyle, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffcc99), getProperty(xStyle, "FillColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty(xStyle, "FillTransparence")); + + uno::Reference xFrameStyle2(xStyles->getByName("Untitled1"), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffffff), getProperty(xFrameStyle2, "BackColorRGB")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xFrameStyle2, "BackTransparent")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(100), getProperty(xFrameStyle2, "BackColorTransparency")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(xFrameStyle2, "FillStyle")); +// unfortunately this is actually the pool default value, which would be hard to fix - but it isn't a problem because style is NONE +// CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffffff), getProperty(xFrameStyle2, "FillColor")); +// CPPUNIT_ASSERT_EQUAL(sal_Int16(100), getProperty(xFrameStyle2, "FillTransparence")); + + if (xmlDocPtr pXmlDoc = parseExport("styles.xml")) + { + // check that fo:background-color attribute is exported properly + assertXPath(pXmlDoc, "//style:style[@style:family='graphic' and @style:name='encarts']/style:graphic-properties[@fo:background-color='#ffcc99']", 1); + assertXPath(pXmlDoc, "//style:style[@style:family='graphic' and @style:name='Untitled1']/style:graphic-properties[@fo:background-color='transparent']", 1); + } + + // paragraph style fo:background-color was wrongly inherited despite being + // overridden in derived style + uno::Reference xParaStyles(getStyles("ParagraphStyles")); + uno::Reference xStyle1(xParaStyles->getByName( + "Titre Avis expert"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x661900), getProperty(xStyle1, "ParaBackColor")); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xStyle1, "ParaBackTransparent")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(xStyle1, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x661900), getProperty(xStyle1, "FillColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty(xStyle1, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffffff), getProperty(xStyle1, "CharColor")); + + uno::Reference xStyle2(xParaStyles->getByName( + "Avis expert questions"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(COL_TRANSPARENT), getProperty(xStyle2, "ParaBackColor")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xStyle2, "ParaBackTransparent")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(xStyle2, "FillStyle")); +// unfortunately this is actually the pool default value, which would be hard to fix - but it isn't a problem because style is NONE +// CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffffff), getProperty(xStyle2, "FillColor")); +// CPPUNIT_ASSERT_EQUAL(sal_Int16(100), getProperty(xStyle2, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x661900), getProperty(xStyle2, "CharColor")); + + uno::Reference xStyle31(xParaStyles->getByName( + "avis expert questions non cadres"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x801900), getProperty(xStyle31, "ParaBackColor")); + CPPUNIT_ASSERT_EQUAL(false, getProperty(xStyle31, "ParaBackTransparent")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty(xStyle31, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x801900), getProperty(xStyle31, "FillColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int16(0), getProperty(xStyle31, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x661900), getProperty(xStyle31, "CharColor")); + + uno::Reference xStyle32(xParaStyles->getByName( + "Avis expert rXponses"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(COL_TRANSPARENT), getProperty(xStyle32, "ParaBackColor")); + CPPUNIT_ASSERT_EQUAL(true, getProperty(xStyle32, "ParaBackTransparent")); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty(xStyle32, "FillStyle")); +// unfortunately this is actually the pool default value, which would be hard to fix - but it isn't a problem because style is NONE +// CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffffff), getProperty(xStyle32, "FillColor")); +// CPPUNIT_ASSERT_EQUAL(sal_Int16(100), getProperty(xStyle32, "FillTransparence")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x461900), getProperty(xStyle32, "CharColor")); + + if (xmlDocPtr pXmlDoc = parseExport("styles.xml")) + { + // check that fo:background-color attribute is exported properly + assertXPath(pXmlDoc, "//style:style[@style:family='paragraph' and @style:display-name='Titre Avis expert']/style:paragraph-properties[@fo:background-color='#661900']", 1); + assertXPath(pXmlDoc, "//style:style[@style:family='paragraph' and @style:display-name='Avis expert questions']/style:paragraph-properties[@fo:background-color='transparent']", 1); + assertXPath(pXmlDoc, "//style:style[@style:family='paragraph' and @style:display-name='avis expert questions non cadres']/style:paragraph-properties[@fo:background-color='#801900']", 1); + assertXPath(pXmlDoc, "//style:style[@style:family='paragraph' and @style:display-name='Avis expert rXponses']/style:paragraph-properties[@fo:background-color='transparent']", 1); + } +} + DECLARE_ODFEXPORT_TEST(testFdo79358, "fdo79358.odt") { // the boolean properties of the index were not exported properly @@ -123,6 +213,35 @@ CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style); } +DECLARE_ODFEXPORT_TEST(testDuplicateCrossRefHeadingBookmark, "CrossRefHeadingBookmark.fodt") +{ + // the file contains invalid duplicate heading cross reference bookmarks + // but we have to round trip them, tdf#94804 + + uno::Reference xBookmarksSupplier(mxComponent, + uno::UNO_QUERY); + uno::Reference xBookmarks( + xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY); + uno::Reference xBookmark1( + xBookmarks->getByName("__RefHeading__8284_1826734303"), uno::UNO_QUERY); + CPPUNIT_ASSERT(xBookmark1.is()); + uno::Reference xBookmark2( + xBookmarks->getByName("__RefHeading__1673_25705824"), uno::UNO_QUERY); + CPPUNIT_ASSERT(xBookmark2.is()); + + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference(xTextFieldsSupplier->getTextFields(), uno::UNO_QUERY)->refresh(); + + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + uno::Any aField1 = xFields->nextElement(); + uno::Reference xField1(aField1, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1.1"), xField1->getPresentation(false)); + uno::Any aField2 = xFields->nextElement(); + uno::Reference xField2(aField2, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1.1"), xField2->getPresentation(false)); +} + DECLARE_ODFEXPORT_TEST(testFdo60769, "fdo60769.odt") { // Test multi-paragraph comment range feature. Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/odfimport/data/fdo90130-1.odt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/odfimport/data/fdo90130-1.odt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/odfimport/data/fdo90130-2.odt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/odfimport/data/fdo90130-2.odt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/odfimport/data/PageBackground.odt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/odfimport/data/PageBackground.odt differ diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/odfimport/data/tdf89802.fodt libreoffice-l10n-4.4.6~rc3/sw/qa/extras/odfimport/data/tdf89802.fodt --- libreoffice-l10n-4.4.2/sw/qa/extras/odfimport/data/tdf89802.fodt 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/odfimport/data/tdf89802.fodt 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,56 @@ + + + + ms 2015-04-07T22:24:25.3740120802015-04-07T22:25:28.460806924ms PT1M3S1LibreOfficeDev/4.5.0.0.alpha0$Linux_X86_64 LibreOffice_project/52ae345470d8fa657817cf87b3e8e8c1b51bd7da + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + foo + + + + + Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/odfimport/data/tdf92586.odt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/odfimport/data/tdf92586.odt differ diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/odfimport/odfimport.cxx libreoffice-l10n-4.4.6~rc3/sw/qa/extras/odfimport/odfimport.cxx --- libreoffice-l10n-4.4.2/sw/qa/extras/odfimport/odfimport.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/odfimport/odfimport.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -11,6 +11,8 @@ #if !defined(WNT) #include +#include +#include #include #include #include @@ -306,6 +308,21 @@ CPPUNIT_ASSERT_EQUAL(OUString("second"), xFooter->getString()); } +DECLARE_ODFIMPORT_TEST(testPageBackground, "PageBackground.odt") +{ + uno::Reference xPropertySet(getStyles("PageStyles")->getByName("Default Style"), uno::UNO_QUERY); + // The background image was lost + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty(xPropertySet, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Sky"), getProperty(xPropertySet, "FillBitmapName")); + CPPUNIT_ASSERT_EQUAL(drawing::BitmapMode_REPEAT, getProperty(xPropertySet, "FillBitmapMode")); + + uno::Reference xPropertySetOld(getStyles("PageStyles")->getByName("OldStandard"), uno::UNO_QUERY); + // The background image was overridden by color + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty(xPropertySetOld, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Sky"), getProperty(xPropertySetOld, "FillBitmapName")); + CPPUNIT_ASSERT_EQUAL(drawing::BitmapMode_REPEAT, getProperty(xPropertySetOld, "FillBitmapMode")); +} + DECLARE_ODFIMPORT_TEST(testFdo56272, "fdo56272.odt") { uno::Reference xShape = getShape(1); @@ -389,6 +406,18 @@ } catch (lang::IndexOutOfBoundsException const&) { } } +DECLARE_ODFIMPORT_TEST(testTdf89802, "tdf89802.fodt") +{ + // the text frame was dropped during import + uno::Reference const xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference const xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount()); + uno::Reference const xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + sal_Int32 nValue(0); + xFrame->getPropertyValue("BackColor") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x3f004586), nValue); +} + DECLARE_ODFIMPORT_TEST(testFdo37606, "fdo37606.odt") { SwXTextDocument* pTxtDoc = dynamic_cast(mxComponent.get()); @@ -533,7 +562,27 @@ uno::Reference xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); sal_Int32 nValue(0); xFrame->getPropertyValue("BackColor") >>= nValue; - CPPUNIT_ASSERT_EQUAL(sal_Int32(0xfeffffff), nValue); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffffffff), nValue); +} + +DECLARE_ODFIMPORT_TEST(fdo90130_1, "fdo90130-1.odt") +{ + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + uno::Reference xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + sal_Int32 nValue(0); + xFrame->getPropertyValue("BackColor") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x00ff3333), nValue); +} + +DECLARE_ODFIMPORT_TEST(fdo90130_2, "fdo90130-2.odt") +{ + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + uno::Reference xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + sal_Int32 nValue(0); + xFrame->getPropertyValue("BackColorTransparency") >>= nValue; + CPPUNIT_ASSERT_EQUAL(sal_Int32(50), nValue); } DECLARE_ODFIMPORT_TEST(testBnc800714, "bnc800714.fodt") @@ -546,6 +595,13 @@ CPPUNIT_ASSERT(getProperty(getParagraph(2), "ParaKeepTogether")); } +DECLARE_ODFIMPORT_TEST(testTdf92586, "tdf92586.odt") +{ + uno::Reference xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + // This was BitmapMode_NO_REPEAT. + CPPUNIT_ASSERT_EQUAL(drawing::BitmapMode_STRETCH, getProperty(xPageStyle, "FillBitmapMode")); +} + #endif CPPUNIT_PLUGIN_IMPLEMENT(); Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/data/duplicate-east-asia.odt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/data/duplicate-east-asia.odt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/data/hyperlink-field.odt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/data/hyperlink-field.odt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/data/outline-num-none.odt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/data/outline-num-none.odt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/data/tdf83227.docx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/data/tdf83227.docx differ diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/data/tdf89774.fodt libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/data/tdf89774.fodt --- libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/data/tdf89774.fodt 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/data/tdf89774.fodt 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,11 @@ + + + + PT1M5S + + + + hello + + + Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/data/tdf89890.docx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/data/tdf89890.docx differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/data/tdf91261.docx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/data/tdf91261.docx differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/data/tdf91594.docx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/data/tdf91594.docx differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/data/tdf92521.odt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/data/tdf92521.odt differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/data/tdf93676-1.odt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/data/tdf93676-1.odt differ diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx --- libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -353,7 +353,7 @@ xmlDocPtr pXmlDoc = parseExport("word/numbering.xml"); if (!pXmlDoc) return; - assertXPath(pXmlDoc, "/w:numbering/w:numPicBullet[2]/w:pict/v:shape", "style", "width:6.4pt;height:6.4pt"); + assertXPath(pXmlDoc, "/w:numbering/w:numPicBullet[2]/w:pict/v:shape", "style", "width:7.9pt;height:7.9pt"); } DECLARE_OOXMLEXPORT_TEST(testColumnBreak_ColumnCountIsZero,"fdo74153.docx") @@ -798,6 +798,25 @@ } +DECLARE_OOXMLEXPORT_TEST(testTdf83227, "tdf83227.docx") +{ + // Bug document contains a rotated image, which is handled as a draw shape (not as a Writer image) on export. + if (!mbExported) + return; + + uno::Reference xNameAccess = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory), maTempFile.GetURL()); + CPPUNIT_ASSERT_EQUAL(true, bool(xNameAccess->hasByName("word/media/image1.png"))); + // This was also true, image was written twice. + CPPUNIT_ASSERT_EQUAL(false, bool(xNameAccess->hasByName("word/media/image2.png"))); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf92521, "tdf92521.odt") +{ + if (xmlDocPtr pXmlDoc = parseExport("word/document.xml")) + // There should be a section break that's in the middle of the document: right after the table. + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:pPr/w:sectPr", 1); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx --- libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -99,10 +99,18 @@ assertXPath ( pXmlDoc, "/w:numbering/w:abstractNum[1]/w:lvl[1]/w:lvlText","val","%1" ); } +DECLARE_OOXMLEXPORT_TEST(testNoDuplicateAttributeExport, "duplicate-east-asia.odt") +{ + // File asserting while saving in LO. + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; +} + DECLARE_OOXMLEXPORT_TEST(testfdo79008, "fdo79008.docx") { - /* File getting crash while saving in LO. - * Checking if document.xml file is getting created after fix + /* File crashing while saving in LO. + * Check if document.xml file is created after fix */ xmlDocPtr pXmlDoc = parseExport("word/document.xml"); if (!pXmlDoc) @@ -194,7 +202,7 @@ if (!pXmlDoc) return; - assertXPath(pXmlDoc, "/ContentType:Types/ContentType:Override[@ContentType='image/tif']", "PartName", "/word/media/image1.tif"); + assertXPath(pXmlDoc, "/ContentType:Types/ContentType:Override[@ContentType='image/tiff']", "PartName", "/word/media/image1.tif"); } DECLARE_OOXMLEXPORT_TEST(testFDO77117, "fdo77117.docx") @@ -222,6 +230,14 @@ } +DECLARE_OOXMLEXPORT_TEST(testHyperlinkContainingPlaceholderField, "hyperlink-field.odt") +{ + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + + if (!pXmlDoc) + return; +} + DECLARE_OOXMLEXPORT_TEST(testTablePreferredWidth, "tablePreferredWidth.docx") { xmlDocPtr pXmlDoc = parseExport("word/document.xml"); @@ -700,6 +716,13 @@ assertXPath(pXmlDoc, "//mc:AlternateContent//w:sdt", 0); } +DECLARE_OOXMLEXPORT_TEST(testTdf89774, "tdf89774.fodt") +{ + if (xmlDocPtr pXmlDoc = parseExport("docProps/app.xml")) + // This was 65, as unit was seconds instead of minutes. + assertXPathContent(pXmlDoc, "/extended-properties:Properties/extended-properties:TotalTime", "1"); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/ooxmlexport.cxx libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/ooxmlexport.cxx --- libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlexport/ooxmlexport.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlexport/ooxmlexport.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -584,6 +584,12 @@ CPPUNIT_ASSERT_EQUAL(style::NumberingType::NUMBER_LOWER_ZH, numFormat); } +DECLARE_OOXMLEXPORT_TEST(testOOxmlOutlineNumNone, "outline-num-none.odt") +{ + if (xmlDocPtr pXmlDoc = parseExport("word/numbering.xml")) + assertXPath(pXmlDoc, "/w:numbering/w:abstractNum[1]/w:lvl[1]/w:numFmt", "val", "none"); +} + DECLARE_OOXMLEXPORT_TEST(testNumParentStyle, "num-parent-style.docx") { // This was "Outline", i.e. was not imported from the Heading 2 paragraph style. @@ -613,6 +619,65 @@ CPPUNIT_ASSERT_EQUAL(static_cast(0x00cc00), getProperty(getParagraph(1), "FillColor")); } +DECLARE_OOXMLEXPORT_TEST(testTdf91261, "tdf91261.docx") +{ + bool snapToGrid = true; + uno::Reference< text::XTextRange > xPara = getParagraph( 2 ); + uno::Reference< beans::XPropertySet > properties( xPara, uno::UNO_QUERY); + properties->getPropertyValue("SnapToGrid") >>= snapToGrid ; + CPPUNIT_ASSERT_EQUAL(false, snapToGrid); + + uno::Reference< beans::XPropertySet> xStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + sal_Int16 nGridMode; + xStyle->getPropertyValue("GridMode") >>= nGridMode; + CPPUNIT_ASSERT_EQUAL( sal_Int16(2), nGridMode); + + bool bGridSnapToChars; + xStyle->getPropertyValue("GridSnapToChars") >>= bGridSnapToChars; + CPPUNIT_ASSERT_EQUAL(true, bGridSnapToChars); + +} + +DECLARE_OOXMLEXPORT_TEST(testTdf89890, "tdf89890.docx") +{ + // Numbering picture bullet was too large. + uno::Reference xPropertySet(getStyles("NumberingStyles")->getByName("WWNum1"), uno::UNO_QUERY); + uno::Reference xLevels(xPropertySet->getPropertyValue("NumberingRules"), uno::UNO_QUERY); + uno::Sequence aProps; + xLevels->getByIndex(0) >>= aProps; // 1st level + + bool bFound = false; + for (int i = 0; i < aProps.getLength(); ++i) + { + const beans::PropertyValue& rProp = aProps[i]; + + if (rProp.Name == "GraphicSize") + { + // Height of the graphic was too large: 4382 after import, then 2485 after roundtrip. + CPPUNIT_ASSERT_EQUAL(static_cast(279), rProp.Value.get().Height); + bFound = true; + } + } + CPPUNIT_ASSERT(bFound); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf91594, "tdf91594.docx") +{ + uno::Reference xPara1(getParagraph(1)); + CPPUNIT_ASSERT_EQUAL(sal_Unicode(0xf0fb), xPara1->getString()[0] ); + uno::Reference xPara2(getParagraph(2)); + CPPUNIT_ASSERT_EQUAL(sal_Unicode(0xf0fc), xPara2->getString()[0] ); + uno::Reference xPara3(getParagraph(3)); + CPPUNIT_ASSERT_EQUAL(sal_Unicode(0xf0fd), xPara3->getString()[0] ); + uno::Reference xPara4(getParagraph(4)); + CPPUNIT_ASSERT_EQUAL(sal_Unicode(0xf0fe), xPara4->getString()[0] ); + + uno::Reference xRun(getRun(xPara1,1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Wingdings"), getProperty(xRun, "CharFontName")); + CPPUNIT_ASSERT_EQUAL(OUString("Wingdings"), getProperty(xRun, "CharFontNameAsian")); + CPPUNIT_ASSERT_EQUAL(OUString("Wingdings"), getProperty(xRun, "CharFontNameComplex")); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlimport/data/fdo87488.docx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlimport/data/fdo87488.docx differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlimport/data/tdf8255.docx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlimport/data/tdf8255.docx differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlimport/data/tdf86374.docx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlimport/data/tdf86374.docx differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlimport/data/tdf87460.docx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlimport/data/tdf87460.docx differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlimport/data/tdf87924.docx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlimport/data/tdf87924.docx differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlimport/data/tdf89702.docx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlimport/data/tdf89702.docx differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlimport/data/tdf90611.docx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlimport/data/tdf90611.docx differ Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlimport/data/tdf93919.docx and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlimport/data/tdf93919.docx differ diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlimport/ooxmlimport.cxx libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlimport/ooxmlimport.cxx --- libreoffice-l10n-4.4.2/sw/qa/extras/ooxmlimport/ooxmlimport.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ooxmlimport/ooxmlimport.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -76,13 +76,13 @@ virtual void preTest(const char* filename) SAL_OVERRIDE { - if (OString(filename) == "smartart.docx" || OString(filename) == "strict-smartart.docx") + if (OString(filename) == "smartart.docx" || OString(filename) == "strict-smartart.docx" || OString(filename) == "fdo87488.docx") SvtFilterOptions::Get().SetSmartArt2Shape(true); } virtual void postTest(const char* filename) SAL_OVERRIDE { - if (OString(filename) == "smartart.docx" || OString(filename) == "strict-smartart.docx") + if (OString(filename) == "smartart.docx" || OString(filename) == "strict-smartart.docx" || OString(filename) == "fdo87488.docx") SvtFilterOptions::Get().SetSmartArt2Shape(false); } }; @@ -1267,8 +1267,8 @@ DECLARE_OOXMLIMPORT_TEST(testFdo63685, "fdo63685.docx") { - // Was 85697, i.e. original 114120 was converted to mm100 from twips, not from EMUs. - CPPUNIT_ASSERT_EQUAL(sal_Int32(318), getProperty(getShape(1), "TopMargin")); + // An inline image's wrapping should be always zero, even if the doc model has a non-zero value. + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(getShape(1), "TopMargin")); } DECLARE_OOXMLIMPORT_TEST(testN592908_Frame, "n592908-frame.docx") @@ -2560,6 +2560,93 @@ CPPUNIT_ASSERT_EQUAL(OUString(aExpectedSuffix,SAL_N_ELEMENTS(aExpectedSuffix)), aSuffix); } +DECLARE_OOXMLIMPORT_TEST(testFdo87488, "fdo87488.docx") +{ + // The shape on the right (index 0, CustomShape within a + // GroupShape) is rotated 90 degrees clockwise and contains text + // rotated 90 degrees anticlockwise. Must be read with SmartArt + // enabled in preTest above, otherwise it gets converted to a + // StarView MetaFile. + uno::Reference group(getShape(1), uno::UNO_QUERY); + { + uno::Reference text(group->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("text2"), text->getString()); + } + { + uno::Reference props(group->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(props->getPropertyValue("RotateAngle"), + uno::makeAny(270 * 100)); + comphelper::SequenceAsHashMap geom(props->getPropertyValue("CustomShapeGeometry")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(90), geom["TextPreRotateAngle"].get()); + } +} + +DECLARE_OOXMLIMPORT_TEST(testTdf8255, "tdf8255.docx") +{ + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xDrawPageSupplier(xTextDocument, uno::UNO_QUERY); + uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); + // This was 1: a full-page-wide multi-page floating table was imported as a TextFrame. + CPPUNIT_ASSERT_EQUAL(static_cast(0), xDrawPage->getCount()); +} + +DECLARE_OOXMLIMPORT_TEST(testTdf87460, "tdf87460.docx") +{ + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xEndnotesSupplier(xTextDocument, uno::UNO_QUERY); + uno::Reference xEndnotes = xEndnotesSupplier->getEndnotes(); + // This was 0: endnote was lost on import. + CPPUNIT_ASSERT_EQUAL(static_cast(1), xEndnotes->getCount()); +} + +DECLARE_OOXMLIMPORT_TEST(testTdf90611, "tdf90611.docx") +{ + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnotes(xFootnotesSupplier->getFootnotes(), uno::UNO_QUERY); + uno::Reference xFootnoteText; + xFootnotes->getByIndex(0) >>= xFootnoteText; + // This was 11. + CPPUNIT_ASSERT_EQUAL(10.f, getProperty(getParagraphOfText(1, xFootnoteText), "CharHeight")); +} + +DECLARE_OOXMLIMPORT_TEST(testTdf89702, "tdf89702.docx") +{ + // Get the first paragraph's numbering style's 2nd level's character style name. + uno::Reference xParagraph = getParagraph(1); + auto xLevels = getProperty< uno::Reference >(xParagraph, "NumberingRules"); + uno::Sequence aLevel; + xLevels->getByIndex(1) >>= aLevel; // 2nd level + OUString aCharStyleName = std::find_if(aLevel.begin(), aLevel.end(), [](const beans::PropertyValue& rValue) { return rValue.Name == "CharStyleName"; })->Value.get(); + + // Make sure that the font name is Arial, this was Verdana. + uno::Reference xStyle(getStyles("CharacterStyles")->getByName(aCharStyleName), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Arial"), getProperty(xStyle, "CharFontName")); +} + +DECLARE_OOXMLIMPORT_TEST(testTdf86374, "tdf86374.docx") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xTableRows(xTable->getRows(), uno::UNO_QUERY); + // btLr text direction was imported as FIX, it should be MIN to have enough space for the additionally entered paragraphs. + CPPUNIT_ASSERT_EQUAL(text::SizeType::MIN, getProperty(xTableRows->getByIndex(0), "SizeType")); +} + +DECLARE_OOXMLIMPORT_TEST(testTdf87924, "tdf87924.docx") +{ + uno::Reference xPropertySet(getShape(1), uno::UNO_QUERY); + comphelper::SequenceAsHashMap aGeometry(xPropertySet->getPropertyValue("CustomShapeGeometry")); + // This was -270, the text rotation angle was set when it should not be rotated. + CPPUNIT_ASSERT_EQUAL(static_cast(0), aGeometry["TextPreRotateAngle"].get()); +} + +DECLARE_OOXMLIMPORT_TEST(testTdf93919, "tdf93919.docx") +{ + // This was 0, left margin was not inherited from the list style. + CPPUNIT_ASSERT_EQUAL(static_cast(1270), getProperty(getParagraph(1), "ParaLeftMargin")); +} + #endif CPPUNIT_PLUGIN_IMPLEMENT(); diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/rtfexport/data/tdf80708.rtf libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfexport/data/tdf80708.rtf --- libreoffice-l10n-4.4.2/sw/qa/extras/rtfexport/data/tdf80708.rtf 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfexport/data/tdf80708.rtf 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,15 @@ +{\rtf1 +\pard\plain +{first table} +\par \trowd\trql\trleft-108\ltrrow\trrh-374\trkeep\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrcf1\cellx296\clbrdrl\brdrhair\brdrcf1\clbrdrr\brdrhair\brdrcf1\cellx702\pard\plain +{A1} +\cell\pard\plain \s0\ql +{A2} +\cell\row\pard\pard\plain \s42\ql +{\rtlch \ltrch\loch\lang2067 second table} +\par \trowd\trql\trleft-108\ltrrow\trrh-561\trkeep\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrcf1\cellx296\clbrdrl\brdrhair\brdrcf1\clbrdrr\brdrhair\brdrcf1\cellx702\pard\plain \s0\ql +{A1} +\cell\pard\plain \s0\ql +{A2} +\cell\row\pard\pard\plain\par +} diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/rtfexport/data/tdf90421.fodt libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfexport/data/tdf90421.fodt --- libreoffice-l10n-4.4.2/sw/qa/extras/rtfexport/data/tdf90421.fodt 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfexport/data/tdf90421.fodt 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,8 @@ + + + + + A http://s/ B + + + diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/rtfexport/rtfexport.cxx libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfexport/rtfexport.cxx --- libreoffice-l10n-4.4.2/sw/qa/extras/rtfexport/rtfexport.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfexport/rtfexport.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -75,6 +76,16 @@ return false; } + + virtual void postLoad(const char* pFilename) SAL_OVERRIDE + { + if (OString(pFilename) == "tdf90421.fodt") + { + // Change the hyperlink, so its URL is empty. + uno::Reference xRun(getRun(getParagraph(1), 2), uno::UNO_QUERY); + xRun->setPropertyValue("HyperLinkURL", uno::makeAny(OUString())); + } + } }; DECLARE_RTFEXPORT_TEST(testZoom, "zoom.rtf") @@ -858,6 +869,29 @@ CPPUNIT_ASSERT_EQUAL(static_cast(0x00cc00), getProperty(getParagraph(1), "FillColor")); } +DECLARE_RTFEXPORT_TEST(testTdf80708, "tdf80708.rtf") +{ + uno::Reference xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(1), uno::UNO_QUERY); + uno::Reference xTableRows(xTable->getRows(), uno::UNO_QUERY); + // This was 2, i.e. the second table had 3 cols, now 2 as expected. + CPPUNIT_ASSERT_EQUAL(static_cast(1), getProperty< uno::Sequence >(xTableRows->getByIndex(0), "TableColumnSeparators").getLength()); +} + +DECLARE_RTFEXPORT_TEST(testTdf90421, "tdf90421.fodt") +{ + if (mbExported) + { + SvMemoryStream aMemoryStream; + SvFileStream aStream(maTempFile.GetURL(), STREAM_READ); + aStream.ReadStream(aMemoryStream); + OString aData(static_cast(aMemoryStream.GetData()), aMemoryStream.GetSize()); + // This was some positive number, i.e. we exported a hyperlink with an empty URL. + CPPUNIT_ASSERT_EQUAL(static_cast(-1), aData.indexOf("HYPERLINK")); + } +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/copypaste-footnote-paste.rtf libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/copypaste-footnote-paste.rtf --- libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/copypaste-footnote-paste.rtf 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/copypaste-footnote-paste.rtf 2015-10-27 20:55:54.000000000 +0000 @@ -1,3 +1,2 @@ {\rtf1 -bbb -\par } +bbb} diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf75614.rtf libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf75614.rtf --- libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf75614.rtf 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf75614.rtf 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,18 @@ +{\rtf1\ansi\ansicpg0\uc1\deff0\deflang0\deflangfe0\fet2 +{\*\ftnsep\pard\plain\chftnsep } +{\*\ftnsepc\pard\plain\chftnsepc} +\paperw8391\paperh11906\margl567\margr567\margt567\margb567\headery567\footery6\viewscale150\viewzk0 +{\fonttbl +{\f0\fnil Arial;} +{\f1\fnil\fcharset204 times new roman;} +{\f2\fnil\fcharset204 cambria;} +{\f3\fnil\fcharset238 cambria;} +{\f4\fnil\fcharset0 cambria;} +{\f5\fnil\fcharset204 courier new;} +{\f6\fnil\fcharset204 arial;} +} +{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;} +\pard\plain Before\plain \super \chftn +{\footnote +\pard Footnote.} +\plain after.\par} diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf86182.rtf libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf86182.rtf --- libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf86182.rtf 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf86182.rtf 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,4 @@ +{\rtf1 +\rtlpar +\u1662\'3f\u1587\'3f +\par} diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf86814.rtf libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf86814.rtf --- libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf86814.rtf 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf86814.rtf 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,8 @@ +{\rtf1 +{\stylesheet +{\s0 Normal;} +{\s23\sbasedon0\snext23\sl288\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb100\sa100\ltrpar\b\dbch\af10\langfe1049\dbch\af11\afs20\alang1025\ab\loch\f5\fs20\lang1049 Style 23;} +} +\pard\plain \s23\sl288\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb100\sa100\ltrpar\b\dbch\af10\langfe1049\dbch\af11\afs20\alang1025\ab\loch\f5\fs20\lang1049\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0 +{\b\langfe1049\dbch\af11\afs20\alang1025\ab\rtlch \ltrch\loch\fs20\lang1049 hello} +\par} diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf90046.rtf libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf90046.rtf --- libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf90046.rtf 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf90046.rtf 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,8 @@ +{\rtf1\ansi\deflang1035 +{\fonttbl {\f0\fcharset0 Arial;} } + +\pard\ltrpar\uc1\lang1035 +{\super \chftn +{\footnote {\pard\plain\super \chftn }{\plain\ltrch\f0 \fs18 \cf1 \uc0\u77 \u97 } +}} +} diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf90260-nopar.rtf libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf90260-nopar.rtf --- libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf90260-nopar.rtf 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf90260-nopar.rtf 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,2 @@ +{\rtf1\ansi\ansicpg1252\deff0\deflang1035{\fonttbl{\f0\fnil\fcharset0 Calibri;}} +\uc1\pard\sa200\sl276\slmult1\lang11\f0\fs22 simple} diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf90260-par.rtf libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf90260-par.rtf --- libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf90260-par.rtf 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf90260-par.rtf 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,2 @@ +{\rtf1\ansi\ansicpg1252\deff0\deflang1035{\fonttbl{\f0\fnil\fcharset0 Calibri;}} +\uc1\pard\sa200\sl276\slmult1\lang11\f0\fs22 simple\par} diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf90315.rtf libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf90315.rtf --- libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf90315.rtf 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf90315.rtf 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,4 @@ +{\rtf1\cols2 +foo\par +bar\par +} diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf91074.rtf libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf91074.rtf --- libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf91074.rtf 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf91074.rtf 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,7 @@ +{\rtf1\ansi\ansicpg1252\deff0\deftab720 +{\*\do\dobxpage\dobypage\dodhgt8192\dptxbx +{\dptxbxtext\pard\plain +inner\par } +\dpx674\dpy725\dpxsize1875\dpysize1020\dplinecor255\dplinecog0\dplinecob0\dplinew40\dpfillfgcr0\dpfillfgcg0\dpfillfgcb0\dpfillbgcr0\dpfillbgcg0\dpfillbgcb0\dpfillpat0} +\par +outer\par} diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf92061.rtf libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf92061.rtf --- libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/data/tdf92061.rtf 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/data/tdf92061.rtf 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,5 @@ +{\rtf1 +body-before +{\footnote AAAAA {B} C} +body-after\par +} diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/rtfimport.cxx libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/rtfimport.cxx --- libreoffice-l10n-4.4.2/sw/qa/extras/rtfimport/rtfimport.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/rtfimport/rtfimport.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -45,6 +45,7 @@ #include #include #include +#include #include #include @@ -2224,6 +2225,15 @@ CPPUNIT_ASSERT_EQUAL(aExpected, xTextRange->getString()); } +DECLARE_RTFIMPORT_TEST(testTdf90046, "tdf90046.rtf") +{ + // this was crashing on importing the footnote + uno::Reference xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFootnotes(xFootnotesSupplier->getFootnotes(), uno::UNO_QUERY); + uno::Reference xTextRange(xFootnotes->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Ma"), xTextRange->getString()); +} + DECLARE_RTFIMPORT_TEST(testFdo85889mac, "fdo85889-mac.rtf") { uno::Reference xTextRange = getRun(getParagraph(1), 1); @@ -2252,6 +2262,68 @@ CPPUNIT_ASSERT_EQUAL(static_cast(4), xDrawPage->getCount()); } +DECLARE_RTFIMPORT_TEST(testFdo75614, "tdf75614.rtf") +{ + // Text after the footnote was missing, so this resulted in a css::container::NoSuchElementException. + CPPUNIT_ASSERT_EQUAL(OUString("after."), getRun(getParagraph(1), 3)->getString()); +} + +DECLARE_RTFIMPORT_TEST(testTdf86182, "tdf86182.rtf") +{ + // Writing mode was the default, i.e. text::WritingMode2::CONTEXT. + CPPUNIT_ASSERT_EQUAL(text::WritingMode2::RL_TB, getProperty(getParagraph(1), "WritingMode")); +} + +DECLARE_RTFIMPORT_TEST(testTdf91074, "tdf91074.rtf") +{ + // The file failed to load, as the border color was imported using the LineColor UNO property. + uno::Reference xShape = getShape(1); + CPPUNIT_ASSERT_EQUAL(static_cast(COL_LIGHTRED), getProperty(xShape, "TopBorder").Color); +} + +DECLARE_RTFIMPORT_TEST(testTdf90260Nopar, "hello.rtf") +{ +#if !defined WNT + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText(xTextDocument->getText(), uno::UNO_QUERY); + uno::Reference xEnd = xText->getEnd(); + paste("tdf90260-nopar.rtf", xEnd); + CPPUNIT_ASSERT_EQUAL(1, getParagraphs()); +#endif +} + +DECLARE_RTFIMPORT_TEST(testTdf90260Par, "hello.rtf") +{ +#if !defined WNT + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText(xTextDocument->getText(), uno::UNO_QUERY); + uno::Reference xEnd = xText->getEnd(); + paste("tdf90260-par.rtf", xEnd); + CPPUNIT_ASSERT_EQUAL(2, getParagraphs()); +#endif +} + +DECLARE_RTFIMPORT_TEST(testTdf86814, "tdf86814.rtf") +{ + // This was awt::FontWeight::NORMAL, i.e. the first run wasn't bold, when it should be bold (applied paragraph style with direct formatting). + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty(getRun(getParagraph(1), 1), "CharWeight")); +} + +DECLARE_RTFIMPORT_TEST(testTdf90315, "tdf90315.rtf") +{ + uno::Reference xTextSectionsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTextSections(xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY); + uno::Reference xTextSection(xTextSections->getByIndex(0), uno::UNO_QUERY); + // This was 0, but default should be 720 twips. + CPPUNIT_ASSERT_EQUAL(static_cast(1270), getProperty(xTextSection->getPropertyValue("TextColumns"), "AutomaticDistance")); +} + +DECLARE_RTFIMPORT_TEST(testTdf92061, "tdf92061.rtf") +{ + // This was "C", i.e. part of the footnote ended up in the body text. + CPPUNIT_ASSERT_EQUAL(OUString("body-after"), getRun(getParagraph(1), 3)->getString()); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/uiwriter/data/redlineFrame.fodt libreoffice-l10n-4.4.6~rc3/sw/qa/extras/uiwriter/data/redlineFrame.fodt --- libreoffice-l10n-4.4.2/sw/qa/extras/uiwriter/data/redlineFrame.fodt 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/uiwriter/data/redlineFrame.fodt 2015-10-27 20:55:54.000000000 +0000 @@ -0,0 +1,81 @@ + + + + ms 2015-08-24T21:49:45.305718699LibreOfficeDev/4.3.7.2$Linux_X86_64 LibreOffice_project/8a35821d8636a03b8bf4e15b48f59794652c68ba + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ms + 2015-09-10T15:36:00 + + + + + + + ms + 2015-09-10T15:36:00 + + + Removed text + + + + Added text + + + + Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/uiwriter/data/tdf89720.odt and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/uiwriter/data/tdf89720.odt differ diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/uiwriter/uiwriter.cxx libreoffice-l10n-4.4.6~rc3/sw/qa/extras/uiwriter/uiwriter.cxx --- libreoffice-l10n-4.4.2/sw/qa/extras/uiwriter/uiwriter.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/uiwriter/uiwriter.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -7,6 +7,7 @@ */ #include +#include #include #include #include @@ -22,6 +23,9 @@ #include #include #include +#include +#include +#include #include #include @@ -38,6 +42,7 @@ //Regression test of fdo#70143 //EDITING: undo search&replace corrupt text when searching backward void testReplaceBackward(); + void testRedlineFrame(); void testFdo69893(); void testFdo70807(); void testImportRTF(); @@ -59,10 +64,13 @@ void testFdo85554(); void testBookmarkUndo(); void testCp1000115(); + void testDde(); + void testTdf89720(); CPPUNIT_TEST_SUITE(SwUiWriterTest); CPPUNIT_TEST(testReplaceForward); CPPUNIT_TEST(testReplaceBackward); + CPPUNIT_TEST(testRedlineFrame); CPPUNIT_TEST(testFdo69893); CPPUNIT_TEST(testFdo70807); CPPUNIT_TEST(testImportRTF); @@ -84,6 +92,8 @@ CPPUNIT_TEST(testFdo85554); CPPUNIT_TEST(testBookmarkUndo); CPPUNIT_TEST(testCp1000115); + CPPUNIT_TEST(testDde); + CPPUNIT_TEST(testTdf89720); CPPUNIT_TEST_SUITE_END(); @@ -136,6 +146,31 @@ CPPUNIT_ASSERT_EQUAL(ORIGINAL_REPLACE_CONTENT, pTxtNode->GetTxt()); } +void SwUiWriterTest::testRedlineFrame() +{ + SwDoc * pDoc(createDoc("redlineFrame.fodt")); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + + uno::Reference xDrawPageSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); + // there is exactly one frame + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xDrawPage->getCount()); + + sal_uInt16 nMode = pWrtShell->GetRedlineMode(); + CPPUNIT_ASSERT(nMode & nsRedlineMode_t::REDLINE_SHOW_DELETE); + + // hide delete redlines + pWrtShell->SetRedlineMode(nMode & ~nsRedlineMode_t::REDLINE_SHOW_DELETE); + + // there is still exactly one frame + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xDrawPage->getCount()); + + pWrtShell->SetRedlineMode(nMode); // show again + + // there is still exactly one frame + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xDrawPage->getCount()); +} + void SwUiWriterTest::testFdo75110() { SwDoc* pDoc = createDoc("fdo75110.odt"); @@ -639,6 +674,59 @@ xmlXPathFreeObject(pXmlObj); } +void lcl_dispatchCommand(const uno::Reference& xComponent, const OUString& rCommand, const uno::Sequence& rPropertyValues) +{ + uno::Reference xController = uno::Reference(xComponent, uno::UNO_QUERY)->getCurrentController(); + CPPUNIT_ASSERT(xController.is()); + uno::Reference xFrame(xController->getFrame(), uno::UNO_QUERY); + CPPUNIT_ASSERT(xFrame.is()); + + uno::Reference xContext = ::comphelper::getProcessComponentContext(); + uno::Reference xDispatchHelper(frame::DispatchHelper::create(xContext)); + CPPUNIT_ASSERT(xDispatchHelper.is()); + + xDispatchHelper->executeDispatch(xFrame, rCommand, OUString(), 0, rPropertyValues); +} + +void SwUiWriterTest::testDde() +{ + // Type asdf and copy it. + SwDoc* pDoc = createDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->Insert("asdf"); + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 4, /*bBasicCall=*/false); + uno::Sequence aPropertyValues; + lcl_dispatchCommand(mxComponent, ".uno:Copy", aPropertyValues); + + // Go before the selection and paste as a DDE link. + pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false); + aPropertyValues = uno::Sequence(1); + aPropertyValues[0].Name = "SelectedFormat"; + aPropertyValues[0].Value = uno::makeAny(static_cast(SOT_FORMATSTR_ID_LINK)); + lcl_dispatchCommand(mxComponent, ".uno:ClipboardFormatItems", aPropertyValues); + + // Make sure that the document starts with a field now, and its expanded string value contains asdf. + const uno::Reference< text::XTextRange > xField = getRun(getParagraph(1), 1); + CPPUNIT_ASSERT_EQUAL(OUString("TextField"), getProperty(xField, "TextPortionType")); + CPPUNIT_ASSERT(xField->getString().endsWith("asdf")); +} + +void SwUiWriterTest::testTdf89720() +{ +#ifndef MACOSX + SwDoc* pDoc = createDoc("tdf89720.odt"); + SwView* pView = pDoc->GetDocShell()->GetView(); + SwPostItMgr* pPostItMgr = pView->GetPostItMgr(); + for (SwSidebarItem* pItem : *pPostItMgr) + { + if (pItem->pPostIt->IsFollow()) + // This was non-0: reply comments had a text range overlay, + // resulting in unexpected dark color. + CPPUNIT_ASSERT(!pItem->pPostIt->TextRange()); + } +#endif +} + CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest); CPPUNIT_PLUGIN_IMPLEMENT(); Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ww8export/data/tdf92281.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ww8export/data/tdf92281.doc differ diff -Nru libreoffice-l10n-4.4.2/sw/qa/extras/ww8export/ww8export.cxx libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ww8export/ww8export.cxx --- libreoffice-l10n-4.4.2/sw/qa/extras/ww8export/ww8export.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ww8export/ww8export.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -440,6 +440,14 @@ CPPUNIT_ASSERT_EQUAL(style::NumberingType::NUMBER_LOWER_ZH, numFormat); } +DECLARE_WW8EXPORT_TEST(testTdf92281, "tdf92281.doc") +{ + uno::Reference xRun(getRun(getParagraph(1),1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Wingdings"), getProperty(xRun, "CharFontName")); + CPPUNIT_ASSERT_EQUAL(OUString("Wingdings"), getProperty(xRun, "CharFontNameAsian")); + CPPUNIT_ASSERT_EQUAL(OUString("Wingdings"), getProperty(xRun, "CharFontNameComplex")); +} + DECLARE_WW8EXPORT_TEST(testCommentedTable, "commented-table.doc") { // Document has a non-trivial commented text range, as the range contains a table. Binary files /tmp/jLsjVEpv0V/libreoffice-l10n-4.4.2/sw/qa/extras/ww8import/data/fdo68963.doc and /tmp/KfPO2zbHWg/libreoffice-l10n-4.4.6~rc3/sw/qa/extras/ww8import/data/fdo68963.doc differ diff -Nru libreoffice-l10n-4.4.2/sw/source/core/access/acccontext.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/access/acccontext.cxx --- libreoffice-l10n-4.4.2/sw/source/core/access/acccontext.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/access/acccontext.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1167,12 +1167,9 @@ FireVisibleDataEvent(); } - if( !bIsNewShowingState && - SwAccessibleChild( GetParent() ).IsVisibleChildrenOnly() ) - { - return; - } - + // note: InvalidatePosOrSize must call _InvalidateContent so that + // SwAccessibleParagraph updates its portions, or dispose it + // (see accmap.cxx: INVALID_CONTENT is contained in POS_CHANGED) _InvalidateContent( true ); } diff -Nru libreoffice-l10n-4.4.2/sw/source/core/access/accnotextframe.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/access/accnotextframe.cxx --- libreoffice-l10n-4.4.2/sw/source/core/access/accnotextframe.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/access/accnotextframe.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -102,6 +102,9 @@ return; // probably was deleted - avoid doing anything } + if (nWhich != RES_TITLE_CHANGED && nWhich != RES_DESCRIPTION_CHANGED) + return; + const SwNoTxtNode *pNd = GetNoTxtNode(); OSL_ENSURE( pNd == aDepend.GetRegisteredIn(), "invalid frame" ); switch( nWhich ) diff -Nru libreoffice-l10n-4.4.2/sw/source/core/bastyp/index.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/bastyp/index.cxx --- libreoffice-l10n-4.4.2/sw/source/core/bastyp/index.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/bastyp/index.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -81,6 +81,7 @@ assert(m_pIndexReg == rIdx.m_pIndexReg); if (!m_pIndexReg) { + m_nIndex = 0; return *this; // no IndexReg => no list to sort into; m_nIndex is 0 } SwIndex* pFnd = const_cast(&rIdx); diff -Nru libreoffice-l10n-4.4.2/sw/source/core/crsr/crossrefbookmark.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/crsr/crossrefbookmark.cxx --- libreoffice-l10n-4.4.2/sw/source/core/crsr/crossrefbookmark.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/crsr/crossrefbookmark.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -84,7 +84,7 @@ const vcl::KeyCode& rCode, const OUString& rName, const OUString& rShortName) - : CrossRefBookmark(rPaM, rCode, rName, rShortName, IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix()) + : CrossRefBookmark(rPaM, rCode, rName, rShortName, CrossRefNumItemBookmark_NamePrefix) { } bool CrossRefNumItemBookmark::IsLegalName(const OUString& rName) diff -Nru libreoffice-l10n-4.4.2/sw/source/core/crsr/crsrsh.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/crsr/crsrsh.cxx --- libreoffice-l10n-4.4.2/sw/source/core/crsr/crsrsh.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/crsr/crsrsh.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1742,12 +1742,14 @@ aTmpState.pSpecialPos = &aSpecialPos; } + ++mnStartAction; // tdf#91602 prevent recursive Action! if( !pFrm->GetCharRect( m_aCharRect, *pShellCrsr->GetPoint(), &aTmpState ) ) { Point& rPt = pShellCrsr->GetPtPos(); rPt = m_aCharRect.Center(); pFrm->GetCrsrOfst( pShellCrsr->GetPoint(), rPt, &aTmpState ); } + --mnStartAction; if( !pShellCrsr->HasMark() ) m_aCrsrHeight = aTmpState.aRealHeight; diff -Nru libreoffice-l10n-4.4.2/sw/source/core/doc/docbm.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/docbm.cxx --- libreoffice-l10n-4.4.2/sw/source/core/doc/docbm.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/docbm.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -354,7 +354,8 @@ ::sw::mark::IMark* MarkManager::makeMark(const SwPaM& rPaM, const OUString& rName, - const IDocumentMarkAccess::MarkType eType) + const IDocumentMarkAccess::MarkType eType, + bool const isHorribleHackIgnoreDuplicates) { #if 0 { @@ -377,7 +378,8 @@ " - more than USHRT_MAX marks are not supported correctly"); // There should only be one CrossRefBookmark per Textnode per Type if ((eType == CROSSREF_NUMITEM_BOOKMARK || eType == CROSSREF_HEADING_BOOKMARK) - && (lcl_FindMarkAtPos(m_vBookmarks, *rPaM.GetPoint(), eType) != m_vBookmarks.end())) + && (lcl_FindMarkAtPos(m_vBookmarks, *rPaM.Start(), eType) != m_vBookmarks.end()) + && !isHorribleHackIgnoreDuplicates) { // this can happen via UNO API SAL_WARN("sw.core", "MarkManager::makeMark(..)" " - refusing to create duplicate CrossRefBookmark"); diff -Nru libreoffice-l10n-4.4.2/sw/source/core/doc/doclay.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/doclay.cxx --- libreoffice-l10n-4.4.2/sw/source/core/doc/doclay.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/doclay.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1533,18 +1533,17 @@ checkFmts.push_back( pFmt ); } #endif - SwFrmFmtAnchorMap::const_iterator_pair range = GetFrmFmtAnchorMap()->equal_range( SwNodeIndex( *pFlyNd )); - SwFrmFmtAnchorMap::const_iterator it; - for( it = range.first; - it != range.second; - ++it ) + std::vector const*const pFlys(pFlyNd->GetAnchoredFlys()); + bool bFound(false); + for (size_t i = 0; pFlys && i < pFlys->size(); ++i) { - const SwFrmFmt* pFmt = it->second; + const SwFrmFmt *const pFmt = (*pFlys)[i]; const SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx(); if( pIdx && pFlyNd == &pIdx->GetNode() ) { #if OSL_DEBUG_LEVEL > 0 - std::list::iterator checkPos = std::find( checkFmts.begin(), checkFmts.end(), pFmt ); + std::list::iterator checkPos = std::find( + checkFmts.begin(), checkFmts.end(), pFmt ); assert( checkPos != checkFmts.end()); checkFmts.erase( checkPos ); #endif @@ -1557,17 +1556,15 @@ pNd = &rAnchor.GetCntntAnchor()->nNode.GetNode(); pFlyNd = pNd->FindFlyStartNode(); + bFound = true; break; } } - if( it == range.second ) + if (!bFound) { - OSL_ENSURE( mbInReading, "Found a FlySection but not a Format!" ); + OSL_ENSURE(mbInReading, "Found a FlySection but not a Format!"); return false; } -#if OSL_DEBUG_LEVEL > 0 - assert( checkFmts.empty()); -#endif } return 0 != pNd->FindHeaderStartNode() || diff -Nru libreoffice-l10n-4.4.2/sw/source/core/doc/docnew.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/docnew.cxx --- libreoffice-l10n-4.4.2/sw/source/core/doc/docnew.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/docnew.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -231,7 +231,6 @@ mpDfltTxtFmtColl( new SwTxtFmtColl( GetAttrPool(), sTxtCollStr ) ), mpDfltGrfFmtColl( new SwGrfFmtColl( GetAttrPool(), sGrfCollStr ) ), mpFrmFmtTbl( new SwFrmFmts() ), - mpFrmFmtAnchorMap( new SwFrmFmtAnchorMap( this ) ), mpCharFmtTbl( new SwCharFmts() ), mpSpzFrmFmtTbl( new SwFrmFmts() ), mpSectionFmtTbl( new SwSectionFmts() ), @@ -610,7 +609,6 @@ delete mpDfltCharFmt; delete mpDfltFrmFmt; delete mpLayoutCache; - delete mpFrmFmtAnchorMap; SfxItemPool::Free(mpAttrPool); } @@ -937,6 +935,7 @@ SwPageDesc *const pTargetPageDesc, bool const bDeletePrevious, int pageOffset) { // GetEndOfExtras + 1 = StartOfContent == no content node! + // this ensures, that we have at least two nodes in the SwPaM. // @see IDocumentContentOperations::CopyRange SwNodeIndex aSourceIdx( rSource.GetNodes().GetEndOfExtras(), 1 ); SwNodeIndex aSourceEndIdx( rSource.GetNodes().GetEndOfContent(), -1 ); @@ -985,6 +984,32 @@ if ( pTargetPageDesc ) { OUString name = pTargetPageDesc->GetName(); pTargetShell->InsertPageBreak( &name, nStartPageNumber ); + + // There is now a new empty text node on the new page. If it has + // any marks, those are from the previous page: move them back + // there, otherwise later we can't delete that empty text node. + SwNodeIndex aNodeIndex(GetNodes().GetEndOfContent(), -1); + if (SwTxtNode* pTxtNode = aNodeIndex.GetNode().GetTxtNode()) + { + // Position of the last paragraph on the previous page. + --aNodeIndex; + SwPaM aPaM(aNodeIndex); + // Collect the marks starting or ending at this text node. + std::set aSeenMarks; + IDocumentMarkAccess* pMarkAccess = getIDocumentMarkAccess(); + for (const SwIndex* pIndex = pTxtNode->GetFirstIndex(); pIndex; pIndex = pIndex->GetNext()) + { + sw::mark::IMark* pMark = const_cast(pIndex->GetMark()); + if (!pMark) + continue; + if (aSeenMarks.find(pMark) != aSeenMarks.end()) + continue; + aSeenMarks.insert(pMark); + } + // And move them back. + for (sw::mark::IMark* pMark : aSeenMarks) + pMarkAccess->repositionMark(pMark, aPaM); + } } } #ifdef DBG_UTIL diff -Nru libreoffice-l10n-4.4.2/sw/source/core/doc/docnum.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/docnum.cxx --- libreoffice-l10n-4.4.2/sw/source/core/doc/docnum.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/docnum.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -828,13 +828,15 @@ rDoc.UpdateNumRule(); } -void SwDoc::SetNumRule( const SwPaM& rPam, +OUString SwDoc::SetNumRule( const SwPaM& rPam, const SwNumRule& rRule, const bool bCreateNewList, const OUString& sContinuedListId, bool bSetItem, const bool bResetIndentAttrs ) { + OUString sListId; + SwUndoInsNum * pUndo = NULL; if (GetIDocumentUndoRedo().DoesUndo()) { @@ -868,7 +870,6 @@ if ( bSetItem ) { - OUString sListId; if ( bCreateNewList ) { if ( bNewNumRuleCreated ) @@ -947,8 +948,9 @@ } getIDocumentState().SetModified(); -} + return sListId; +} void SwDoc::SetCounted(const SwPaM & rPam, bool bCounted) { @@ -2186,13 +2188,13 @@ OUString SwDoc::GetUniqueNumRuleName( const OUString* pChkStr, bool bAutoNum ) const { - if( IsInMailMerge()) + // If we got pChkStr, then the caller expects that in case it's not yet + // used, it'll be returned. + if( IsInMailMerge() && !pChkStr ) { OUString newName = "MailMergeNumRule" + OStringToOUString( DateTimeToOString( DateTime( DateTime::SYSTEM )), RTL_TEXTENCODING_ASCII_US ) + OUString::number( mpNumRuleTbl->size() + 1 ); - if( pChkStr ) - newName += *pChkStr; return newName; } diff -Nru libreoffice-l10n-4.4.2/sw/source/core/doc/docredln.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/docredln.cxx --- libreoffice-l10n-4.4.2/sw/source/core/doc/docredln.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/docredln.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -121,7 +121,7 @@ */ } - for(sal_uInt16 nCurRedlinePos = 0; nCurRedlinePos < GetSize(); ++nCurRedlinePos ) + for (sal_uInt16 nCurRedlinePos = 0; nCurRedlinePos < GetSize(); ) { SwExtraRedline* pExtraRedline = GetRedline(nCurRedlinePos); const SwTableCellRedline* pTableCellRedline = dynamic_cast(pExtraRedline); @@ -136,11 +136,13 @@ sal_uInt16 nRedlineType = aRedlineData.GetType(); // Check if this redline object type should be deleted - if( USHRT_MAX != nRedlineTypeToDelete && nRedlineTypeToDelete != nRedlineType ) - continue; + if (USHRT_MAX == nRedlineTypeToDelete || nRedlineTypeToDelete == nRedlineType) + { - DeleteAndDestroy( nCurRedlinePos ); - bChg = true; + DeleteAndDestroy( nCurRedlinePos ); + bChg = true; + continue; // don't increment position after delete + } } } else @@ -158,14 +160,17 @@ sal_uInt16 nRedlineType = aRedlineData.GetType(); // Check if this redline object type should be deleted - if( USHRT_MAX != nRedlineTypeToDelete && nRedlineTypeToDelete != nRedlineType ) - continue; + if (USHRT_MAX == nRedlineTypeToDelete || nRedlineTypeToDelete == nRedlineType) - DeleteAndDestroy( nCurRedlinePos ); - bChg = true; + { + DeleteAndDestroy( nCurRedlinePos ); + bChg = true; + continue; // don't increment position after delete + } } } } + ++nCurRedlinePos; } if( bChg ) diff -Nru libreoffice-l10n-4.4.2/sw/source/core/doc/DocumentContentOperationsManager.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/DocumentContentOperationsManager.cxx --- libreoffice-l10n-4.4.2/sw/source/core/doc/DocumentContentOperationsManager.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/DocumentContentOperationsManager.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1585,7 +1585,7 @@ bool bColumnSel = pDoc->IsClipBoard() && pDoc->IsColumnSelection(); // Catch if there's no copy to do - if( !rPam.HasMark() || ( *pStt > *pEnd && !bColumnSel ) ) + if( !rPam.HasMark() || ( *pStt >= *pEnd && !bColumnSel ) ) return false; // Prevent copying in Flys that are anchored in the area @@ -3110,8 +3110,7 @@ const SwPaM* pCopiedPaM, const bool bMakeNewFrms, const bool bDelRedlines, - const bool bCopyFlyAtFly, - const bool bMergedFirstNode ) const + const bool bCopyFlyAtFly ) const { SwDoc* pDest = rInsPos.GetNode().GetDoc(); @@ -3119,17 +3118,13 @@ SwNodeIndex aSavePos( rInsPos, -1 ); bool bEndIsEqualEndPos = rInsPos == rRg.aEnd; - SwNodeRange aRg( rRg ); - if ( bMergedFirstNode ) - aRg.aStart++; - if ( aRg.aStart <= aRg.aEnd ) - m_rDoc.GetNodes()._CopyNodes( aRg, rInsPos, bMakeNewFrms, true ); - if ( !bMergedFirstNode ) - ++aSavePos; - if ( bEndIsEqualEndPos ) + m_rDoc.GetNodes()._CopyNodes( rRg, rInsPos, bMakeNewFrms, true ); + ++aSavePos; + if( bEndIsEqualEndPos ) ((SwNodeIndex&)rRg.aEnd) = aSavePos; aRedlRest.Restore(); + #if OSL_DEBUG_LEVEL > 0 { //JP 17.06.99: Bug 66973 - check count only if the selection is in @@ -3143,9 +3138,9 @@ !aTmpI.GetNode().IsEndNode() ) { // If the range starts with a SwStartNode, it isn't copied - sal_uInt16 offset = (aRg.aStart.GetNode().GetNodeType() != ND_STARTNODE) ? 1 : 0; + sal_uInt16 offset = (rRg.aStart.GetNode().GetNodeType() != ND_STARTNODE) ? 1 : 0; OSL_ENSURE( rInsPos.GetIndex() - aSavePos.GetIndex() == - aRg.aEnd.GetIndex() - aRg.aStart.GetIndex() - 1 + offset, + rRg.aEnd.GetIndex() - rRg.aStart.GetIndex() - 1 + offset, "An insufficient number of nodes were copied!" ); } } @@ -3153,7 +3148,7 @@ { ::sw::UndoGuard const undoGuard(pDest->GetIDocumentUndoRedo()); - CopyFlyInFlyImpl( rRg, nEndContentIndex, aSavePos, bCopyFlyAtFly, bMergedFirstNode ); + CopyFlyInFlyImpl( rRg, nEndContentIndex, aSavePos, bCopyFlyAtFly ); } SwNodeRange aCpyRange( aSavePos, rInsPos ); @@ -3179,8 +3174,7 @@ const SwNodeRange& rRg, const sal_Int32 nEndContentIndex, const SwNodeIndex& rStartIdx, - const bool bCopyFlyAtFly, - const bool bMergedFirstNode ) const + const bool bCopyFlyAtFly ) const { // First collect all Flys, sort them according to their ordering number, // and then only copy them. This maintains the ordering numbers (which are only @@ -3301,9 +3295,6 @@ ++aIdx; } - if ( bMergedFirstNode ) - nAnchorTxtNdNumInRange--; - if ( !bAnchorTxtNdFound ) { // This case can *not* happen, but to be robust take the first @@ -4072,7 +4063,7 @@ SwPosition* pEnd = rPam.End(); // Catch when there's no copy to do. - if( !rPam.HasMark() || ( *pStt > *pEnd && !bColumnSel ) || + if( !rPam.HasMark() || ( *pStt >= *pEnd && !bColumnSel ) || //JP 29.6.2001: 88963 - dont copy if inspos is in region of start to end //JP 15.11.2001: don't test inclusive the end, ever exclusive ( pDoc == &m_rDoc && *pStt <= rPos && rPos < *pEnd )) @@ -4160,8 +4151,6 @@ pNumRuleToPropagate = 0; } - bool bHandledStartNode = false; - // This do/while block is only there so that we can break out of it! do { if( pSttTxtNd ) @@ -4169,8 +4158,6 @@ // Don't copy the beginning completely? if( !bCopyCollFmt || bColumnSel || pStt->nContent.GetIndex() ) { - bHandledStartNode = true; - SwIndex aDestIdx( rPos.nContent ); bool bCopyOk = false; if( !pDestTxtNd ) @@ -4246,11 +4233,18 @@ pEnd->nContent -= nCpyLen; } - if( bCopyCollFmt && bOneNode ) + if( bOneNode ) { - pSttTxtNd->CopyCollFmt( *pDestTxtNd ); - POP_NUMRULE_STATE + if( bCopyCollFmt ) + { + pSttTxtNd->CopyCollFmt( *pDestTxtNd ); + POP_NUMRULE_STATE + } + + break; } + + aRg.aStart++; } } else if( pDestTxtNd ) @@ -4307,7 +4301,7 @@ } pDestTxtNd = aInsPos.GetNode().GetTxtNode(); - if( pEndTxtNd && (!bOneNode || !bHandledStartNode) ) + if( pEndTxtNd ) { SwIndex aDestIdx( rPos.nContent ); if( !pDestTxtNd ) @@ -4351,7 +4345,7 @@ if( bCopyAll || aRg.aStart != aRg.aEnd ) { SfxItemSet aBrkSet( pDoc->GetAttrPool(), aBreakSetRange ); - if( !bOneNode && pSttTxtNd && bCopyCollFmt && pDestTxtNd->HasSwAttrSet() ) + if( pSttTxtNd && bCopyCollFmt && pDestTxtNd->HasSwAttrSet() ) { aBrkSet.Put( *pDestTxtNd->GetpSwAttrSet() ); if( SfxItemState::SET == aBrkSet.GetItemState( RES_BREAK, false ) ) @@ -4363,15 +4357,13 @@ if( aInsPos == pEnd->nNode ) { SwNodeIndex aSaveIdx( aInsPos, -1 ); - CopyWithFlyInFly( aRg, 0, aInsPos, &rPam, bMakeNewFrms, - false, false, bHandledStartNode ); + CopyWithFlyInFly( aRg, 0,aInsPos, &rPam, bMakeNewFrms, false ); ++aSaveIdx; pEnd->nNode = aSaveIdx; pEnd->nContent.Assign( aSaveIdx.GetNode().GetTxtNode(), 0 ); } else - CopyWithFlyInFly( aRg, pEnd->nContent.GetIndex(), aInsPos, &rPam, - bMakeNewFrms, false, false, bHandledStartNode ); + CopyWithFlyInFly( aRg, pEnd->nContent.GetIndex(), aInsPos, &rPam, bMakeNewFrms, false ); bCopyBookmarks = false; diff -Nru libreoffice-l10n-4.4.2/sw/source/core/doc/DocumentLayoutManager.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/DocumentLayoutManager.cxx --- libreoffice-l10n-4.4.2/sw/source/core/doc/DocumentLayoutManager.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/DocumentLayoutManager.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -496,7 +496,14 @@ // If the draw format has a TextBox, then copy its fly format as well. if (SwFrmFmt* pSourceTextBox = SwTextBoxHelper::findTextBox(&rSource)) { - SwFrmFmt* pDestTextBox = CopyLayoutFmt(*pSourceTextBox, rNewAnchor, bSetTxtFlyAtt, bMakeFrms); + SwFmtAnchor boxAnchor(rNewAnchor); + if (FLY_AS_CHAR == boxAnchor.GetAnchorId()) + { + // AS_CHAR *must not* be set on textbox fly-frame + boxAnchor.SetType(FLY_AT_CHAR); + } + SwFrmFmt* pDestTextBox = CopyLayoutFmt(*pSourceTextBox, + boxAnchor, bSetTxtFlyAtt, bMakeFrms); SwAttrSet aSet(pDest->GetAttrSet()); SwFmtCntnt aCntnt(pDestTextBox->GetCntnt().GetCntntIdx()->GetNode().GetStartNode()); aSet.Put(aCntnt); diff -Nru libreoffice-l10n-4.4.2/sw/source/core/doc/DocumentLinksAdministrationManager.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/DocumentLinksAdministrationManager.cxx --- libreoffice-l10n-4.4.2/sw/source/core/doc/DocumentLinksAdministrationManager.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/DocumentLinksAdministrationManager.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -44,6 +44,7 @@ #include #include #include +#include //#include #include @@ -97,9 +98,8 @@ ppMark != rMarkAccess.getAllMarksEnd(); ++ppMark) { - if ( IDocumentMarkAccess::GetType( *(ppMark->get()) ) == IDocumentMarkAccess::DDE_BOOKMARK) + if (::sw::mark::DdeBookmark* const pBkmk = dynamic_cast< ::sw::mark::DdeBookmark*>(ppMark->get())) { - ::sw::mark::DdeBookmark* const pBkmk = dynamic_cast< ::sw::mark::DdeBookmark*>(ppMark->get()); if (!pBkmk) return NULL; if ( @@ -224,6 +224,15 @@ case document::UpdateDocMode::QUIET_UPDATE:bAskUpdate = false; break; case document::UpdateDocMode::FULL_UPDATE: bAskUpdate = true; break; } + if (nLinkMode == AUTOMATIC && !bAskUpdate) + { + SfxMedium * medium = m_rDoc.GetDocShell()->GetMedium(); + if (!SvtSecurityOptions().isTrustedLocationUriForUpdatingLinks( + medium == nullptr ? OUString() : medium->GetName())) + { + bAskUpdate = true; + } + } if( bUpdate && (bUI || !bAskUpdate) ) { SfxMedium* pMedium = m_rDoc.GetDocShell()->GetMedium(); diff -Nru libreoffice-l10n-4.4.2/sw/source/core/doc/DocumentRedlineManager.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/DocumentRedlineManager.cxx --- libreoffice-l10n-4.4.2/sw/source/core/doc/DocumentRedlineManager.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/DocumentRedlineManager.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1971,7 +1971,7 @@ if( !pRedl->HasValidRange() ) { // re-insert - mpRedlineTbl->Remove( pRedl ); + mpRedlineTbl->Remove( n ); mpRedlineTbl->Insert( pRedl ); --n; } diff -Nru libreoffice-l10n-4.4.2/sw/source/core/doc/DocumentSettingManager.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/DocumentSettingManager.cxx --- libreoffice-l10n-4.4.2/sw/source/core/doc/DocumentSettingManager.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/DocumentSettingManager.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -81,6 +81,7 @@ mbTabOverMargin(false), mbSurroundTextWrapSmall(false), mbPropLineSpacingShrinksFirstLine(true), + mbSubtractFlys(false), mApplyParagraphMarkFormatToNumbering(false), mbLastBrowseMode( false ) @@ -156,6 +157,7 @@ case TAB_OVER_MARGIN: return mbTabOverMargin; case SURROUND_TEXT_WRAP_SMALL: return mbSurroundTextWrapSmall; case PROP_LINE_SPACING_SHRINKS_FIRST_LINE: return mbPropLineSpacingShrinksFirstLine; + case SUBTRACT_FLYS: return mbSubtractFlys; case BROWSE_MODE: return mbLastBrowseMode; // Attention: normally the SwViewShell has to be asked! case HTML_MODE: return mbHTMLMode; @@ -322,6 +324,10 @@ mbPropLineSpacingShrinksFirstLine = value; break; + case SUBTRACT_FLYS: + mbSubtractFlys = value; + break; + // COMPATIBILITY FLAGS END case BROWSE_MODE: //can be used temporary (load/save) when no SwViewShell is available diff -Nru libreoffice-l10n-4.4.2/sw/source/core/doc/extinput.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/extinput.cxx --- libreoffice-l10n-4.4.2/sw/source/core/doc/extinput.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/extinput.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -59,6 +59,9 @@ sal_Int32 nEndCnt = GetMark()->nContent.GetIndex(); if( nEndCnt != nSttCnt ) { + // Prevent IME edited text being grouped with non-IME edited text. + bool bKeepGroupUndo = pDoc->GetIDocumentUndoRedo().DoesGroupUndo(); + pDoc->GetIDocumentUndoRedo().DoGroupUndo(false); if( nEndCnt < nSttCnt ) { std::swap(nSttCnt, nEndCnt); @@ -66,24 +69,6 @@ // In order to get Undo/Redlining etc. working correctly, // we need to go through the Doc interface - if(eInputLanguage != LANGUAGE_DONTKNOW) - { - // #i41974# Only set language attribute - // for CJK/CTL scripts. - bool bLang = true; - sal_uInt16 nWhich = RES_CHRATR_LANGUAGE; - switch(GetI18NScriptTypeOfLanguage(eInputLanguage)) - { - case i18n::ScriptType::ASIAN: nWhich = RES_CHRATR_CJK_LANGUAGE; break; - case i18n::ScriptType::COMPLEX: nWhich = RES_CHRATR_CTL_LANGUAGE; break; - default: bLang = false; - } - if ( bLang ) - { - SvxLanguageItem aLangItem( eInputLanguage, nWhich ); - pDoc->getIDocumentContentOperations().InsertPoolItem(*this, aLangItem, 0 ); - } - } rIdx = nSttCnt; const OUString sTxt( pTNd->GetTxt().copy(nSttCnt, nEndCnt - nSttCnt)); if( bIsOverwriteCursor && !sOverwriteText.isEmpty() ) @@ -124,6 +109,28 @@ pDoc->getIDocumentContentOperations().InsertString( *this, sTxt ); } } + pDoc->GetIDocumentUndoRedo().DoGroupUndo(bKeepGroupUndo); + if (eInputLanguage != LANGUAGE_DONTKNOW) + { + sal_uInt16 nWhich = RES_CHRATR_LANGUAGE; + sal_Int16 nScriptType = GetI18NScriptTypeOfLanguage(eInputLanguage); + switch(nScriptType) + { + case i18n::ScriptType::ASIAN: + nWhich = RES_CHRATR_CJK_LANGUAGE; break; + case i18n::ScriptType::COMPLEX: + nWhich = RES_CHRATR_CTL_LANGUAGE; break; + } + // #i41974# Only set language attribute for CJK/CTL scripts. + if (RES_CHRATR_LANGUAGE != nWhich && pTNd->GetLang( nSttCnt, nEndCnt-nSttCnt, nScriptType) != eInputLanguage) + { + SvxLanguageItem aLangItem( eInputLanguage, nWhich ); + rIdx = nSttCnt; + GetMark()->nContent = nEndCnt; + pDoc->getIDocumentContentOperations().InsertPoolItem(*this, aLangItem, 0 ); + } + + } } } } diff -Nru libreoffice-l10n-4.4.2/sw/source/core/doc/notxtfrm.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/notxtfrm.cxx --- libreoffice-l10n-4.4.2/sw/source/core/doc/notxtfrm.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/doc/notxtfrm.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -190,7 +190,8 @@ if ( rFrm.GetBackgroundBrush( aFillAttributes, pItem, pCol, aOrigRect, false ) ) { - const bool bDone(::DrawFillAttributes(aFillAttributes, aOrigRect, rPtArea, rOut)); + SwRegionRects const region(rPtArea); + const bool bDone(::DrawFillAttributes(aFillAttributes, aOrigRect, region, rOut)); if(!bDone) { diff -Nru libreoffice-l10n-4.4.2/sw/source/core/docnode/ndtbl.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/docnode/ndtbl.cxx --- libreoffice-l10n-4.4.2/sw/source/core/docnode/ndtbl.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/docnode/ndtbl.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -746,7 +746,6 @@ // Set Orientation in the Table's Fmt pTableFmt->SetFmtAttr( SwFmtHoriOrient( 0, eAdjust ) ); - pNdTbl->RegisterToFormat( *pTableFmt ); if( pTAFmt || ( rInsTblOpts.mnInsMode & tabopts::DEFAULT_BORDER) ) { @@ -1110,6 +1109,7 @@ lcl_BalanceTable(*pTable, nMaxBoxes, *pTblNd, *pBoxFmt, *pTxtColl, pUndo, &aPosArr); + pTable->RegisterToFormat(*pTblFmt); lcl_SetTableBoxWidths(*pTable, nMaxBoxes, *pBoxFmt, *pDoc, &aPosArr); return pTblNd; @@ -1215,9 +1215,7 @@ rTableNodes, pTableFmt, pLineFmt, pBoxFmt, getIDocumentStylePoolAccess().GetTxtCollFromPool( RES_POOLCOLL_STANDARD )/*, pUndo*/ ); - SwTable * pNdTbl = &pTblNd->GetTable(); - OSL_ENSURE( pNdTbl, "No Table Node created" ); - pNdTbl->RegisterToFormat( *pTableFmt ); + SwTable& rNdTbl = pTblNd->GetTable(); if( !pBoxFmt->GetDepends() ) { @@ -1232,7 +1230,7 @@ getIDocumentState().SetModified(); getIDocumentFieldsAccess().SetFieldsDirty( true, NULL, 0 ); - return pNdTbl; + return &rNdTbl; } SwNodeRange * SwNodes::ExpandRangeForTableBox(const SwNodeRange & rRange) @@ -1407,6 +1405,7 @@ nMaxBoxes = nBoxes; } + pTable->RegisterToFormat(*pTblFmt); lcl_SetTableBoxWidths2(*pTable, nMaxBoxes, *pBoxFmt, *pDoc); return pTblNd; diff -Nru libreoffice-l10n-4.4.2/sw/source/core/docnode/node.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/docnode/node.cxx --- libreoffice-l10n-4.4.2/sw/source/core/docnode/node.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/docnode/node.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -342,6 +342,7 @@ SwNode::~SwNode() { + assert(!m_pAnchoredFlys || GetDoc()->IsInDtor()); // must all be deleted } /// Find the TableNode in which it is located. @@ -1942,4 +1943,50 @@ return bResult; } +void SwNode::AddAnchoredFly(SwFrmFmt *const pFlyFmt) +{ + assert(pFlyFmt); + assert(&pFlyFmt->GetAnchor(false).GetCntntAnchor()->nNode.GetNode() == this); + // check node type, cf. SwFmtAnchor::SetAnchor() + assert(IsTxtNode() || IsStartNode() || IsTableNode()); + if (!m_pAnchoredFlys) + { + m_pAnchoredFlys.reset(new std::vector); + } + m_pAnchoredFlys->push_back(pFlyFmt); +} + +void SwNode::RemoveAnchoredFly(SwFrmFmt *const pFlyFmt) +{ + assert(pFlyFmt); + // cannot assert this in Remove because it is called when new anchor is already set +// assert(&pFlyFmt->GetAnchor(false).GetCntntAnchor()->nNode.GetNode() == this); + assert(IsTxtNode() || IsStartNode() || IsTableNode()); + if (!m_pAnchoredFlys) + { + SwNodeIndex idx(GetNodes()); + while (true) + { + SwNode & rNode(idx.GetNode()); + if (rNode.m_pAnchoredFlys) + { + auto it(std::find(rNode.m_pAnchoredFlys->begin(), rNode.m_pAnchoredFlys->end(), pFlyFmt)); + if (it != rNode.m_pAnchoredFlys->end()) + { + //XXX bug + } + } + ++idx; + } + } + assert(m_pAnchoredFlys); + auto it(std::find(m_pAnchoredFlys->begin(), m_pAnchoredFlys->end(), pFlyFmt)); + assert(it != m_pAnchoredFlys->end()); + m_pAnchoredFlys->erase(it); + if (m_pAnchoredFlys->empty()) + { + m_pAnchoredFlys.reset(); + } +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff -Nru libreoffice-l10n-4.4.2/sw/source/core/docnode/nodes.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/docnode/nodes.cxx --- libreoffice-l10n-4.4.2/sw/source/core/docnode/nodes.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/docnode/nodes.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -2211,6 +2211,60 @@ void SwNodes::RemoveNode( sal_uLong nDelPos, sal_uLong nSz, bool bDel ) { + { +#ifndef NDEBUG + SwNode *const pFirst((*this)[nDelPos]); +#endif + for (sal_uLong nCnt = 0; nCnt < nSz; nCnt++) + { + SwNode* pNode = ((*this)[ nDelPos + nCnt ]); + SwTxtNode * pTxtNd = pNode->GetTxtNode(); + + if (pTxtNd) + { + pTxtNd->RemoveFromList(); + // remove FLY_AS_CHAR *before* adjusting SwNodeIndex + // so their anchor still points to correct node when deleted! + // NOTE: this will call RemoveNode() recursively! + // so adjust our indexes to account for removed nodes + sal_uLong const nPos = pTxtNd->GetIndex(); + SwpHints *const pHints(pTxtNd->GetpSwpHints()); + if (pHints) + { + std::vector flys; + for (size_t i = 0; i < pHints->Count(); ++i) + { + SwTxtAttr *const pHint(pHints->GetTextHint(i)); + if (RES_TXTATR_FLYCNT == pHint->Which()) + { + flys.push_back(pHint); + } + } + for (SwTxtAttr * pHint : flys) + { + pTxtNd->DeleteAttribute(pHint); + } // pHints may be dead now + sal_uLong const nDiff = nPos - pTxtNd->GetIndex(); + if (nDiff) + { + nDelPos -= nDiff; + } + assert(pTxtNd == (*this)[nDelPos + nCnt]); + assert(pFirst == (*this)[nDelPos]); + } + } + SwTableNode* pTableNode = pNode->GetTableNode(); + if (pTableNode) + { + // The node that is deleted is a table node. + // Need to make sure that all the redlines that are + // related to this table are removed from the + // 'Extra Redlines' array + pTableNode->RemoveRedlines(); + } + } + } + sal_uLong nEnd = nDelPos + nSz; SwNode* pNew = (*this)[ nEnd ]; @@ -2239,28 +2293,6 @@ } } - { - for (sal_uLong nCnt = 0; nCnt < nSz; nCnt++) - { - SwNode* pNode = ((*this)[ nDelPos + nCnt ]); - SwTxtNode * pTxtNd = pNode->GetTxtNode(); - - if (pTxtNd) - { - pTxtNd->RemoveFromList(); - } - SwTableNode* pTableNode = pNode->GetTableNode(); - if (pTableNode) - { - // The node that is deleted is a table node. - // Need to make sure that all the redlines that are - // related to this table are removed from the - // 'Extra Redlines' array - pTableNode->RemoveRedlines(); - } - } - } - std::vector aTempEntries; if( bDel ) { diff -Nru libreoffice-l10n-4.4.2/sw/source/core/draw/drawdoc.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/draw/drawdoc.cxx --- libreoffice-l10n-4.4.2/sw/source/core/draw/drawdoc.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/draw/drawdoc.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -150,4 +150,12 @@ return xModel; } +void SwDrawModel::PutAreaListItems(SfxItemSet& rSet) const +{ + rSet.Put(SvxColorListItem(GetColorList(), SID_COLOR_TABLE)); + rSet.Put(SvxGradientListItem(GetGradientList(), SID_GRADIENT_LIST)); + rSet.Put(SvxHatchListItem(GetHatchList(), SID_HATCH_LIST)); + rSet.Put(SvxBitmapListItem(GetBitmapList(), SID_BITMAP_LIST)); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff -Nru libreoffice-l10n-4.4.2/sw/source/core/edit/eddel.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/edit/eddel.cxx --- libreoffice-l10n-4.4.2/sw/source/core/edit/eddel.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/edit/eddel.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -90,14 +90,21 @@ } else { - SwPaM aPam(rPam); + std::unique_ptr pNewPam; + SwPaM * pPam = &rPam; if (bSelectAll) + { + assert(dynamic_cast(&rPam)); // must be corrected pam + pNewPam.reset(new SwPaM(*rPam.GetMark(), *rPam.GetPoint())); // Selection starts at the first para of the first cell, but we // want to delete the table node before the first cell as well. - aPam.Start()->nNode = aPam.Start()->nNode.GetNode().FindTableNode()->GetIndex(); + pNewPam->Start()->nNode = pNewPam->Start()->nNode.GetNode().FindTableNode()->GetIndex(); + pNewPam->Start()->nContent.Assign(nullptr, 0); + pPam = pNewPam.get(); + } // delete everything - GetDoc()->getIDocumentContentOperations().DeleteAndJoin( aPam ); - SaveTblBoxCntnt( aPam.GetPoint() ); + GetDoc()->getIDocumentContentOperations().DeleteAndJoin(*pPam); + SaveTblBoxCntnt( pPam->GetPoint() ); } // Selection is not needed anymore diff -Nru libreoffice-l10n-4.4.2/sw/source/core/edit/edglss.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/edit/edglss.cxx --- libreoffice-l10n-4.4.2/sw/source/core/edit/edglss.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/edit/edglss.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -237,12 +237,15 @@ // Make a copy, so that in case we need to adjust the selection // for the purpose of copying, our shell cursor is not touched. // (Otherwise we would have to restore it.) - SwPaM aPaM(*PCURCRSR); + SwPaM aPaM(*PCURCRSR->GetMark(), *PCURCRSR->GetPoint()); if (bSelectAll) + { // Selection starts at the first para of the first cell, // but we want to copy the table and the start node before // the first cell as well. aPaM.Start()->nNode = aPaM.Start()->nNode.GetNode().FindTableNode()->GetIndex(); + aPaM.Start()->nContent.Assign(nullptr, 0); + } bRet = GetDoc()->getIDocumentContentOperations().CopyRange( aPaM, aPos, false ) || bRet; } diff -Nru libreoffice-l10n-4.4.2/sw/source/core/edit/ednumber.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/edit/ednumber.cxx --- libreoffice-l10n-4.4.2/sw/source/core/edit/ednumber.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/edit/ednumber.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -735,8 +735,8 @@ } void SwEditShell::SetCurNumRule( const SwNumRule& rRule, - const bool bCreateNewList, - const OUString& sContinuedListId, + bool bCreateNewList, + const OUString& rContinuedListId, const bool bResetIndentAttrs ) { StartAllAction(); @@ -748,19 +748,29 @@ { SwPamRanges aRangeArr( *pCrsr ); SwPaM aPam( *pCrsr->GetPoint() ); + OUString sContinuedListId(rContinuedListId); for( sal_uInt16 n = 0; n < aRangeArr.Count(); ++n ) { aRangeArr.SetPam( n, aPam ); - GetDoc()->SetNumRule( aPam, rRule, + OUString sListId = GetDoc()->SetNumRule( aPam, rRule, bCreateNewList, sContinuedListId, true, bResetIndentAttrs ); + + //tdf#87548 On creating a new list for a multi-selection only + //create a single new list for the multi-selection, not one per selection + if (bCreateNewList) + { + sContinuedListId = sListId; + bCreateNewList = false; + } + GetDoc()->SetCounted( aPam, true ); } } else { GetDoc()->SetNumRule( *pCrsr, rRule, - bCreateNewList, sContinuedListId, + bCreateNewList, rContinuedListId, true, bResetIndentAttrs ); GetDoc()->SetCounted( *pCrsr, true ); } diff -Nru libreoffice-l10n-4.4.2/sw/source/core/fields/expfld.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/fields/expfld.cxx --- libreoffice-l10n-4.4.2/sw/source/core/fields/expfld.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/fields/expfld.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -739,8 +739,11 @@ sal_Int32 nNum1 = sNum1.toInt32(); nCmp = nNum2 - nNum1; if( 0 == nCmp ) - nCmp = rCaseColl.compareString( rTmp2.copy( nFndPos2 ), - rTmp1.copy( nFndPos1 )); + { + OUString aTmp1 = nFndPos1 != -1 ? rTmp1.copy(nFndPos1) : OUString(); + OUString aTmp2 = nFndPos2 != -1 ? rTmp2.copy(nFndPos2) : OUString(); + nCmp = rCaseColl.compareString(aTmp2, aTmp1); + } } else nCmp = rColl.compareString( rTmp2, rTmp1 ); diff -Nru libreoffice-l10n-4.4.2/sw/source/core/fields/fldbas.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/fields/fldbas.cxx --- libreoffice-l10n-4.4.2/sw/source/core/fields/fldbas.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/fields/fldbas.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -405,12 +405,6 @@ return Expand(); } -OUString SwField::ExpandCitation(ToxAuthorityField eField) const -{ - const SwAuthorityField* pAuthorityField = static_cast(this); - return (pAuthorityField ? pAuthorityField->ExpandCitation(eField) : OUString()); -} - SwField * SwField::CopyField() const { SwField *const pNew = Copy(); diff -Nru libreoffice-l10n-4.4.2/sw/source/core/frmedt/fecopy.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/frmedt/fecopy.cxx --- libreoffice-l10n-4.4.2/sw/source/core/frmedt/fecopy.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/frmedt/fecopy.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -667,6 +667,11 @@ typedef boost::shared_ptr PaMPtr; typedef boost::shared_ptr PositionPtr; typedef std::pair< PaMPtr, PositionPtr > Insertion; + + bool PamHasSelection(const SwPaM& rPaM) + { + return rPaM.HasMark() && *rPaM.GetPoint() != *rPaM.GetMark(); + } } bool SwFEShell::Paste( SwDoc* pClpDoc, bool bIncludingPageFrames ) @@ -815,7 +820,12 @@ FOREACHPAM_START(GetCrsr()) if( pSrcNd && - 0 != ( pDestNd = GetDoc()->IsIdxInTbl( PCURCRSR->GetPoint()->nNode ))) + 0 != ( pDestNd = GetDoc()->IsIdxInTbl( PCURCRSR->GetPoint()->nNode )) && + // are we at the beginning of the cell? (if not, we will insert a nested table) + // first paragraph of the cell? + PCURCRSR->GetNode().GetIndex() == PCURCRSR->GetNode().FindTableBoxStartNode()->GetIndex()+1 && + // beginning of the paragraph? + !PCURCRSR->GetPoint()->nContent.GetIndex()) { SwPosition aDestPos( *PCURCRSR->GetPoint() ); @@ -831,7 +841,7 @@ ParkTblCrsr(); bParkTblCrsr = true; } - else if( !PCURCRSR->HasMark() && PCURCRSR->GetNext() == PCURCRSR && + else if( !PamHasSelection(*PCURCRSR) && PCURCRSR->GetNext() == PCURCRSR && ( !pSrcNd->GetTable().IsTblComplex() || pDestNd->GetTable().IsNewModel() ) ) { diff -Nru libreoffice-l10n-4.4.2/sw/source/core/inc/DocumentContentOperationsManager.hxx libreoffice-l10n-4.4.6~rc3/sw/source/core/inc/DocumentContentOperationsManager.hxx --- libreoffice-l10n-4.4.2/sw/source/core/inc/DocumentContentOperationsManager.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/inc/DocumentContentOperationsManager.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -106,13 +106,11 @@ const SwPaM* pCopiedPaM = NULL, bool bMakeNewFrms = true, bool bDelRedlines = true, - bool bCopyFlyAtFly = false, - const bool bMergedFirstNode = false ) const; + bool bCopyFlyAtFly = false ) const; void CopyFlyInFlyImpl( const SwNodeRange& rRg, const sal_Int32 nEndContentIndex, const SwNodeIndex& rStartIdx, - const bool bCopyFlyAtFly = false, - const bool bMergedFirstNode = false ) const; + const bool bCopyFlyAtFly = false ) const; /// Parameters for _Rst and lcl_SetTxtFmtColl //originallyfrom docfmt.cxx diff -Nru libreoffice-l10n-4.4.2/sw/source/core/inc/DocumentSettingManager.hxx libreoffice-l10n-4.4.6~rc3/sw/source/core/inc/DocumentSettingManager.hxx --- libreoffice-l10n-4.4.2/sw/source/core/inc/DocumentSettingManager.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/inc/DocumentSettingManager.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -148,6 +148,7 @@ bool mbTabOverMargin; bool mbSurroundTextWrapSmall; bool mbPropLineSpacingShrinksFirstLine; // fdo#79602 + bool mbSubtractFlys; // tdf#86578 bool mApplyParagraphMarkFormatToNumbering; bool mbLastBrowseMode : 1; diff -Nru libreoffice-l10n-4.4.2/sw/source/core/inc/frmtool.hxx libreoffice-l10n-4.4.6~rc3/sw/source/core/inc/frmtool.hxx --- libreoffice-l10n-4.4.2/sw/source/core/inc/frmtool.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/inc/frmtool.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -45,6 +45,7 @@ class GraphicAttr; class SwPageDesc; class SwFrmFmts; +class SwRegionRects; #define FAR_AWAY LONG_MAX - 20000 // initial position of a Fly #define BROWSE_HEIGHT 56700L * 10L // 10 Meters @@ -68,7 +69,7 @@ bool DrawFillAttributes( const drawinglayer::attribute::SdrAllFillAttributesHelperPtr& rFillAttributes, const SwRect& rOriginalLayoutRect, - const SwRect& rPaintRect, + const SwRegionRects& rPaintRegion, OutputDevice& rOut); void paintGraphicUsingPrimitivesHelper( diff -Nru libreoffice-l10n-4.4.2/sw/source/core/inc/MarkManager.hxx libreoffice-l10n-4.4.6~rc3/sw/source/core/inc/MarkManager.hxx --- libreoffice-l10n-4.4.2/sw/source/core/inc/MarkManager.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/inc/MarkManager.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -35,7 +35,7 @@ public: MarkManager(/*[in/out]*/ SwDoc& rDoc); // IDocumentMarkAccess - virtual ::sw::mark::IMark* makeMark(const SwPaM& rPaM, const OUString& rName, IDocumentMarkAccess::MarkType eMark) SAL_OVERRIDE; + virtual ::sw::mark::IMark* makeMark(const SwPaM& rPaM, const OUString& rName, IDocumentMarkAccess::MarkType eMark, bool = false) SAL_OVERRIDE; virtual sw::mark::IFieldmark* makeFieldBookmark( const SwPaM& rPaM, const OUString& rName, diff -Nru libreoffice-l10n-4.4.2/sw/source/core/inc/txtfrm.hxx libreoffice-l10n-4.4.6~rc3/sw/source/core/inc/txtfrm.hxx --- libreoffice-l10n-4.4.2/sw/source/core/inc/txtfrm.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/inc/txtfrm.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -427,7 +427,7 @@ inline SwTwips GetFtnFrmHeight() const; SwTxtFrm *FindFtnRef( const SwTxtFtn *pFtn ); inline const SwTxtFrm *FindFtnRef( const SwTxtFtn *pFtn ) const - { return FindFtnRef( pFtn ); } + { return const_cast(this)->FindFtnRef( pFtn ); } void ConnectFtn( SwTxtFtn *pFtn, const SwTwips nDeadLine ); /** diff -Nru libreoffice-l10n-4.4.2/sw/source/core/inc/UndoManager.hxx libreoffice-l10n-4.4.6~rc3/sw/source/core/inc/UndoManager.hxx --- libreoffice-l10n-4.4.2/sw/source/core/inc/UndoManager.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/inc/UndoManager.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -71,6 +71,7 @@ virtual void AppendUndo(SwUndo *const pUndo) SAL_OVERRIDE; virtual void ClearRedo() SAL_OVERRIDE; virtual bool IsUndoNodes(SwNodes const& rNodes) const SAL_OVERRIDE; + virtual size_t GetUndoActionCount(const bool bCurrentLevel = true) const SAL_OVERRIDE; // ::svl::IUndoManager virtual void AddUndoAction(SfxUndoAction *pAction, diff -Nru libreoffice-l10n-4.4.2/sw/source/core/layout/atrfrm.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/layout/atrfrm.cxx --- libreoffice-l10n-4.4.2/sw/source/core/layout/atrfrm.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/layout/atrfrm.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -2430,9 +2430,11 @@ { if( !GetDoc()->IsInDtor()) { - const SwFmtAnchor& anchor = GetAnchor(); - if( anchor.GetCntntAnchor() != NULL ) - GetDoc()->GetFrmFmtAnchorMap()->Remove( this, anchor.GetCntntAnchor()->nNode ); + const SwFmtAnchor& rAnchor = GetAnchor(); + if (rAnchor.GetCntntAnchor() != nullptr) + { + rAnchor.GetCntntAnchor()->nNode.GetNode().RemoveAnchoredFly(this); + } } } @@ -2525,9 +2527,13 @@ if( pOld && pOld->Which() == RES_ANCHOR ) oldAnchorPosition = static_cast< const SwFmtAnchor* >( pOld )->GetCntntAnchor(); if( oldAnchorPosition != NULL && ( newAnchorPosition == NULL || oldAnchorPosition->nNode.GetIndex() != newAnchorPosition->nNode.GetIndex())) - GetDoc()->GetFrmFmtAnchorMap()->Remove( this, oldAnchorPosition->nNode ); + { + oldAnchorPosition->nNode.GetNode().RemoveAnchoredFly(this); + } if( newAnchorPosition != NULL && ( oldAnchorPosition == NULL || oldAnchorPosition->nNode.GetIndex() != newAnchorPosition->nNode.GetIndex())) - GetDoc()->GetFrmFmtAnchorMap()->Add( this, newAnchorPosition->nNode ); + { + newAnchorPosition->nNode.GetNode().AddAnchoredFly(this); + } } void SwFrmFmt::RegisterToFormat( SwFmt& rFmt ) @@ -3337,39 +3343,4 @@ return false; } - -SwFrmFmtAnchorMap::SwFrmFmtAnchorMap( const SwDoc* _doc ) -: doc( _doc ) -{ -} - -void SwFrmFmtAnchorMap::Add( SwFrmFmt* fmt, const SwNodeIndex& pos ) -{ - (void) doc; - assert( pos.GetNode().GetDoc() == doc ); - items.insert( std::make_pair( pos, fmt )); -} - -void SwFrmFmtAnchorMap::Remove( SwFrmFmt* fmt, const SwNodeIndex& pos ) -{ - (void) doc; - assert( pos.GetNode().GetDoc() == doc ); - typedef std::multimap< SwNodeIndex, SwFrmFmt* >::iterator iterator; - std::pair< iterator, iterator > range = items.equal_range( pos ); - for( iterator it = range.first; it != range.second; ++it ) - { - if( it->second == fmt ) - { - items.erase( it ); - return; - } - } - assert( false ); -} - -SwFrmFmtAnchorMap::const_iterator_pair SwFrmFmtAnchorMap::equal_range( const SwNodeIndex& pos ) const -{ - return items.equal_range( pos ); -} - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff -Nru libreoffice-l10n-4.4.2/sw/source/core/layout/flowfrm.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/layout/flowfrm.cxx --- libreoffice-l10n-4.4.2/sw/source/core/layout/flowfrm.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/layout/flowfrm.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1780,8 +1780,15 @@ { //!!!!MoveFtnCntFwd might need to be updated as well. SwFtnBossFrm *pOldBoss = m_rThis.FindFtnBossFrm(); - if ( m_rThis.IsInFtn() ) + if (m_rThis.IsInFtn()) + { + if (!m_rThis.IsCntntFrm()) + { + SAL_WARN("sw.core", "Tables in footnotes are not truly supported"); + return false; + } return static_cast(m_rThis).MoveFtnCntFwd( bMakePage, pOldBoss ); + } if( !IsFwdMoveAllowed() && !bMoveAlways ) { diff -Nru libreoffice-l10n-4.4.2/sw/source/core/layout/frmtool.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/layout/frmtool.cxx --- libreoffice-l10n-4.4.2/sw/source/core/layout/frmtool.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/layout/frmtool.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1015,12 +1015,11 @@ #else (void)pTbl; #endif - SwFrmFmtAnchorMap::const_iterator_pair range = doc->GetFrmFmtAnchorMap()->equal_range( SwNodeIndex( doc->GetNodes(), nIndex )); - for( std::multimap< SwNodeIndex, SwFrmFmt* >::const_iterator it = range.first; - it != range.second; - ) + SwNode const& rNode(*doc->GetNodes()[nIndex]); + std::vector const*const pFlys(rNode.GetAnchoredFlys()); + for (size_t it = 0; pFlys && it != pFlys->size(); ) { - SwFrmFmt *pFmt = it->second; + SwFrmFmt *const pFmt = (*pFlys)[it]; const SwFmtAnchor &rAnch = pFmt->GetAnchor(); if ( rAnch.GetCntntAnchor() && (rAnch.GetCntntAnchor()->nNode.GetIndex() == nIndex) ) diff -Nru libreoffice-l10n-4.4.2/sw/source/core/layout/paintfrm.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/layout/paintfrm.cxx --- libreoffice-l10n-4.4.2/sw/source/core/layout/paintfrm.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/layout/paintfrm.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -82,6 +82,7 @@ #include #include #include +#include #include #include #include @@ -475,13 +476,13 @@ { double const fMergeGap(gProp.nSPixelSzW + gProp.nSHalfPixelSzW); // NOT static! // A is above/before B - if( mergeA.second <= mergeB.second && + if( mergeA.second <= mergeB.first && mergeA.second + fMergeGap >= mergeB.first ) { return 1; } // B is above/before A - else if( mergeB.second <= mergeA.second && + else if( mergeB.second <= mergeA.first && mergeB.second + fMergeGap >= mergeA.first ) { return 2; @@ -1526,172 +1527,168 @@ } } -//static void lcl_SubtractFlys( const SwFrm *pFrm, const SwPageFrm *pPage, -// const SwRect &rRect, SwRegionRects &rRegion ) -//{ -// const SwSortedObjs& rObjs = *pPage->GetSortedObjs(); -// const SwFlyFrm* pSelfFly = pFrm->IsInFly() ? pFrm->FindFlyFrm() : gProp.pSRetoucheFly2; -// if ( !gProp.pSRetoucheFly ) -// gProp.pSRetoucheFly = gProp.pSRetoucheFly2; -// -// for ( sal_uInt16 j = 0; (j < rObjs.Count()) && !rRegion.empty(); ++j ) -// { -// const SwAnchoredObject* pAnchoredObj = rObjs[j]; -// const SdrObject* pSdrObj = pAnchoredObj->GetDrawObj(); -// -// // Do not consider invisible objects -// if ( !pPage->GetFmt()->GetDoc()->IsVisibleLayerId( pSdrObj->GetLayer() ) ) -// continue; -// -// if ( !pAnchoredObj->ISA(SwFlyFrm) ) -// continue; -// -// const SwFlyFrm *pFly = static_cast(pAnchoredObj); -// -// if ( pSelfFly == pFly || gProp.pSRetoucheFly == pFly || !rRect.IsOver( pFly->Frm() ) ) -// continue; -// -// if ( !pFly->GetFmt()->GetPrint().GetValue() && -// (OUTDEV_PRINTER == gProp.pSGlobalShell->GetOut()->GetOutDevType() || -// gProp.pSGlobalShell->IsPreview())) -// continue; -// -// const bool bLowerOfSelf = pSelfFly && pFly->IsLowerOf( pSelfFly ); -// -// //For character bound Flys only examine those Flys in which it is not -// //anchored itself. -// //Why only for character bound ones you may ask? It never makes sense to -// //subtract frames in which it is anchored itself right? -// if ( pSelfFly && pSelfFly->IsLowerOf( pFly ) ) -// continue; -// -// //Any why does it not apply for the RetoucheFly too? -// if ( gProp.pSRetoucheFly && gProp.pSRetoucheFly->IsLowerOf( pFly ) ) -// continue; -// -//#if OSL_DEBUG_LEVEL > 0 -// //Flys who are anchored inside their own one, must have a bigger OrdNum -// //or be character bound. -// if ( pSelfFly && bLowerOfSelf ) -// { -// OSL_ENSURE( pFly->IsFlyInCntFrm() || -// pSdrObj->GetOrdNumDirect() > pSelfFly->GetVirtDrawObj()->GetOrdNumDirect(), -// "Fly with wrong z-Order" ); -// } -//#endif -// -// bool bStopOnHell = true; -// if ( pSelfFly ) -// { -// const SdrObject *pTmp = pSelfFly->GetVirtDrawObj(); -// if ( pSdrObj->GetLayer() == pTmp->GetLayer() ) -// { -// if ( pSdrObj->GetOrdNumDirect() < pTmp->GetOrdNumDirect() ) -// //In the same layer we only observe those that are above. -// continue; -// } -// else -// { -// if ( !bLowerOfSelf && !pFly->GetFmt()->GetOpaque().GetValue() ) -// //From other layers we are only interested in non -// //transparent ones or those that are internal -// continue; -// bStopOnHell = false; -// } -// } -// if ( gProp.pSRetoucheFly ) -// { -// const SdrObject *pTmp = gProp.pSRetoucheFly->GetVirtDrawObj(); -// if ( pSdrObj->GetLayer() == pTmp->GetLayer() ) -// { -// if ( pSdrObj->GetOrdNumDirect() < pTmp->GetOrdNumDirect() ) -// //In the same layer we only observe those that are above. -// continue; -// } -// else -// { -// if ( !pFly->IsLowerOf( gProp.pSRetoucheFly ) && !pFly->GetFmt()->GetOpaque().GetValue() ) -// //From other layers we are only interested in non -// //transparent ones or those that are internal -// continue; -// bStopOnHell = false; -// } -// } -// -// //If the content of the Fly is transparent, we subtract it only if it's -// //contained in the hell layer. -// const IDocumentDrawModelAccess* pIDDMA = pFly->GetFmt()->getIDocumentDrawModelAccess(); -// bool bHell = pSdrObj->GetLayer() == pIDDMA->GetHellId(); -// if ( (bStopOnHell && bHell) || -// /// Change internal order of condition -// /// first check "!bHell", then "..->Lower()" and "..->IsNoTxtFrm()" -// /// have not to be performed, if frame is in "Hell" -// ( !bHell && pFly->Lower() && pFly->Lower()->IsNoTxtFrm() && -// ( ((SwNoTxtFrm*)pFly->Lower())->IsTransparent() || -// ((SwNoTxtFrm*)pFly->Lower())->HasAnimation() || -// pFly->GetFmt()->GetSurround().IsContour() -// ) -// ) -// ) -// continue; -// -// // Own if-statements for transparent background/shadow of fly frames -// // in order to handle special conditions. -// if ( pFly->IsBackgroundTransparent() ) -// { -// // Background is transparent drawn. Thus normally, its region -// // have not to be subtracted from given region. -// // But, if method is called for a fly frame and -// // is a direct lower of this fly frame and -// // inherites its transparent background brush from its parent, -// // then frame area have to be subtracted from given region. -// // NOTE: Because in Status Quo transparent backgrounds can only be -// // assigned to fly frames, the handle of this special case -// // avoids drawing of transparent areas more than once, if -// // a fly frame inherites a transparent background from its -// // parent fly frame. -// if ( pFrm->IsFlyFrm() && -// (pFly->GetAnchorFrm()->FindFlyFrm() == pFrm) && -// static_cast(pFly->GetFmt())->IsBackgroundBrushInherited() -// ) -// { -// SwRect aRect; -// SwBorderAttrAccess aAccess( SwFrm::GetCache(), (SwFrm*)pFly ); -// const SwBorderAttrs &rAttrs = *aAccess.Get(); -// ::lcl_CalcBorderRect( aRect, pFly, rAttrs, true ); -// rRegion -= aRect; -// continue; -// } -// else -// { -// continue; -// } -// } -// if ( pFly->IsShadowTransparent() ) -// { -// continue; -// } -// -// if ( bHell && pFly->GetAnchorFrm()->IsInFly() ) -// { -// //So the border won't get dismantled by the background of the other -// //Fly. -// SwRect aRect; -// SwBorderAttrAccess aAccess( SwFrm::GetCache(), (SwFrm*)pFly ); -// const SwBorderAttrs &rAttrs = *aAccess.Get(); -// ::lcl_CalcBorderRect( aRect, pFly, rAttrs, true ); -// rRegion -= aRect; -// } -// else -// { -// SwRect aRect( pFly->Prt() ); -// aRect += pFly->Frm().Pos(); -// rRegion -= aRect; -// } -// } -// if ( gProp.pSRetoucheFly == gProp.pSRetoucheFly2 ) -// gProp.pSRetoucheFly = 0; -//} +static void lcl_SubtractFlys( const SwFrm *pFrm, const SwPageFrm *pPage, + const SwRect &rRect, SwRegionRects &rRegion) +{ + const SwSortedObjs& rObjs = *pPage->GetSortedObjs(); + const SwFlyFrm* pSelfFly = pFrm->IsInFly() ? pFrm->FindFlyFrm() : gProp.pSRetoucheFly2; + if (!gProp.pSRetoucheFly) + gProp.pSRetoucheFly = gProp.pSRetoucheFly2; + + for (size_t j = 0; (j < rObjs.size()) && !rRegion.empty(); ++j) + { + const SwAnchoredObject* pAnchoredObj = rObjs[j]; + const SdrObject* pSdrObj = pAnchoredObj->GetDrawObj(); + + // Do not consider invisible objects + if (!pPage->GetFmt()->GetDoc()->getIDocumentDrawModelAccess().IsVisibleLayerId(pSdrObj->GetLayer())) + continue; + + if (!pAnchoredObj->ISA(SwFlyFrm)) + continue; + + const SwFlyFrm *pFly = static_cast(pAnchoredObj); + + if (pSelfFly == pFly || gProp.pSRetoucheFly == pFly || !rRect.IsOver(pFly->Frm())) + continue; + + if (!pFly->GetFmt()->GetPrint().GetValue() && + (OUTDEV_PRINTER == gProp.pSGlobalShell->GetOut()->GetOutDevType() || + gProp.pSGlobalShell->IsPreview())) + continue; + + const bool bLowerOfSelf = pSelfFly && pFly->IsLowerOf( pSelfFly ); + + //For character bound Flys only examine those Flys in which it is not + //anchored itself. + //Why only for character bound ones you may ask? It never makes sense to + //subtract frames in which it is anchored itself right? + if (pSelfFly && pSelfFly->IsLowerOf(pFly)) + continue; + + //Any why does it not apply for the RetoucheFly too? + if (gProp.pSRetoucheFly && gProp.pSRetoucheFly->IsLowerOf(pFly)) + continue; + +#if OSL_DEBUG_LEVEL > 0 + //Flys who are anchored inside their own one, must have a bigger OrdNum + //or be character bound. + if (pSelfFly && bLowerOfSelf) + { + OSL_ENSURE( pFly->IsFlyInCntFrm() || + pSdrObj->GetOrdNumDirect() > pSelfFly->GetVirtDrawObj()->GetOrdNumDirect(), + "Fly with wrong z-Order" ); + } +#endif + + bool bStopOnHell = true; + if (pSelfFly) + { + const SdrObject *pTmp = pSelfFly->GetVirtDrawObj(); + if (pSdrObj->GetLayer() == pTmp->GetLayer()) + { + if (pSdrObj->GetOrdNumDirect() < pTmp->GetOrdNumDirect()) + //In the same layer we only observe those that are above. + continue; + } + else + { + if (!bLowerOfSelf && !pFly->GetFmt()->GetOpaque().GetValue()) + //From other layers we are only interested in non + //transparent ones or those that are internal + continue; + bStopOnHell = false; + } + } + if (gProp.pSRetoucheFly) + { + const SdrObject *pTmp = gProp.pSRetoucheFly->GetVirtDrawObj(); + if ( pSdrObj->GetLayer() == pTmp->GetLayer() ) + { + if ( pSdrObj->GetOrdNumDirect() < pTmp->GetOrdNumDirect() ) + //In the same layer we only observe those that are above. + continue; + } + else + { + if (!pFly->IsLowerOf( gProp.pSRetoucheFly ) && !pFly->GetFmt()->GetOpaque().GetValue()) + //From other layers we are only interested in non + //transparent ones or those that are internal + continue; + bStopOnHell = false; + } + } + + //If the content of the Fly is transparent, we subtract it only if it's + //contained in the hell layer. + const IDocumentDrawModelAccess* pIDDMA = pFly->GetFmt()->getIDocumentDrawModelAccess(); + bool bHell = pSdrObj->GetLayer() == pIDDMA->GetHellId(); + if ( (bStopOnHell && bHell) || + /// Change internal order of condition + /// first check "!bHell", then "..->Lower()" and "..->IsNoTxtFrm()" + /// have not to be performed, if frame is in "Hell" + ( !bHell && pFly->Lower() && pFly->Lower()->IsNoTxtFrm() && + (static_cast(pFly->Lower())->IsTransparent() || + static_cast(pFly->Lower())->HasAnimation() || + pFly->GetFmt()->GetSurround().IsContour() + ) + ) + ) + continue; + + // Own if-statements for transparent background/shadow of fly frames + // in order to handle special conditions. + if (pFly->IsBackgroundTransparent()) + { + // Background is transparent drawn. Thus normally, its region + // have not to be subtracted from given region. + // But, if method is called for a fly frame and + // is a direct lower of this fly frame and + // inherites its transparent background brush from its parent, + // then frame area have to be subtracted from given region. + // NOTE: Because in Status Quo transparent backgrounds can only be + // assigned to fly frames, the handle of this special case + // avoids drawing of transparent areas more than once, if + // a fly frame inherites a transparent background from its + // parent fly frame. + if (pFrm->IsFlyFrm() && + (pFly->GetAnchorFrm()->FindFlyFrm() == pFrm) && + static_cast(pFly->GetFmt())->IsBackgroundBrushInherited() + ) + { + SwRect aRect; + SwBorderAttrAccess aAccess( SwFrm::GetCache(), (SwFrm*)pFly ); + const SwBorderAttrs &rAttrs = *aAccess.Get(); + ::lcl_CalcBorderRect( aRect, pFly, rAttrs, true ); + rRegion -= aRect; + continue; + } + else + { + continue; + } + } + + if (bHell && pFly->GetAnchorFrm()->IsInFly()) + { + //So the border won't get dismantled by the background of the other + //Fly. + SwRect aRect; + SwBorderAttrAccess aAccess( SwFrm::GetCache(), (SwFrm*)pFly ); + const SwBorderAttrs &rAttrs = *aAccess.Get(); + ::lcl_CalcBorderRect( aRect, pFly, rAttrs, true ); + rRegion -= aRect; + } + else + { + SwRect aRect( pFly->Prt() ); + aRect += pFly->Frm().Pos(); + rRegion -= aRect; + } + } + if (gProp.pSRetoucheFly == gProp.pSRetoucheFly2) + gProp.pSRetoucheFly = 0; +} static void lcl_implDrawGraphicBackgrd( const SvxBrushItem& _rBackgrdBrush, OutputDevice* _pOut, @@ -1850,18 +1847,19 @@ bool DrawFillAttributes( const drawinglayer::attribute::SdrAllFillAttributesHelperPtr& rFillAttributes, const SwRect& rOriginalLayoutRect, - const SwRect& rPaintRect, + const SwRegionRects& rPaintRegion, OutputDevice& rOut) { if(rFillAttributes.get() && rFillAttributes->isUsed()) { basegfx::B2DRange aPaintRange( - rPaintRect.Left(), - rPaintRect.Top(), - rPaintRect.Right(), - rPaintRect.Bottom()); + rPaintRegion.GetOrigin().Left(), + rPaintRegion.GetOrigin().Top(), + rPaintRegion.GetOrigin().Right(), + rPaintRegion.GetOrigin().Bottom()); - if(!aPaintRange.isEmpty() && + if (!aPaintRange.isEmpty() && + !rPaintRegion.empty() && !basegfx::fTools::equalZero(aPaintRange.getWidth()) && !basegfx::fTools::equalZero(aPaintRange.getHeight())) { @@ -1906,6 +1904,26 @@ if(rSequence.getLength()) { + drawinglayer::primitive2d::Primitive2DSequence const* + pPrimitives(&rSequence); + drawinglayer::primitive2d::Primitive2DSequence primitives; + // tdf#86578 the awful lcl_SubtractFlys hack + if (rPaintRegion.size() > 1 || rPaintRegion[0] != rPaintRegion.GetOrigin()) + { + tools::PolyPolygon tempRegion; + for (size_t i = 0; i < rPaintRegion.size(); ++i) + { + tempRegion.Insert(Polygon(rPaintRegion[i].SVRect())); + } + basegfx::B2DPolyPolygon const maskRegion( + tempRegion.getB2DPolyPolygon()); + primitives.realloc(1); + primitives[0] = new drawinglayer::primitive2d::MaskPrimitive2D( + maskRegion, rSequence); + pPrimitives = &primitives; + } + assert(pPrimitives && pPrimitives->getLength()); + const drawinglayer::geometry::ViewInformation2D aViewInformation2D( basegfx::B2DHomMatrix(), rOut.GetViewTransformation(), @@ -1919,7 +1937,7 @@ if(pProcessor) { - pProcessor->process(rSequence); + pProcessor->process(*pPrimitives); delete pProcessor; @@ -4196,7 +4214,8 @@ // parent fly frame area and the paint area const IDocumentDrawModelAccess* pIDDMA = GetFmt()->getIDocumentDrawModelAccess(); - if ( bIsGraphicTransparent && + if (bIsGraphicTransparent && + GetFmt()->GetDoc()->getIDocumentSettingAccess().get(IDocumentSettingAccess::SUBTRACT_FLYS) && GetVirtDrawObj()->GetLayer() == pIDDMA->GetHellId() && GetAnchorFrm()->FindFlyFrm() ) { @@ -4651,7 +4670,7 @@ void SwFrm::PaintBorderLine( const SwRect& rRect, const SwRect& rOutRect, - const SwPageFrm * /*pPage*/, + const SwPageFrm * pPage, const Color *pColor, const SvxBorderStyle nStyle ) const { @@ -4671,14 +4690,15 @@ pColor = &SwViewOption::GetFontColor(); } - //if ( pPage->GetSortedObjs() ) - //{ - // SwRegionRects aRegion( aOut, 4 ); - // ::lcl_SubtractFlys( this, pPage, aOut, aRegion ); - // for ( size_t i = 0; i < aRegion.size(); ++i ) - // gProp.pSLines->AddLineRect( aRegion[i], pColor, nStyle, pTab, nSubCol ); - //} - //else + if (pPage->GetSortedObjs() && + pPage->GetFmt()->GetDoc()->getIDocumentSettingAccess().get(IDocumentSettingAccess::SUBTRACT_FLYS)) + { + SwRegionRects aRegion( aOut, 4 ); + ::lcl_SubtractFlys( this, pPage, aOut, aRegion ); + for ( size_t i = 0; i < aRegion.size(); ++i ) + gProp.pSLines->AddLineRect( aRegion[i], pColor, nStyle, pTab, nSubCol ); + } + else gProp.pSLines->AddLineRect( aOut, pColor, nStyle, pTab, nSubCol ); } @@ -6563,7 +6583,6 @@ if ( aRect.HasArea() ) { SvxBrushItem* pNewItem = 0; - //SwRegionRects aRegion( aRect ); if( pCol ) { @@ -6574,10 +6593,12 @@ aFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(*pCol)); } - //if ( pPage->GetSortedObjs() ) - //{ - // ::lcl_SubtractFlys( this, pPage, aRect, aRegion ); - //} + SwRegionRects aRegion( aRect ); + if (pPage->GetSortedObjs() && + pSh->GetDoc()->getIDocumentSettingAccess().get(IDocumentSettingAccess::SUBTRACT_FLYS)) + { + ::lcl_SubtractFlys( this, pPage, aRect, aRegion ); + } // OD 06.08.2002 #99657# - determine, if background transparency // have to be considered for drawing. @@ -6593,7 +6614,7 @@ if(aFillAttributes->isUsed()) { // check if really something is painted - bDone = DrawFillAttributes(aFillAttributes, aOrigBackRect, aRect, *pOut); + bDone = DrawFillAttributes(aFillAttributes, aOrigBackRect, aRegion, *pOut); } if(!bDone) @@ -6613,27 +6634,27 @@ if(!bDone) { - //for ( sal_uInt16 i = 0; i < aRegion.Count(); ++i ) - //{ - // if ( 1 < aRegion.Count() ) - // { - // ::SwAlignRect( aRegion[i], gProp.pSGlobalShell ); - // if( !aRegion[i].HasArea() ) - // continue; - // } + for (size_t i = 0; i < aRegion.size(); ++i) + { + if (1 < aRegion.size()) + { + ::SwAlignRect( aRegion[i], gProp.pSGlobalShell ); + if( !aRegion[i].HasArea() ) + continue; + } // OD 06.08.2002 #99657# - add 6th parameter to indicate, if // background transparency have to be considered // Set missing 5th parameter to the default value GRFNUM_NO // - see declaration in /core/inc/frmtool.hxx. - if (IsTxtFrm() || !bOnlyTxtBackground) - ::DrawGraphic( - pItem, - pOut, - aOrigBackRect, - aRect, // aRegion[i], - GRFNUM_NO, - bConsiderBackgroundTransparency ); - //} + if (IsTxtFrm() || !bOnlyTxtBackground) + ::DrawGraphic( + pItem, + pOut, + aOrigBackRect, + aRegion[i], + GRFNUM_NO, + bConsiderBackgroundTransparency ); + } } if( pCol ) delete pNewItem; @@ -7471,7 +7492,8 @@ return false; //UUUU - rFillAttributes = pFrm->getSdrAllFillAttributesHelper(); + if (pFrm->supportsFullDrawingLayerFillAttributeSet()) + rFillAttributes = pFrm->getSdrAllFillAttributesHelper(); const SvxBrushItem &rBack = pFrm->GetAttrSet()->GetBackground(); if( pFrm->IsSctFrm() ) diff -Nru libreoffice-l10n-4.4.2/sw/source/core/text/portxt.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/text/portxt.cxx --- libreoffice-l10n-4.4.2/sw/source/core/text/portxt.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/text/portxt.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -656,56 +656,7 @@ bool SwTxtInputFldPortion::Format( SwTxtFormatInfo &rInf ) { - mbContainsInputFieldStart = - rInf.GetChar( rInf.GetIdx() ) == CH_TXT_ATR_INPUTFIELDSTART; - mbContainsInputFieldEnd = - rInf.GetChar( rInf.GetIdx() + rInf.GetLen() - 1 ) == CH_TXT_ATR_INPUTFIELDEND; - - bool bRet = false; - if ( rInf.GetLen() == 1 - && ( mbContainsInputFieldStart || mbContainsInputFieldEnd ) ) - { - Width( 0 ); - } - else - { - SwTxtSlot aFormatTxt( &rInf, this, true, true ); - if ( rInf.GetLen() == 0 ) - { - Width( 0 ); - } - else - { - const sal_Int32 nFormerLineStart = rInf.GetLineStart(); - if ( !mbContainsInputFieldStart ) - { - rInf.SetLineStart( 0 ); - } - - bRet = SwTxtPortion::Format( rInf ); - - if ( mbContainsInputFieldEnd ) - { - // adjust portion length accordingly, if complete text fits into the portion - if ( GetLen() == rInf.GetLen() ) - { - SetLen( GetLen() + 1 ); - } - } - - if ( mbContainsInputFieldStart ) - { - // adjust portion length accordingly - SetLen( GetLen() + 1 ); - } - else - { - rInf.SetLineStart( nFormerLineStart ); - } - } - } - - return bRet; + return SwTxtPortion::Format(rInf); } void SwTxtInputFldPortion::Paint( const SwTxtPaintInfo &rInf ) const diff -Nru libreoffice-l10n-4.4.2/sw/source/core/txtnode/atrflyin.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/txtnode/atrflyin.cxx --- libreoffice-l10n-4.4.2/sw/source/core/txtnode/atrflyin.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/txtnode/atrflyin.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -151,12 +151,19 @@ SwFrmFmt* pFmt = GetFlyCnt().GetFrmFmt(); SwFmtAnchor aAnchor( pFmt->GetAnchor() ); - if( !aAnchor.GetCntntAnchor() || - !aAnchor.GetCntntAnchor()->nNode.GetNode().GetNodes().IsDocNodes() || - &aAnchor.GetCntntAnchor()->nNode.GetNode() != (SwNode*)pNode ) + SwNode *const pOldNode(aAnchor.GetCntntAnchor() + ? &aAnchor.GetCntntAnchor()->nNode.GetNode() + : nullptr); + + if (!pOldNode || !pOldNode->GetNodes().IsDocNodes() || + pOldNode != static_cast(pNode)) + { aPos.nNode = *pNode; + } else - aPos.nNode = aAnchor.GetCntntAnchor()->nNode; + { + aPos.nNode = *pOldNode; + } aAnchor.SetType( FLY_AS_CHAR ); // default! aAnchor.SetAnchor( &aPos ); @@ -186,10 +193,17 @@ { pFmt->LockModify(); pFmt->SetFmtAttr( aAnchor ); // nur den Anker neu setzen + // tdf#91228 must notify the anchor nodes despite LockModify + assert(pOldNode); + pOldNode->RemoveAnchoredFly(pFmt); + aPos.nNode.GetNode().AddAnchoredFly(pFmt); pFmt->UnlockModify(); } else + { + assert(!pFmt->IsModifyLocked()); // need to notify anchor node pFmt->SetFmtAttr( aAnchor ); // nur den Anker neu setzen + } // Am Node haengen u.a. abhaengige CntFrms. // Fuer jeden CntFrm wird ein SwFlyInCntFrm angelegt. diff -Nru libreoffice-l10n-4.4.2/sw/source/core/txtnode/fntcache.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/txtnode/fntcache.cxx --- libreoffice-l10n-4.4.2/sw/source/core/txtnode/fntcache.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/txtnode/fntcache.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -47,6 +47,7 @@ #include #include #include +#include #include #include #include @@ -2496,6 +2497,7 @@ { // check if current background has a user defined setting const Color* pCol = GetFont() ? GetFont()->GetBackColor() : NULL; + Color aColor; if( ! pCol || COL_TRANSPARENT == pCol->GetColor() ) { const SvxBrushItem* pItem; @@ -2512,6 +2514,14 @@ /// is a background brush and its color is *not* "no fill"/"auto fill". if( GetFrm()->GetBackgroundBrush( aFillAttributes, pItem, pCol, aOrigBackRect, false ) ) { + if (aFillAttributes.get() && aFillAttributes->isUsed()) + { + // First see if fill atttributes provide a color. + aColor = Color(aFillAttributes->getAverageColor(aGlobalRetoucheColor.getBColor())); + pCol = &aColor; + } + + // If not, then fall back to the old brush item. if ( !pCol ) { pCol = &pItem->GetColor(); diff -Nru libreoffice-l10n-4.4.2/sw/source/core/txtnode/ndtxt.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/txtnode/ndtxt.cxx --- libreoffice-l10n-4.4.2/sw/source/core/txtnode/ndtxt.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/txtnode/ndtxt.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1142,12 +1142,10 @@ } } #endif - SwFrmFmtAnchorMap::const_iterator_pair range = GetDoc()->GetFrmFmtAnchorMap()->equal_range( SwNodeIndex( *this )); - for( SwFrmFmtAnchorMap::const_iterator it = range.first; - it != range.second; - ++it ) + std::vector const*const pFlys(GetAnchoredFlys()); + for (size_t i = 0; pFlys && i != pFlys->size(); ++i) { - SwFrmFmt *pFmt = it->second; + SwFrmFmt const*const pFmt = (*pFlys)[i]; const SwFmtAnchor& rAnchor = pFmt->GetAnchor(); const SwPosition* pCntntAnchor = rAnchor.GetCntntAnchor(); if (rAnchor.GetAnchorId() == FLY_AT_CHAR && pCntntAnchor) diff -Nru libreoffice-l10n-4.4.2/sw/source/core/txtnode/thints.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/txtnode/thints.cxx --- libreoffice-l10n-4.4.2/sw/source/core/txtnode/thints.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/txtnode/thints.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -3443,6 +3443,7 @@ { case RES_TXTATR_REFMARK: case RES_TXTATR_TOXMARK: + case RES_TXTATR_ANNOTATION: cRet = CH_TXTATR_INWORD; break; @@ -3451,7 +3452,6 @@ case RES_TXTATR_FTN: case RES_TXTATR_META: case RES_TXTATR_METAFIELD: - case RES_TXTATR_ANNOTATION: { cRet = CH_TXTATR_BREAKWORD; } diff -Nru libreoffice-l10n-4.4.2/sw/source/core/undo/docundo.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/undo/docundo.cxx --- libreoffice-l10n-4.4.2/sw/source/core/undo/docundo.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/undo/docundo.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -79,6 +79,11 @@ return & rNodes == m_xUndoNodes.get(); } +size_t UndoManager::GetUndoActionCount(const bool bCurrentLevel) const +{ + return SdrUndoManager::GetUndoActionCount(bCurrentLevel); +} + void UndoManager::DoUndo(bool const bDoUndo) { if(!isTextEditActive()) diff -Nru libreoffice-l10n-4.4.2/sw/source/core/undo/undel.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/undo/undel.cxx --- libreoffice-l10n-4.4.2/sw/source/core/undo/undel.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/undo/undel.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -156,7 +156,11 @@ { DelCntntIndex( *rPam.GetMark(), *rPam.GetPoint() ); ::sw::UndoGuard const undoGuard(pDoc->GetIDocumentUndoRedo()); - _DelBookmarks(pStt->nNode, pEnd->nNode, nullptr, &pStt->nContent, &pEnd->nContent); + if (nEndNode - nSttNode > 1) // check for fully selected nodes + { + SwNodeIndex const start(pStt->nNode, +1); + _DelBookmarks(start, pEnd->nNode); + } } nSetPos = pHistory ? pHistory->Count() : 0; diff -Nru libreoffice-l10n-4.4.2/sw/source/core/undo/undobj.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/undo/undobj.cxx --- libreoffice-l10n-4.4.2/sw/source/core/undo/undobj.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/undo/undobj.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -760,7 +760,7 @@ if ( *pStt < rAnnotationEndPos && rAnnotationEndPos <= *pEnd ) { bSavePos = true; - bSaveOtherPos = true; + bSaveOtherPos = pBkmk->IsExpanded(); //tdf#90138, only save the other pos if there is one } } } diff -Nru libreoffice-l10n-4.4.2/sw/source/core/undo/undoflystrattr.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/undo/undoflystrattr.cxx --- libreoffice-l10n-4.4.2/sw/source/core/undo/undoflystrattr.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/undo/undoflystrattr.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -19,6 +19,7 @@ #include #include +#include SwUndoFlyStrAttr::SwUndoFlyStrAttr( SwFlyFrmFmt& rFlyFrmFmt, const SwUndoId eUndoId, diff -Nru libreoffice-l10n-4.4.2/sw/source/core/unocore/swunohelper.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/swunohelper.cxx --- libreoffice-l10n-4.4.2/sw/source/core/unocore/swunohelper.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/swunohelper.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -39,6 +39,7 @@ //UUUU #include +#include #include using namespace com::sun::star; @@ -268,7 +269,8 @@ } //UUUU -bool needToMapFillItemsToSvxBrushItemTypes(const SfxItemSet& rSet) +bool needToMapFillItemsToSvxBrushItemTypes(const SfxItemSet& rSet, + sal_uInt16 const nMID) { const XFillStyleItem* pXFillStyleItem(static_cast< const XFillStyleItem* >(rSet.GetItem(XATTR_FILLSTYLE, false))); @@ -280,17 +282,63 @@ // here different FillStyles can be excluded for export; it will depend on the // quality these fallbacks can reach. That again is done in getSvxBrushItemFromSourceSet, // take a look there how the superset of DrawObject FillStyles is mapped to SvxBrushItem. - // For now, take them all - except drawing::FillStyle_NONE - - if(drawing::FillStyle_NONE != pXFillStyleItem->GetValue()) + const drawing::FillStyle eFill = pXFillStyleItem->GetValue(); + switch (eFill) { - return true; + case drawing::FillStyle_NONE: + // claim that BackColor and BackTransparent are available so that + // fo:background="transparent" attribute is exported to override + // the parent style in case it is != NONE + switch (nMID) + { + case MID_BACK_COLOR: + case MID_BACK_COLOR_R_G_B: + case MID_GRAPHIC_TRANSPARENT: // this is *BackTransparent + return true; + default: + return false; + } + break; + case drawing::FillStyle_SOLID: + case drawing::FillStyle_GRADIENT: // gradient and hatch don't exist in + case drawing::FillStyle_HATCH: // SvxBrushItem so average color is emulated + switch (nMID) + { + case MID_BACK_COLOR: + case MID_GRAPHIC_TRANSPARENT: // this is *BackTransparent + // Gradient/Hatch always have emulated color + return (drawing::FillStyle_SOLID != eFill) + || SfxItemState::SET == rSet.GetItemState(XATTR_FILLCOLOR) + || SfxItemState::SET == rSet.GetItemState(XATTR_FILLTRANSPARENCE) + || SfxItemState::SET == rSet.GetItemState(XATTR_FILLFLOATTRANSPARENCE); + case MID_BACK_COLOR_R_G_B: + // Gradient/Hatch always have emulated color + return (drawing::FillStyle_SOLID != eFill) + || SfxItemState::SET == rSet.GetItemState(XATTR_FILLCOLOR); + case MID_BACK_COLOR_TRANSPARENCY: + return SfxItemState::SET == rSet.GetItemState(XATTR_FILLTRANSPARENCE) + || SfxItemState::SET == rSet.GetItemState(XATTR_FILLFLOATTRANSPARENCE); + } + break; + case drawing::FillStyle_BITMAP: + switch (nMID) + { + case MID_GRAPHIC_URL: + return SfxItemState::SET == rSet.GetItemState(XATTR_FILLBITMAP); + case MID_GRAPHIC_POSITION: + return SfxItemState::SET == rSet.GetItemState(XATTR_FILLBMP_STRETCH) + || SfxItemState::SET == rSet.GetItemState(XATTR_FILLBMP_TILE) + || SfxItemState::SET == rSet.GetItemState(XATTR_FILLBMP_POS); + case MID_GRAPHIC_TRANSPARENT: + case MID_GRAPHIC_TRANSPARENCY: + return SfxItemState::SET == rSet.GetItemState(XATTR_FILLTRANSPARENCE) + || SfxItemState::SET == rSet.GetItemState(XATTR_FILLFLOATTRANSPARENCE); + } + break; + default: + assert(false); } - // if(XFILL_SOLID == pXFillStyleItem->GetValue() || XFILL_BITMAP == pXFillStyleItem->GetValue()) - // { - // return true; - // } return false; } diff -Nru libreoffice-l10n-4.4.2/sw/source/core/unocore/unobkm.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unobkm.cxx --- libreoffice-l10n-4.4.2/sw/source/core/unocore/unobkm.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unobkm.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -225,6 +225,7 @@ SwUnoInternalPaM aPam(*m_pImpl->m_pDoc); ::sw::XTextRangeToSwPaM(aPam, xTextRange); UnoActionContext aCont(m_pImpl->m_pDoc); + bool isHorribleHackIgnoreDuplicates(false); if (m_pImpl->m_sMarkName.isEmpty()) { m_pImpl->m_sMarkName = "Bookmark"; @@ -239,10 +240,16 @@ IDocumentMarkAccess::IsLegalPaMForCrossRefHeadingBookmark( aPam ) ) { eType = IDocumentMarkAccess::CROSSREF_HEADING_BOOKMARK; + // tdf#94804 LO 4.2-5.0 create invalid duplicates that must be preserved + // note: do not check meta:generator, may be preserved by other versions + if (m_pImpl->m_pDoc->IsInXMLImport()) + { + isHorribleHackIgnoreDuplicates = true; + } } m_pImpl->registerInMark(*this, m_pImpl->m_pDoc->getIDocumentMarkAccess()->makeMark( - aPam, m_pImpl->m_sMarkName, eType)); + aPam, m_pImpl->m_sMarkName, eType, isHorribleHackIgnoreDuplicates)); // #i81002# // Check, if bookmark has been created. // E.g., the creation of a cross-reference bookmark is suppress, diff -Nru libreoffice-l10n-4.4.2/sw/source/core/unocore/unoflatpara.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unoflatpara.cxx --- libreoffice-l10n-4.4.2/sw/source/core/unocore/unoflatpara.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unoflatpara.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -45,6 +46,7 @@ #include #include #include +#include #include #include @@ -78,8 +80,12 @@ SwXFlatParagraph::getPropertySetInfo() throw (uno::RuntimeException, std::exception) { - throw uno::RuntimeException("SwXFlatParagraph::getPropertySetInfo(): " - "not implemented", static_cast< ::cppu::OWeakObject*>(this)); + static comphelper::PropertyMapEntry s_Entries[] = { + { OUString("FieldPositions"), -1, ::cppu::UnoType>::get(), beans::PropertyAttribute::READONLY, 0 }, + { OUString("FootnotePositions"), -1, ::cppu::UnoType>::get(), beans::PropertyAttribute::READONLY, 0 }, + { OUString(), -1, css::uno::Type(), 0, 0 } + }; + return new comphelper::PropertySetInfo(s_Entries); } void SAL_CALL diff -Nru libreoffice-l10n-4.4.2/sw/source/core/unocore/unoframe.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unoframe.cxx --- libreoffice-l10n-4.4.2/sw/source/core/unocore/unoframe.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unoframe.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -254,8 +254,15 @@ const uno::Any* pXFillBackgroundItem = 0; GetProperty(XATTR_FILLBACKGROUND, 0, pXFillBackgroundItem); const uno::Any* pOwnAttrFillBmpItem = 0; GetProperty(OWN_ATTR_FILLBMP_MODE, 0, pOwnAttrFillBmpItem); + // tdf#91140: ignore SOLID fill style for determining if fill style is used + // but there is a GraphicURL + const bool bFillStyleUsed(pXFillStyleItem && pXFillStyleItem->hasValue() && + (pXFillStyleItem->get() != drawing::FillStyle_SOLID + || !pGrURL)); + SAL_INFO_IF(pXFillStyleItem && pXFillStyleItem->hasValue() && !bFillStyleUsed, + "sw.uno", "FillBaseProperties: ignoring invalid FillStyle"); const bool bXFillStyleItemUsed( - pXFillStyleItem || + bFillStyleUsed || pXFillColorItem || pXFillGradientItem || pXFillGradientNameItem || pXFillHatchItem || pXFillHatchNameItem || @@ -352,6 +359,9 @@ aXFillColorItem.PutValue(*pXFillColorItem); rToSet.Put(aXFillColorItem); + //set old-school brush color if we later encounter the + //MID_BACK_COLOR_TRANSPARENCY case below + aBrush = getSvxBrushItemFromSourceSet(rToSet, RES_BACKGROUND, false); } else if (aXFillStyleItem.GetValue() == drawing::FillStyle_SOLID && (pCol || pRGBCol)) { @@ -384,7 +394,17 @@ throw lang::IllegalArgumentException(); } - bRet &= SvxShape::SetFillAttribute(XATTR_FILLGRADIENT, aTempName, rToSet); + bool const bSuccess = SvxShape::SetFillAttribute( + XATTR_FILLGRADIENT, aTempName, rToSet); + if (aXFillStyleItem.GetValue() == drawing::FillStyle_GRADIENT) + { // tdf#90946 ignore invalid gradient-name if SOLID + bRet &= bSuccess; + } + else + { + SAL_INFO_IF(!bSuccess, "sw.uno", + "FillBaseProperties: ignoring invalid FillGradientName"); + } } } @@ -446,20 +466,31 @@ } } - if(pXFillTransparenceItem) + if (pXFillTransparenceItem) { - const XGradient aNullGrad(RGB_Color(COL_BLACK), RGB_Color(COL_WHITE)); XFillTransparenceItem aXFillTransparenceItem; - aXFillTransparenceItem.PutValue(*pXFillTransparenceItem); rToSet.Put(aXFillTransparenceItem); } - else if (aXFillStyleItem.GetValue() == drawing::FillStyle_SOLID && pColTrans) + else if (pColTrans && + !pXFillFloatTransparenceItem && !pXFillFloatTransparenceNameItem) { - // Fill style is set to solid, but no fill transparency is given. - // On the other hand, we have a BackColorTransparency, so use that. - aBrush.PutValue(*pColTrans, MID_BACK_COLOR_TRANSPARENCY); - setSvxBrushItemAsFillAttributesToTargetSet(aBrush, rToSet); + // No fill transparency is given. On the other hand, we have a + // BackColorTransparency, so use that. + // tdf#90640 tdf#90130: this is necessary for LO 4.4.0 - 4.4.2 + // that forgot to write draw:opacity into documents + // but: the value was *always* wrong for bitmaps! => ignore it + sal_Int8 nGraphicTransparency(0); + *pColTrans >>= nGraphicTransparency; + if (aXFillStyleItem.GetValue() != drawing::FillStyle_BITMAP) + { + rToSet.Put(XFillTransparenceItem(nGraphicTransparency)); + } + if (aXFillStyleItem.GetValue() == drawing::FillStyle_SOLID) + { + aBrush.PutValue(*pColTrans, MID_BACK_COLOR_TRANSPARENCY); + setSvxBrushItemAsFillAttributesToTargetSet(aBrush, rToSet); + } } if(pXGradientStepCountItem) @@ -2402,13 +2433,16 @@ pStates[i] = beans::PropertyState_AMBIGUOUS_VALUE; } } - //UUUU for FlyFrames we need to mark all properties from type RES_BACKGROUND + //UUUU for FlyFrames we need to mark the used properties from type RES_BACKGROUND // as beans::PropertyState_DIRECT_VALUE to let users of this property call // getPropertyValue where the member properties will be mapped from the // fill attributes to the according SvxBrushItem entries - else if(RES_BACKGROUND == pEntry->nWID && SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(rFmtSet)) + else if (RES_BACKGROUND == pEntry->nWID) { - pStates[i] = beans::PropertyState_DIRECT_VALUE; + if (SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(rFmtSet, pEntry->nMemberId)) + pStates[i] = beans::PropertyState_DIRECT_VALUE; + else + pStates[i] = beans::PropertyState_DEFAULT_VALUE; } else { diff -Nru libreoffice-l10n-4.4.2/sw/source/core/unocore/unoftn.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unoftn.cxx --- libreoffice-l10n-4.4.2/sw/source/core/unocore/unoftn.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unoftn.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -263,6 +263,13 @@ { SolarMutexGuard aGuard; + OUString newLabel(aLabel); + //new line must not occur as footnote label + if(newLabel.indexOf('\n') >=0 ) + { + newLabel = newLabel.replace('\n', ' '); + } + SwFmtFtn const*const pFmt = m_pImpl->GetFootnoteFormat(); if(pFmt) { @@ -271,11 +278,11 @@ SwTxtNode& rTxtNode = (SwTxtNode&)pTxtFtn->GetTxtNode(); SwPaM aPam(rTxtNode, pTxtFtn->GetStart()); - GetDoc()->SetCurFtn(aPam, aLabel, pFmt->GetNumber(), pFmt->IsEndNote()); + GetDoc()->SetCurFtn(aPam, newLabel, pFmt->GetNumber(), pFmt->IsEndNote()); } else if (m_pImpl->m_bIsDescriptor) { - m_pImpl->m_sLabel = aLabel; + m_pImpl->m_sLabel = newLabel; } else { diff -Nru libreoffice-l10n-4.4.2/sw/source/core/unocore/unomap.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unomap.cxx --- libreoffice-l10n-4.4.2/sw/source/core/unocore/unomap.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unomap.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -569,7 +569,7 @@ //UUUU #define FILL_PROPERTIES_SW_BMP \ - { OUString(UNO_NAME_SW_FILLBMP_LOGICAL_SIZE), XATTR_FILLBMP_SIZELOG, cppu::UnoType::get(), 0, 0}, \ + { OUString(UNO_NAME_SW_FILLBMP_LOGICAL_SIZE), XATTR_FILLBMP_SIZELOG, cppu::UnoType::get(), 0, 0}, \ { OUString(UNO_NAME_SW_FILLBMP_OFFSET_X), XATTR_FILLBMP_TILEOFFSETX, cppu::UnoType::get(), 0, 0}, \ { OUString(UNO_NAME_SW_FILLBMP_OFFSET_Y), XATTR_FILLBMP_TILEOFFSETY, cppu::UnoType::get(), 0, 0}, \ { OUString(UNO_NAME_SW_FILLBMP_POSITION_OFFSET_X), XATTR_FILLBMP_POSOFFSETX, cppu::UnoType::get(), 0, 0}, \ @@ -577,8 +577,8 @@ { OUString(UNO_NAME_SW_FILLBMP_RECTANGLE_POINT), XATTR_FILLBMP_POS, cppu::UnoType::get(), 0, 0}, \ { OUString(UNO_NAME_SW_FILLBMP_SIZE_X), XATTR_FILLBMP_SIZEX, cppu::UnoType::get(), 0, SFX_METRIC_ITEM}, \ { OUString(UNO_NAME_SW_FILLBMP_SIZE_Y), XATTR_FILLBMP_SIZEY, cppu::UnoType::get(), 0, SFX_METRIC_ITEM}, \ - { OUString(UNO_NAME_SW_FILLBMP_STRETCH), XATTR_FILLBMP_STRETCH, cppu::UnoType::get(), 0, 0}, \ - { OUString(UNO_NAME_SW_FILLBMP_TILE), XATTR_FILLBMP_TILE, cppu::UnoType::get(), 0, 0},\ + { OUString(UNO_NAME_SW_FILLBMP_STRETCH), XATTR_FILLBMP_STRETCH, cppu::UnoType::get(), 0, 0}, \ + { OUString(UNO_NAME_SW_FILLBMP_TILE), XATTR_FILLBMP_TILE, cppu::UnoType::get(), 0, 0},\ { OUString(UNO_NAME_SW_FILLBMP_MODE), OWN_ATTR_FILLBMP_MODE, cppu::UnoType::get(), 0, 0}, \ //UUUU @@ -599,7 +599,7 @@ { OUString(UNO_NAME_SW_FILLHATCH), XATTR_FILLHATCH, cppu::UnoType::get(), 0, MID_FILLHATCH}, \ { OUString(UNO_NAME_SW_FILLHATCHNAME), XATTR_FILLHATCH, cppu::UnoType::get(), 0, MID_NAME }, \ { OUString(UNO_NAME_SW_FILLSTYLE), XATTR_FILLSTYLE, cppu::UnoType::get(), 0, 0}, \ - { OUString(UNO_NAME_SW_FILL_TRANSPARENCE), XATTR_FILLTRANSPARENCE, cppu::UnoType::get(), 0, 0}, \ + { OUString(UNO_NAME_SW_FILL_TRANSPARENCE), XATTR_FILLTRANSPARENCE, cppu::UnoType::get(), 0, 0}, \ { OUString(UNO_NAME_SW_FILLTRANSPARENCEGRADIENT), XATTR_FILLFLOATTRANSPARENCE, cppu::UnoType::get(), 0, MID_FILLGRADIENT}, \ { OUString(UNO_NAME_SW_FILLTRANSPARENCEGRADIENTNAME), XATTR_FILLFLOATTRANSPARENCE, cppu::UnoType::get(), 0, MID_NAME }, \ { OUString(UNO_NAME_SW_FILLCOLOR_2), XATTR_SECONDARYFILLCOLOR, cppu::UnoType::get(), 0, 0}, \ @@ -1070,6 +1070,72 @@ { OUString(UNO_NAME_GRID_SNAP_TO_CHARS), RES_TEXTGRID, cppu::UnoType::get(), PROPERTY_NONE, MID_GRID_SNAPTOCHARS}, { OUString(UNO_NAME_GRID_STANDARD_PAGE_MODE), RES_TEXTGRID, cppu::UnoType::get(), PROPERTY_NONE, MID_GRID_STANDARD_MODE}, { OUString(UNO_NAME_HIDDEN), FN_UNO_HIDDEN, cppu::UnoType::get(), PROPERTY_NONE, 0}, + + //UUUU added FillProperties for SW, same as FILL_PROPERTIES in svx + // but need own defines in Writer due to later association of strings + // and uno types (see loop at end of this method and definition of SW_PROP_NMID) + // This entry is for adding that properties to style import/export + FILL_PROPERTIES_SW + + //UUUU Added DrawingLayer FillStyle Properties for Header. These need an own unique name, + // but reuse the same WhichIDs as the regular fill. The implementation will decide to which + // group of fill properties it belongs based on the start of the name (was already done in + // the implementation partially), thus all SlotNames *have* to start with 'Header' + { OUString(UNO_NAME_HEADER_FILLBMP_LOGICAL_SIZE), XATTR_FILLBMP_SIZELOG, cppu::UnoType::get() , 0, 0}, + { OUString(UNO_NAME_HEADER_FILLBMP_OFFSET_X), XATTR_FILLBMP_TILEOFFSETX, cppu::UnoType::get() , 0, 0}, + { OUString(UNO_NAME_HEADER_FILLBMP_OFFSET_Y), XATTR_FILLBMP_TILEOFFSETY, cppu::UnoType::get() , 0, 0}, + { OUString(UNO_NAME_HEADER_FILLBMP_POSITION_OFFSET_X), XATTR_FILLBMP_POSOFFSETX, cppu::UnoType::get() , 0, 0}, + { OUString(UNO_NAME_HEADER_FILLBMP_POSITION_OFFSET_Y), XATTR_FILLBMP_POSOFFSETY, cppu::UnoType::get() , 0, 0}, + { OUString(UNO_NAME_HEADER_FILLBMP_RECTANGLE_POINT), XATTR_FILLBMP_POS, cppu::UnoType::get() , 0, 0}, + { OUString(UNO_NAME_HEADER_FILLBMP_SIZE_X), XATTR_FILLBMP_SIZEX, cppu::UnoType::get() , 0, SFX_METRIC_ITEM}, + { OUString(UNO_NAME_HEADER_FILLBMP_SIZE_Y), XATTR_FILLBMP_SIZEY, cppu::UnoType::get() , 0, SFX_METRIC_ITEM}, + { OUString(UNO_NAME_HEADER_FILLBMP_STRETCH), XATTR_FILLBMP_STRETCH, cppu::UnoType::get() , 0, 0}, + { OUString(UNO_NAME_HEADER_FILLBMP_TILE), XATTR_FILLBMP_TILE, cppu::UnoType::get() , 0, 0}, + { OUString(UNO_NAME_HEADER_FILLBMP_MODE), OWN_ATTR_FILLBMP_MODE, cppu::UnoType::get(), 0, 0}, + { OUString(UNO_NAME_HEADER_FILLCOLOR), XATTR_FILLCOLOR, cppu::UnoType::get(), 0, 0}, + { OUString(UNO_NAME_HEADER_FILLBACKGROUND), XATTR_FILLBACKGROUND, cppu::UnoType::get(), 0, 0}, + { OUString(UNO_NAME_HEADER_FILLBITMAP), XATTR_FILLBITMAP, cppu::UnoType::get(), 0, MID_BITMAP}, + { OUString(UNO_NAME_HEADER_FILLBITMAPNAME), XATTR_FILLBITMAP, cppu::UnoType::get(), 0, MID_NAME }, + { OUString(UNO_NAME_HEADER_FILLBITMAPURL), XATTR_FILLBITMAP, cppu::UnoType::get(), 0, MID_GRAFURL }, + { OUString(UNO_NAME_HEADER_FILLGRADIENTSTEPCOUNT), XATTR_GRADIENTSTEPCOUNT, cppu::UnoType::get(), 0, 0}, + { OUString(UNO_NAME_HEADER_FILLGRADIENT), XATTR_FILLGRADIENT, cppu::UnoType::get(), 0, MID_FILLGRADIENT}, + { OUString(UNO_NAME_HEADER_FILLGRADIENTNAME), XATTR_FILLGRADIENT, cppu::UnoType::get(), 0, MID_NAME }, + { OUString(UNO_NAME_HEADER_FILLHATCH), XATTR_FILLHATCH, cppu::UnoType::get(), 0, MID_FILLHATCH}, + { OUString(UNO_NAME_HEADER_FILLHATCHNAME), XATTR_FILLHATCH, cppu::UnoType::get(), 0, MID_NAME }, + { OUString(UNO_NAME_HEADER_FILLSTYLE), XATTR_FILLSTYLE, cppu::UnoType::get(), 0, 0}, + { OUString(UNO_NAME_HEADER_FILL_TRANSPARENCE), XATTR_FILLTRANSPARENCE, cppu::UnoType::get(), 0, 0}, + { OUString(UNO_NAME_HEADER_FILLTRANSPARENCEGRADIENT), XATTR_FILLFLOATTRANSPARENCE, cppu::UnoType::get(), 0, MID_FILLGRADIENT}, + { OUString(UNO_NAME_HEADER_FILLTRANSPARENCEGRADIENTNAME), XATTR_FILLFLOATTRANSPARENCE, cppu::UnoType::get(), 0, MID_NAME }, + { OUString(UNO_NAME_HEADER_FILLCOLOR_2), XATTR_SECONDARYFILLCOLOR, cppu::UnoType::get(), 0, 0}, + + //UUUU Added DrawingLayer FillStyle Properties for Footer, similar as for Header (see there) + { OUString(UNO_NAME_FOOTER_FILLBMP_LOGICAL_SIZE), XATTR_FILLBMP_SIZELOG, cppu::UnoType::get() , 0, 0}, + { OUString(UNO_NAME_FOOTER_FILLBMP_OFFSET_X), XATTR_FILLBMP_TILEOFFSETX, cppu::UnoType::get() , 0, 0}, + { OUString(UNO_NAME_FOOTER_FILLBMP_OFFSET_Y), XATTR_FILLBMP_TILEOFFSETY, cppu::UnoType::get() , 0, 0}, + { OUString(UNO_NAME_FOOTER_FILLBMP_POSITION_OFFSET_X), XATTR_FILLBMP_POSOFFSETX, cppu::UnoType::get() , 0, 0}, + { OUString(UNO_NAME_FOOTER_FILLBMP_POSITION_OFFSET_Y), XATTR_FILLBMP_POSOFFSETY, cppu::UnoType::get() , 0, 0}, + { OUString(UNO_NAME_FOOTER_FILLBMP_RECTANGLE_POINT), XATTR_FILLBMP_POS, cppu::UnoType::get() , 0, 0}, + { OUString(UNO_NAME_FOOTER_FILLBMP_SIZE_X), XATTR_FILLBMP_SIZEX, cppu::UnoType::get() , 0, SFX_METRIC_ITEM}, + { OUString(UNO_NAME_FOOTER_FILLBMP_SIZE_Y), XATTR_FILLBMP_SIZEY, cppu::UnoType::get() , 0, SFX_METRIC_ITEM}, + { OUString(UNO_NAME_FOOTER_FILLBMP_STRETCH), XATTR_FILLBMP_STRETCH, cppu::UnoType::get() , 0, 0}, + { OUString(UNO_NAME_FOOTER_FILLBMP_TILE), XATTR_FILLBMP_TILE, cppu::UnoType::get() , 0, 0}, + { OUString(UNO_NAME_FOOTER_FILLBMP_MODE), OWN_ATTR_FILLBMP_MODE, cppu::UnoType::get(), 0, 0}, + { OUString(UNO_NAME_FOOTER_FILLCOLOR), XATTR_FILLCOLOR, cppu::UnoType::get(), 0, 0}, + { OUString(UNO_NAME_FOOTER_FILLBACKGROUND), XATTR_FILLBACKGROUND, cppu::UnoType::get(), 0, 0}, + { OUString(UNO_NAME_FOOTER_FILLBITMAP), XATTR_FILLBITMAP, cppu::UnoType::get(), 0, MID_BITMAP}, + { OUString(UNO_NAME_FOOTER_FILLBITMAPNAME), XATTR_FILLBITMAP, cppu::UnoType::get(), 0, MID_NAME }, + { OUString(UNO_NAME_FOOTER_FILLBITMAPURL), XATTR_FILLBITMAP, cppu::UnoType::get(), 0, MID_GRAFURL }, + { OUString(UNO_NAME_FOOTER_FILLGRADIENTSTEPCOUNT), XATTR_GRADIENTSTEPCOUNT, cppu::UnoType::get(), 0, 0}, + { OUString(UNO_NAME_FOOTER_FILLGRADIENT), XATTR_FILLGRADIENT, cppu::UnoType::get(), 0, MID_FILLGRADIENT}, + { OUString(UNO_NAME_FOOTER_FILLGRADIENTNAME), XATTR_FILLGRADIENT, cppu::UnoType::get(), 0, MID_NAME }, + { OUString(UNO_NAME_FOOTER_FILLHATCH), XATTR_FILLHATCH, cppu::UnoType::get(), 0, MID_FILLHATCH}, + { OUString(UNO_NAME_FOOTER_FILLHATCHNAME), XATTR_FILLHATCH, cppu::UnoType::get(), 0, MID_NAME }, + { OUString(UNO_NAME_FOOTER_FILLSTYLE), XATTR_FILLSTYLE, cppu::UnoType::get(), 0, 0}, + { OUString(UNO_NAME_FOOTER_FILL_TRANSPARENCE), XATTR_FILLTRANSPARENCE, cppu::UnoType::get(), 0, 0}, + { OUString(UNO_NAME_FOOTER_FILLTRANSPARENCEGRADIENT), XATTR_FILLFLOATTRANSPARENCE, cppu::UnoType::get(), 0, MID_FILLGRADIENT}, + { OUString(UNO_NAME_FOOTER_FILLTRANSPARENCEGRADIENTNAME), XATTR_FILLFLOATTRANSPARENCE, cppu::UnoType::get(), 0, MID_NAME }, + { OUString(UNO_NAME_FOOTER_FILLCOLOR_2), XATTR_SECONDARYFILLCOLOR, cppu::UnoType::get(), 0, 0}, + { OUString(), 0, css::uno::Type(), 0, 0 } }; aMapEntriesArr[nPropertyId] = aPageStyleMap; diff -Nru libreoffice-l10n-4.4.2/sw/source/core/unocore/unoparagraph.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unoparagraph.cxx --- libreoffice-l10n-4.4.2/sw/source/core/unocore/unoparagraph.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unoparagraph.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1031,11 +1031,12 @@ { if(*ppSet) { - if(SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(**ppSet)) + if (SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(**ppSet, + rEntry.nMemberId)) { eRet = beans::PropertyState_DIRECT_VALUE; - bDone = true; } + bDone = true; } break; } diff -Nru libreoffice-l10n-4.4.2/sw/source/core/unocore/unostyle.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unostyle.cxx --- libreoffice-l10n-4.4.2/sw/source/core/unocore/unostyle.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unostyle.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1759,12 +1759,16 @@ { //UUUU SfxItemSet& rStyleSet = rBase.GetItemSet(); - const SvxBrushItem aOriginalBrushItem(getSvxBrushItemFromSourceSet(rStyleSet, RES_BACKGROUND)); + const SvxBrushItem aOriginalBrushItem(getSvxBrushItemFromSourceSet(rStyleSet, RES_BACKGROUND, true, pDoc->IsInXMLImport())); SvxBrushItem aChangedBrushItem(aOriginalBrushItem); aChangedBrushItem.PutValue(aValue, nMemberId); - if(!(aChangedBrushItem == aOriginalBrushItem)) + if (!(aChangedBrushItem == aOriginalBrushItem) || + // 0xff is already the default - but if BackTransparent is set + // to true, it must be applied in the item set on ODF import + // to potentially override parent style, which is unknown yet + (MID_GRAPHIC_TRANSPARENT == nMemberId && aValue.has() && aValue.get())) { setSvxBrushItemAsFillAttributesToTargetSet(aChangedBrushItem, rStyleSet); } @@ -2919,14 +2923,20 @@ bDone = true; } - //UUUU for FlyFrames we need to mark all properties from type RES_BACKGROUND + //UUUU for FlyFrames we need to mark the used properties from type RES_BACKGROUND // as beans::PropertyState_DIRECT_VALUE to let users of this property call // getPropertyValue where the member properties will be mapped from the // fill attributes to the according SvxBrushItem entries - if(!bDone && RES_BACKGROUND == pEntry->nWID - && SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(*pSourceSet)) + if (!bDone && RES_BACKGROUND == pEntry->nWID) { - pStates[i] = beans::PropertyState_DIRECT_VALUE; + if (SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(*pSourceSet, pEntry->nMemberId)) + { + pStates[i] = beans::PropertyState_DIRECT_VALUE; + } + else + { + pStates[i] = beans::PropertyState_DEFAULT_VALUE; + } bDone = true; } @@ -4292,7 +4302,7 @@ case RES_BACKGROUND: { //UUUU - const SvxBrushItem aOriginalBrushItem(getSvxBrushItemFromSourceSet(aSet, RES_BACKGROUND)); + const SvxBrushItem aOriginalBrushItem(getSvxBrushItemFromSourceSet(aSet, RES_BACKGROUND, true, pDocShell->GetDoc()->IsInXMLImport())); SvxBrushItem aChangedBrushItem(aOriginalBrushItem); aChangedBrushItem.PutValue(aValue, nMemberId); @@ -4873,11 +4883,16 @@ } case RES_BACKGROUND: { - if(SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(*mpSet)) + if (SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(*mpSet, + pEntry->nMemberId)) { pStates[i] = beans::PropertyState_DIRECT_VALUE; - bDone = true; } + else + { + pStates[i] = beans::PropertyState_DEFAULT_VALUE; + } + bDone = true; break; } diff -Nru libreoffice-l10n-4.4.2/sw/source/core/unocore/unotbl.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unotbl.cxx --- libreoffice-l10n-4.4.2/sw/source/core/unocore/unotbl.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unotbl.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -109,6 +109,8 @@ static void lcl_SendChartEvent(::cppu::OWeakObject & rSource, ::cppu::OInterfaceContainerHelper & rListeners) { + if (!rListeners.getLength()) + return; //TODO: find appropriate settings of the Event chart::ChartDataChangeEvent event; event.Source = & rSource; diff -Nru libreoffice-l10n-4.4.2/sw/source/core/unocore/unotext.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unotext.cxx --- libreoffice-l10n-4.4.2/sw/source/core/unocore/unotext.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/unocore/unotext.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -415,10 +415,10 @@ IDocumentContentOperations::INS_EMPTYEXPAND) : IDocumentContentOperations::INS_EMPTYEXPAND; - SwPaM aTmp(*aPam.Start()); if (bAbsorb && aPam.HasMark()) { m_pImpl->m_pDoc->getIDocumentContentOperations().DeleteAndJoin(aPam); + aPam.DeleteMark(); } sal_Unicode cIns = 0; @@ -426,13 +426,13 @@ { case text::ControlCharacter::PARAGRAPH_BREAK : // a table cell now becomes an ordinary text cell! - m_pImpl->m_pDoc->ClearBoxNumAttrs( aTmp.GetPoint()->nNode ); - m_pImpl->m_pDoc->getIDocumentContentOperations().SplitNode( *aTmp.GetPoint(), false ); + m_pImpl->m_pDoc->ClearBoxNumAttrs(aPam.GetPoint()->nNode); + m_pImpl->m_pDoc->getIDocumentContentOperations().SplitNode(*aPam.GetPoint(), false); break; case text::ControlCharacter::APPEND_PARAGRAPH: { - m_pImpl->m_pDoc->ClearBoxNumAttrs( aTmp.GetPoint()->nNode ); - m_pImpl->m_pDoc->getIDocumentContentOperations().AppendTxtNode( *aTmp.GetPoint() ); + m_pImpl->m_pDoc->ClearBoxNumAttrs(aPam.GetPoint()->nNode); + m_pImpl->m_pDoc->getIDocumentContentOperations().AppendTxtNode(*aPam.GetPoint()); const uno::Reference xRangeTunnel( xTextRange, uno::UNO_QUERY); @@ -443,12 +443,12 @@ xRangeTunnel); if (pRange) { - pRange->SetPositions(aTmp); + pRange->SetPositions(aPam); } else if (pCursor) { SwPaM *const pCrsr = pCursor->GetPaM(); - *pCrsr->GetPoint() = *aTmp.GetPoint(); + *pCrsr->GetPoint() = *aPam.GetPoint(); pCrsr->DeleteMark(); } } @@ -460,7 +460,8 @@ } if (cIns) { - m_pImpl->m_pDoc->getIDocumentContentOperations().InsertString( aTmp, OUString(cIns), nInsertFlags ); + m_pImpl->m_pDoc->getIDocumentContentOperations().InsertString( + aPam, OUString(cIns), nInsertFlags); } if (bAbsorb) @@ -472,7 +473,7 @@ OTextCursorHelper *const pCursor = ::sw::UnoTunnelGetImplementation(xRangeTunnel); - SwCursor aCrsr(*aTmp.GetPoint(),0,false); + SwCursor aCrsr(*aPam.GetPoint(), 0, false); SwUnoCursorHelper::SelectPam(aCrsr, true); aCrsr.Left(1, CRSR_SKIP_CHARS, false, false); // here, the PaM needs to be moved: diff -Nru libreoffice-l10n-4.4.2/sw/source/core/view/vprint.cxx libreoffice-l10n-4.4.6~rc3/sw/source/core/view/vprint.cxx --- libreoffice-l10n-4.4.2/sw/source/core/view/vprint.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/core/view/vprint.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -535,9 +535,10 @@ SwPaintQueue::Repaint(); - if (nPostItMode == POSTITS_INMARGINS) + SwPostItMgr *pPostItManager = (nPostItMode == POSTITS_INMARGINS) ? + pShell->GetPostItMgr() : NULL; + if (pPostItManager) { - SwPostItMgr *pPostItManager = pShell->GetPostItMgr(); pPostItManager->CalcRects(); pPostItManager->LayoutPostIts(); pPostItManager->DrawNotesForPage(pOutDev, nPage-1); diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/basflt/fltshell.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/basflt/fltshell.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/basflt/fltshell.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/basflt/fltshell.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -120,8 +120,11 @@ // The only position of 0x0D will not be able to make region in the old logic // because it is beyond the length of para...need special consideration here. - SwCntntNode *const pCntntNode( - SwNodeIndex(rMkPos.m_nNode, +1).GetNode().GetCntntNode()); + sal_uLong nMk = rMkPos.m_nNode.GetIndex() + 1; + const SwNodes& rMkNodes = rMkPos.m_nNode.GetNodes(); + if (nMk >= rMkNodes.Count()) + return false; + SwCntntNode *const pCntntNode(rMkNodes[nMk]->GetCntntNode()); if (rMkPos == rPtPos && ((0 != rPtPos.m_nCntnt) || (pCntntNode && (0 != pCntntNode->Len()))) && ( RES_TXTATR_FIELD != nWhich @@ -138,7 +141,11 @@ rRegion.SetMark(); if (rMkPos.m_nNode != rPtPos.m_nNode) { - rRegion.GetPoint()->nNode = rPtPos.m_nNode.GetIndex() + 1; + sal_uLong n = rPtPos.m_nNode.GetIndex() + 1; + SwNodes& rNodes = rRegion.GetPoint()->nNode.GetNodes(); + if (n >= rNodes.Count()) + return false; + rRegion.GetPoint()->nNode = n; pCNd = GetCntntNode(pDoc, rRegion.GetPoint()->nNode, false); } rRegion.GetPoint()->nContent.Assign(pCNd, rPtPos.m_nCntnt); @@ -412,25 +419,33 @@ return pRet; } -static void MakePoint(const SwFltStackEntry& rEntry, SwDoc* pDoc, +static bool MakePoint(const SwFltStackEntry& rEntry, SwDoc* pDoc, SwPaM& rRegion) { // the anchor is the Pam's Point. It's modified when inserting // text, etc.; therefore it is kept on the stack. Only the // attribute's format needs to be set. rRegion.DeleteMark(); - rRegion.GetPoint()->nNode = rEntry.m_aMkPos.m_nNode.GetIndex() + 1; + + sal_uLong nMk = rEntry.m_aMkPos.m_nNode.GetIndex() + 1; + const SwNodes& rMkNodes = rEntry.m_aMkPos.m_nNode.GetNodes(); + if (nMk >= rMkNodes.Count()) + return false; + + rRegion.GetPoint()->nNode = nMk; SwCntntNode* pCNd = GetCntntNode(pDoc, rRegion.GetPoint()->nNode, true); rRegion.GetPoint()->nContent.Assign(pCNd, rEntry.m_aMkPos.m_nCntnt); + return true; } // MakeBookRegionOrPoint() behaves like MakeRegionOrPoint, except that // it adheres to certain restrictions on bookmarks in tables (cannot // span more than one cell) -static void MakeBookRegionOrPoint(const SwFltStackEntry& rEntry, SwDoc* pDoc, +static bool MakeBookRegionOrPoint(const SwFltStackEntry& rEntry, SwDoc* pDoc, SwPaM& rRegion, bool bCheck ) { - if (rEntry.MakeRegion(pDoc, rRegion, bCheck )){ + if (rEntry.MakeRegion(pDoc, rRegion, bCheck )) + { // sal_Bool b1 = rNds[rRegion.GetPoint()->nNode]->FindTableNode() != 0; if (rRegion.GetPoint()->nNode.GetNode().FindTableBoxStartNode() != rRegion.GetMark()->nNode.GetNode().FindTableBoxStartNode()) @@ -438,9 +453,9 @@ rRegion.Exchange(); // invalid range rRegion.DeleteMark(); // -> both to mark } - }else{ - MakePoint(rEntry, pDoc, rRegion); + return true; } + return MakePoint(rEntry, pDoc, rRegion); } // IterateNumrulePiece() looks for the first range valid for Numrules @@ -589,8 +604,10 @@ break; case RES_FLTR_ANNOTATIONMARK: { - MakeBookRegionOrPoint(rEntry, pDoc, aRegion, true); - pDoc->getIDocumentMarkAccess()->makeAnnotationMark(aRegion, OUString()); + if (MakeBookRegionOrPoint(rEntry, pDoc, aRegion, true)) + pDoc->getIDocumentMarkAccess()->makeAnnotationMark(aRegion, OUString()); + else + SAL_WARN("sw", "failed to make book region or point"); } break; case RES_FLTR_TOX: diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/html/wrthtml.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/html/wrthtml.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/html/wrthtml.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/html/wrthtml.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1198,8 +1198,13 @@ } } } - INetURLObject aURL( sURL ); - return URIHelper::simpleNormalizedMakeRelative( GetBaseURL(), aURL.GetMainURL( INetURLObject::NO_DECODE ) ); + else if (!sURL.isEmpty() && sURL[0] != '#') + { + // Link is not started from "#", so looks like external link. Encode this URL. + INetURLObject aURL(sURL); + sURL = aURL.GetMainURL(INetURLObject::NO_DECODE); + } + return URIHelper::simpleNormalizedMakeRelative( GetBaseURL(), sURL ); } void SwHTMLWriter::OutHyperlinkHRefValue( const OUString& rURL ) diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/rtf/swparrtf.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/rtf/swparrtf.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/rtf/swparrtf.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/rtf/swparrtf.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -56,7 +56,7 @@ // the end position. const uno::Reference xInsertPosition = SwXTextRange::CreateXTextRange(rDoc, *rPam.GetPoint(), 0); - SwNodeIndex *pSttNdIdx = new SwNodeIndex(rDoc.GetNodes()); + std::shared_ptr pSttNdIdx(new SwNodeIndex(rDoc.GetNodes())); const SwPosition* pPos = rPam.GetPoint(); // Step 2: Split once and remember the node that has been split. @@ -65,6 +65,8 @@ // Step 3: Split again. rDoc.getIDocumentContentOperations().SplitNode( *pPos, false ); + std::shared_ptr pSttNdIdx2(new SwNodeIndex(rDoc.GetNodes())); + *pSttNdIdx2 = pPos->nNode.GetIndex(); // Step 4: Insert all content into the new node rPam.Move( fnMoveBackward ); @@ -135,6 +137,27 @@ } } + if (pSttNdIdx2->GetIndex()) + { + // If we are in insert mode, join the split node that is after + // the new content with the last new node. Or in other words: + // Revert the second split node. + SwTxtNode* pTxtNode = pSttNdIdx2->GetNode().GetTxtNode(); + SwNodeIndex aPrevIdx(*pSttNdIdx2); + if (pTxtNode && pTxtNode->CanJoinPrev(&aPrevIdx) && pSttNdIdx2->GetIndex() - 1 == aPrevIdx.GetIndex()) + { + // If the last new node isn't empty, convert the node's text + // attributes into hints. Otherwise, set the new node's + // paragraph style at the next (empty) node. + SwTxtNode* pDelNd = aPrevIdx.GetNode().GetTxtNode(); + if (pTxtNode->GetTxt().getLength()) + pDelNd->FmtToTxtAttr(pTxtNode); + else + pTxtNode->ChgFmtColl(pDelNd->GetTxtColl()); + pTxtNode->JoinPrev(); + } + } + return ret; } diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/attributeoutputbase.hxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/attributeoutputbase.hxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/attributeoutputbase.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/attributeoutputbase.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -156,7 +156,7 @@ virtual void EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pTextNodeInfoInner ) = 0; /// Called in order to output section breaks. - virtual void SectionBreaks(const SwTxtNode& rNode) = 0; + virtual void SectionBreaks(const SwNode& rNode) = 0; /// Called before we start outputting the attributes. virtual void StartParagraphProperties() = 0; diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/docxattributeoutput.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/docxattributeoutput.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/docxattributeoutput.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/docxattributeoutput.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -91,6 +91,7 @@ #include #include +#include #include #include #include @@ -749,7 +750,7 @@ m_pSerializer->singleElementNS( XML_w, XML_p, FSEND ); } -void DocxAttributeOutput::SectionBreaks(const SwTxtNode& rNode) +void DocxAttributeOutput::SectionBreaks(const SwNode& rNode) { // output page/section breaks // Writer can have them at the beginning of a paragraph, or at the end, but @@ -757,16 +758,31 @@ // paragraph in a section. To get it right, we have to switch to the next // paragraph, and detect the section breaks there. SwNodeIndex aNextIndex( rNode, 1 ); - if ( aNextIndex.GetNode().IsTxtNode() ) + + if (rNode.IsTxtNode()) { - const SwTxtNode* pTxtNode = static_cast< SwTxtNode* >( &aNextIndex.GetNode() ); - m_rExport.OutputSectionBreaks( pTxtNode->GetpSwAttrSet(), *pTxtNode, m_tableReference->m_bTableCellOpen, pTxtNode->GetTxt().isEmpty() ); + if (aNextIndex.GetNode().IsTxtNode()) + { + const SwTxtNode* pTxtNode = static_cast(&aNextIndex.GetNode()); + m_rExport.OutputSectionBreaks(pTxtNode->GetpSwAttrSet(), *pTxtNode, m_tableReference->m_bTableCellOpen, pTxtNode->GetTxt().isEmpty()); + } + else if (aNextIndex.GetNode().IsTableNode()) + { + const SwTableNode* pTableNode = static_cast(&aNextIndex.GetNode()); + const SwFrmFmt *pFmt = pTableNode->GetTable().GetFrmFmt(); + m_rExport.OutputSectionBreaks(&(pFmt->GetAttrSet()), *pTableNode); + } } - else if ( aNextIndex.GetNode().IsTableNode() ) + else if (rNode.IsEndNode()) { - const SwTableNode* pTableNode = static_cast< SwTableNode* >( &aNextIndex.GetNode() ); - const SwFrmFmt *pFmt = pTableNode->GetTable().GetFrmFmt(); - m_rExport.OutputSectionBreaks( &(pFmt->GetAttrSet()), *pTableNode ); + // End of something: make sure that it's the end of a table. + assert(rNode.StartOfSectionNode()->IsTableNode()); + if (aNextIndex.GetNode().IsTxtNode()) + { + // Handle section break between a table and a text node following it. + const SwTxtNode* pTxtNode = aNextIndex.GetNode().GetTxtNode(); + m_rExport.OutputSectionBreaks(pTxtNode->GetpSwAttrSet(), *pTxtNode, m_tableReference->m_bTableCellOpen, pTxtNode->GetTxt().isEmpty()); + } } } @@ -1040,11 +1056,6 @@ { StartField_Impl( *pIt ); - if ( m_pHyperlinkAttrList ) - { - m_nFieldsInHyperlink++; - } - // Remove the field from the stack if only the start has to be written // Unknown fields should be removed too if ( !pIt->bClose || ( pIt->eType == ww::eUNKNOWN ) ) @@ -1054,6 +1065,11 @@ pIt = m_Fields.erase( pIt ); continue; } + + if ( m_pHyperlinkAttrList ) + { + m_nFieldsInHyperlink++; + } } ++pIt; } @@ -1540,7 +1556,8 @@ OUString sExpand; if(rInfos.eType == ww::eCITATION) { - sExpand = rInfos.pField->ExpandCitation(AUTH_FIELD_TITLE); + sExpand = static_cast(rInfos.pField) + ->ExpandCitation(AUTH_FIELD_TITLE); } else { @@ -4044,6 +4061,22 @@ void DocxAttributeOutput::ClearRelIdCache() { m_aRelIdCache.clear(); + m_aSdrRelIdCache.clear(); +} + +OUString DocxAttributeOutput::FindRelId(sal_uInt32 nChecksum) +{ + OUString aRet; + + if (m_aSdrRelIdCache.find(nChecksum) != m_aSdrRelIdCache.end()) + aRet = m_aSdrRelIdCache[nChecksum]; + + return aRet; +} + +void DocxAttributeOutput::CacheRelId(sal_uInt32 nChecksum, const OUString& rRelId) +{ + m_aSdrRelIdCache[nChecksum] = rRelId; } void DocxAttributeOutput::FlyFrameGraphic( const SwGrfNode* pGrfNode, const Size& rSize, const SwFlyFrmFmt* pOLEFrmFmt, SwOLENode* pOLENode, const SdrObject* pSdrObj ) @@ -5582,7 +5615,7 @@ case style::NumberingType::NUMBER_HANGUL_KO: aType="koreanDigital";break; case style::NumberingType::NUMBER_UPPER_KO: aType="koreanLegal"; break; default: - aType = "decimal"; break; + aType = "none"; break; } return aType; } @@ -6005,6 +6038,8 @@ } m_rExport.OutputItemSet( *pOutSet, false, true, i18n::ScriptType::LATIN, m_rExport.mbExportModeRTF ); + WriteCollectedRunProperties(); + m_pSerializer->endElementNS( XML_w, XML_rPr ); } diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/docxattributeoutput.hxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/docxattributeoutput.hxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/docxattributeoutput.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/docxattributeoutput.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -155,7 +155,7 @@ virtual void EmptyParagraph() SAL_OVERRIDE; /// Called in order to output section breaks. - virtual void SectionBreaks(const SwTxtNode& rNode) SAL_OVERRIDE; + virtual void SectionBreaks(const SwNode& rNode) SAL_OVERRIDE; /// Called before we start outputting the attributes. virtual void StartParagraphProperties() SAL_OVERRIDE; @@ -901,6 +901,8 @@ /// RelId <-> Graphic* cache, so that in case of alternate content, the same graphic only gets written once. std::map m_aRelIdCache; + /// RelId <-> sal_uInt32 (bitmap checksum) cache, similar to m_aRelIdCache, but used for non-Writer graphics, handled in oox. + std::map m_aSdrRelIdCache; /// members to control the existence of grabbagged SDT properties in the paragraph sal_Int32 m_nParagraphSdtPrToken; @@ -958,6 +960,8 @@ virtual void WriteVMLTextBox(css::uno::Reference xShape) SAL_OVERRIDE; /// DMLTextExport virtual void WriteTextBox(css::uno::Reference xShape) SAL_OVERRIDE; + virtual OUString FindRelId(sal_uInt32 nChecksum) SAL_OVERRIDE; + virtual void CacheRelId(sal_uInt32 nChecksum, const OUString& rRelId) SAL_OVERRIDE; virtual oox::drawingml::DrawingML& GetDrawingML() SAL_OVERRIDE; void BulletDefinition(int nId, const Graphic& rGraphic, Size aSize) SAL_OVERRIDE; diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/docxexport.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/docxexport.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/docxexport.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/docxexport.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -501,6 +501,9 @@ m_pSections->AppendSection( pAktPageDesc, pParentFmt, nRstLnNum ); } } + else if (TXT_MAINTEXT == nTxtTyp && rEndNode.StartOfSectionNode()->IsTableNode()) + // End node of a table: see if a section break should be written after the table. + AttrOutput().SectionBreaks(rEndNode); } void DocxExport::OutputTableNode( const SwTableNode& ) diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/docxsdrexport.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/docxsdrexport.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/docxsdrexport.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/docxsdrexport.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1525,23 +1525,25 @@ pFS->endElementNS(XML_a, XML_graphic); // Relative size of the Text Frame. - if (rSize.GetWidthPercent()) + const sal_uInt8 nWidthPercent = rSize.GetWidthPercent(); + if (nWidthPercent && nWidthPercent != 0xff) { pFS->startElementNS(XML_wp14, XML_sizeRelH, XML_relativeFrom, (rSize.GetWidthPercentRelation() == text::RelOrientation::PAGE_FRAME ? "page" : "margin"), FSEND); pFS->startElementNS(XML_wp14, XML_pctWidth, FSEND); - pFS->writeEscaped(OUString::number(rSize.GetWidthPercent() * oox::drawingml::PER_PERCENT)); + pFS->writeEscaped(OUString::number(nWidthPercent * oox::drawingml::PER_PERCENT)); pFS->endElementNS(XML_wp14, XML_pctWidth); pFS->endElementNS(XML_wp14, XML_sizeRelH); } - if (rSize.GetHeightPercent()) + const sal_uInt8 nHeightPercent = rSize.GetHeightPercent(); + if (nHeightPercent && nHeightPercent != 0xff) { pFS->startElementNS(XML_wp14, XML_sizeRelV, XML_relativeFrom, (rSize.GetHeightPercentRelation() == text::RelOrientation::PAGE_FRAME ? "page" : "margin"), FSEND); pFS->startElementNS(XML_wp14, XML_pctHeight, FSEND); - pFS->writeEscaped(OUString::number(rSize.GetHeightPercent() * oox::drawingml::PER_PERCENT)); + pFS->writeEscaped(OUString::number(nHeightPercent * oox::drawingml::PER_PERCENT)); pFS->endElementNS(XML_wp14, XML_pctHeight); pFS->endElementNS(XML_wp14, XML_sizeRelV); } diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/rtfattributeoutput.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/rtfattributeoutput.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/rtfattributeoutput.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/rtfattributeoutput.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -245,7 +245,6 @@ // In case of subtables, we may not get the first cell. if (pDeepInner && (pDeepInner->getCell() == 0 || m_bTableRowEnded)) { - m_bTableRowEnded = false; StartTableRow(pDeepInner); } @@ -325,33 +324,36 @@ m_rExport.Strm().WriteCharPtr(SAL_NEWLINE_STRING).WriteCharPtr(OOO_STRING_SVTOOLS_RTF_PAR).WriteChar(' '); } -void RtfAttributeOutput::SectionBreaks(const SwTxtNode& rNode) +void RtfAttributeOutput::SectionBreaks(const SwNode& rNode) { - OSL_ENSURE(m_aStyles.getLength() == 0, "m_aStyles is not empty"); + if (rNode.IsTxtNode()) + { + OSL_ENSURE(m_aStyles.getLength() == 0, "m_aStyles is not empty"); - // output page/section breaks - SwNodeIndex aNextIndex(rNode, 1); - m_rExport.Strm().WriteCharPtr(m_aSectionBreaks.makeStringAndClear().getStr()); - m_bBufferSectionBreaks = true; + // output page/section breaks + SwNodeIndex aNextIndex(rNode, 1); + m_rExport.Strm().WriteCharPtr(m_aSectionBreaks.makeStringAndClear().getStr()); + m_bBufferSectionBreaks = true; - // output section headers / footers - if (!m_bBufferSectionHeaders) - m_rExport.Strm().WriteCharPtr(m_aSectionHeaders.makeStringAndClear().getStr()); + // output section headers / footers + if (!m_bBufferSectionHeaders) + m_rExport.Strm().WriteCharPtr(m_aSectionHeaders.makeStringAndClear().getStr()); - if (aNextIndex.GetNode().IsTxtNode()) - { - const SwTxtNode* pTxtNode = static_cast< SwTxtNode* >(&aNextIndex.GetNode()); - m_rExport.OutputSectionBreaks(pTxtNode->GetpSwAttrSet(), *pTxtNode); - // Save the current page description for now, so later we will be able to access the previous one. - m_pPrevPageDesc = pTxtNode->FindPageDesc(false); - } - else if (aNextIndex.GetNode().IsTableNode()) - { - const SwTableNode* pTableNode = static_cast< SwTableNode* >(&aNextIndex.GetNode()); - const SwFrmFmt* pFmt = pTableNode->GetTable().GetFrmFmt(); - m_rExport.OutputSectionBreaks(&(pFmt->GetAttrSet()), *pTableNode); + if (aNextIndex.GetNode().IsTxtNode()) + { + const SwTxtNode* pTxtNode = static_cast< SwTxtNode* >(&aNextIndex.GetNode()); + m_rExport.OutputSectionBreaks(pTxtNode->GetpSwAttrSet(), *pTxtNode); + // Save the current page description for now, so later we will be able to access the previous one. + m_pPrevPageDesc = pTxtNode->FindPageDesc(false); + } + else if (aNextIndex.GetNode().IsTableNode()) + { + const SwTableNode* pTableNode = static_cast< SwTableNode* >(&aNextIndex.GetNode()); + const SwFrmFmt* pFmt = pTableNode->GetTable().GetFrmFmt(); + m_rExport.OutputSectionBreaks(&(pFmt->GetAttrSet()), *pTableNode); + } + m_bBufferSectionBreaks = false; } - m_bBufferSectionBreaks = false; } void RtfAttributeOutput::StartParagraphProperties() @@ -438,52 +440,58 @@ bool RtfAttributeOutput::StartURL(const OUString& rUrl, const OUString& rTarget) { - m_aStyles.append('{'); - m_aStyles.append(OOO_STRING_SVTOOLS_RTF_FIELD); - m_aStyles.append('{'); - m_aStyles.append(OOO_STRING_SVTOOLS_RTF_IGNORE); - m_aStyles.append(OOO_STRING_SVTOOLS_RTF_FLDINST); - m_aStyles.append(" HYPERLINK "); + m_sURL = rUrl; + // Ignore hyperlink without an URL. + if (!rUrl.isEmpty()) + { + m_aStyles.append('{'); + m_aStyles.append(OOO_STRING_SVTOOLS_RTF_FIELD); + m_aStyles.append('{'); + m_aStyles.append(OOO_STRING_SVTOOLS_RTF_IGNORE); + m_aStyles.append(OOO_STRING_SVTOOLS_RTF_FLDINST); + m_aStyles.append(" HYPERLINK "); - OUString sURL(rUrl); - if (!sURL.isEmpty()) - { + OUString sURL(rUrl); m_aStyles.append("\""); m_aStyles.append(msfilter::rtfutil::OutString(sURL, m_rExport.eCurrentEncoding)); m_aStyles.append("\" "); - } - if (!rTarget.isEmpty()) - { - m_aStyles.append("\\\\t \""); - m_aStyles.append(msfilter::rtfutil::OutString(rTarget, m_rExport.eCurrentEncoding)); - m_aStyles.append("\" "); - } + if (!rTarget.isEmpty()) + { + m_aStyles.append("\\\\t \""); + m_aStyles.append(msfilter::rtfutil::OutString(rTarget, m_rExport.eCurrentEncoding)); + m_aStyles.append("\" "); + } - m_aStyles.append("}"); - m_aStyles.append("{" OOO_STRING_SVTOOLS_RTF_FLDRSLT " {"); + m_aStyles.append("}"); + m_aStyles.append("{" OOO_STRING_SVTOOLS_RTF_FLDRSLT " {"); + } return true; } bool RtfAttributeOutput::EndURL(bool const isAtEndOfParagraph) { - // UGLY: usually EndRun is called earlier, but there is an extra - // call to OutAttrWithRange() when at the end of the paragraph, - // so in that special case the output needs to be appended to the - // new run's text instead of the previous run - if (isAtEndOfParagraph) - { - // close the fldrslt group - m_aRunText->append("}}"); - // close the field group - m_aRunText->append('}'); - } - else + if (!m_sURL.isEmpty()) { - // close the fldrslt group - m_aRun->append("}}"); - // close the field group - m_aRun->append('}'); + // UGLY: usually EndRun is called earlier, but there is an extra + // call to OutAttrWithRange() when at the end of the paragraph, + // so in that special case the output needs to be appended to the + // new run's text instead of the previous run + if (isAtEndOfParagraph) + { + // close the fldrslt group + m_aRunText->append("}}"); + // close the field group + m_aRunText->append('}'); + } + else + { + // close the fldrslt group + m_aRun->append("}}"); + // close the field group + m_aRun->append('}'); + } + m_sURL.clear(); } return true; } @@ -882,6 +890,7 @@ { sal_uInt32 nCurrentDepth = pTableTextNodeInfoInner->getDepth(); SAL_INFO("sw.rtf", OSL_THIS_FUNC << ", (depth is " << nCurrentDepth << ")"); + m_bTableRowEnded = false; TableDefinition(pTableTextNodeInfoInner); @@ -1604,9 +1613,10 @@ const SwFmtFrmSize& rSize = rFrmFmt.GetFrmSize(); // Relative size of the Text Frame. - if (rSize.GetWidthPercent()) + const sal_uInt8 nWidthPercent = rSize.GetWidthPercent(); + if (nWidthPercent && nWidthPercent != 0xff) { - rFlyProperties.push_back(std::make_pair("pctHoriz", OString::number(rSize.GetWidthPercent() * 10))); + rFlyProperties.push_back(std::make_pair("pctHoriz", OString::number(nWidthPercent * 10))); OString aRelation; switch (rSize.GetWidthPercentRelation()) @@ -1620,9 +1630,10 @@ } rFlyProperties.push_back(std::make_pair("sizerelh", aRelation)); } - if (rSize.GetHeightPercent()) + const sal_uInt8 nHeightPercent = rSize.GetHeightPercent(); + if (nHeightPercent && nHeightPercent != 0xff) { - rFlyProperties.push_back(std::make_pair("pctVert", OString::number(rSize.GetHeightPercent() * 10))); + rFlyProperties.push_back(std::make_pair("pctVert", OString::number(nHeightPercent * 10))); OString aRelation; switch (rSize.GetHeightPercentRelation()) diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/rtfattributeoutput.hxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/rtfattributeoutput.hxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/rtfattributeoutput.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/rtfattributeoutput.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -53,7 +53,7 @@ virtual void EmptyParagraph() SAL_OVERRIDE; /// Called in order to output section breaks. - virtual void SectionBreaks(const SwTxtNode& rNode) SAL_OVERRIDE; + virtual void SectionBreaks(const SwNode& rNode) SAL_OVERRIDE; /// Called before we start outputting the attributes. virtual void StartParagraphProperties() SAL_OVERRIDE; @@ -596,6 +596,9 @@ boost::optional m_oFillStyle; + /// If we're in the process of exporting a hyperlink, then its URL. + OUString m_sURL; + public: RtfAttributeOutput(RtfExport& rExport); diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/types.hxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/types.hxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/types.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/types.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -28,6 +28,7 @@ { public: const sal_uInt8* data() const { return empty() ? 0 : &front(); } + sal_uInt8* data() { return empty() ? 0 : &front(); } }; enum WordVersion {eWW1 = 1, eWW2 = 2, eWW6 = 6, eWW7 = 7, eWW8 = 8}; diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/wrtw8esh.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/wrtw8esh.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/wrtw8esh.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/wrtw8esh.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1162,9 +1162,30 @@ void MSWord_SdrAttrIter::OutAttr( sal_Int32 nSwPos ) { - OutParaAttr(true); + //Collect the which ids belong to the run that we will export after + //outputting the underlying paragraph attributes. We will exclude + //writing these from the underlying paragraph attributes to avoid + //duplicate attributes in docx export. Doesn't matter in doc + //export as later props just override earlier ones. + std::set aUsedRunWhichs; + if (!aTxtAtrArr.empty()) + { + for(std::vector::const_iterator i = aTxtAtrArr.begin(); i < aTxtAtrArr.end(); ++i) + { + if (nSwPos >= i->nStart && nSwPos < i->nEnd) + { + sal_uInt16 nWhich = i->pAttr->Which(); + aUsedRunWhichs.insert(nWhich); + } + + if( nSwPos < i->nStart ) + break; + } + } - if(!aTxtAtrArr.empty()) + OutParaAttr(true, &aUsedRunWhichs); + + if (!aTxtAtrArr.empty()) { const SwModify* pOldMod = m_rExport.pOutFmtNode; m_rExport.pOutFmtNode = 0; @@ -1274,7 +1295,7 @@ return *pRet; } -void MSWord_SdrAttrIter::OutParaAttr(bool bCharAttr) +void MSWord_SdrAttrIter::OutParaAttr(bool bCharAttr, const std::set* pWhichsToIgnore) { SfxItemSet aSet( pEditObj->GetParaAttribs( nPara )); if( aSet.Count() ) @@ -1288,9 +1309,14 @@ const SfxItemPool* pSrcPool = pEditPool, * pDstPool = &m_rExport.pDoc->GetAttrPool(); - do { - sal_uInt16 nWhich = pItem->Which(), - nSlotId = pSrcPool->GetSlotId( nWhich ); + do + { + sal_uInt16 nWhich = pItem->Which(); + + if (pWhichsToIgnore && pWhichsToIgnore->find(nWhich) != pWhichsToIgnore->end()) + continue; + + sal_uInt16 nSlotId = pSrcPool->GetSlotId(nWhich); if ( nSlotId && nWhich != nSlotId && 0 != ( nWhich = pDstPool->GetWhich( nSlotId ) ) && diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/wrtww8.hxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/wrtww8.hxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/wrtww8.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/wrtww8.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -1477,7 +1477,7 @@ MSWord_SdrAttrIter( MSWordExportBase& rWr, const EditTextObject& rEditObj, sal_uInt8 nType ); void NextPara( sal_Int32 nPar ); - void OutParaAttr(bool bCharAttr); + void OutParaAttr(bool bCharAttr, const std::set* pWhichsToIgnore = NULL); void OutEEField(const SfxPoolItem& rHt); bool IsTxtAttr(sal_Int32 nSwPos); diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8atr.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8atr.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8atr.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8atr.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1864,6 +1864,27 @@ void WW8Export::OutputField( const SwField* pFld, ww::eField eFldType, const OUString& rFldCmd, sal_uInt8 nMode ) { + OUString sFieldCmd(rFldCmd); + switch (eFldType) + { + // map fields that are not supported in WW8 as of Word 2003 + case ww::eBIBLIOGRPAHY: + eFldType = ww::eQUOTE; + assert(rFldCmd == FieldString(ww::eBIBLIOGRPAHY)); + sFieldCmd = FieldString(ww::eQUOTE); + break; + case ww::eCITATION: + eFldType = ww::eQUOTE; + assert(rFldCmd.startsWith(FieldString(ww::eCITATION))); + sFieldCmd = rFldCmd.replaceFirst(FieldString(ww::eCITATION), + FieldString(ww::eQUOTE)); + break; + default: + break; + } + + assert(eFldType <= 0x5F); // 95 is the highest documented one + bool bUnicode = IsUnicode(); WW8_WrPlcFld* pFldP = CurrentFieldPlc(); @@ -1881,10 +1902,10 @@ if (WRITEFIELD_CMD_START & nMode) { if (bUnicode) - SwWW8Writer::WriteString16(Strm(), rFldCmd, false); + SwWW8Writer::WriteString16(Strm(), sFieldCmd, false); else { - SwWW8Writer::WriteString8(Strm(), rFldCmd, false, + SwWW8Writer::WriteString8(Strm(), sFieldCmd, false, RTL_TEXTENCODING_MS_1252); } // #i43956# - write hyperlink character including @@ -1937,7 +1958,7 @@ if( pFld ) sOut = lcl_GetExpandedField(*pFld); else - sOut = rFldCmd; + sOut = sFieldCmd; if( !sOut.isEmpty() ) { if( bUnicode ) @@ -2061,10 +2082,12 @@ nRet = 2; break; case TOKEN_TEXT: + { nRet = 3; - rText = aIt->sText.copy( 0, 5 ); // #i21237# + sal_Int32 nCount = std::min(5, aIt->sText.getLength()); + rText = aIt->sText.copy(0, nCount); // #i21237# break; - + } case TOKEN_LINK_START: case TOKEN_LINK_END: break; @@ -2935,7 +2958,15 @@ break; case RES_AUTHORITY: { - OUString sRet(pFld->ExpandCitation(AUTH_FIELD_IDENTIFIER)); + OUString sRet(static_cast(pFld) + ->ExpandCitation(AUTH_FIELD_IDENTIFIER)); + // FIXME: DomainMapper_Impl::CloseFieldCommand() stuffs fully formed + // field instructions in here, but if the field doesn't originate + // from those filters it won't have that + if (!sRet.trim().startsWith("CITATION")) + { + sRet = FieldString(ww::eCITATION) + " \"" + sRet + "\""; + } GetExport().OutputField( pFld, ww::eCITATION, sRet ); } break; diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8attributeoutput.hxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8attributeoutput.hxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8attributeoutput.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8attributeoutput.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -36,7 +36,7 @@ virtual void EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pTextNodeInfoInner ) SAL_OVERRIDE; /// Called in order to output section breaks. - virtual void SectionBreaks(const SwTxtNode& /*rNode*/) SAL_OVERRIDE {} + virtual void SectionBreaks(const SwNode& /*rNode*/) SAL_OVERRIDE {} /// Called before we start outputting the attributes. virtual void StartParagraphProperties() SAL_OVERRIDE {} diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8glsy.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8glsy.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8glsy.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8glsy.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -209,9 +209,7 @@ SfxObjectShellLock xDocSh(new SwDocShell(SFX_CREATE_MODE_INTERNAL)); if (xDocSh->DoInitNew(0)) { - SwDoc *pD = ((SwDocShell*)(&xDocSh))->GetDoc(); - SwWW8ImplReader* pRdr = new SwWW8ImplReader(pGlossary->nVersion, - xStg, &rStrm, *pD, rBlocks.GetBaseURL(), true); + SwDoc *pD = static_cast((&xDocSh))->GetDoc(); SwNodeIndex aIdx( *pD->GetNodes().GetEndOfContent().StartOfSectionNode(), 1); @@ -223,11 +221,11 @@ SwPaM aPamo( aIdx ); aPamo.GetPoint()->nContent.Assign(aIdx.GetNode().GetCntntNode(), 0); - pRdr->LoadDoc(aPamo,this); - + std::unique_ptr xRdr(new SwWW8ImplReader( + pGlossary->nVersion, xStg, &rStrm, *pD, rBlocks.GetBaseURL(), + true, *aPamo.GetPoint())); + xRdr->LoadDoc(this); bRet = MakeEntries(pD, rBlocks, bSaveRelFile, aStrings, aData); - - delete pRdr; } xDocSh->DoClose(); rBlocks.EndPutMuchBlockEntries(); diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8graf.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8graf.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8graf.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8graf.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -460,23 +460,23 @@ return pObj; } -ESelection SwWW8ImplReader::GetESelection( long nCpStart, long nCpEnd ) +ESelection GetESelection(EditEngine &rDrawEditEngine, long nCpStart, long nCpEnd) { - sal_Int32 nPCnt = mpDrawEditEngine->GetParagraphCount(); + sal_Int32 nPCnt = rDrawEditEngine.GetParagraphCount(); sal_Int32 nSP = 0; sal_Int32 nEP = 0; while( (nSP < nPCnt) - && (nCpStart >= mpDrawEditEngine->GetTextLen( nSP ) + 1) ) + && (nCpStart >= rDrawEditEngine.GetTextLen( nSP ) + 1) ) { - nCpStart -= mpDrawEditEngine->GetTextLen( nSP ) + 1; + nCpStart -= rDrawEditEngine.GetTextLen( nSP ) + 1; nSP++; } // Beim Ende erst 1 Zeichen spaeter auf naechste Zeile umschalten, // da sonst Zeilenattribute immer eine Zeile zu weit reichen. while( (nEP < nPCnt) - && (nCpEnd > mpDrawEditEngine->GetTextLen( nEP ) + 1) ) + && (nCpEnd > rDrawEditEngine.GetTextLen( nEP ) + 1) ) { - nCpEnd -= mpDrawEditEngine->GetTextLen( nEP ) + 1; + nCpEnd -= rDrawEditEngine.GetTextLen( nEP ) + 1; nEP++; } return ESelection( nSP, nCpStart, nEP, nCpEnd ); @@ -657,7 +657,7 @@ comphelper::string::padToLength(sTemp, nTxtStart - nStartReplace, cReplaceSymbol); mpDrawEditEngine->QuickInsertText(sTemp.makeStringAndClear(), - GetESelection(nStartReplace - nStartCp, + GetESelection(*mpDrawEditEngine, nStartReplace - nStartCp, nTxtStart - nStartCp ) ); } } @@ -734,7 +734,7 @@ if( pS->Count() ) { mpDrawEditEngine->QuickSetAttribs( *pS, - GetESelection( nTxtStart - nStartCp, nEnd - nStartCp ) ); + GetESelection(*mpDrawEditEngine, nTxtStart - nStartCp, nEnd - nStartCp) ); delete pS; pS = new SfxItemSet(mpDrawEditEngine->GetEmptyItemSet()); } @@ -752,7 +752,7 @@ myIter aEnd = aChunks.end(); for (myIter aIter = aChunks.begin(); aIter != aEnd; ++aIter) { - ESelection aSel(GetESelection(aIter->GetStartPos()-nStartCp, + ESelection aSel(GetESelection(*mpDrawEditEngine, aIter->GetStartPos()-nStartCp, aIter->GetEndPos()-nStartCp)); OUString aString(mpDrawEditEngine->GetText(aSel)); const sal_Int32 nOrigLen = aString.getLength(); @@ -881,9 +881,10 @@ // TxbxText() holt aus WW-File den Text und gibt diesen und den Anfangs- und // den um -2 (bzw. -1 bei Ver8) korrigierten End-Cp zurueck -bool SwWW8ImplReader::GetRangeAsDrawingString(OUString& rString, long nStartCp, long nEndCp, ManTypes eType) +sal_Int32 SwWW8ImplReader::GetRangeAsDrawingString(OUString& rString, long nStartCp, long nEndCp, ManTypes eType) { - WW8_CP nOffset = pWwFib->GetBaseCp(eType); + WW8_CP nOffset = 0; + pWwFib->GetBaseCp(eType, &nOffset); //TODO: check return value OSL_ENSURE(nStartCp <= nEndCp, "+Wo ist der Grafik-Text (7) ?"); if (nStartCp == nEndCp) @@ -900,23 +901,73 @@ rString = rString.copy(0, nLen-1); rString = rString.replace( 0xb, 0xa ); - return true; + return nLen; } } - return false; + return 0; +} + +//EditEngine::InsertText will replace dos lines resulting in a shorter +//string than is passed in, so inserting attributes based on the original +//string len can fail. So here replace the dos line ends similar to +//how EditEngine does it, but preserve the length and replace the extra +//chars with placeholders, record the position of the placeholders and +//remove those extra chars after attributes have been inserted +std::vector replaceDosLineEndsButPreserveLength(OUString &rIn) +{ + OUStringBuffer aNewData(rIn); + std::vector aDosLineEndDummies; + sal_Int32 i = 0; + sal_Int32 nStrLen = rIn.getLength(); + while (i < nStrLen) + { + // \r or \n causes linebreak + if (rIn[i] == '\r' || rIn[i] == '\n') + { + // skip char if \r\n or \n\r + if ( (i+1) < nStrLen && ((rIn[i+1] == '\r') || (rIn[i+1] == '\n')) && + (rIn[i] != rIn[i+1]) ) + { + ++i; + aDosLineEndDummies.push_back(i); + aNewData[i] = 0; + } + } + ++i; + } + rIn = aNewData.makeStringAndClear(); + return aDosLineEndDummies; +} + +void removePositions(EditEngine &rDrawEditEngine, const std::vector& rDosLineEndDummies) +{ + for (auto aIter = rDosLineEndDummies.rbegin(); aIter != rDosLineEndDummies.rend(); ++aIter) + { + sal_Int32 nCharPos(*aIter); + rDrawEditEngine.QuickDelete(GetESelection(rDrawEditEngine, nCharPos, nCharPos+1)); + } } OutlinerParaObject* SwWW8ImplReader::ImportAsOutliner(OUString &rString, WW8_CP nStartCp, WW8_CP nEndCp, ManTypes eType) { OutlinerParaObject* pRet = 0; - if (GetRangeAsDrawingString( rString, nStartCp, nEndCp, eType )) + sal_Int32 nLen = GetRangeAsDrawingString(rString, nStartCp, nEndCp, eType); + if (nLen > 0) { if (!mpDrawEditEngine) mpDrawEditEngine = new EditEngine(0); - mpDrawEditEngine->SetText(rString); - InsertAttrsAsDrawingAttrs(nStartCp, nEndCp, eType); + //replace dos line endings with editeng ones, replace any extra chars with + //placeholders to keep the inserted string len in sync with the attribute cps + //and record in aDosLineEnds the superfluous positions + OUString sEEString(rString); + std::vector aDosLineEnds(replaceDosLineEndsButPreserveLength(sEEString)); + mpDrawEditEngine->SetText(sEEString); + InsertAttrsAsDrawingAttrs(nStartCp, nStartCp+nLen, eType); + //remove any superfluous placeholders of replaceDosLineEndsButPreserveLength + //after attributes have been inserted + removePositions(*mpDrawEditEngine, aDosLineEnds); // Annotations typically begin with a (useless) 0x5 if ((eType == MAN_AND) && mpDrawEditEngine->GetTextLen()) @@ -966,8 +1017,8 @@ OUString aString; WW8_CP nStartCp, nEndCp; bool bContainsGraphics = false; - bool bTextWasRead = GetTxbxTextSttEndCp( nStartCp, nEndCp, nTxBxS, - nSequence ) && GetRangeAsDrawingString( aString, nStartCp, nEndCp, eType ); + bool bTextWasRead = GetTxbxTextSttEndCp(nStartCp, nEndCp, nTxBxS, nSequence) && + GetRangeAsDrawingString(aString, nStartCp, nEndCp, eType) > 0; if (!mpDrawEditEngine) mpDrawEditEngine = new EditEngine(0); @@ -2374,7 +2425,8 @@ ::SetProgressState(nProgress, mpDocShell); // Update - nDrawCpO = pWwFib->GetBaseCp(pPlcxMan->GetManType() == MAN_HDFT ? MAN_TXBX_HDFT : MAN_TXBX); + nDrawCpO = 0; + pWwFib->GetBaseCp(pPlcxMan->GetManType() == MAN_HDFT ? MAN_TXBX_HDFT : MAN_TXBX, &nDrawCpO); //TODO: check return value GrafikCtor(); diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8par2.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8par2.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8par2.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8par2.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -414,6 +414,8 @@ WW8PLCFxDesc aRes; aRes.pMemPos = 0; aRes.nEndPos = rStartCp; + bool bReadRes(false); + WW8PLCFxDesc aPrevRes; while (pPap->HasFkp() && rStartCp != WW8_CP_MAX) { @@ -446,6 +448,13 @@ } pPap->GetSprms(&aRes); pPap->SetDirty(false); + if (bReadRes && aRes.nEndPos == aPrevRes.nEndPos && aRes.nStartPos == aPrevRes.nStartPos) + { + SAL_WARN("sw.ww8", "SearchRowEnd, loop in paragraph property chain"); + break; + } + bReadRes = true; + aPrevRes = aRes; //Update our aRes to get the new starting point of the next properties rStartCp = aRes.nEndPos; } @@ -4274,6 +4283,14 @@ std::vector< std::vector > aConvertedChpx; while (nByteCount < cbChpx) { + if (stcp == aCHPXOffsets.size()) + { + //more data than style slots, skip remainder + rSt.SeekRel(cbChpx-nByteCount); + nByteCount += cbChpx-nByteCount; + break; + } + sal_uInt8 cb(0); rSt.ReadUChar( cb ); nByteCount++; @@ -4296,12 +4313,7 @@ else aConvertedChpx.push_back( std::vector() ); - stcp++; - if (stcp == nStyles) - { - rSt.SeekRel(cbChpx-nByteCount); - nByteCount += cbChpx-nByteCount; - } + ++stcp; } std::vector aPAPXOffsets(stcp); @@ -4318,6 +4330,13 @@ stcp=0; while (nByteCount < cbPapx) { + if (stcp == aPAPXOffsets.size()) + { + rSt.SeekRel(cbPapx-nByteCount); + nByteCount += cbPapx-nByteCount; + break; + } + sal_uInt8 cb(0); rSt.ReadUChar( cb ); nByteCount++; @@ -4339,13 +4358,7 @@ nByteCount += nRemainder; } - stcp++; - - if (stcp == nStyles) - { - rSt.SeekRel(cbPapx-nByteCount); - nByteCount += cbPapx-nByteCount; - } + ++stcp; } sal_uInt16 iMac(0); @@ -4376,6 +4389,9 @@ if (eSti == ww::stiNil) continue; + if (stcp >= aPAPXOffsets.size()) + continue; + rSI.bValid = true; if (ww::StandardStiIsCharStyle(eSti) && !aPAPXOffsets[stcp].mnSize) diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8par3.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8par3.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8par3.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8par3.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1266,15 +1266,14 @@ { bOk = false; - if (rSt.IsEof()) - break; - WW8LFO aLFO; memset(&aLFO, 0, sizeof( aLFO )); rSt.ReadUInt32( aLFO.nIdLst ); rSt.SeekRel( 8 ); rSt.ReadUChar( aLFO.nLfoLvl ); + if (!rSt.good()) + break; rSt.SeekRel( 3 ); // soviele Overrides existieren if ((nMaxLevel < aLFO.nLfoLvl) || rSt.GetError()) diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8par4.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8par4.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8par4.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8par4.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -337,8 +337,11 @@ SdrObject* SwWW8ImplReader::ImportOleBase( Graphic& rGraph, const Graphic* pGrf, const SfxItemSet* pFlySet, const Rectangle& aVisArea ) { - SdrObject* pRet = 0; - OSL_ENSURE( pStg, "ohne storage geht hier fast gar nichts!" ); + if (!pStg) + { + SAL_WARN("sw.ww8", "no storage for ole objects"); + return nullptr; + } ::SetProgressState( nProgress, rDoc.GetDocShell() ); // Update @@ -390,6 +393,8 @@ } } + SdrObject* pRet = 0; + if (!(bIsHeader || bIsFooter)) { //Can't put them in headers/footers :-( diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8par6.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8par6.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8par6.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8par6.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -2758,6 +2758,8 @@ //themselves so they don't need to add it to the stack either. if (SetNewFontAttr(SVBT16ToShort( pData ), false, RES_CHRATR_FONT)) { + SetNewFontAttr(SVBT16ToShort( pData ), false, RES_CHRATR_CJK_FONT); + SetNewFontAttr(SVBT16ToShort( pData ), false, RES_CHRATR_CTL_FONT); if( bVer67 ) { //convert single byte from MS1252 to Unicode diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8par.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8par.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8par.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8par.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -677,16 +677,22 @@ SEEK_FROM_CURRENT_AND_RESTART ) && maShapeRecords.Current()->nRecLen ) { - sal_uInt32 nBytesLeft = maShapeRecords.Current()->nRecLen; - sal_uInt32 nUDData; - sal_uInt16 nPID; + sal_uInt32 nBytesLeft = maShapeRecords.Current()->nRecLen; + auto nAvailableBytes = rSt.remainingSize(); + if (nBytesLeft > nAvailableBytes) + { + SAL_WARN("sw.ww8", "Document claimed to have shape record of " << nBytesLeft << " bytes, but only " << nAvailableBytes << " available"); + nBytesLeft = nAvailableBytes; + } while( 5 < nBytesLeft ) { - rSt.ReadUInt16( nPID ); - if ( rSt.GetError() != 0 ) + sal_uInt16 nPID(0); + rSt.ReadUInt16(nPID); + sal_uInt32 nUDData(0); + rSt.ReadUInt32(nUDData); + if (!rSt.good()) break; - rSt.ReadUInt32( nUDData ); - switch( nPID ) + switch (nPID) { case 0x038F: pImpRec->nXAlign = nUDData; break; case 0x0390: @@ -714,8 +720,6 @@ pImpRec->isHorizontalRule = true; break; } - if ( rSt.GetError() != 0 ) - break; nBytesLeft -= 6; } } @@ -2141,7 +2145,7 @@ } void SwWW8ImplReader::Read_HdFtFtnText( const SwNodeIndex* pSttIdx, - long nStartCp, long nLen, ManTypes nType ) + WW8_CP nStartCp, WW8_CP nLen, ManTypes nType ) { // Saves Flags (amongst other things) and resets them WW8ReaderSave aSave( this ); @@ -2172,15 +2176,18 @@ if (pA) sAuthor = *pA; else - sAuthor = OUString(pDescri->xstUsrInitl + 1, pDescri->xstUsrInitl[0], - RTL_TEXTENCODING_MS_1252); + { + const sal_uInt8 nLen = std::min(pDescri->xstUsrInitl[0], + SAL_N_ELEMENTS(pDescri->xstUsrInitl)-1); + sAuthor = OUString(pDescri->xstUsrInitl + 1, nLen, RTL_TEXTENCODING_MS_1252); + } } else { - const WW8_ATRD* pDescri = (const WW8_ATRD*)pSD->GetData(); - + const WW8_ATRD* pDescri = static_cast(pSD->GetData()); { - const sal_uInt16 nLen = SVBT16ToShort(pDescri->xstUsrInitl[0]); + const sal_uInt16 nLen = std::min(SVBT16ToShort(pDescri->xstUsrInitl[0]), + SAL_N_ELEMENTS(pDescri->xstUsrInitl)-1); OUStringBuffer aBuf; aBuf.setLength(nLen); for(sal_uInt16 nIdx = 1; nIdx <= nLen; ++nIdx) @@ -2225,7 +2232,7 @@ return 0; } -void SwWW8ImplReader::Read_HdFtTextAsHackedFrame(long nStart, long nLen, +void SwWW8ImplReader::Read_HdFtTextAsHackedFrame(WW8_CP nStart, WW8_CP nLen, SwFrmFmt &rHdFtFmt, sal_uInt16 nPageWidth) { const SwNodeIndex* pSttIdx = rHdFtFmt.GetCntnt().GetCntntIdx(); @@ -2269,7 +2276,7 @@ MoveOutsideFly(pFrame, aTmpPos); } -void SwWW8ImplReader::Read_HdFtText(long nStart, long nLen, SwFrmFmt* pHdFtFmt) +void SwWW8ImplReader::Read_HdFtText(WW8_CP nStart, WW8_CP nLen, SwFrmFmt* pHdFtFmt) { const SwNodeIndex* pSttIdx = pHdFtFmt->GetCntnt().GetCntntIdx(); if (!pSttIdx) @@ -2285,7 +2292,7 @@ bool SwWW8ImplReader::isValid_HdFt_CP(WW8_CP nHeaderCP) const { // Each CP of Plcfhdd MUST be less than FibRgLw97.ccpHdd - return (nHeaderCP < pWwFib->ccpHdr); + return (nHeaderCP < pWwFib->ccpHdr && nHeaderCP >= 0); } bool SwWW8ImplReader::HasOwnHeaderFooter(sal_uInt8 nWhichItems, sal_uInt8 grpfIhdt, @@ -2303,7 +2310,7 @@ { bool bOk = true; if( bVer67 ) - bOk = ( pHdFt->GetTextPos(grpfIhdt, nI, start, nLen ) && nLen >= 2 ); + bOk = ( pHdFt->GetTextPos(grpfIhdt, nI, start, nLen ) && start >= 0 && nLen >= 2 ); else { pHdFt->GetTextPosExact( static_cast< short >(nNumber + (nSect+1)*6), start, nLen); @@ -3725,7 +3732,7 @@ } } -long SwWW8ImplReader::ReadTextAttr(WW8_CP& rTxtPos, bool& rbStartLine) +long SwWW8ImplReader::ReadTextAttr(WW8_CP& rTxtPos, long nTextEnd, bool& rbStartLine) { long nSkipChars = 0; WW8PLCFManResult aRes; @@ -3780,8 +3787,9 @@ (aRes.nSprmId == eFLD) || (aRes.nSprmId == eAND) ) { - // Skip Field/Ftn-/End-Note here - rTxtPos += nSkipChars; + WW8_CP nMaxLegalSkip = nTextEnd - rTxtPos; + // Skip Field/Footnote-/End-Note here + rTxtPos += std::min(nSkipChars, nMaxLegalSkip); nSkipPos = rTxtPos-1; } } @@ -3790,7 +3798,9 @@ } } - pStrm->Seek(pSBase->WW8Cp2Fc( pPlcxMan->GetCpOfs() + rTxtPos, &bIsUnicode)); + sal_Int32 nRequestedPos = pSBase->WW8Cp2Fc(pPlcxMan->GetCpOfs() + rTxtPos, &bIsUnicode); + bool bValidPos = checkSeek(*pStrm, nRequestedPos); + SAL_WARN_IF(!bValidPos, "sw.ww8", "Document claimed to have text at an invalid position, skip attributes for region"); // Find next Attr position (and Skip attributes of field contents if needed) if (nSkipChars && !bIgnoreText) @@ -3804,7 +3814,7 @@ { if( bDoPlcxManPlusPLus ) pPlcxMan->advance(); - nNext = pPlcxMan->Where(); + nNext = bValidPos ? pPlcxMan->Where() : nTextEnd; if (mpPostProcessAttrsInfo && mpPostProcessAttrsInfo->mnCpStart == nNext) @@ -3814,7 +3824,7 @@ if( (0 <= nNext) && (nSkipPos >= nNext) ) { - nNext = ReadTextAttr( rTxtPos, rbStartLine ); + nNext = ReadTextAttr(rTxtPos, nTextEnd, rbStartLine); bDoPlcxManPlusPLus = false; bIgnoreText = true; } @@ -3865,7 +3875,7 @@ maEndParaPos.clear(); } -void SwWW8ImplReader::ReadAttrs(WW8_CP& rNext, WW8_CP& rTxtPos, bool& rbStartLine) +void SwWW8ImplReader::ReadAttrs(WW8_CP& rTxtPos, WW8_CP& rNext, long nTextEnd, bool& rbStartLine) { // Dow we have attributes? if( rTxtPos >= rNext ) @@ -3873,7 +3883,9 @@ do { maCurrAttrCP = rTxtPos; - rNext = ReadTextAttr( rTxtPos, rbStartLine ); + rNext = ReadTextAttr(rTxtPos, nTextEnd, rbStartLine); + if (rTxtPos == rNext && rTxtPos >= nTextEnd) + break; } while( rTxtPos >= rNext ); @@ -3915,7 +3927,7 @@ EndSpecial(); } -bool SwWW8ImplReader::ReadText(long nStartCp, long nTextLen, ManTypes nType) +bool SwWW8ImplReader::ReadText(WW8_CP nStartCp, WW8_CP nTextLen, ManTypes nType) { bool bJoined=false; @@ -3941,18 +3953,25 @@ pStrm->Seek( pSBase->WW8Cp2Fc( nStartCp + nCpOfs, &bIsUnicode ) ); WW8_CP l = nStartCp; - while ( l nMaxPossible) + { + SAL_WARN_IF(nTextLen > nMaxPossible, "sw.ww8", "TextLen too long"); + nTextLen = nMaxPossible; + } + WW8_CP nTextEnd = nStartCp+nTextLen; + while (l < nTextEnd) { - ReadAttrs( nNext, l, bStartLine );// Takes SectionBreaks into account, too + ReadAttrs( l, nNext, nTextEnd, bStartLine );// Takes SectionBreaks into account, too OSL_ENSURE(pPaM->GetNode().GetTxtNode(), "Missing txtnode"); if (mpPostProcessAttrsInfo != NULL) PostProcessAttrs(); - if( l>= nStartCp + nTextLen ) + if (l >= nTextEnd) break; - bStartLine = ReadChars(l, nNext, nStartCp+nTextLen, nCpOfs); + bStartLine = ReadChars(l, nNext, nTextEnd, nCpOfs); // If the previous paragraph was a dropcap then do not // create a new txtnode and join the two paragraphs together @@ -4109,7 +4128,7 @@ } SwWW8ImplReader::SwWW8ImplReader(sal_uInt8 nVersionPara, SvStorage* pStorage, - SvStream* pSt, SwDoc& rD, const OUString& rBaseURL, bool bNewDoc) + SvStream* pSt, SwDoc& rD, const OUString& rBaseURL, bool bNewDoc, SwPosition &rPos) : mpDocShell(rD.GetDocShell()) , pStg(pStorage) , pStrm(pSt) @@ -4245,6 +4264,8 @@ { pStrm->SetNumberFormatInt( NUMBERFORMAT_INT_LITTLEENDIAN ); maApos.push_back(false); + + mpCrsr.reset(rDoc.CreateUnoCrsr(rPos)); } void SwWW8ImplReader::DeleteStk(SwFltControlStack* pStck) @@ -4636,15 +4657,14 @@ { uno::Reference < io::XStream > xStream = xRoot->openStreamElement( OUString(SL::aMSMacroCmds), embed::ElementModes::READWRITE ); - SvStream* pStream = ::utl::UcbStreamHelper::CreateStream( xStream ); + std::unique_ptr xOutStream(::utl::UcbStreamHelper::CreateStream(xStream)); - sal_uInt8 *pBuffer = new sal_uInt8[pWwFib->lcbCmds]; - pWwFib->lcbCmds = pTableStream->Read(pBuffer, pWwFib->lcbCmds); - pStream->Write(pBuffer, pWwFib->lcbCmds); - delete[] pBuffer; - delete pStream; + sal_uInt32 lcbCmds = std::min(pWwFib->lcbCmds, pTableStream->remainingSize()); + std::unique_ptr xBuffer(new sal_uInt8[lcbCmds]); + pWwFib->lcbCmds = pTableStream->Read(xBuffer.get(), lcbCmds); + xOutStream->Write(xBuffer.get(), pWwFib->lcbCmds); } - catch ( const uno::Exception& ) + catch (...) { } } @@ -4862,7 +4882,7 @@ return bRes; } -sal_uLong SwWW8ImplReader::CoreLoad(WW8Glossary *pGloss, const SwPosition &rPos) +sal_uLong SwWW8ImplReader::CoreLoad(WW8Glossary *pGloss) { sal_uLong nErrRet = 0; @@ -4898,7 +4918,7 @@ pDocShell->SetReadOnlyUI(true); } - pPaM = rDoc.CreateUnoCrsr(rPos); + pPaM = mpCrsr.get(); pCtrlStck = new SwWW8FltControlStack( &rDoc, nFieldFlags, *this ); @@ -5335,7 +5355,8 @@ SAL_WARN_IF(mpTableEndPaM, "sw.ww8", "document ended without table ending"); mpTableEndPaM.reset(); //ensure this is deleted before pPaM - delete pPaM, pPaM = 0; + mpCrsr.reset(); + pPaM = nullptr; mpLastAnchorPos.reset();//ensure this is deleted before UpdatePageDescs UpdatePageDescs(rDoc, nPageDescOffset); @@ -5564,7 +5585,7 @@ } } -sal_uLong SwWW8ImplReader::LoadThroughDecryption(SwPaM& rPaM ,WW8Glossary *pGloss) +sal_uLong SwWW8ImplReader::LoadThroughDecryption(WW8Glossary *pGloss) { sal_uLong nErrRet = 0; if (pGloss) @@ -5734,7 +5755,7 @@ } if (!nErrRet) - nErrRet = CoreLoad(pGloss, *rPaM.GetPoint()); + nErrRet = CoreLoad(pGloss); delete pTempMain; delete pTempTable; @@ -5931,7 +5952,7 @@ return pRet; } -sal_uLong SwWW8ImplReader::LoadDoc( SwPaM& rPaM,WW8Glossary *pGloss) +sal_uLong SwWW8ImplReader::LoadDoc(WW8Glossary *pGloss) { sal_uLong nErrRet = 0; @@ -6006,7 +6027,7 @@ } if (!nErrRet) - nErrRet = LoadThroughDecryption(rPaM ,pGloss); + nErrRet = LoadThroughDecryption(pGloss); rDoc.PropagateOutlineRule(); @@ -6039,7 +6060,7 @@ return nRet; } -sal_uLong WW8Reader::Read(SwDoc &rDoc, const OUString& rBaseURL, SwPaM &rPam, const OUString & /* FileName */) +sal_uLong WW8Reader::Read(SwDoc &rDoc, const OUString& rBaseURL, SwPaM &rPaM, const OUString & /* FileName */) { sal_uInt16 nOldBuffSize = 32768; bool bNew = !bInsertMode; // New Doc (no inserting) @@ -6082,16 +6103,19 @@ if( !nRet ) { + SwWW8ImplReader* pRdr = new SwWW8ImplReader(nVersion, pStg, pIn, rDoc, + rBaseURL, bNew, *rPaM.GetPoint()); if (bNew) { // Remove Frame and offsets from Frame Template Reader::ResetFrmFmts( rDoc ); + + rPaM.GetBound().nContent.Assign(0, 0); + rPaM.GetBound(false).nContent.Assign(0, 0); } - SwWW8ImplReader* pRdr = new SwWW8ImplReader(nVersion, pStg, pIn, rDoc, - rBaseURL, bNew); try { - nRet = pRdr->LoadDoc( rPam ); + nRet = pRdr->LoadDoc(); } catch( const std::exception& ) { diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8par.hxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8par.hxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8par.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8par.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -1112,6 +1112,7 @@ // allgemeines SwDoc& rDoc; + std::shared_ptr mpCrsr; SwPaM* pPaM; SwWW8FltControlStack* pCtrlStck; // Stack fuer die Attribute @@ -1403,9 +1404,9 @@ void Read_HdFt(int nSect, const SwPageDesc *pPrev, const wwSection &rSection); - void Read_HdFtText(long nStartCp, long nLen, SwFrmFmt* pHdFtFmt); - void Read_HdFtTextAsHackedFrame(long nStart, long nLen, - SwFrmFmt &rHdFtFmt, sal_uInt16 nPageWidth); + void Read_HdFtText(WW8_CP nStartCp, WW8_CP nLen, SwFrmFmt* pHdFtFormat); + void Read_HdFtTextAsHackedFrame(WW8_CP nStart, WW8_CP nLen, + SwFrmFmt &rHdFtFormat, sal_uInt16 nPageWidth); bool isValid_HdFt_CP(WW8_CP nHeaderCP) const; @@ -1439,16 +1440,16 @@ void ProcessAktCollChange(WW8PLCFManResult& rRes, bool* pStartAttr, bool bCallProcessSpecial); - long ReadTextAttr(WW8_CP& rTxtPos, bool& rbStartLine); - void ReadAttrs(WW8_CP& rNext, WW8_CP& rTxtPos, bool& rbStartLine); + long ReadTextAttr(WW8_CP& rTextPos, long nTextEnd, bool& rbStartLine); + void ReadAttrs(WW8_CP& rTextPos, WW8_CP& rNext, long nTextEnd, bool& rbStartLine); void CloseAttrEnds(); - bool ReadText(long nStartCp, long nTextLen, ManTypes nType); + bool ReadText(WW8_CP nStartCp, WW8_CP nTextLen, ManTypes nType); void ReadRevMarkAuthorStrTabl( SvStream& rStrm, sal_Int32 nTblPos, sal_Int32 nTblSiz, SwDoc& rDoc ); - void Read_HdFtFtnText( const SwNodeIndex* pSttIdx, long nStartCp, - long nLen, ManTypes nType ); + void Read_HdFtFtnText( const SwNodeIndex* pSttIdx, WW8_CP nStartCp, + WW8_CP nLen, ManTypes nType ); void ImportTox( int nFldId, const OUString& aStr ); @@ -1552,9 +1553,9 @@ //This converts MS Asian Typography information into OOo's void ImportDopTypography(const WW8DopTypography &rTypo); - sal_uLong LoadThroughDecryption(SwPaM& rPaM ,WW8Glossary *pGloss); + sal_uLong LoadThroughDecryption(WW8Glossary *pGloss); sal_uLong SetSubStreams(SvStorageStreamRef &rTableStream, SvStorageStreamRef &rDataStream); - sal_uLong CoreLoad(WW8Glossary *pGloss, const SwPosition &rPos); + sal_uLong CoreLoad(WW8Glossary *pGloss); void ReadDocVars(); @@ -1602,13 +1603,12 @@ SfxAllItemSet &rSet); SdrObject *ReadPolyLine(WW8_DPHEAD* pHd, const WW8_DO* pDo, SfxAllItemSet &rSet); - ESelection GetESelection( long nCpStart, long nCpEnd ); void InsertTxbxStyAttrs( SfxItemSet& rS, sal_uInt16 nColl ); void InsertAttrsAsDrawingAttrs(long nStartCp, long nEndCp, ManTypes eType, bool bONLYnPicLocFc=false); bool GetTxbxTextSttEndCp(WW8_CP& rStartCp, WW8_CP& rEndCp, sal_uInt16 nTxBxS, sal_uInt16 nSequence); - bool GetRangeAsDrawingString(OUString& rString, long StartCp, long nEndCp, ManTypes eType); + sal_Int32 GetRangeAsDrawingString(OUString& rString, long StartCp, long nEndCp, ManTypes eType); OutlinerParaObject* ImportAsOutliner(OUString &rString, WW8_CP nStartCp, WW8_CP nEndCp, ManTypes eType); SwFrmFmt* InsertTxbxText(SdrTextObj* pTextObj, Size* pObjSiz, sal_uInt16 nTxBxS, sal_uInt16 nSequence, long nPosCp, SwFrmFmt* pFlyFmt, @@ -1912,11 +1912,11 @@ static ColorData GetCol(sal_uInt8 nIco); SwWW8ImplReader( sal_uInt8 nVersionPara, SvStorage* pStorage, SvStream* pSt, - SwDoc& rD, const OUString& rBaseURL, bool bNewDoc ); + SwDoc& rD, const OUString& rBaseURL, bool bNewDoc, SwPosition &rPos ); const OUString& GetBaseURL() const { return sBaseURL; } - // Laden eines kompletten DocFiles - sal_uLong LoadDoc( SwPaM&,WW8Glossary *pGloss=0); + // load a complete doc file + sal_uLong LoadDoc(WW8Glossary *pGloss=0); rtl_TextEncoding GetCurrentCharSet(); rtl_TextEncoding GetCurrentCJKCharSet(); rtl_TextEncoding GetCharSetFromLanguage(); diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8scan.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8scan.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8scan.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8scan.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -20,10 +20,12 @@ #include "ww8scan.hxx" #include "ww8par.hxx" +#include +#include +#include #include #include -#include #include #include #include @@ -939,8 +941,8 @@ WW8PLCFx_PCDAttrs::WW8PLCFx_PCDAttrs(ww::WordVersion eVersion, WW8PLCFx_PCD* pPLCFx_PCD, const WW8ScannerBase* pBase) : WW8PLCFx(eVersion, true), pPcdI(pPLCFx_PCD->GetPLCFIter()), - pPcd(pPLCFx_PCD), pGrpprls(pBase->pPieceGrpprls), - nGrpprls(pBase->nPieceGrpprls) + pPcd(pPLCFx_PCD), pGrpprls(pBase->aPieceGrpprls.data()), + nGrpprls(pBase->aPieceGrpprls.size()) { } @@ -1525,39 +1527,14 @@ return NULL; WW8_FC nClxPos = pWwF->fcClx; - sal_Int32 nClxLen = pWwF->lcbClx; - sal_Int32 nLeft = nClxLen; - sal_Int16 nGrpprl = 0; if (!checkSeek(*pStr, nClxPos)) return NULL; - while( true ) // Zaehle Zahl der Grpprls - { - sal_uInt8 clxt(2); - pStr->ReadUChar( clxt ); - nLeft--; - if( 2 == clxt ) // PLCFfpcd ? - break; // PLCFfpcd gefunden - if( 1 == clxt ) // clxtGrpprl ? - nGrpprl++; - sal_uInt16 nLen(0); - pStr->ReadUInt16( nLen ); - nLeft -= 2 + nLen; - if( nLeft < 0 ) - return NULL; // gone wrong - pStr->SeekRel( nLen ); // ueberlies grpprl - } - - if (!checkSeek(*pStr, nClxPos)) - return NULL; + sal_Int32 nClxLen = pWwF->lcbClx; + sal_Int32 nLeft = nClxLen; - nLeft = nClxLen; - pPieceGrpprls = new sal_uInt8*[nGrpprl + 1]; - memset( pPieceGrpprls, 0, ( nGrpprl + 1 ) * sizeof(sal_uInt8 *) ); - nPieceGrpprls = nGrpprl; - sal_Int16 nAktGrpprl = 0; // read Grpprls - while( true ) + while (true) { sal_uInt8 clxt(2); pStr->ReadUChar( clxt ); @@ -1571,6 +1548,8 @@ return NULL; // gone wrong if( 1 == clxt ) // clxtGrpprl ? { + if (aPieceGrpprls.size() == SHRT_MAX) + return NULL; if (nLen > pStr->remainingSize()) return NULL; sal_uInt8* p = new sal_uInt8[nLen+2]; // allocate @@ -1580,12 +1559,13 @@ delete[] p; return NULL; } - pPieceGrpprls[nAktGrpprl++] = p; // trage in Array ein + aPieceGrpprls.push_back(p); // add to array } else - pStr->SeekRel( nLen ); // ueberlies nicht-Grpprl + pStr->SeekRel( nLen ); // non-Grpprl left } - // lies Piece Table PLCF ein + + // read Piece Table PLCF sal_Int32 nPLCFfLen(0); if (pWwF->GetFIBVersion() <= ww::eWW2) { @@ -1601,20 +1581,15 @@ void WW8ScannerBase::DeletePieceTable() { - if( pPieceGrpprls ) - { - for( sal_uInt8** p = pPieceGrpprls; *p; p++ ) - delete[] (*p); - delete[] pPieceGrpprls; - pPieceGrpprls = 0; - } + for (auto pGrppl : aPieceGrpprls) + delete[] pGrppl; } WW8ScannerBase::WW8ScannerBase( SvStream* pSt, SvStream* pTblSt, SvStream* pDataSt, WW8Fib* pWwFib ) : pWw8Fib(pWwFib), pMainFdoa(0), pHdFtFdoa(0), pMainTxbx(0), pMainTxbxBkd(0), pHdFtTxbx(0), pHdFtTxbxBkd(0), pMagicTables(0), - pSubdocs(0), pExtendedAtrds(0), pPieceGrpprls(0) + pSubdocs(0), pExtendedAtrds(0) { pPiecePLCF = OpenPieceTable( pTblSt, pWw8Fib ); // Complex if( pPiecePLCF ) @@ -2131,7 +2106,8 @@ void WW8PLCF::ReadPLCF(SvStream& rSt, WW8_FC nFilePos, sal_uInt32 nPLCF) { sal_Size nOldPos = rSt.Tell(); - bool bValid = checkSeek(rSt, nFilePos) && (rSt.remainingSize() >= nPLCF); + bool bValid = nPLCF != 0 && checkSeek(rSt, nFilePos) + && (rSt.remainingSize() >= nPLCF); if (bValid) { @@ -2148,7 +2124,9 @@ nIdx = 0; #endif // OSL_BIGENDIAN // Pointer to content array - pPLCF_Contents = (sal_uInt8*)&pPLCF_PosArray[nIMax + 1]; + pPLCF_Contents = reinterpret_cast(&pPLCF_PosArray[nIMax + 1]); + + TruncToSortedRange(); } OSL_ENSURE(bValid, "Document has corrupt PLCF, ignoring it"); @@ -2168,6 +2146,21 @@ pPLCF_Contents = (sal_uInt8*)&pPLCF_PosArray[nIMax + 1]; } +void WW8PLCF::TruncToSortedRange() +{ + //Docs state that: ... all Plcs ... are sorted in ascending order. + //So ensure that here for broken documents. + for (auto nI = 0; nI < nIMax; ++nI) + { + if (pPLCF_PosArray[nI] > pPLCF_PosArray[nI+1]) + { + SAL_WARN("sw.ww8", "Document has unsorted PLCF, truncated to sorted portion"); + nIMax = nI; + break; + } + } +} + void WW8PLCF::GeneratePLCF(SvStream& rSt, sal_Int32 nPN, sal_Int32 ncpN) { OSL_ENSURE( nIMax < ncpN, "Pcl.Fkp: Why is PLCF too big?" ); @@ -3821,12 +3814,15 @@ void WW8PLCFx_FLD::advance() { + SAL_WARN_IF(!pPLCF, "sw.ww8", "Call without PLCFspecial field"); + if( !pPLCF ) + return; pPLCF->advance(); } bool WW8PLCFx_FLD::GetPara(long nIdx, WW8FieldDesc& rF) { - OSL_ENSURE( pPLCF, "Call without PLCFspecial field" ); + SAL_WARN_IF(!pPLCF, "sw.ww8", "Call without PLCFspecial field"); if( !pPLCF ) return false; @@ -3893,12 +3889,8 @@ if (pExtraArray) { ww::bytes extraData; - for (sal_uInt16 j = 0; j < nExtraLen; ++j) - { - sal_uInt8 iTmp(0); - rStrm.ReadUChar( iTmp ); - extraData.push_back(iTmp); - } + extraData.resize(nExtraLen); + rStrm.Read(extraData.data(), nExtraLen); pExtraArray->push_back(extraData); } else @@ -3954,12 +3946,8 @@ if (pExtraArray) { ww::bytes extraData; - for (sal_uInt16 i=0;i < nExtraLen;++i) - { - sal_uInt8 iTmp(0); - rStrm.ReadUChar( iTmp ); - extraData.push_back(iTmp); - } + extraData.resize(nExtraLen); + rStrm.Read(extraData.data(), nExtraLen); pExtraArray->push_back(extraData); } else @@ -3973,7 +3961,7 @@ } WW8PLCFx_Book::WW8PLCFx_Book(SvStream* pTblSt, const WW8Fib& rFib) - : WW8PLCFx(rFib.GetFIBVersion(), false), pStatus(0), nIsEnd(0), nBookmarkId(1) + : WW8PLCFx(rFib.GetFIBVersion(), false), nIsEnd(0), nBookmarkId(1) { if( !rFib.fcPlcfbkf || !rFib.lcbPlcfbkf || !rFib.fcPlcfbkl || !rFib.lcbPlcfbkl || !rFib.fcSttbfbkmk || !rFib.lcbSttbfbkmk ) @@ -3998,14 +3986,12 @@ nIMax = pBook[0]->GetIMax(); if( pBook[1]->GetIMax() < nIMax ) nIMax = pBook[1]->GetIMax(); - pStatus = new eBookStatus[ nIMax ]; - memset( pStatus, 0, nIMax * sizeof( eBookStatus ) ); + aStatus.resize(nIMax); } } WW8PLCFx_Book::~WW8PLCFx_Book() { - delete[] pStatus; delete pBook[1]; delete pBook[0]; } @@ -4123,18 +4109,20 @@ return nNum; } -void WW8PLCFx_Book::SetStatus(sal_uInt16 nIndex, eBookStatus eStat ) +void WW8PLCFx_Book::SetStatus(sal_uInt16 nIndex, eBookStatus eStat) { - OSL_ENSURE(nIndex < nIMax, "set status of non existing bookmark!"); - pStatus[nIndex] = (eBookStatus)( pStatus[nIndex] | eStat ); + SAL_WARN_IF(nIndex >= nIMax, "sw.ww8", + "bookmark index " << nIndex << " invalid"); + eBookStatus eStatus = aStatus.at(nIndex); + aStatus[nIndex] = static_cast(eStatus | eStat); } eBookStatus WW8PLCFx_Book::GetStatus() const { - if( !pStatus ) + if (aStatus.empty()) return BOOK_NORMAL; long nEndIdx = GetHandle(); - return ( nEndIdx < nIMax ) ? pStatus[nEndIdx] : BOOK_NORMAL; + return ( nEndIdx < nIMax ) ? aStatus[nEndIdx] : BOOK_NORMAL; } long WW8PLCFx_Book::GetHandle() const @@ -4157,10 +4145,10 @@ { bool bFound = false; sal_uInt16 i = 0; - if( pBook[0] && pBook[1] ) + if (pBook[0] && pBook[1]) { WW8_CP nStartAkt, nEndAkt; - do + while (i < aBookNames.size()) { void* p; sal_uInt16 nEndIdx; @@ -4183,7 +4171,6 @@ } ++i; } - while (i < pBook[0]->GetIMax()); } return bFound ? aBookNames[i] : OUString(); } @@ -4215,17 +4202,18 @@ return false; bool bFound = false; - sal_uInt16 i = 0; - do + + size_t i = 0; + while (i < aBookNames.size()) { if (rName.equalsIgnoreAsciiCase(aBookNames[i])) { rName = aBookNames[i]; bFound = true; + break; } ++i; } - while (!bFound && i < pBook[0]->GetIMax()); return bFound; } @@ -4376,6 +4364,19 @@ // dadurch kein AErger zu erwarten ist. void WW8PLCFMan::AdjustEnds( WW8PLCFxDesc& rDesc ) { + // might be necessary to do this for pChp and/or pSep as well, + // but its definitely the case for paragraphs that EndPos > StartPos + // for a well formed paragraph as those always have a paragraph + // in them + if (&rDesc == pPap && rDesc.bRealLineEnd) + { + if (rDesc.nStartPos == rDesc.nEndPos && rDesc.nEndPos != WW8_CP_MAX) + { + SAL_WARN("sw.ww8", "WW8PLCFxDesc End same as Start, abandoning to avoid looping"); + rDesc.nEndPos = WW8_CP_MAX; + } + } + //Store old end position for supercool new property finder that uses //cp instead of fc's as nature intended rDesc.nOrigEndPos = rDesc.nEndPos; @@ -4430,11 +4431,15 @@ else nStartPos -= nCpOfs; } - if( nEndPos != WW8_CP_MAX ) + if (nEndPos != WW8_CP_MAX) { - OSL_ENSURE(nCpOfs <= nEndPos, - "oh oh, so much for the subdocument piece theory"); - nEndPos -= nCpOfs; + if (nCpOfs > nEndPos) + { + SAL_WARN("sw.ww8", "broken subdocument piece entry"); + nEndPos = WW8_CP_MAX; + } + else + nEndPos -= nCpOfs; } } @@ -4590,7 +4595,9 @@ break; } - nCpO = pWwFib->GetBaseCp(nType); + WW8_CP cp = 0; + pWwFib->GetBaseCp(nType, &cp); //TODO: check return value + nCpO = cp; if( nStartCp || nCpO ) SeekPos( nStartCp ); // PLCFe auf Text-StartPos einstellen @@ -5217,59 +5224,78 @@ { if (eVer <= ww::eWW2) { - sal_uInt16 nShort; - rSt.ReadUInt16( nShort ); + sal_uInt16 nShort(0); + rSt.ReadUInt16(nShort); return nShort; } else { - sal_uInt32 nLong; - rSt.ReadUInt32( nLong ); + sal_uInt32 nLong(0); + rSt.ReadUInt32(nLong); return nLong; } } } -WW8_CP WW8Fib::GetBaseCp(ManTypes nType) const +bool WW8Fib::GetBaseCp(ManTypes nType, WW8_CP * cp) const { + assert(cp != nullptr); WW8_CP nOffset = 0; switch( nType ) { default: - case MAN_MAINTEXT: - break; - case MAN_FTN: - nOffset = ccpText; - break; - case MAN_HDFT: - nOffset = ccpText + ccpFtn; - break; + case MAN_TXBX_HDFT: + nOffset = ccpTxbx; + // fall through + case MAN_TXBX: + if (ccpEdn > std::numeric_limits::max() - nOffset) { + return false; + } + nOffset += ccpEdn; + // fall through + case MAN_EDN: + if (ccpAtn > std::numeric_limits::max() - nOffset) { + return false; + } + nOffset += ccpAtn; + // fall through + case MAN_AND: + if (ccpMcr > std::numeric_limits::max() - nOffset) { + return false; + } + nOffset += ccpMcr; /* + // fall through + A subdocument of this kind (MAN_MACRO) probably exists in some defunct version of MSWord, but now ccpMcr is always 0. If some example that uses this comes to light, this is the likely calculation required case MAN_MACRO: - nOffset = ccpText + ccpFtn + ccpHdr; - break; - */ - case MAN_AND: - nOffset = ccpText + ccpFtn + ccpHdr + ccpMcr; - break; - case MAN_EDN: - nOffset = ccpText + ccpFtn + ccpHdr + ccpMcr + ccpAtn; - break; - case MAN_TXBX: - nOffset = ccpText + ccpFtn + ccpHdr + ccpMcr + ccpAtn + ccpEdn; - break; - case MAN_TXBX_HDFT: - nOffset = ccpText + ccpFtn + ccpHdr + ccpMcr + ccpAtn + ccpEdn + - ccpTxbx; + if (ccpHdr > std::numeric_limits::max() - nOffset) { + return false; + } + nOffset += ccpHdr; + // fall through + case MAN_HDFT: + if (ccpFtn > std::numeric_limits::max() - nOffset) { + return false; + } + nOffset += ccpFtn; + // fall through + case MAN_FTN: + if (ccpText > std::numeric_limits::max() - nOffset) { + return false; + } + nOffset += ccpText; + // fall through + case MAN_MAINTEXT: break; } - return nOffset; + *cp = nOffset; + return true; } ww::WordVersion WW8Fib::GetFIBVersion() const @@ -6322,10 +6348,15 @@ return pStd; } -struct WW8_FFN_Ver6 : public WW8_FFN_BASE +namespace { +const sal_uInt16 maxStrSize = 65; +} + +struct WW8_FFN_Ver6 { - // ab Ver6 - sal_Char szFfn[65]; // 0x6 bzw. 0x40 ab Ver8 zero terminated string that + WW8_FFN_BASE base; + // from Ver6 + sal_Char szFfn[maxStrSize]; // 0x6 bzw. 0x40 ab Ver8 zero terminated string that // records name of font. // Maximal size of szFfn is 65 characters. // Vorsicht: Dieses Array kann auch kleiner sein!!! @@ -6404,6 +6435,50 @@ } return nMax; } + + template bool readU8( + sal_uInt8 const * p, std::size_t offset, sal_uInt8 const * pEnd, + T * value) + { + assert(p <= pEnd); + assert(value != nullptr); + if (offset >= static_cast(pEnd - p)) { + return false; + } + *value = p[offset]; + return true; + } + + bool readS16( + sal_uInt8 const * p, std::size_t offset, sal_uInt8 const * pEnd, + short * value) + { + assert(p <= pEnd); + assert(value != nullptr); + if (offset > static_cast(pEnd - p) + || static_cast(pEnd - p) - offset < 2) + { + return false; + } + *value = unsigned(p[offset]) + (unsigned(p[offset + 1]) << 8); + return true; + } + + sal_Int32 getStringLength( + sal_uInt8 const * p, std::size_t offset, sal_uInt8 const * pEnd) + { + assert(p <= pEnd); + assert(pEnd - p <= SAL_MAX_INT32); + if (offset >= static_cast(pEnd - p)) { + return -1; + } + void const * p2 = std::memchr( + p + offset, 0, static_cast(pEnd - p) - offset); + if (p2 == nullptr) { + return -1; + } + return static_cast(p2) - (p + offset); + } } WW8Fonts::WW8Fonts( SvStream& rSt, WW8Fib& rFib ) @@ -6441,6 +6516,7 @@ // read all font information nFFn = rSt.Read(pA, nFFn); + sal_uInt8 * const pEnd = pA + nFFn; const sal_uInt16 nCalcMax = calcMaxFonts(pA, nFFn); if (eVersion < ww::eWW8) @@ -6460,17 +6536,26 @@ if( eVersion <= ww::eWW2 ) { - WW8_FFN_BASE* pVer2 = (WW8_FFN_BASE*)pA; - for(sal_uInt16 i=0; icbFfnM1 = pVer2->cbFfnM1; + sal_uInt8 const * pVer2 = pA; + sal_uInt16 i = 0; + for(; icbFfnM1)) + { + break; + } p->prg = 0; p->fTrueType = 0; p->ff = 0; - p->wWeight = ( *(((sal_uInt8*)pVer2) + 1) ); - p->chs = ( *(((sal_uInt8*)pVer2) + 2) ); + if (!(readU8(pVer2, 1, pEnd, &p->wWeight) + && readU8(pVer2, 2, pEnd, &p->chs))) + { + break; + } /* #i8726# 7- seems to encode the name in the same encoding as the font, e.g load the doc in 97 and save to see the unicode @@ -6480,27 +6565,49 @@ if ((eEnc == RTL_TEXTENCODING_SYMBOL) || (eEnc == RTL_TEXTENCODING_DONTKNOW)) eEnc = RTL_TEXTENCODING_MS_1252; - p->sFontname = OUString ( (((const sal_Char*)pVer2) + 1 + 2), strlen((((const sal_Char*)pVer2) + 1 + 2)), eEnc); - pVer2 = (WW8_FFN_BASE*)( ((sal_uInt8*)pVer2) + pVer2->cbFfnM1 + 1 ); + sal_Int32 n = getStringLength(pVer2, 1 + 2, pEnd); + if (n == -1) { + break; + } + p->sFontname = OUString( + reinterpret_cast(pVer2 + 1 + 2), n, eEnc); + pVer2 = pVer2 + p->cbFfnM1 + 1; } + nMax = i; } else if( eVersion < ww::eWW8 ) { - WW8_FFN_Ver6* pVer6 = (WW8_FFN_Ver6*)pA; - sal_uInt8 c2; - for(sal_uInt16 i=0; icbFfnM1 = pVer6->cbFfnM1; - c2 = *(((sal_uInt8*)pVer6) + 1); + sal_uInt8 const * pVer6 = pA; + sal_uInt16 i = 0; + for(; icbFfnM1)) + { + break; + } + sal_uInt8 c2; + if (!readU8(pVer6, 1, pEnd, &c2)) { + break; + } p->prg = c2 & 0x02; p->fTrueType = (c2 & 0x04) >> 2; // ein Reserve-Bit ueberspringen p->ff = (c2 & 0x70) >> 4; - p->wWeight = SVBT16ToShort( *(SVBT16*)&pVer6->wWeight ); - p->chs = pVer6->chs; - p->ibszAlt = pVer6->ibszAlt; + if (!(readS16( + pVer6, offsetof(WW8_FFN_BASE, wWeight), pEnd, + &p->wWeight) + && readU8( + pVer6, offsetof(WW8_FFN_BASE, chs), pEnd, &p->chs) + && readU8( + pVer6, offsetof(WW8_FFN_BASE, ibszAlt), pEnd, + &p->ibszAlt))) + { + break; + } /* #i8726# 7- seems to encode the name in the same encoding as the font, e.g load the doc in 97 and save to see the unicode @@ -6509,12 +6616,27 @@ rtl_TextEncoding eEnc = WW8Fib::GetFIBCharset(p->chs); if ((eEnc == RTL_TEXTENCODING_SYMBOL) || (eEnc == RTL_TEXTENCODING_DONTKNOW)) eEnc = RTL_TEXTENCODING_MS_1252; - p->sFontname = OUString(pVer6->szFfn, rtl_str_getLength(pVer6->szFfn), eEnc); - const sal_uInt16 maxStrSize = sizeof (pVer6->szFfn) / sizeof (pVer6->szFfn[0]); + sal_Int32 n = getStringLength( + pVer6, offsetof(WW8_FFN_Ver6, szFfn), pEnd); + if (n == -1) { + break; + } + p->sFontname = OUString( + reinterpret_cast( + pVer6 + offsetof(WW8_FFN_Ver6, szFfn)), + n, eEnc); if (p->ibszAlt && p->ibszAlt < maxStrSize) //don't start after end of string { - const sal_Char *pAlt = pVer6->szFfn+p->ibszAlt; - p->sFontname += ";" + OUString(pAlt, rtl_str_getLength(pAlt), eEnc); + n = getStringLength( + pVer6, offsetof(WW8_FFN_Ver6, szFfn) + p->ibszAlt, + pEnd); + if (n == -1) { + break; + } + p->sFontname += ";" + OUString( + reinterpret_cast( + pVer6 + offsetof(WW8_FFN_Ver6, szFfn) + p->ibszAlt), + n, eEnc); } else { @@ -6527,8 +6649,9 @@ p->sFontname += ";Symbol"; } } - pVer6 = (WW8_FFN_Ver6*)( ((sal_uInt8*)pVer6) + pVer6->cbFfnM1 + 1 ); + pVer6 = pVer6 + p->cbFfnM1 + 1; } + nMax = i; } else { @@ -6712,9 +6835,8 @@ sal_uInt8* pData = pDataPtr; sal_uInt32 nRead = nMaxDopSize < nSize ? nMaxDopSize : nSize; - rSt.Seek( nPos ); - if (2 > nSize || nRead != rSt.Read(pData, nRead)) - nDopError = ERR_SWG_READ_ERROR; // Error melden + if (nSize < 2 || !checkSeek(rSt, nPos) || nRead != rSt.Read(pData, nRead)) + nDopError = ERR_SWG_READ_ERROR; // report error else { if (nMaxDopSize > nRead) @@ -7561,7 +7683,8 @@ bool checkSeek(SvStream &rSt, sal_uInt32 nOffset) { - return (rSt.Seek(nOffset) == static_cast(nOffset)); + const sal_uInt64 nMaxSeek(rSt.Tell() + rSt.remainingSize()); + return (nOffset <= nMaxSeek && rSt.Seek(nOffset) == nOffset); } bool checkRead(SvStream &rSt, void *pDest, sal_uInt32 nLength) diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8scan.hxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8scan.hxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8scan.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8scan.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -292,6 +292,7 @@ void MakeFailedPLCF(); + void TruncToSortedRange(); public: WW8PLCF(SvStream& rSt, WW8_FC nFilePos, sal_Int32 nPLCF, int nStruct, WW8_CP nStartPos = -1); @@ -415,7 +416,7 @@ private: WW8PLCFpcd_Iter* pPcdI; WW8PLCFx_PCD* pPcd; - sal_uInt8** const pGrpprls; // Attribute an Piece-Table + sal_uInt8* const* pGrpprls; // attribute of Piece-table SVBT32 aShortSprm; // mini storage: can contain ONE sprm with // 1 byte param sal_uInt16 nGrpprls; // Attribut Anzahl davon @@ -734,8 +735,8 @@ { private: WW8PLCFspecial* pBook[2]; // Start and End Position - ::std::vector aBookNames; // Name - eBookStatus* pStatus; + std::vector aBookNames; // Name + std::vector aStatus; long nIMax; // Number of Booknotes sal_uInt16 nIsEnd; sal_Int32 nBookmarkId; // counter incremented by GetUniqueBookmarkName. @@ -1027,8 +1028,7 @@ WW8PLCFpcd_Iter* pPieceIter; // fuer FastSave ( Iterator dazu ) WW8PLCFx_PCD* pPLCFx_PCD; // dito WW8PLCFx_PCDAttrs* pPLCFx_PCDAttrs; - sal_uInt8** pPieceGrpprls; // Attribute an Piece-Table - sal_uInt16 nPieceGrpprls; // Anzahl davon + std::vector aPieceGrpprls; // attributes of Piece-Table WW8PLCFpcd* OpenPieceTable( SvStream* pStr, const WW8Fib* pWwF ); void DeletePieceTable(); @@ -1282,7 +1282,7 @@ sal_Int32 lcbPlcfbkl; // 0x114 sal_Int32 WW8_FC fcCmds; // 0x118 FC - sal_Int32 lcbCmds; // 0x11c + sal_uInt32 lcbCmds; // 0x11c WW8_FC fcPlcfmcr; // 0x120 FC sal_Int32 lcbPlcfmcr; // 0x124 @@ -1468,7 +1468,7 @@ bool Write(SvStream& rStrm); static rtl_TextEncoding GetFIBCharset(sal_uInt16 chs); ww::WordVersion GetFIBVersion() const; - WW8_CP GetBaseCp(ManTypes nType) const; + bool GetBaseCp(ManTypes nType, WW8_CP * cp) const; sal_Unicode getNumDecimalSep() const { return nNumDecimalSep;} }; diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/WW8Sttbf.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/WW8Sttbf.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/WW8Sttbf.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/WW8Sttbf.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -36,6 +36,8 @@ { if (checkSeek(rSt, nPos)) { + sal_Size nRemainingSize = rSt.remainingSize(); + nSize = std::min(nRemainingSize, nSize); mp_data.reset(new sal_uInt8[nSize]); mn_size = rSt.Read(mp_data.get(), nSize); } diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8toolbar.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8toolbar.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/ww8/ww8toolbar.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/ww8/ww8toolbar.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -167,7 +167,7 @@ { rCustomizations[ *it ].bIsDroppedMenuTB = true; } - return true; + return rS.good(); } SwTBC* SwCTBWrapper::GetTBCAtOffset( sal_uInt32 nStreamOffset ) @@ -285,7 +285,7 @@ if ( !customizationDataCTB->Read( rS ) ) return false; } - return true; + return rS.good(); } #if OSL_DEBUG_LEVEL > 1 @@ -455,7 +455,7 @@ nOffSet = rS.Tell(); rS.ReadUChar( doprfatendFlags ).ReadUChar( ibts ).ReadInt32( cidNext ).ReadInt32( cid ).ReadInt32( fc ) ; rS.ReadUInt16( CiTBDE ).ReadUInt16( cbTBC ); - return true; + return rS.good(); } #if OSL_DEBUG_LEVEL > 1 @@ -525,7 +525,7 @@ rTBC.push_back( aTBC ); } } - return true; + return rS.good(); } #if OSL_DEBUG_LEVEL > 1 @@ -638,7 +638,7 @@ if ( !tbcd->Read( rS ) ) return false; } - return true; + return rS.good(); } #if OSL_DEBUG_LEVEL > 1 @@ -778,7 +778,7 @@ SAL_INFO("sw.ww8","Xst::Read() stream pos 0x" << std::hex << rS.Tell() ); nOffSet = rS.Tell(); sString = read_uInt16_PascalString(rS); - return true; + return rS.good(); } #if OSL_DEBUG_LEVEL > 1 @@ -914,7 +914,7 @@ nId = 0x40; rS.ReadUChar( nId ); } - return true; + return rS.good(); // Peek at } @@ -946,7 +946,7 @@ nOffSet = rS.Tell(); if ( mbReadId ) rS.ReadUChar( ch ); - return true; + return rS.good(); } PlfMcd::PlfMcd(bool bReadId) @@ -970,7 +970,7 @@ return false; } } - return true; + return rS.good(); } #if OSL_DEBUG_LEVEL > 1 @@ -1005,7 +1005,15 @@ nOffSet = rS.Tell(); Tcg255SubStruct::Read( rS ); rS.ReadInt32( iMac ); - if ( iMac ) + if (iMac < 0) + return false; + auto nMaxPossibleRecords = rS.remainingSize() / (sizeof(sal_uInt16)*2); + if (static_cast(iMac) > nMaxPossibleRecords) + { + SAL_WARN("sw.ww8", iMac << " records claimed, but max possible is " << nMaxPossibleRecords); + iMac = nMaxPossibleRecords; + } + if (iMac) { rgacd = new Acd[ iMac ]; for ( sal_Int32 index = 0; index < iMac; ++index ) @@ -1014,7 +1022,7 @@ return false; } } - return true; + return rS.good(); } #if OSL_DEBUG_LEVEL > 1 @@ -1058,7 +1066,7 @@ return false; } } - return true; + return rS.good(); } #if OSL_DEBUG_LEVEL > 1 @@ -1126,7 +1134,7 @@ rS.ReadUInt16( dataItems[ index ].extraData ); } } - return true; + return rS.good(); } #if OSL_DEBUG_LEVEL > 1 @@ -1176,7 +1184,7 @@ return false; } } - return true; + return rS.good(); } #if OSL_DEBUG_LEVEL > 1 @@ -1230,7 +1238,7 @@ rS.ReadUInt16( chTerm ); if ( chTerm != 0 ) // should be an assert return false; - return true; + return rS.good(); } #if OSL_DEBUG_LEVEL > 1 @@ -1263,7 +1271,7 @@ SAL_INFO("sw.ww8","Kme::Read() stream pos 0x" << std::hex << rS.Tell() ); nOffSet = rS.Tell(); rS.ReadInt16( reserved1 ).ReadInt16( reserved2 ).ReadUInt16( kcm1 ).ReadUInt16( kcm2 ).ReadUInt16( kt ).ReadUInt32( param ); - return true; + return rS.good(); } #if OSL_DEBUG_LEVEL > 1 @@ -1291,7 +1299,7 @@ SAL_INFO("sw.ww8","Acd::Read() stream pos 0x" << std::hex << rS.Tell() ); nOffSet = rS.Tell(); rS.ReadInt16( ibst ).ReadUInt16( fciBasedOnABC ); - return true; + return rS.good(); } #if OSL_DEBUG_LEVEL > 1 @@ -1354,7 +1362,7 @@ nOffSet = rS.Tell(); rS.ReadSChar( reserved1 ).ReadUChar( reserved2 ).ReadUInt16( ibst ).ReadUInt16( ibstName ).ReadUInt16( reserved3 ); rS.ReadUInt32( reserved4 ).ReadUInt32( reserved5 ).ReadUInt32( reserved6 ).ReadUInt32( reserved7 ); - return true; + return rS.good(); } #if OSL_DEBUG_LEVEL > 1 diff -Nru libreoffice-l10n-4.4.2/sw/source/filter/xml/xmlimp.cxx libreoffice-l10n-4.4.6~rc3/sw/source/filter/xml/xmlimp.cxx --- libreoffice-l10n-4.4.2/sw/source/filter/xml/xmlimp.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/filter/xml/xmlimp.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -651,6 +651,13 @@ if( !pDoc ) return; + if (IMPORT_ALL == getImportFlags()) + { + // for flat ODF - this is done in SwReader::Read() for package ODF + pDoc->SetInReading(true); + pDoc->SetInXMLImport(true); + } + if( (getImportFlags() & IMPORT_CONTENT) != 0 && !IsStylesOnlyMode() ) { pSttNdIdx = new SwNodeIndex( pDoc->GetNodes() ); @@ -875,6 +882,11 @@ pDoc->PrtOLENotify( false ); else if ( pDoc->IsOLEPrtNotifyPending() ) pDoc->PrtOLENotify( true ); + + assert(pDoc->IsInReading()); + assert(pDoc->IsInXMLImport()); + pDoc->SetInReading(false); + pDoc->SetInXMLImport(false); } SwDrawModel* pDrawModel = pDoc->getIDocumentDrawModelAccess().GetDrawModel(); @@ -1084,46 +1096,47 @@ if( !xInfo.is() ) return; - boost::unordered_set< OUString, OUStringHash > aSet; - aSet.insert("ForbiddenCharacters"); - aSet.insert("IsKernAsianPunctuation"); - aSet.insert("CharacterCompressionType"); - aSet.insert("LinkUpdateMode"); - aSet.insert("FieldAutoUpdate"); - aSet.insert("ChartAutoUpdate"); - aSet.insert("AddParaTableSpacing"); - aSet.insert("AddParaTableSpacingAtStart"); - aSet.insert("PrintAnnotationMode"); - aSet.insert("PrintBlackFonts"); - aSet.insert("PrintControls"); - aSet.insert("PrintDrawings"); - aSet.insert("PrintGraphics"); - aSet.insert("PrintLeftPages"); - aSet.insert("PrintPageBackground"); - aSet.insert("PrintProspect"); - aSet.insert("PrintReversed"); - aSet.insert("PrintRightPages"); - aSet.insert("PrintFaxName"); - aSet.insert("PrintPaperFromSetup"); - aSet.insert("PrintTables"); - aSet.insert("PrintSingleJobs"); - aSet.insert("UpdateFromTemplate"); - aSet.insert("PrinterIndependentLayout"); - aSet.insert("PrintEmptyPages"); - aSet.insert("SmallCapsPercentage66"); - aSet.insert("TabOverflow"); - aSet.insert("UnbreakableNumberings"); - aSet.insert("ClippedPictures"); - aSet.insert("BackgroundParaOverDrawings"); - aSet.insert("TabOverMargin"); - aSet.insert("PropLineSpacingShrinksFirstLine"); + boost::unordered_set< OUString, OUStringHash > aExcludeAlways; + aExcludeAlways.insert("LinkUpdateMode"); + boost::unordered_set< OUString, OUStringHash > aExcludeWhenNotLoadingUserSettings; + aExcludeWhenNotLoadingUserSettings.insert("ForbiddenCharacters"); + aExcludeWhenNotLoadingUserSettings.insert("IsKernAsianPunctuation"); + aExcludeWhenNotLoadingUserSettings.insert("CharacterCompressionType"); + aExcludeWhenNotLoadingUserSettings.insert("FieldAutoUpdate"); + aExcludeWhenNotLoadingUserSettings.insert("ChartAutoUpdate"); + aExcludeWhenNotLoadingUserSettings.insert("AddParaTableSpacing"); + aExcludeWhenNotLoadingUserSettings.insert("AddParaTableSpacingAtStart"); + aExcludeWhenNotLoadingUserSettings.insert("PrintAnnotationMode"); + aExcludeWhenNotLoadingUserSettings.insert("PrintBlackFonts"); + aExcludeWhenNotLoadingUserSettings.insert("PrintControls"); + aExcludeWhenNotLoadingUserSettings.insert("PrintDrawings"); + aExcludeWhenNotLoadingUserSettings.insert("PrintGraphics"); + aExcludeWhenNotLoadingUserSettings.insert("PrintLeftPages"); + aExcludeWhenNotLoadingUserSettings.insert("PrintPageBackground"); + aExcludeWhenNotLoadingUserSettings.insert("PrintProspect"); + aExcludeWhenNotLoadingUserSettings.insert("PrintReversed"); + aExcludeWhenNotLoadingUserSettings.insert("PrintRightPages"); + aExcludeWhenNotLoadingUserSettings.insert("PrintFaxName"); + aExcludeWhenNotLoadingUserSettings.insert("PrintPaperFromSetup"); + aExcludeWhenNotLoadingUserSettings.insert("PrintTables"); + aExcludeWhenNotLoadingUserSettings.insert("PrintSingleJobs"); + aExcludeWhenNotLoadingUserSettings.insert("UpdateFromTemplate"); + aExcludeWhenNotLoadingUserSettings.insert("PrinterIndependentLayout"); + aExcludeWhenNotLoadingUserSettings.insert("PrintEmptyPages"); + aExcludeWhenNotLoadingUserSettings.insert("SmallCapsPercentage66"); + aExcludeWhenNotLoadingUserSettings.insert("TabOverflow"); + aExcludeWhenNotLoadingUserSettings.insert("UnbreakableNumberings"); + aExcludeWhenNotLoadingUserSettings.insert("ClippedPictures"); + aExcludeWhenNotLoadingUserSettings.insert("BackgroundParaOverDrawings"); + aExcludeWhenNotLoadingUserSettings.insert("TabOverMargin"); + aExcludeWhenNotLoadingUserSettings.insert("PropLineSpacingShrinksFirstLine"); + aExcludeWhenNotLoadingUserSettings.insert("SubtractFlysAnchoredAtFlys"); sal_Int32 nCount = aConfigProps.getLength(); const PropertyValue* pValues = aConfigProps.getConstArray(); SvtSaveOptions aSaveOpt; - bool bIsUserSetting = aSaveOpt.IsLoadUserSettings(), - bSet = bIsUserSetting; + bool bIsUserSetting = aSaveOpt.IsLoadUserSettings(); // for some properties we don't want to use the application // default if they're missing. So we watch for them in the loop @@ -1152,6 +1165,7 @@ bool bBackgroundParaOverDrawings = false; bool bTabOverMargin = false; bool bPropLineSpacingShrinksFirstLine = false; + bool bSubtractFlysAnchoredAtFlys = false; const PropertyValue* currentDatabaseDataSource = NULL; const PropertyValue* currentDatabaseCommand = NULL; @@ -1159,10 +1173,12 @@ while( nCount-- ) { - if( !bIsUserSetting ) + bool bSet = aExcludeAlways.find(pValues->Name) == aExcludeAlways.end(); + if( bSet && !bIsUserSetting + && (aExcludeWhenNotLoadingUserSettings.find(pValues->Name) + != aExcludeWhenNotLoadingUserSettings.end()) ) { - // test over the hash value if the entry is in the table. - bSet = aSet.find(pValues->Name) == aSet.end(); + bSet = false; } if( bSet ) @@ -1241,6 +1257,8 @@ bTabOverMargin = true; else if ( pValues->Name == "PropLineSpacingShrinksFirstLine" ) bPropLineSpacingShrinksFirstLine = true; + else if (pValues->Name == "SubtractFlysAnchoredAtFlys") + bSubtractFlysAnchoredAtFlys = true; } catch( Exception& ) { @@ -1419,6 +1437,9 @@ if (!bPropLineSpacingShrinksFirstLine) xProps->setPropertyValue("PropLineSpacingShrinksFirstLine", makeAny(false)); + if (!bSubtractFlysAnchoredAtFlys) + xProps->setPropertyValue("SubtractFlysAnchoredAtFlys", makeAny(true)); + SwDoc *pDoc = getDoc(); SfxPrinter *pPrinter = pDoc->getIDocumentDeviceAccess().getPrinter( false ); if( pPrinter ) diff -Nru libreoffice-l10n-4.4.2/sw/source/ui/chrdlg/drpcps.cxx libreoffice-l10n-4.4.6~rc3/sw/source/ui/chrdlg/drpcps.cxx --- libreoffice-l10n-4.4.2/sw/source/ui/chrdlg/drpcps.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/ui/chrdlg/drpcps.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -270,8 +270,8 @@ if (!mpPage->m_pTemplateBox->GetSelectEntryPos()) { // query the Font at paragraph's beginning - mpPage->rSh.SttCrsrMove(); mpPage->rSh.Push(); + mpPage->rSh.SttCrsrMove(); mpPage->rSh.ClearMark(); SwWhichPara pSwuifnParaCurr = GetfnParaCurr(); SwPosPara pSwuifnParaStart = GetfnParaStart(); @@ -285,8 +285,8 @@ // CTL GetFontSettings( *mpPage, maCTLFont, RES_CHRATR_CTL_FONT ); - mpPage->rSh.Pop(false); mpPage->rSh.EndCrsrMove(); + mpPage->rSh.Pop(false); } else { diff -Nru libreoffice-l10n-4.4.2/sw/source/ui/dbui/mailmergewizard.cxx libreoffice-l10n-4.4.6~rc3/sw/source/ui/dbui/mailmergewizard.cxx --- libreoffice-l10n-4.4.2/sw/source/ui/dbui/mailmergewizard.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/ui/dbui/mailmergewizard.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -276,6 +276,7 @@ aDescriptor[ svx::daCursor ] <<= m_rConfigItem.GetResultSet(); aDescriptor[ svx::daCommand ] <<= m_rConfigItem.GetCurrentDBData().sCommand; aDescriptor[ svx::daCommandType ] <<= m_rConfigItem.GetCurrentDBData().nCommandType; + aDescriptor[ svx::daSelection ] <<= m_rConfigItem.GetSelection(); SwMergeDescriptor aMergeDesc( DBMGR_MERGE_SHELL, GetSwView()->GetWrtShell(), aDescriptor); diff -Nru libreoffice-l10n-4.4.2/sw/source/ui/fldui/fldref.cxx libreoffice-l10n-4.4.6~rc3/sw/source/ui/fldui/fldref.cxx --- libreoffice-l10n-4.4.2/sw/source/ui/fldui/fldref.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/ui/fldui/fldref.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -183,9 +183,12 @@ // fill up with the sequence types SwWrtShell *pSh = GetWrtShell(); - if(!pSh) + if (!pSh) pSh = ::GetActiveWrtShell(); + if (!pSh) + return; + const sal_uInt16 nFldTypeCnt = pSh->GetFldTypeCount(RES_SETEXPFLD); for (sal_uInt16 n = 0; n < nFldTypeCnt; ++n) diff -Nru libreoffice-l10n-4.4.2/sw/source/ui/frmdlg/cption.cxx libreoffice-l10n-4.4.6~rc3/sw/source/ui/frmdlg/cption.cxx --- libreoffice-l10n-4.4.2/sw/source/ui/frmdlg/cption.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/ui/frmdlg/cption.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -320,8 +320,6 @@ SwFieldType* pType = (bCorrectFldName && !bNone) ? rSh.GetFldType( RES_SETEXPFLD, sFldTypeName ) : 0; - fprintf(stderr, "pType is %p\n", pType); - fprintf(stderr, "bCorrectFldName is %d\n", bCorrectFldName); m_pOKButton->Enable( bCorrectFldName && (!pType || ((SwSetExpFieldType*)pType)->GetType() == nsSwGetSetExpType::GSE_SEQ) ); diff -Nru libreoffice-l10n-4.4.2/sw/source/ui/index/cnttab.cxx libreoffice-l10n-4.4.6~rc3/sw/source/ui/index/cnttab.cxx --- libreoffice-l10n-4.4.2/sw/source/ui/index/cnttab.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/ui/index/cnttab.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -824,16 +824,17 @@ get(m_pLanguageLB, "lang"); get(m_pSortAlgorithmLB, "keytype"); - //Default mode is arranged to be the tallest mode - //of alphabetical index, lock that height in now - Size aPrefSize(get_preferred_size()); - set_height_request(aPrefSize.Height()); - pIndexEntryWrapper = new IndexEntrySupplierWrapper(); m_pLanguageLB->SetLanguageList( LANG_LIST_ALL | LANG_LIST_ONLY_KNOWN, false, false, false ); + //Default mode is arranged to be the tallest mode + //of alphabetical index, lock that height in now + LanguageHdl(0); //fill sort algorithm list + Size aPrefSize(get_preferred_size()); + set_height_request(aPrefSize.Height()); + sAddStyleContent = m_pAddStylesCB->GetText(); ResStringArray& rNames = aFromNames.GetNames(); @@ -3622,7 +3623,7 @@ nTemplPos != LISTBOX_ENTRY_NOTFOUND) { const OUString aStr(m_pLevelLB->GetEntry(nLevPos).getToken(0, aDeliStart) - + " " + OUString(aDeliStart) + + OUString(aDeliStart) + m_pParaLayLB->GetSelectEntry() + OUString(aDeliEnd)); diff -Nru libreoffice-l10n-4.4.2/sw/source/ui/misc/glossary.cxx libreoffice-l10n-4.4.6~rc3/sw/source/ui/misc/glossary.cxx --- libreoffice-l10n-4.4.2/sw/source/ui/misc/glossary.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/ui/misc/glossary.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -804,6 +804,7 @@ rCfg.SetSaveRelFile(bCheck); else rCfg.SetSaveRelNet(bCheck); + rCfg.Commit(); return 0; } diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/app/docsh.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/app/docsh.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/app/docsh.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/app/docsh.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1270,11 +1270,17 @@ bool SwDocShell::IsChangeRecording() const { + if (!mpWrtShell) + return false; + return (mpWrtShell->GetRedlineMode() & nsRedlineMode_t::REDLINE_ON) != 0; } bool SwDocShell::HasChangeRecordProtection() const { + if (!mpWrtShell) + return false; + return mpWrtShell->getIDocumentRedlineAccess()->GetRedlinePassword().getLength() > 0; } diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/app/docst.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/app/docst.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/app/docst.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/app/docst.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -632,8 +632,17 @@ sal_uInt16 nRet = nMask; bool bModified = mpDoc->getIDocumentState().IsModified(); + SwUndoId nNewStyleUndoId(UNDO_EMPTY); + if( bNew ) { + if (!bBasic) + { + // start undo action in order to get only one undo action for the + // UI new style + change style operations + mpWrtShell->StartUndo(); + } + if( SFXSTYLEBIT_ALL != nMask && SFXSTYLEBIT_ALL_VISIBLE != nMask && SFXSTYLEBIT_USED != nMask ) nMask |= SFXSTYLEBIT_USERDEF; else @@ -720,6 +729,13 @@ } break; } + + if (!bBasic) + { + //Get the undo id for the type of style that was created in order to re-use that comment for the grouped + //create style + change style operations + mpWrtShell->GetLastUndoInfo(0, &nNewStyleUndoId); + } } else { @@ -784,11 +800,23 @@ ApplyStyle aApplyStyleHelper(*this, bNew, pStyle, nRet, xTmp, nFamily, pDlg.get(), mxBasePool, bModified); pDlg->SetApplyHdl(LINK(&aApplyStyleHelper, ApplyStyle, ApplyHdl)); - if (RET_OK == pDlg->Execute()) + short nDlgRet = pDlg->Execute(); + + if (RET_OK == nDlgRet) { aApplyStyleHelper.apply(); } - else + + if (bNew) + { + SwRewriter aRewriter; + aRewriter.AddRule(UndoArg1, xTmp->GetName()); + //Group the create style and change style operations together under the + //one "create style" comment + mpWrtShell->EndUndo(nNewStyleUndoId, &aRewriter); + } + + if (RET_OK != nDlgRet) { if( bNew ) { diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/dbui/dbmgr.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/dbui/dbmgr.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/dbui/dbmgr.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/dbui/dbmgr.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -441,11 +441,6 @@ DELETEZ( pImpl->pMergeData ); - // Recalculate original section visibility states, as field changes aren't - // tracked (not undo-able). Has to be done, after pImpl->pMergeData is - // gone, otherwise merge data is used for calculation! - rMergeDesc.rSh.SwViewShell::UpdateFlds(); - bInMerge = false; return bRet; diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/dbui/mmconfigitem.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/dbui/mmconfigitem.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/dbui/mmconfigitem.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/dbui/mmconfigitem.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -17,7 +17,9 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ + #include +#include #include #include #include @@ -34,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -1020,57 +1023,34 @@ return m_pImpl->nResultSetCursorPos; } -bool SwMailMergeConfigItem::IsRecordExcluded(sal_Int32 nRecord) -{ - bool bRet = false; - if(nRecord > 0 && nRecord < m_aSelection.getLength()) - { - sal_Int32 nTemp = 0; - m_aSelection[nRecord - 1] >>= nTemp; - bRet = nTemp < 1; - } - return bRet; -} +bool SwMailMergeConfigItem::IsRecordExcluded(sal_Int32 nRecord) const + { return m_aExcludedRecords.find(nRecord) != m_aExcludedRecords.end(); } void SwMailMergeConfigItem::ExcludeRecord(sal_Int32 nRecord, bool bExclude) { - //nRecord is based on 1 - //the selection array contains Anys for all records - //excluded records contain a '-1' - if(!m_aSelection.getLength() || nRecord > m_aSelection.getLength()) - { - if(bExclude) - { - //if no selection array is available we need to create one containing the - //entries for all available records - if(!m_pImpl->xResultSet.is()) - GetResultSet(); - if(m_pImpl->xResultSet.is()) - { - m_pImpl->xResultSet->last(); - sal_Int32 nEnd = m_pImpl->xResultSet->getRow(); - sal_Int32 nStart = m_aSelection.getLength(); - m_aSelection.realloc(nEnd); - Any* pSelection = m_aSelection.getArray(); - for(sal_Int32 nIndex = nStart; nIndex < nEnd; ++nIndex) - { - if((nRecord - 1) != nIndex) - pSelection[nIndex] <<= nIndex + 1; - else - pSelection[nIndex] <<= (sal_Int32) -1; - } - } - } - } + if(bExclude) + m_aExcludedRecords.insert(nRecord); else - { - if(nRecord > 0 && m_aSelection.getLength() > nRecord) - { - m_aSelection[nRecord - 1] <<= bExclude ? -1 : nRecord; - } - } + m_aExcludedRecords.erase(nRecord); } +uno::Sequence SwMailMergeConfigItem::GetSelection() const +{ + if(!m_pImpl->xResultSet.is()) + GetResultSet(); + if(!m_pImpl->xResultSet.is()) + return uno::Sequence(); + m_pImpl->xResultSet->last(); + sal_Int32 nResultSetSize = m_pImpl->xResultSet->getRow()+1; + std::vector vResult; + vResult.reserve(nResultSetSize); + for(sal_Int32 nIdx=1; nIdx(nIdx)); + return comphelper::containerToSequence(vResult); +} + + const uno::Sequence< OUString>& SwMailMergeConfigItem::GetSavedDocuments() const { diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/dochdl/swdtflvr.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/dochdl/swdtflvr.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/dochdl/swdtflvr.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/dochdl/swdtflvr.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -2167,6 +2167,14 @@ sTmp = sTmp.getToken( 0, '\n' ); sal_Int32 nCols = comphelper::string::getTokenCount(sTmp, '\t'); + if (nRows > USHRT_MAX || nCols > USHRT_MAX) + { + if( bMsg ) + MessageDialog(0, SW_RESSTR(STR_NO_TABLE), VCL_MESSAGE_INFO).Execute(); + pDDETyp = 0; + break; + } + // at least one column & row must be there if( !nRows || !nCols ) { diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/docvw/edtwin.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/docvw/edtwin.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/docvw/edtwin.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/docvw/edtwin.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -76,6 +76,7 @@ #include #include #include +#include #include #include #include @@ -1821,7 +1822,7 @@ break; case KEY_DELETE: - if ( !rSh.HasReadonlySel() ) + if ( !rSh.HasReadonlySel() || rSh.CrsrInsideInputFld()) { if (rSh.IsInFrontOfLabel() && rSh.NumOrNoNum(false)) eKeyState = KS_NumOrNoNum; @@ -1908,7 +1909,7 @@ break; case KEY_BACKSPACE: case KEY_BACKSPACE | KEY_SHIFT: - if ( !rSh.HasReadonlySel() ) + if ( !rSh.HasReadonlySel() || rSh.CrsrInsideInputFld()) { bool bDone = false; // try to add comment for code snip: @@ -4767,15 +4768,15 @@ { if( rSh.IsSelection() && !rSh.HasReadonlySel() ) { - if(nId == RES_CHRATR_BACKGROUND) + m_pApplyTempl->nUndo = + std::min(m_pApplyTempl->nUndo, rSh.GetDoc()->GetIDocumentUndoRedo().GetUndoActionCount()); + if (nId == RES_CHRATR_BACKGROUND) rSh.SetAttrItem( SvxBrushItem( SwEditWin::m_aTextBackColor, nId ) ); else rSh.SetAttrItem( SvxColorItem( SwEditWin::m_aTextColor, nId ) ); rSh.UnSetVisCrsr(); rSh.EnterStdMode(); rSh.SetVisCrsr(aDocPt); - - m_pApplyTempl->bUndo = true; bCallBase = false; m_aTemplateTimer.Stop(); } @@ -4796,7 +4797,8 @@ & eSelection ) && !rSh.HasReadonlySel() ) { rSh.SetTxtFmtColl( m_pApplyTempl->aColl.pTxtColl ); - m_pApplyTempl->bUndo = true; + m_pApplyTempl->nUndo = + std::min(m_pApplyTempl->nUndo, rSh.GetDoc()->GetIDocumentUndoRedo().GetUndoActionCount()); bCallBase = false; if ( m_pApplyTempl->aColl.pTxtColl ) aStyleName = m_pApplyTempl->aColl.pTxtColl->GetName(); @@ -4810,7 +4812,8 @@ rSh.UnSetVisCrsr(); rSh.EnterStdMode(); rSh.SetVisCrsr(aDocPt); - m_pApplyTempl->bUndo = true; + m_pApplyTempl->nUndo = + std::min(m_pApplyTempl->nUndo, rSh.GetDoc()->GetIDocumentUndoRedo().GetUndoActionCount()); bCallBase = false; if ( m_pApplyTempl->aColl.pCharFmt ) aStyleName = m_pApplyTempl->aColl.pCharFmt->GetName(); @@ -4822,7 +4825,8 @@ if(PTR_CAST(SwFlyFrmFmt, pFmt)) { rSh.SetFrmFmt( m_pApplyTempl->aColl.pFrmFmt, false, &aDocPt ); - m_pApplyTempl->bUndo = true; + m_pApplyTempl->nUndo = + std::min(m_pApplyTempl->nUndo, rSh.GetDoc()->GetIDocumentUndoRedo().GetUndoActionCount()); bCallBase = false; if( m_pApplyTempl->aColl.pFrmFmt ) aStyleName = m_pApplyTempl->aColl.pFrmFmt->GetName(); @@ -4834,6 +4838,8 @@ rSh.ChgCurPageDesc( *m_pApplyTempl->aColl.pPageDesc ); if ( m_pApplyTempl->aColl.pPageDesc ) aStyleName = m_pApplyTempl->aColl.pPageDesc->GetName(); + m_pApplyTempl->nUndo = + std::min(m_pApplyTempl->nUndo, rSh.GetDoc()->GetIDocumentUndoRedo().GetUndoActionCount()); bCallBase = false; break; case SFX_STYLE_FAMILY_PSEUDO: @@ -4843,7 +4849,8 @@ false, m_pApplyTempl->aColl.pNumRule->GetDefaultListId() ); bCallBase = false; - m_pApplyTempl->bUndo = true; + m_pApplyTempl->nUndo = + std::min(m_pApplyTempl->nUndo, rSh.GetDoc()->GetIDocumentUndoRedo().GetUndoActionCount()); if( m_pApplyTempl->aColl.pNumRule ) aStyleName = m_pApplyTempl->aColl.pNumRule->GetName(); } @@ -4892,14 +4899,16 @@ if(rTempl.m_pFormatClipboard) { m_pApplyTempl = new SwApplyTemplate( rTempl ); + m_pApplyTempl->nUndo = rSh.GetDoc()->GetIDocumentUndoRedo().GetUndoActionCount(); SetPointer( POINTER_FILL );//@todo #i20119# maybe better a new brush pointer here in future - rSh.NoEdit( false ); - bIdle = rSh.GetViewOptions()->IsIdle(); + rSh.NoEdit( false ); + bIdle = rSh.GetViewOptions()->IsIdle(); ((SwViewOption *)rSh.GetViewOptions())->SetIdle( false ); } else if(rTempl.nColor) { m_pApplyTempl = new SwApplyTemplate( rTempl ); + m_pApplyTempl->nUndo = rSh.GetDoc()->GetIDocumentUndoRedo().GetUndoActionCount(); SetPointer( POINTER_FILL ); rSh.NoEdit( false ); bIdle = rSh.GetViewOptions()->IsIdle(); @@ -4908,6 +4917,7 @@ else if( rTempl.eType ) { m_pApplyTempl = new SwApplyTemplate( rTempl ); + m_pApplyTempl->nUndo = rSh.GetDoc()->GetIDocumentUndoRedo().GetUndoActionCount(); SetPointer( POINTER_FILL ); rSh.NoEdit( false ); bIdle = rSh.GetViewOptions()->IsIdle(); @@ -5214,8 +5224,11 @@ else if ( !m_rView.ExecSpellPopup( aDocPos ) ) SfxDispatcher::ExecutePopup( 0, this, &aPixPos); } - else if (m_pApplyTempl->bUndo) + else if (m_pApplyTempl->nUndo < rSh.GetDoc()->GetIDocumentUndoRedo().GetUndoActionCount()) + { + // Undo until we reach the point when we entered this context. rSh.Do(SwWrtShell::UNDO); + } bCallBase = false; } } diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/docvw/SidebarWin.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/docvw/SidebarWin.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/docvw/SidebarWin.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/docvw/SidebarWin.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -702,8 +702,9 @@ mpTextRangeOverlay->HideSolidBorder(); } } - else + else if (!IsFollow()) { + // This window is not a reply, then draw its range overlay. mpTextRangeOverlay = sw::overlay::OverlayRanges::CreateOverlayRange( DocView(), diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/inc/mmconfigitem.hxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/inc/mmconfigitem.hxx --- libreoffice-l10n-4.4.2/sw/source/uibase/inc/mmconfigitem.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/inc/mmconfigitem.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -22,6 +22,7 @@ #include #include #include +#include #include #include "swdllapi.h" #include "sharedconnection.hxx" @@ -56,7 +57,7 @@ bool m_bGreetingInserted; sal_Int32 m_nGreetingMoves; OUString m_rAddressBlockFrame; - ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any> m_aSelection; + std::set m_aExcludedRecords; sal_uInt16 m_nStartPrint; sal_uInt16 m_nEndPrint; @@ -112,8 +113,9 @@ sal_Int32 GetResultSetPosition()const; bool IsResultSetFirstLast(bool& bIsFirst, bool& bIsLast); - bool IsRecordExcluded(sal_Int32 nRecord); + bool IsRecordExcluded(sal_Int32 nRecord) const; void ExcludeRecord(sal_Int32 nRecord, bool bExclude); + css::uno::Sequence< css::uno::Any> GetSelection() const; const com::sun::star::uno::Sequence< OUString>& GetSavedDocuments() const; diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/inc/view.hxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/inc/view.hxx --- libreoffice-l10n-4.4.2/sw/source/uibase/inc/view.hxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/inc/view.hxx 2015-10-27 20:55:54.000000000 +0000 @@ -130,13 +130,13 @@ int eType; sal_uInt16 nColor; SwFormatClipboard* m_pFormatClipboard; - bool bUndo; + size_t nUndo; //< The initial undo stack depth. SwApplyTemplate() : eType(0), nColor(0), m_pFormatClipboard(0), - bUndo(false) + nUndo(0) { aColl.pTxtColl = 0; } diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/shells/frmsh.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/shells/frmsh.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/shells/frmsh.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/shells/frmsh.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -447,11 +447,7 @@ //UUUU create needed items for XPropertyList entries from the DrawModel so that // the Area TabPage can access them const SwDrawModel* pDrawModel = rSh.GetView().GetDocShell()->GetDoc()->getIDocumentDrawModelAccess().GetDrawModel(); - - aSet.Put(SvxColorListItem(pDrawModel->GetColorList(), SID_COLOR_TABLE)); - aSet.Put(SvxGradientListItem(pDrawModel->GetGradientList(), SID_GRADIENT_LIST)); - aSet.Put(SvxHatchListItem(pDrawModel->GetHatchList(), SID_HATCH_LIST)); - aSet.Put(SvxBitmapListItem(pDrawModel->GetBitmapList(), SID_BITMAP_LIST)); + pDrawModel->PutAreaListItems(aSet); const SwViewOption* pVOpt = rSh.GetViewOptions(); if(nSel & nsSelectionType::SEL_OLE) diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/shells/textsh1.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/shells/textsh1.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/shells/textsh1.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/shells/textsh1.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1772,8 +1772,6 @@ { SwNumRule* pCurRule = (SwNumRule*)(GetShell().GetNumRuleAtCurrCrsrPos()); sal_uInt16 nActNumLvl = USHRT_MAX; - rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,DEFAULT_NONE)); - rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,DEFAULT_NONE)); if( pCurRule ) { nActNumLvl = GetShell().GetNumLevel(); diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/shells/textsh.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/shells/textsh.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/shells/textsh.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/shells/textsh.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -114,6 +114,8 @@ #include #include #include +#include +#include #include SFX_IMPL_INTERFACE(SwTextShell, SwBaseShell, SW_RES(STR_SHELLNAME_TEXT)) @@ -579,11 +581,16 @@ SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE, FN_SET_FRM_NAME, FN_SET_FRM_NAME, SID_HTML_MODE, SID_HTML_MODE, + SID_COLOR_TABLE, SID_BITMAP_LIST, 0 }; SfxItemSet aSet(GetPool(), aFrmAttrRange ); aSet.Put(SfxUInt16Item(SID_HTML_MODE, ::GetHtmlMode(GetView().GetDocShell()))); + + // For the Area tab page. + GetShell().GetDoc()->getIDocumentDrawModelAccess().GetDrawModel()->PutAreaListItems(aSet); + const SwRect &rPg = GetShell().GetAnyCurRect(RECT_PAGE); SwFmtFrmSize aFrmSize(ATT_VAR_SIZE, rPg.Width(), rPg.Height()); aFrmSize.SetWhich(GetPool().GetWhich(SID_ATTR_PAGE_SIZE)); @@ -691,9 +698,13 @@ SfxObjectCreateMode eCreateMode = GetView().GetDocShell()->GetCreateMode(); - rSh.Push(); - const bool bCrsrInHidden = rSh.SelectHiddenRange(); - rSh.Pop(); + bool bCrsrInHidden = false; + if( !rSh.HasMark() ) + { + rSh.Push(); + bCrsrInHidden = rSh.SelectHiddenRange(); + rSh.Pop(); + } while ( nWhich ) { diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/shells/txtnum.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/shells/txtnum.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/shells/txtnum.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/shells/txtnum.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -251,45 +251,38 @@ if ( pItem != NULL ) { const sal_uInt16 nChoosenItemIdx = pItem->GetValue(); - if ( nChoosenItemIdx == DEFAULT_NONE ) + svx::sidebar::NBOTypeMgrBase* pNBOTypeMgr = + nSlot == FN_SVX_SET_NUMBER + ? svx::sidebar::NBOutlineTypeMgrFact::CreateInstance( svx::sidebar::eNBOType::NUMBERING ) + : svx::sidebar::NBOutlineTypeMgrFact::CreateInstance( svx::sidebar::eNBOType::BULLETS ); + if ( pNBOTypeMgr != NULL ) { - GetShell().DelNumRules(); - } - else - { - svx::sidebar::NBOTypeMgrBase* pNBOTypeMgr = - nSlot == FN_SVX_SET_NUMBER - ? svx::sidebar::NBOutlineTypeMgrFact::CreateInstance( svx::sidebar::eNBOType::NUMBERING ) - : svx::sidebar::NBOutlineTypeMgrFact::CreateInstance( svx::sidebar::eNBOType::BULLETS ); - if ( pNBOTypeMgr != NULL ) + const SwNumRule* pNumRuleAtCurrentSelection = GetShell().GetNumRuleAtCurrentSelection(); + sal_uInt16 nActNumLvl = USHRT_MAX; + if ( pNumRuleAtCurrentSelection != NULL ) { - const SwNumRule* pNumRuleAtCurrentSelection = GetShell().GetNumRuleAtCurrentSelection(); - sal_uInt16 nActNumLvl = USHRT_MAX; - if ( pNumRuleAtCurrentSelection != NULL ) + const sal_uInt16 nLevel = GetShell().GetNumLevel(); + if ( nLevel < MAXLEVEL ) { - const sal_uInt16 nLevel = GetShell().GetNumLevel(); - if ( nLevel < MAXLEVEL ) - { - nActNumLvl = 1 << nLevel; - } + nActNumLvl = 1 << nLevel; } - SwNumRule aNewNumRule( - pNumRuleAtCurrentSelection != NULL ? pNumRuleAtCurrentSelection->GetName() : GetShell().GetUniqueNumRuleName(), - numfunc::GetDefaultPositionAndSpaceMode() ); - SvxNumRule aNewSvxNumRule = pNumRuleAtCurrentSelection != NULL - ? pNumRuleAtCurrentSelection->MakeSvxNumRule() - : aNewNumRule.MakeSvxNumRule(); - // set unit attribute to NB Manager - SfxItemSet aSet( GetPool(), SID_ATTR_NUMBERING_RULE, SID_PARAM_CUR_NUM_LEVEL, 0 ); - aSet.Put( SvxNumBulletItem( aNewSvxNumRule ) ); - pNBOTypeMgr->SetItems( &aSet ); - pNBOTypeMgr->ApplyNumRule( aNewSvxNumRule, nChoosenItemIdx - 1, nActNumLvl ); - - aNewNumRule.SetSvxRule( aNewSvxNumRule, GetShell().GetDoc() ); - aNewNumRule.SetAutoRule( true ); - const bool bCreateNewList = ( pNumRuleAtCurrentSelection == NULL ); - GetShell().SetCurNumRule( aNewNumRule, bCreateNewList ); } + SwNumRule aNewNumRule( + pNumRuleAtCurrentSelection != NULL ? pNumRuleAtCurrentSelection->GetName() : GetShell().GetUniqueNumRuleName(), + numfunc::GetDefaultPositionAndSpaceMode() ); + SvxNumRule aNewSvxNumRule = pNumRuleAtCurrentSelection != NULL + ? pNumRuleAtCurrentSelection->MakeSvxNumRule() + : aNewNumRule.MakeSvxNumRule(); + // set unit attribute to NB Manager + SfxItemSet aSet( GetPool(), SID_ATTR_NUMBERING_RULE, SID_PARAM_CUR_NUM_LEVEL, 0 ); + aSet.Put( SvxNumBulletItem( aNewSvxNumRule ) ); + pNBOTypeMgr->SetItems( &aSet ); + pNBOTypeMgr->ApplyNumRule( aNewSvxNumRule, nChoosenItemIdx - 1, nActNumLvl ); + + aNewNumRule.SetSvxRule( aNewSvxNumRule, GetShell().GetDoc() ); + aNewNumRule.SetAutoRule( true ); + const bool bCreateNewList = ( pNumRuleAtCurrentSelection == NULL ); + GetShell().SetCurNumRule( aNewNumRule, bCreateNewList ); } } } diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/uiview/view2.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/uiview/view2.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/uiview/view2.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/uiview/view2.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1483,6 +1483,26 @@ rSet.DisableItem( SID_ATTR_ZOOMSLIDER ); } break; + case SID_ATTR_POSITION: + case SID_ATTR_SIZE: + { + if( !rShell.IsFrmSelected() && !rShell.IsObjSelected() ) + SwBaseShell::_SetFrmMode( FLY_DRAG_END ); + else + { + FlyMode eFrameMode = SwBaseShell::GetFrmMode(); + if ( eFrameMode == FLY_DRAG_START || eFrameMode == FLY_DRAG ) + { + if ( nWhich == SID_ATTR_POSITION ) + rSet.Put( SfxPointItem( SID_ATTR_POSITION, + rShell.GetAnchorObjDiff())); + else + rSet.Put( SvxSizeItem( SID_ATTR_SIZE, + rShell.GetObjSize())); + } + } + } + break; case SID_TABLE_CELL: if( rShell.IsFrmSelected() || rShell.IsObjSelected() ) @@ -1774,6 +1794,39 @@ } break; + case SID_ATTR_SIZE: + { + sal_uInt16 nId = 0; + if( rSh.IsCrsrInTbl() ) + nId = FN_FORMAT_TABLE_DLG; + else if( rSh.GetCurTOX() ) + nId = FN_INSERT_MULTI_TOX; + else if( rSh.GetCurrSection() ) + nId = FN_EDIT_REGION; + else + { + const SwNumRule* pNumRule = rSh.GetNumRuleAtCurrCrsrPos(); + if( pNumRule ) // cursor in numbering + { + if( pNumRule->IsAutoRule() ) + nId = FN_NUMBER_BULLETS; + else + { + // start dialog of the painter + nId = 0; + } + } + else if( rSh.IsFrmSelected() ) + nId = FN_FORMAT_FRAME_DLG; + else if( rSh.IsObjSelected() ) + nId = SID_ATTR_TRANSFORM; + } + if( nId ) + GetViewFrame()->GetDispatcher()->Execute(nId, + SfxCallMode::SYNCHRON | SfxCallMode::RECORD ); + } + break; + case FN_STAT_SELMODE: { if ( pArgs ) diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/uiview/view.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/uiview/view.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/uiview/view.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/uiview/view.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -1254,8 +1254,8 @@ const Rectangle &rVis = GetVisArea(); const SwViewOption* pVOpt = m_pWrtShell->GetViewOptions(); - long nX = rRect.Left(), nY = rRect.Top(), nLeft = rVis.Left(), nTop = rVis.Top(); - long nRight = bBrowse ? LONG_MIN : rVis.Right(), nBottom = bBrowse ? LONG_MIN : rVis.Bottom(); + sal_Int64 nX = rRect.Left(), nY = rRect.Top(), nLeft = rVis.Left(), nTop = rVis.Top(); + sal_Int64 nRight = bBrowse ? LONG_MIN : rVis.Right(), nBottom = bBrowse ? LONG_MIN : rVis.Bottom(); sal_Int16 nZoomType = static_cast< sal_Int16 >(pVOpt->GetZoomType()); sal_Int16 nZoomFactor = static_cast < sal_Int16 > (pVOpt->GetZoom()); bool bViewLayoutBookMode = pVOpt->IsViewLayoutBookMode(); diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/uno/SwXDocumentSettings.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/uno/SwXDocumentSettings.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/uno/SwXDocumentSettings.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/uno/SwXDocumentSettings.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -128,6 +128,7 @@ HANDLE_SURROUND_TEXT_WRAP_SMALL, HANDLE_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING, HANDLE_PROP_LINE_SPACING_SHRINKS_FIRST_LINE, + HANDLE_SUBTRACT_FLYS, }; static MasterPropertySetInfo * lcl_createSettingsInfo() @@ -200,6 +201,7 @@ { OUString("SurroundTextWrapSmall"), HANDLE_SURROUND_TEXT_WRAP_SMALL, cppu::UnoType::get(), 0, 0}, { OUString("ApplyParagraphMarkFormatToNumbering"), HANDLE_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING, cppu::UnoType::get(), 0, 0}, { OUString("PropLineSpacingShrinksFirstLine"), HANDLE_PROP_LINE_SPACING_SHRINKS_FIRST_LINE, cppu::UnoType::get(), 0, 0}, + { OUString("SubtractFlysAnchoredAtFlys"), HANDLE_SUBTRACT_FLYS, cppu::UnoType::get(), 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 @@ -817,6 +819,16 @@ } } break; + case HANDLE_SUBTRACT_FLYS: + { + bool bTmp; + if (rValue >>= bTmp) + { + mpDoc->getIDocumentSettingAccess().set( + IDocumentSettingAccess::SUBTRACT_FLYS, bTmp); + } + } + break; default: throw UnknownPropertyException(); } @@ -1253,6 +1265,13 @@ rValue <<= bTmp; } break; + case HANDLE_SUBTRACT_FLYS: + { + bool const bTmp(mpDoc->getIDocumentSettingAccess().get( + IDocumentSettingAccess::SUBTRACT_FLYS)); + rValue <<= bTmp; + } + break; default: throw UnknownPropertyException(); } diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/uno/unomailmerge.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/uno/unomailmerge.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/uno/unomailmerge.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/uno/unomailmerge.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -826,8 +826,7 @@ if (DBMGR_MERGE_SHELL == nMergeType) { - SwXTextDocument *xTextDoc = new SwXTextDocument( aMergeDesc.pMailMergeConfigItem->GetTargetView()->GetDocShell() ); - return makeAny( Reference< XComponent >( xTextDoc->queryInterface( XComponent::static_type() ), css::uno::UNO_QUERY) ); + return makeAny( aMergeDesc.pMailMergeConfigItem->GetTargetView()->GetDocShell()->GetBaseModel() ); } else return makeAny( true ); diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/uno/unotxdoc.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/uno/unotxdoc.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/uno/unotxdoc.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/uno/unotxdoc.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -263,19 +263,16 @@ } sal_Int64 nRet = SfxBaseModel::getSomething( rId ); - if ( nRet ) + if (nRet) return nRet; - else - { - GetNumberFormatter(); - Any aNumTunnel = xNumFmtAgg->queryAggregation(cppu::UnoType::get()); - Reference xNumTunnel; - aNumTunnel >>= xNumTunnel; - if(xNumTunnel.is()) - return xNumTunnel->getSomething(rId); - } - return SfxBaseModel::getSomething( rId ); + GetNumberFormatter(); + if (!xNumFmtAgg.is()) // may happen if not valid or no SwDoc + return 0; + Any aNumTunnel = xNumFmtAgg->queryAggregation(cppu::UnoType::get()); + Reference xNumTunnel; + aNumTunnel >>= xNumTunnel; + return (xNumTunnel.is()) ? xNumTunnel->getSomething(rId) : 0; } Any SAL_CALL SwXTextDocument::queryInterface( const uno::Type& rType ) throw(RuntimeException, std::exception) diff -Nru libreoffice-l10n-4.4.2/sw/source/uibase/utlui/content.cxx libreoffice-l10n-4.4.6~rc3/sw/source/uibase/utlui/content.cxx --- libreoffice-l10n-4.4.2/sw/source/uibase/utlui/content.cxx 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/source/uibase/utlui/content.cxx 2015-10-27 20:55:54.000000000 +0000 @@ -2220,15 +2220,12 @@ } else if(bIsConstant) { - if(!lcl_FindShell(pActiveShell)) - { - if (pActiveShell) - EndListening(*pActiveShell->GetView().GetDocShell()); - pActiveShell = pSh; - bIsActive = true; - bIsConstant = false; - bClear = true; - } + if (pActiveShell) + EndListening(*pActiveShell->GetView().GetDocShell()); + pActiveShell = pSh; + bIsActive = true; + bIsConstant = false; + bClear = true; } // Only if it is the active view, the array will be deleted and // the screen filled new. diff -Nru libreoffice-l10n-4.4.2/sw/uiconfig/swriter/ui/frmaddpage.ui libreoffice-l10n-4.4.6~rc3/sw/uiconfig/swriter/ui/frmaddpage.ui --- libreoffice-l10n-4.4.2/sw/uiconfig/swriter/ui/frmaddpage.ui 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/sw/uiconfig/swriter/ui/frmaddpage.ui 2015-10-27 20:55:54.000000000 +0000 @@ -513,6 +513,10 @@ 1 + Right-to-left (vertical) + 2 + + Use superordinate object settings 4 diff -Nru libreoffice-l10n-4.4.2/swext/mediawiki/src/filter/odt2mediawiki.xsl libreoffice-l10n-4.4.6~rc3/swext/mediawiki/src/filter/odt2mediawiki.xsl --- libreoffice-l10n-4.4.2/swext/mediawiki/src/filter/odt2mediawiki.xsl 2015-03-26 08:55:48.000000000 +0000 +++ libreoffice-l10n-4.4.6~rc3/swext/mediawiki/src/filter/odt2mediawiki.xsl 2015-10-27 20:55:54.000000000 +0000 @@ -285,6 +285,7 @@ + @@ -293,6 +294,7 @@ == + -