[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-5.0' - 14 commits - configure.ac include/oox include/unotools officecfg/registry oox/source sc/source sd/qa sw/qa sw/source unotools/source writerfilter/Library_writerfilter.mk writerfilter/source
Andras Timar
andras.timar at collabora.com
Tue May 3 07:08:52 UTC 2016
configure.ac | 2
include/oox/ppt/slidepersist.hxx | 4
include/oox/vml/vmlshape.hxx | 4
include/unotools/localedatawrapper.hxx | 6
officecfg/registry/schema/org/openoffice/Office/Common.xcs | 4
oox/source/ppt/pptshapegroupcontext.cxx | 9
oox/source/ppt/slidefragmenthandler.cxx | 3
oox/source/ppt/slidepersist.cxx | 3
oox/source/vml/vmlshape.cxx | 33 ++
oox/source/vml/vmlshapecontext.cxx | 6
sc/source/core/data/column3.cxx | 2
sc/source/filter/excel/xicontent.cxx | 60 ++--
sc/source/filter/excel/xilink.cxx | 5
sc/source/filter/inc/stylesbuffer.hxx | 2
sc/source/filter/oox/stylesbuffer.cxx | 19 -
sc/source/ui/docshell/docsh.cxx | 8
sd/qa/unit/data/pptx/tdf93868.pptx |binary
sd/qa/unit/import-tests.cxx | 15 +
sw/qa/extras/ooxmlimport/data/tdf99074.docx |binary
sw/qa/extras/ooxmlimport/data/tdf99135.docx |binary
sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 14 +
sw/qa/extras/rtfexport/data/pgndec.rtf | 23 +
sw/qa/extras/rtfexport/data/pgnlcrm.rtf | 23 +
sw/qa/extras/rtfexport/data/pgnucrm.rtf | 23 +
sw/qa/extras/rtfexport/rtfexport.cxx | 18 +
sw/qa/extras/rtfimport/data/tdf90097.rtf | 162 +++++++++++++
sw/qa/extras/rtfimport/rtfimport.cxx | 19 +
sw/source/uibase/uno/SwXDocumentSettings.cxx | 16 +
unotools/source/i18n/localedatawrapper.cxx | 34 ++
writerfilter/Library_writerfilter.mk | 1
writerfilter/source/dmapper/DomainMapper.cxx | 12
writerfilter/source/dmapper/DomainMapper_Impl.cxx | 4
writerfilter/source/rtftok/rtfdocumentimpl.cxx | 21 +
writerfilter/source/rtftok/rtfsdrimport.cxx | 31 ++
34 files changed, 520 insertions(+), 66 deletions(-)
New commits:
commit 89f4282ccfde05ab7ef685a7b572f9c31c4db67a
Author: Andras Timar <andras.timar at collabora.com>
Date: Tue May 3 09:17:02 2016 +0200
Bump version to 5.0-33
Change-Id: Ibe8b84379f048548def6a700aebd686b8f936bce
diff --git a/configure.ac b/configure.ac
index c268169..3d5541a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,7 +9,7 @@ dnl in order to create a configure script.
# 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([Collabora Office],[5.0.10.32],[],[],[https://CollaboraOffice.com/])
+AC_INIT([Collabora Office],[5.0.10.33],[],[],[https://CollaboraOffice.com/])
AC_PREREQ([2.59])
commit 4d4edcc3d4c27688f5bed4beebf5fee2b0cd1760
Author: Matus Uzak <matus.uzak at gmail.com>
Date: Tue Mar 8 21:44:21 2016 +0100
tdf#93868: PPTX import: Incorrect inheritance of shape fill properties
DrawingML: The useBgFill attribute specifies that the shape fill
should be set to that of the slide background.
Reviewed-on: https://gerrit.libreoffice.org/23039
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Katarina Behrens <Katarina.Behrens at cib.de>
(cherry picked from commit f3d1ac75c4b7fa63022e54a9cbff46ba99535076)
Change-Id: I8b568e730f00326d51e7b604579f4ff990b26f8a
diff --git a/include/oox/ppt/slidepersist.hxx b/include/oox/ppt/slidepersist.hxx
index 91cd49b..4e4fcec 100644
--- a/include/oox/ppt/slidepersist.hxx
+++ b/include/oox/ppt/slidepersist.hxx
@@ -85,7 +85,6 @@ public:
void setBackgroundProperties( const oox::drawingml::FillPropertiesPtr& rFillPropertiesPtr ){ mpBackgroundPropertiesPtr = rFillPropertiesPtr; }
oox::drawingml::FillPropertiesPtr getBackgroundProperties() const { return mpBackgroundPropertiesPtr; }
- oox::drawingml::Color& getBackgroundColor() { return maBackgroundColor; }
bool isMasterPage() const { return mbMaster; }
bool isNotesPage() const { return mbNotes; }
@@ -129,9 +128,8 @@ private:
SlidePersistPtr mpMasterPagePtr;
oox::drawingml::ShapePtr maShapesPtr;
- oox::drawingml::Color maBackgroundColor;
oox::drawingml::FillPropertiesPtr mpBackgroundPropertiesPtr;
- ::std::list< std::shared_ptr< TimeNode > > maTimeNodeList;
+ ::std::list< std::shared_ptr< TimeNode > > maTimeNodeList;
oox::ppt::HeaderFooter maHeaderFooter;
sal_Int32 mnLayoutValueToken;
diff --git a/oox/source/ppt/pptshapegroupcontext.cxx b/oox/source/ppt/pptshapegroupcontext.cxx
index 05044ca..b38cd11 100644
--- a/oox/source/ppt/pptshapegroupcontext.cxx
+++ b/oox/source/ppt/pptshapegroupcontext.cxx
@@ -98,11 +98,10 @@ ContextHandlerRef PPTShapeGroupContext::onCreateContext( sal_Int32 aElementToken
std::shared_ptr<PPTShape> pShape( new PPTShape( meShapeLocation, "com.sun.star.drawing.CustomShape" ) );
if( rAttribs.getBool( XML_useBgFill, false ) )
{
- ::oox::drawingml::FillProperties &aFill = pShape->getFillProperties();
- aFill.moFillType = XML_solidFill;
- // This is supposed to fill with slide (background) color, but
- // TODO: We are using white here, because thats the closest we can assume (?)
- aFill.maFillColor.setSrgbClr( API_RGB_WHITE );
+ const oox::drawingml::FillPropertiesPtr pBackgroundPropertiesPtr = mpSlidePersistPtr->getBackgroundProperties();
+ if ( pBackgroundPropertiesPtr ) {
+ pShape->getFillProperties().assignUsed( *pBackgroundPropertiesPtr );
+ }
}
pShape->setModelId(rAttribs.getString( XML_modelId ).get());
return new PPTShapeContext( *this, mpSlidePersistPtr, mpGroupShapePtr, pShape );
diff --git a/oox/source/ppt/slidefragmenthandler.cxx b/oox/source/ppt/slidefragmenthandler.cxx
index 5a27ea3..ed80535 100644
--- a/oox/source/ppt/slidefragmenthandler.cxx
+++ b/oox/source/ppt/slidefragmenthandler.cxx
@@ -166,9 +166,8 @@ SlideFragmentHandler::~SlideFragmentHandler()
if( mpSlidePersistPtr->getTheme() )
pFillProperties = mpSlidePersistPtr->getTheme()->getFillStyle( rAttribs.getInteger( XML_idx, -1 ) );
FillPropertiesPtr pFillPropertiesPtr( pFillProperties ? new FillProperties( *pFillProperties ) : new FillProperties() );
- ContextHandlerRef ret = new ColorContext( *this, mpSlidePersistPtr->getBackgroundColor() );
mpSlidePersistPtr->setBackgroundProperties( pFillPropertiesPtr );
- return ret;
+ return this;
}
break;
diff --git a/oox/source/ppt/slidepersist.cxx b/oox/source/ppt/slidepersist.cxx
index 82d0f9f..45e7b4a 100644
--- a/oox/source/ppt/slidepersist.cxx
+++ b/oox/source/ppt/slidepersist.cxx
@@ -166,8 +166,7 @@ void SlidePersist::createBackground( const XmlFilterBase& rFilterBase )
{
if ( mpBackgroundPropertiesPtr )
{
- sal_Int32 nPhClr = maBackgroundColor.isUsed() ?
- maBackgroundColor.getColor( rFilterBase.getGraphicHelper() ) : API_RGB_TRANSPARENT;
+ sal_Int32 nPhClr = mpBackgroundPropertiesPtr->getBestSolidColor().getColor( rFilterBase.getGraphicHelper() );
::oox::drawingml::ShapePropertyMap aPropMap( rFilterBase.getModelObjectHelper() );
mpBackgroundPropertiesPtr->pushToPropMap( aPropMap, rFilterBase.getGraphicHelper(), 0, nPhClr );
diff --git a/sd/qa/unit/data/pptx/tdf93868.pptx b/sd/qa/unit/data/pptx/tdf93868.pptx
new file mode 100644
index 0000000..f54fb04
Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf93868.pptx differ
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index 8f4685b..257aef8 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -108,6 +108,7 @@ public:
void testRowHeight();
void testTdf93830();
void testTdf93097();
+ void testTdf93868();
CPPUNIT_TEST_SUITE(SdImportTest);
@@ -150,6 +151,7 @@ public:
CPPUNIT_TEST(testRowHeight);
CPPUNIT_TEST(testTdf93830);
CPPUNIT_TEST(testTdf93097);
+ CPPUNIT_TEST(testTdf93868);
CPPUNIT_TEST_SUITE_END();
};
@@ -1309,6 +1311,19 @@ void SdImportTest::testTdf93097()
xDocShRef->DoClose();
}
+void SdImportTest::testTdf93868()
+{
+ sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/pptx/tdf93868.pptx"), PPTX);
+ SdDrawDocument *pDoc = xDocShRef->GetDoc();
+ CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
+ const SdrPage *pPage = &(pDoc->GetPage(1)->TRG_GetMasterPage());
+ CPPUNIT_ASSERT_EQUAL(size_t(5), pPage->GetObjCount());
+ CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, dynamic_cast<const XFillStyleItem&>(pPage->GetObj(0)->GetMergedItem(XATTR_FILLSTYLE)).GetValue());
+ CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, dynamic_cast<const XFillStyleItem&>(pPage->GetObj(1)->GetMergedItem(XATTR_FILLSTYLE)).GetValue());
+
+ xDocShRef->DoClose();
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest);
CPPUNIT_PLUGIN_IMPLEMENT();
commit 8d0455e4bba7516550227326c32c46273ffa00da
Author: Akshay Deep <akshaydeepiitr at gmail.com>
Date: Mon Mar 7 08:45:54 2016 +0400
tdf#94760 Better default values for graphics cache
Changed Total Graphic Cache Size to 64 Mb.
Changed Object Cache Size to 12 Mb.
Change-Id: I772b92f9412ccbf40c1df4e4182dcff6d634b7de
Reviewed-on: https://gerrit.libreoffice.org/22967
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
Tested-by: Michael Meeks <michael.meeks at collabora.com>
(cherry picked from commit 75c272c146045235783e1dfe26a162a8f4dee493)
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index dc68cac..a49312f 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -1486,7 +1486,7 @@
objects.</desc>
<label>Total Graphic Cache Size</label>
</info>
- <value>22000000</value>
+ <value>67110000</value>
</prop>
<prop oor:name="ObjectCacheSize" oor:type="xs:int" oor:nillable="false">
<info>
@@ -1494,7 +1494,7 @@
object.</desc>
<label>Graphic Object Cache Size</label>
</info>
- <value>5500000</value>
+ <value>12600000</value>
</prop>
<prop oor:name="ObjectReleaseTime" oor:type="xs:int" oor:nillable="false">
<info>
commit 4a4839d93111b90dd1da95be74c35709e0a9a9a2
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu Mar 24 00:27:51 2016 +0100
don't allocate and destroy a LocaleDataItem for each cell, tdf#97989
Reviewed-on: https://gerrit.libreoffice.org/23480
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
(cherry picked from commit 7da3a53958695bfb1405fa513f71beddc6c0ecb7)
Change-Id: I8bcdc7a42c87d17fde1dc9c79bc361bb625f992b
diff --git a/include/unotools/localedatawrapper.hxx b/include/unotools/localedatawrapper.hxx
index d644859..f2e7675 100644
--- a/include/unotools/localedatawrapper.hxx
+++ b/include/unotools/localedatawrapper.hxx
@@ -28,6 +28,7 @@
#include <unotools/readwritemutexguard.hxx>
#include <unotools/unotoolsdllapi.h>
#include <memory>
+#include <map>
namespace com { namespace sun { namespace star {
namespace uno {
@@ -74,6 +75,11 @@ class UNOTOOLS_DLLPUBLIC LocaleDataWrapper
bool bLocaleDataItemValid;
bool bReservedWordValid;
mutable ::utl::ReadWriteMutex aMutex;
+ struct Locale_Compare
+ {
+ bool operator()(const css::lang::Locale& rLocale1, const css::lang::Locale& rLocale2) const;
+ };
+ mutable std::map<css::lang::Locale, css::i18n::LocaleDataItem, Locale_Compare> maDataItemCache;
// dummies, to be implemented or provided by XML locale data
sal_Unicode cCurrZeroChar;
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index c0376ea..0c8ac2b 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -1724,7 +1724,7 @@ bool ScColumn::ParseString(
if (!pLocale)
break;
- LocaleDataItem aLocaleItem = pLocale->getLocaleItem();
+ const LocaleDataItem& aLocaleItem = pLocale->getLocaleItem();
const OUString& rDecSep = aLocaleItem.decimalSeparator;
const OUString& rGroupSep = aLocaleItem.thousandSeparator;
if (rDecSep.getLength() != 1 || rGroupSep.getLength() != 1)
diff --git a/unotools/source/i18n/localedatawrapper.cxx b/unotools/source/i18n/localedatawrapper.cxx
index 45c96ba..318e823 100644
--- a/unotools/source/i18n/localedatawrapper.cxx
+++ b/unotools/source/i18n/localedatawrapper.cxx
@@ -63,6 +63,21 @@ namespace
{};
}
+bool LocaleDataWrapper::Locale_Compare::operator()(const css::lang::Locale& rLocale1, const css::lang::Locale& rLocale2) const
+{
+ if (rLocale1.Language < rLocale2.Language)
+ return true;
+ else if (rLocale1.Language > rLocale2.Language)
+ return false;
+
+ if (rLocale1.Country < rLocale2.Country)
+ return true;
+ else if (rLocale1.Country > rLocale2.Country)
+ return false;
+
+ return rLocale1.Variant < rLocale2.Variant;
+}
+
sal_uInt8 LocaleDataWrapper::nLocaleDataChecking = 0;
LocaleDataWrapper::LocaleDataWrapper(
@@ -159,15 +174,30 @@ void LocaleDataWrapper::invalidateData()
::com::sun::star::i18n::LocaleDataItem LocaleDataWrapper::getLocaleItem() const
{
+ {
+ ::utl::ReadWriteGuard aGuard( aMutex );
+ const css::lang::Locale& rLocal = getMyLocale();
+ auto itr = maDataItemCache.find(rLocal);
+ if (itr != maDataItemCache.end())
+ return itr->second;
+ }
+
try
{
- return xLD->getLocaleItem( getMyLocale() );
+ ::utl::ReadWriteGuard aGuard( aMutex );
+
+ const css::lang::Locale& rLocal = getMyLocale();
+ css::i18n::LocaleDataItem aItem = xLD->getLocaleItem( rLocal );
+ auto aRet = maDataItemCache.insert(std::make_pair(rLocal, aItem));
+ assert(aRet.second);
+ return aRet.first->second;
}
catch (const Exception& e)
{
SAL_WARN( "unotools.i18n", "getLocaleItem: Exception caught " << e.Message );
}
- return ::com::sun::star::i18n::LocaleDataItem();
+ static css::i18n::LocaleDataItem aEmptyItem;
+ return aEmptyItem;
}
::com::sun::star::uno::Sequence< ::com::sun::star::i18n::Currency2 > LocaleDataWrapper::getAllCurrencies() const
commit 292e525d287d97868b06f37732079128ae0ee2fa
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu Mar 24 12:42:52 2016 +0100
don't sanitize value to an insane value, tdf#97863
Change-Id: I0e4de6b676fb61536dadefc96a719cf50be128ed
(cherry picked from commit 6aa836329d17bf0aca4aead6bb9c35a6783ec215)
diff --git a/sc/source/filter/excel/xilink.cxx b/sc/source/filter/excel/xilink.cxx
index fce7ba4..73c5829 100644
--- a/sc/source/filter/excel/xilink.cxx
+++ b/sc/source/filter/excel/xilink.cxx
@@ -283,7 +283,10 @@ XclImpExtName::MOper::MOper(svl::SharedStringPool& rPool, XclImpStream& rStrm) :
{
SAL_WARN("sc", "Parsing error: " << nMaxRows <<
" max possible rows, but " << nLastRow << " index claimed, truncating");
- nLastRow = nMaxRows-1;
+ if (nMaxRows > 0)
+ nLastRow = nMaxRows-1;
+ else
+ return;
}
mxCached->Resize(nLastCol+1, nLastRow+1);
commit c2064f99b97f9d7e3806c09d3eb0df8eae257c86
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Mon Apr 4 12:26:11 2016 +0200
tdf#99074 DOCX import: handle <w:view w:val="web"/>
Instead of always using the Normal view, use the Web view when the DOCX
file contains Web Layout.
For this to work, expose sw's DocumentSettingId::BROWSE_MODE via
css.document.Settings.
Reviewed-on: https://gerrit.libreoffice.org/23806
Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
Tested-by: Jenkins <ci at libreoffice.org>
(cherry picked from commit e0f9bb795251d950b5dd960fcd030170c8eb67aa)
Change-Id: I7787ca058d8cb8a346b2001a2bd70c3df86d8673
diff --git a/sw/qa/extras/ooxmlimport/data/tdf99074.docx b/sw/qa/extras/ooxmlimport/data/tdf99074.docx
new file mode 100644
index 0000000..d7be418
Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/tdf99074.docx differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 0b1487a..4a362c3 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -2938,6 +2938,14 @@ DECLARE_OOXMLIMPORT_TEST(testTdf99140, "tdf99140.docx")
CPPUNIT_ASSERT_EQUAL(text::HoriOrientation::LEFT_AND_WIDTH, getProperty<sal_Int16>(xTableProperties, "HoriOrient"));
}
+DECLARE_OOXMLIMPORT_TEST(testTdf99074, "tdf99074.docx")
+{
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<uno::XInterface> xSettings = xFactory->createInstance("com.sun.star.document.Settings");
+ // This was false, Web Layout was ignored on import.
+ CPPUNIT_ASSERT(getProperty<bool>(xSettings, "InBrowseMode"));
+}
+
#endif
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/uibase/uno/SwXDocumentSettings.cxx b/sw/source/uibase/uno/SwXDocumentSettings.cxx
index a6e454e..8b7083a 100644
--- a/sw/source/uibase/uno/SwXDocumentSettings.cxx
+++ b/sw/source/uibase/uno/SwXDocumentSettings.cxx
@@ -131,6 +131,7 @@ enum SwDocumentSettingsPropertyHandles
HANDLE_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING,
HANDLE_PROP_LINE_SPACING_SHRINKS_FIRST_LINE,
HANDLE_SUBTRACT_FLYS,
+ HANDLE_BROWSE_MODE,
};
static MasterPropertySetInfo * lcl_createSettingsInfo()
@@ -206,6 +207,7 @@ static MasterPropertySetInfo * lcl_createSettingsInfo()
{ OUString("ApplyParagraphMarkFormatToNumbering"), HANDLE_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING, cppu::UnoType<bool>::get(), 0, 0},
{ OUString("PropLineSpacingShrinksFirstLine"), HANDLE_PROP_LINE_SPACING_SHRINKS_FIRST_LINE, cppu::UnoType<bool>::get(), 0, 0},
{ OUString("SubtractFlysAnchoredAtFlys"), HANDLE_SUBTRACT_FLYS, cppu::UnoType<bool>::get(), 0, 0},
+ { OUString("InBrowseMode"), HANDLE_BROWSE_MODE, cppu::UnoType<bool>::get(), 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
@@ -847,6 +849,15 @@ void SwXDocumentSettings::_setSingleValue( const comphelper::PropertyInfo & rInf
}
}
break;
+ case HANDLE_BROWSE_MODE:
+ {
+ bool bTmp;
+ if (rValue >>= bTmp)
+ {
+ mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::BROWSE_MODE, bTmp);
+ }
+ }
+ break;
default:
throw UnknownPropertyException();
}
@@ -1253,6 +1264,11 @@ void SwXDocumentSettings::_getSingleValue( const comphelper::PropertyInfo & rInf
rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::SUBTRACT_FLYS);
}
break;
+ case HANDLE_BROWSE_MODE:
+ {
+ rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::BROWSE_MODE);
+ }
+ break;
default:
throw UnknownPropertyException();
}
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 2906e24..856ab75 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -4985,6 +4985,10 @@ void DomainMapper_Impl::ApplySettingsTable()
if( m_pSettingsTable->GetEmbedSystemFonts())
xSettings->setPropertyValue( PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_EMBED_SYSTEM_FONTS ), uno::makeAny(true) );
xSettings->setPropertyValue("AddParaTableSpacing", uno::makeAny(m_pSettingsTable->GetDoNotUseHTMLParagraphAutoSpacing()));
+
+ // Web Layout.
+ if (m_pSettingsTable->GetView() == NS_ooxml::LN_Value_doc_ST_View_web)
+ xSettings->setPropertyValue("InBrowseMode", uno::makeAny(true));
}
catch(const uno::Exception&)
{
commit fdb04adc44fc1f1ff85390e55730f78d6c644e41
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu Apr 7 08:20:12 2016 +0200
we need the position in the formula converter, tdf#99093
Reviewed-on: https://gerrit.libreoffice.org/23884
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
(cherry picked from commit e214df32fb3637bd7810a299fb8b38810b1a3874)
Change-Id: Ic3dd13aa4d4b8190b78f3e6f1cdda844e39cc719
diff --git a/sc/source/filter/excel/xicontent.cxx b/sc/source/filter/excel/xicontent.cxx
index 9613019..69e77b5 100644
--- a/sc/source/filter/excel/xicontent.cxx
+++ b/sc/source/filter/excel/xicontent.cxx
@@ -768,35 +768,21 @@ void XclImpValidationManager::ReadDV( XclImpStream& rStrm )
rStrm.SetNulSubstChar( '\n' );
::std::unique_ptr< ScTokenArray > xTokArr1;
- sal_uInt16 nLen = 0;
- nLen = rStrm.ReaduInt16();
+ // We can't import the formula directly because we need the range
+ sal_uInt16 nLenFormula1 = rStrm.ReaduInt16();
rStrm.Ignore( 2 );
- if( nLen > 0 )
- {
- const ScTokenArray* pTokArr = 0;
- rFmlaConv.Reset();
- rFmlaConv.Convert( pTokArr, rStrm, nLen, false, FT_CondFormat );
- // formula converter owns pTokArr -> create a copy of the token array
- if( pTokArr )
- xTokArr1.reset( pTokArr->Clone() );
- }
- rStrm.SetNulSubstChar(); // back to default
+ XclImpStreamPos aPosFormula1;
+ rStrm.StorePosition(aPosFormula1);
+ rStrm.Ignore(nLenFormula1);
// second formula
::std::unique_ptr< ScTokenArray > xTokArr2;
- nLen = 0;
- nLen = rStrm.ReaduInt16();
+ sal_uInt16 nLenFormula2 = rStrm.ReaduInt16();
rStrm.Ignore( 2 );
- if( nLen > 0 )
- {
- const ScTokenArray* pTokArr = 0;
- rFmlaConv.Reset();
- rFmlaConv.Convert( pTokArr, rStrm, nLen, false, FT_CondFormat );
- // formula converter owns pTokArr -> create a copy of the token array
- if( pTokArr )
- xTokArr2.reset( pTokArr->Clone() );
- }
+ XclImpStreamPos aPosFormula2;
+ rStrm.StorePosition(aPosFormula2);
+ rStrm.Ignore(nLenFormula2);
// read all cell ranges
XclRangeList aXclRanges;
@@ -810,6 +796,34 @@ void XclImpValidationManager::ReadDV( XclImpStream& rStrm )
if ( aScRanges.empty() )
return;
+ ScRange aCombinedRange = aScRanges.Combine();
+
+ XclImpStreamPos aCurrentPos;
+ rStrm.StorePosition(aCurrentPos);
+ rStrm.RestorePosition(aPosFormula1);
+ if( nLenFormula1 > 0 )
+ {
+ const ScTokenArray* pTokArr = nullptr;
+ rFmlaConv.Reset(aCombinedRange.aStart);
+ rFmlaConv.Convert( pTokArr, rStrm, nLenFormula1, false, FT_CondFormat );
+ // formula converter owns pTokArr -> create a copy of the token array
+ if( pTokArr )
+ xTokArr1.reset( pTokArr->Clone() );
+ }
+ rStrm.SetNulSubstChar(); // back to default
+ if (nLenFormula2 > 0)
+ {
+ rStrm.RestorePosition(aPosFormula2);
+ const ScTokenArray* pTokArr = nullptr;
+ rFmlaConv.Reset(aCombinedRange.aStart);
+ rFmlaConv.Convert( pTokArr, rStrm, nLenFormula2, false, FT_CondFormat );
+ // formula converter owns pTokArr -> create a copy of the token array
+ if( pTokArr )
+ xTokArr2.reset( pTokArr->Clone() );
+ }
+
+ rStrm.RestorePosition(aCurrentPos);
+
bool bIsValid = true; // valid settings in flags field
ScValidationMode eValMode = SC_VALID_ANY;
commit d2f262ba4105d7c6d8c30e46f64fc4949e7884fe
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat Apr 9 09:36:45 2016 +0200
import all formatting properties for column style, tdf#96549
Reviewed-on: https://gerrit.libreoffice.org/23932
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
(cherry picked from commit e8322dffb4dfc7015ee0842f133b79080eb2b0d8)
Change-Id: I782f3ea7cfa9af335bd117b9f4ad6ac9c719115b
diff --git a/sc/source/filter/inc/stylesbuffer.hxx b/sc/source/filter/inc/stylesbuffer.hxx
index 5701244..6b78bc0 100644
--- a/sc/source/filter/inc/stylesbuffer.hxx
+++ b/sc/source/filter/inc/stylesbuffer.hxx
@@ -678,7 +678,7 @@ public:
/** Writes all formatting attributes to the passed property set. */
void writeToPropertySet( PropertySet& rPropSet ) const;
- void writeToDoc( ScDocumentImport& rDoc, const css::table::CellRangeAddress& rRange ) const;
+ void writeToDoc( ScDocumentImport& rDoc, const css::table::CellRangeAddress& rRange );
const ::ScPatternAttr& createPattern( bool bSkipPoolDefs = false );
diff --git a/sc/source/filter/oox/stylesbuffer.cxx b/sc/source/filter/oox/stylesbuffer.cxx
index bf63786..88a4a86 100644
--- a/sc/source/filter/oox/stylesbuffer.cxx
+++ b/sc/source/filter/oox/stylesbuffer.cxx
@@ -2252,7 +2252,7 @@ void Xf::writeToPropertySet( PropertySet& rPropSet ) const
rPropSet.setProperties( aPropMap );
}
-void Xf::writeToDoc( ScDocumentImport& rDoc, const table::CellRangeAddress& rRange ) const
+void Xf::writeToDoc( ScDocumentImport& rDoc, const table::CellRangeAddress& rRange )
{
const StylesBuffer& rStyles = getStyles();
@@ -2273,22 +2273,9 @@ void Xf::writeToDoc( ScDocumentImport& rDoc, const table::CellRangeAddress& rRan
}
}
- boost::scoped_ptr<ScPatternAttr> pAttr(new ScPatternAttr(rDoc.getDoc().GetPool()));
-
- {
- SvxRotateMode eRotateMode = SVX_ROTATE_MODE_STANDARD;
-
- if (maModel.mbBorderUsed && rStyles.hasBorder(maModel.mnBorderId) && maAlignment.getApiData().mnRotation)
- eRotateMode = SVX_ROTATE_MODE_BOTTOM;
-
- SvxRotateModeItem aItem(eRotateMode, ATTR_ROTATE_MODE);
- ScfTools::PutItem(pAttr->GetItemSet(), aItem, false);
- }
-
- // TODO : Move more properties from writeToPropertyMap().
-
+ const ScPatternAttr& rAttr = createPattern();
rDoc.getDoc().ApplyPatternAreaTab(
- rRange.StartColumn, rRange.StartRow, rRange.EndColumn, rRange.EndRow, rRange.Sheet, *pAttr);
+ rRange.StartColumn, rRange.StartRow, rRange.EndColumn, rRange.EndRow, rRange.Sheet, rAttr);
}
const ::ScPatternAttr&
commit 9e65f1bfa3407f234fba9f82c53ca650ca218c88
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Tue Apr 12 09:18:47 2016 +0200
tdf#99135 VML import: handle image crop
The spec says in theory a % suffix could be also supported, but let's
wait till that is seen in a real-world document.
Change-Id: Ie026915e38dcb03c99085a1740075364b00e1c8d
(cherry picked from commit bb646c1472d3b77066b01128baf1c9cafdb40233)
diff --git a/include/oox/vml/vmlshape.hxx b/include/oox/vml/vmlshape.hxx
index e4b5c92..3aba0ca 100644
--- a/include/oox/vml/vmlshape.hxx
+++ b/include/oox/vml/vmlshape.hxx
@@ -104,6 +104,10 @@ struct OOX_DLLPUBLIC ShapeTypeModel
OUString maWrapDistanceRight; ///< Distance from the right side of the shape to the text that wraps around it.
OUString maWrapDistanceTop; ///< Distance from the top of the shape to the text that wraps around it.
OUString maWrapDistanceBottom; ///< Distance from the bottom of the shape to the text that wraps around it.
+ OptValue<OUString> moCropBottom; ///< Specifies the how much to crop the image from the bottom up as a fraction of picture size.
+ OptValue<OUString> moCropLeft; ///< Specifies how much to crop the image from the left in as a fraction of picture size.
+ OptValue<OUString> moCropRight; ///< Specifies how much to crop the image from the right in as a fraction of picture size.
+ OptValue<OUString> moCropTop; ///< Specifies how much to crop the image from the top down as a fraction of picture size.
OUString maLayoutFlowAlt; ///< Specifies the alternate layout flow for text in textboxes.
explicit ShapeTypeModel();
diff --git a/oox/source/vml/vmlshape.cxx b/oox/source/vml/vmlshape.cxx
index aa07015..169f5bd 100644
--- a/oox/source/vml/vmlshape.cxx
+++ b/oox/source/vml/vmlshape.cxx
@@ -44,6 +44,7 @@
#include <com/sun/star/text/XTextFrame.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/text/TextContentAnchorType.hpp>
+#include <com/sun/star/text/GraphicCrop.hpp>
#include <rtl/math.hxx>
#include <rtl/ustrbuf.hxx>
#include <svx/svdtrans.hxx>
@@ -106,6 +107,19 @@ awt::Rectangle lclGetAbsRect( const awt::Rectangle& rRelRect, const awt::Rectang
return aAbsRect;
}
+/// Count the crop value based on a crop fraction and a reference size.
+sal_Int32 lclConvertCrop(const OUString& rCrop, sal_uInt32 nSize)
+{
+ if (rCrop.endsWith("f"))
+ {
+ // Numeric value is specified in 1/65536-ths.
+ sal_uInt32 nCrop = rCrop.copy(0, rCrop.getLength() - 1).toUInt32();
+ return (nCrop * nSize) / 65536;
+ }
+
+ return 0;
+}
+
} // namespace
ShapeTypeModel::ShapeTypeModel():
@@ -848,6 +862,25 @@ Reference< XShape > SimpleShape::createPictureObject( const Reference< XShapes >
const GraphicHelper& rGraphicHelper = mrDrawing.getFilter().getGraphicHelper();
lcl_SetAnchorType(aPropSet, maTypeModel, rGraphicHelper);
+
+ if (maTypeModel.moCropBottom.has() || maTypeModel.moCropLeft.has() || maTypeModel.moCropRight.has() || maTypeModel.moCropTop.has())
+ {
+ text::GraphicCrop aGraphicCrop;
+ uno::Reference<graphic::XGraphic> xGraphic;
+ aPropSet.getProperty(xGraphic, PROP_Graphic);
+ awt::Size aOriginalSize = rGraphicHelper.getOriginalSize(xGraphic);
+
+ if (maTypeModel.moCropBottom.has())
+ aGraphicCrop.Bottom = lclConvertCrop(maTypeModel.moCropBottom.get(), aOriginalSize.Height);
+ if (maTypeModel.moCropLeft.has())
+ aGraphicCrop.Left = lclConvertCrop(maTypeModel.moCropLeft.get(), aOriginalSize.Width);
+ if (maTypeModel.moCropRight.has())
+ aGraphicCrop.Right = lclConvertCrop(maTypeModel.moCropRight.get(), aOriginalSize.Width);
+ if (maTypeModel.moCropTop.has())
+ aGraphicCrop.Top = lclConvertCrop(maTypeModel.moCropTop.get(), aOriginalSize.Height);
+
+ aPropSet.setProperty(PROP_GraphicCrop, aGraphicCrop);
+ }
}
return xShape;
}
diff --git a/oox/source/vml/vmlshapecontext.cxx b/oox/source/vml/vmlshapecontext.cxx
index 4ea10e8..c5a0810 100644
--- a/oox/source/vml/vmlshapecontext.cxx
+++ b/oox/source/vml/vmlshapecontext.cxx
@@ -347,6 +347,12 @@ ContextHandlerRef ShapeTypeContext::onCreateContext( sal_Int32 nElement, const A
bool bHasORelId = rAttribs.hasAttribute( O_TOKEN( relid ) );
mrTypeModel.moGraphicPath = decodeFragmentPath( rAttribs, bHasORelId ? O_TOKEN( relid ) : R_TOKEN( id ) );
mrTypeModel.moGraphicTitle = rAttribs.getString( O_TOKEN( title ) );
+
+ // Get crop attributes.
+ mrTypeModel.moCropBottom = rAttribs.getString(XML_cropbottom);
+ mrTypeModel.moCropLeft = rAttribs.getString(XML_cropleft);
+ mrTypeModel.moCropRight = rAttribs.getString(XML_cropright);
+ mrTypeModel.moCropTop = rAttribs.getString(XML_croptop);
}
break;
case NMSP_vmlWord | XML_wrap:
diff --git a/sw/qa/extras/ooxmlimport/data/tdf99135.docx b/sw/qa/extras/ooxmlimport/data/tdf99135.docx
new file mode 100644
index 0000000..7ac3836
Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/tdf99135.docx differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 39c469a..0b1487a 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -2085,6 +2085,12 @@ DECLARE_OOXMLIMPORT_TEST(testPictureWithSchemeColor, "picture-with-schemecolor.d
Bitmap::ReleaseAccess(pAccess);
}
+DECLARE_OOXMLIMPORT_TEST(testTdf99135, "tdf99135.docx")
+{
+ // This was 0, crop was ignored on VML import.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1825), getProperty<text::GraphicCrop>(getShape(1), "GraphicCrop").Bottom);
+}
+
DECLARE_OOXMLIMPORT_TEST(testFdo69656, "Table_cell_auto_width_fdo69656.docx")
{
uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, uno::UNO_QUERY);
commit 3dae33bd19062c2328464f6d48a9ee0869679b58
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Fri Mar 25 20:26:52 2016 +0100
use the ScRefCellValue already available, tdf#97989
Change-Id: Iccfff23f72d33ee012f91a230f2598b8fe3131cf
Reviewed-on: https://gerrit.libreoffice.org/23514
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
(cherry picked from commit 007b317fef91aa809deff8380a9e62c350eaf511)
diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx
index d0c0836..57667ff 100644
--- a/sc/source/ui/docshell/docsh.cxx
+++ b/sc/source/ui/docshell/docsh.cxx
@@ -1964,7 +1964,7 @@ void ScDocShell::AsciiSave( SvStream& rStream, const ScImportOptions& rAsciiOpt
if ( bFixedWidth || bSaveAsShown )
{
Color* pDummy;
- aString = ScCellFormat::GetString(aDocument, aPos, nFormat, &pDummy, rFormatter);
+ ScCellFormat::GetString(*pCell, nFormat, aString, &pDummy, rFormatter, &aDocument);
bString = bSaveAsShown && rFormatter.IsTextFormat( nFormat);
}
else
@@ -1979,7 +1979,7 @@ void ScDocShell::AsciiSave( SvStream& rStream, const ScImportOptions& rAsciiOpt
{
sal_uInt32 nFormat = aDocument.GetNumberFormat(aPos);
Color* pDummy;
- aString = ScCellFormat::GetString(aDocument, aPos, nFormat, &pDummy, rFormatter);
+ ScCellFormat::GetString(*pCell, nFormat, aString, &pDummy, rFormatter, &aDocument);
}
else
aString = pCell->mpFormula->GetString().getString();
@@ -1992,7 +1992,7 @@ void ScDocShell::AsciiSave( SvStream& rStream, const ScImportOptions& rAsciiOpt
{
sal_uInt32 nFormat = aDocument.GetNumberFormat(aPos);
Color* pDummy;
- aString = ScCellFormat::GetString(aDocument, aPos, nFormat, &pDummy, rFormatter);
+ ScCellFormat::GetString(*pCell, nFormat, aString, &pDummy, rFormatter, &aDocument);
}
else
aString = pCell->mpString->getString();
@@ -2014,7 +2014,7 @@ void ScDocShell::AsciiSave( SvStream& rStream, const ScImportOptions& rAsciiOpt
if ( bFixedWidth || bSaveAsShown )
{
Color* pDummy;
- aString = ScCellFormat::GetString(aDocument, aPos, nFormat, &pDummy, rFormatter);
+ ScCellFormat::GetString(*pCell, nFormat, aString, &pDummy, rFormatter, &aDocument);
bString = bSaveAsShown && rFormatter.IsTextFormat( nFormat);
}
else
commit afd2095bd2acd201ff125959b41550f39303cee5
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Thu Apr 14 08:08:04 2016 +0200
Related: tdf#65642 RTF filter: import \pgnucrm
This as a side effect also implements support for DOCX <w:pgNumType
w:fmt="upperRoman" .../>.
Reviewed-on: https://gerrit.libreoffice.org/24073
Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
Tested-by: Jenkins <ci at libreoffice.org>
(cherry picked from commit 235dcc11e7e5291188e134f37a03849d741c4f6e)
Change-Id: Ibf3bedca03c6c2a2b96eecb36ff6c4cf6e2281b4
diff --git a/sw/qa/extras/rtfexport/data/pgnucrm.rtf b/sw/qa/extras/rtfexport/data/pgnucrm.rtf
new file mode 100644
index 0000000..ce0bbf2
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/pgnucrm.rtf
@@ -0,0 +1,23 @@
+{\rtf1
+\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0
+{\field\fldedit
+{\*\fldinst
+{ PAGE \\* MERGEFORMAT }
+}
+{\fldrslt
+{1}
+}
+}
+\sect
+\sectd\pgnrestart\pgnucrm
+{\field\fldedit
+{\*\fldinst
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid525329 PAGE \\* MERGEFORMAT }
+}
+{\fldrslt
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1024\langfe1024\noproof\insrsid9597790 A}
+}
+}
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid13321744
+\par }
+}
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx
index ed9fa08..d845e09 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -941,6 +941,12 @@ DECLARE_RTFEXPORT_TEST(testPgnlcrm, "pgnlcrm.rtf")
CPPUNIT_ASSERT_EQUAL(style::NumberingType::ROMAN_LOWER, getProperty<sal_Int16>(getStyles("PageStyles")->getByName("Converted1"), "NumberingType"));
}
+DECLARE_RTFEXPORT_TEST(testPgnucrm, "pgnucrm.rtf")
+{
+ // The second page's numbering type: this was style::NumberingType::ARABIC.
+ CPPUNIT_ASSERT_EQUAL(style::NumberingType::ROMAN_UPPER, getProperty<sal_Int16>(getStyles("PageStyles")->getByName("Converted1"), "NumberingType"));
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index b854682..a6f9c45 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -983,6 +983,10 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
// i, ii, ...
pSectionContext->SetPageNumberType(style::NumberingType::ROMAN_LOWER);
break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_upperRoman:
+ // I, II, ...
+ pSectionContext->SetPageNumberType(style::NumberingType::ROMAN_UPPER);
+ break;
}
}
break;
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index d02739e..5cdc8e9 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -3244,7 +3244,6 @@ RTFError RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
m_aStates.top().aSectionSprms.set(NS_ooxml::LN_EG_SectPrContents_formProt, pValue);
}
break;
- case RTF_PGNUCRM:
case RTF_PGNLCLTR:
case RTF_PGNBIDIA:
case RTF_PGNBIDIB:
@@ -3567,6 +3566,12 @@ RTFError RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
lcl_putNestedAttribute(m_aStates.top().aSectionSprms, NS_ooxml::LN_EG_SectPrContents_pgNumType, NS_ooxml::LN_CT_PageNumber_fmt, pIntValue);
}
break;
+ case RTF_PGNUCRM:
+ {
+ auto pIntValue = std::make_shared<RTFValue>(NS_ooxml::LN_Value_ST_NumberFormat_upperRoman);
+ lcl_putNestedAttribute(m_aStates.top().aSectionSprms, NS_ooxml::LN_EG_SectPrContents_pgNumType, NS_ooxml::LN_CT_PageNumber_fmt, pIntValue);
+ }
+ break;
default:
{
SAL_INFO("writerfilter", "TODO handle flag '" << lcl_RtfToString(nKeyword) << "'");
commit 7aa6e7584464abde91be91d61d66dc6ecd7082d1
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Thu Apr 21 08:36:20 2016 +0200
Related: tdf#65642 RTF filter: import \pgnlcrm
This as a side effect also implements support for DOCX <w:pgNumType
w:fmt="lowerRoman" .../>.
Reviewed-on: https://gerrit.libreoffice.org/24273
Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
Tested-by: Jenkins <ci at libreoffice.org>
(cherry picked from commit 91b18cee97b110fe60391faa945a6fd166f1d8aa)
Change-Id: Ifb524b25236a8bc774690266a4fa205154204109
diff --git a/sw/qa/extras/rtfexport/data/pgnlcrm.rtf b/sw/qa/extras/rtfexport/data/pgnlcrm.rtf
new file mode 100644
index 0000000..4ef9b61
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/pgnlcrm.rtf
@@ -0,0 +1,23 @@
+{\rtf1
+\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0
+{\field\fldedit
+{\*\fldinst
+{ PAGE \\* MERGEFORMAT }
+}
+{\fldrslt
+{1}
+}
+}
+\sect
+\sectd\pgnrestart\pgnlcrm
+{\field\fldedit
+{\*\fldinst
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid525329 PAGE \\* MERGEFORMAT }
+}
+{\fldrslt
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1024\langfe1024\noproof\insrsid9597790 i}
+}
+}
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid13321744
+\par }
+}
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx
index cda0b35..ed9fa08 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -935,6 +935,12 @@ DECLARE_RTFEXPORT_TEST(testPgndec, "pgndec.rtf")
CPPUNIT_ASSERT_EQUAL(style::NumberingType::ARABIC, getProperty<sal_Int16>(getStyles("PageStyles")->getByName("Converted1"), "NumberingType"));
}
+DECLARE_RTFEXPORT_TEST(testPgnlcrm, "pgnlcrm.rtf")
+{
+ // The second page's numbering type: this was style::NumberingType::ARABIC.
+ CPPUNIT_ASSERT_EQUAL(style::NumberingType::ROMAN_LOWER, getProperty<sal_Int16>(getStyles("PageStyles")->getByName("Converted1"), "NumberingType"));
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 7669dfa..b854682 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -979,6 +979,10 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
// A, B, ...
pSectionContext->SetPageNumberType(style::NumberingType::CHARS_UPPER_LETTER_N);
break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_lowerRoman:
+ // i, ii, ...
+ pSectionContext->SetPageNumberType(style::NumberingType::ROMAN_LOWER);
+ break;
}
}
break;
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index e5e8f16..d02739e 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -3245,7 +3245,6 @@ RTFError RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
}
break;
case RTF_PGNUCRM:
- case RTF_PGNLCRM:
case RTF_PGNLCLTR:
case RTF_PGNBIDIA:
case RTF_PGNBIDIB:
@@ -3562,6 +3561,12 @@ RTFError RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
lcl_putNestedAttribute(m_aStates.top().aSectionSprms, NS_ooxml::LN_EG_SectPrContents_pgNumType, NS_ooxml::LN_CT_PageNumber_fmt, pIntValue);
}
break;
+ case RTF_PGNLCRM:
+ {
+ auto pIntValue = std::make_shared<RTFValue>(NS_ooxml::LN_Value_ST_NumberFormat_lowerRoman);
+ lcl_putNestedAttribute(m_aStates.top().aSectionSprms, NS_ooxml::LN_EG_SectPrContents_pgNumType, NS_ooxml::LN_CT_PageNumber_fmt, pIntValue);
+ }
+ break;
default:
{
SAL_INFO("writerfilter", "TODO handle flag '" << lcl_RtfToString(nKeyword) << "'");
commit 40be6ee10a64ea1546579cdef9241ddc0381fe0d
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Tue Apr 26 09:33:56 2016 +0200
tdf#90097 RTF import: handle fRelFlipV property for line shapes
Can be extended later in every direction: fFlipV, fRelFlipH, non-line
shapes. See oox::drawingml::Shape::createAndInsert() on why the
convertMm100ToTwip() conversion is necessary.
Change-Id: Ifee401dd8dd392c2c9ff85cc871ca0169fcf930b
Reviewed-on: https://gerrit.libreoffice.org/24385
Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
Tested-by: Jenkins <ci at libreoffice.org>
(cherry picked from commit 6046062719f30849cd97161c6a89d27a0b0d2a20)
diff --git a/sw/qa/extras/rtfimport/data/tdf90097.rtf b/sw/qa/extras/rtfimport/data/tdf90097.rtf
new file mode 100644
index 0000000..7764fa1
--- /dev/null
+++ b/sw/qa/extras/rtfimport/data/tdf90097.rtf
@@ -0,0 +1,162 @@
+{\rtf1\ansi\ansicpg1250\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1029\deflangfe1029
+{\shpgrp
+{\*\shpinst\shpleft1008\shptop0\shpright2880\shpbottom1920\shpfhdr0\shpbxcolumn\shpbxignore\shpbypara\shpbyignore\shpwr3\shpwrk0\shpfblwtxt0\shpz0\shplid1026
+{\sp
+{\sn groupLeft}
+{\sv 0}
+}
+{\sp
+{\sn groupTop}
+{\sv 0}
+}
+{\sp
+{\sn groupRight}
+{\sv 1872}
+}
+{\sp
+{\sn groupBottom}
+{\sv 1920}
+}
+{\sp
+{\sn fFlipH}
+{\sv 0}
+}
+{\sp
+{\sn fFlipV}
+{\sv 0}
+}
+{\sp
+{\sn lidRegroup}
+{\sv 0}
+}
+{\sp
+{\sn posrelh}
+{\sv 2}
+}
+{\sp
+{\sn posrelv}
+{\sv 2}
+}
+{\sp
+{\sn fLayoutInCell}
+{\sv 0}
+}
+{\sp
+{\sn fLayoutInCell}
+{\sv 0}
+}
+{\shp
+{\*\shpinst\shplid1060
+{\sp
+{\sn relLeft}
+{\sv 393}
+}
+{\sp
+{\sn relTop}
+{\sv 201}
+}
+{\sp
+{\sn relRight}
+{\sv 755}
+}
+{\sp
+{\sn relBottom}
+{\sv 544}
+}
+{\sp
+{\sn fRelFlipH}
+{\sv 0}
+}
+{\sp
+{\sn fRelFlipV}
+{\sv 1}
+}
+{\sp
+{\sn shapeType}
+{\sv 20}
+}
+{\sp
+{\sn shapePath}
+{\sv 4}
+}
+{\sp
+{\sn fFilled}
+{\sv 0}
+}
+{\sp
+{\sn lineWidth}
+{\sv 7400}
+}
+{\sp
+{\sn fLine}
+{\sv 1}
+}
+{\sp
+{\sn fLayoutInCell}
+{\sv 0}
+}
+{\sp
+{\sn fLayoutInCell}
+{\sv 0}
+}
+}
+}
+{\shp
+{\*\shpinst\shplid1061
+{\sp
+{\sn relLeft}
+{\sv 755}
+}
+{\sp
+{\sn relTop}
+{\sv 201}
+}
+{\sp
+{\sn relRight}
+{\sv 1117}
+}
+{\sp
+{\sn relBottom}
+{\sv 544}
+}
+{\sp
+{\sn fRelFlipH}
+{\sv 0}
+}
+{\sp
+{\sn fRelFlipV}
+{\sv 0}
+}
+{\sp
+{\sn shapeType}
+{\sv 20}
+}
+{\sp
+{\sn shapePath}
+{\sv 4}
+}
+{\sp
+{\sn fFilled}
+{\sv 0}
+}
+{\sp
+{\sn lineWidth}
+{\sv 7400}
+}
+{\sp
+{\sn fLine}
+{\sv 1}
+}
+{\sp
+{\sn fLayoutInCell}
+{\sv 0}
+}
+{\sp
+{\sn fLayoutInCell}
+{\sv 0}
+}
+}
+}
+}
+}
+}
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index 4236a48..642878f 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -2403,6 +2403,25 @@ DECLARE_RTFIMPORT_TEST(testTdf65642, "tdf65642.rtf")
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), getProperty<sal_Int32>(getParagraph(2), "PageNumberOffset"));
}
+#ifndef WNT
+DECLARE_RTFIMPORT_TEST(testTdf90097, "tdf90097.rtf")
+{
+ // Get the second child of the group shape.
+ uno::Reference<container::XIndexAccess> xGroup(getShape(1), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xShape(xGroup->getByIndex(1), uno::UNO_QUERY);
+ uno::Sequence< uno::Sequence<awt::Point> > aPolyPolySequence;
+ xShape->getPropertyValue("PolyPolygon") >>= aPolyPolySequence;
+ uno::Sequence<awt::Point>& rPolygon = aPolyPolySequence[0];
+ // Vertical flip for the line shape was ignored, so Y coordinates were swapped.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2819), rPolygon[0].X);
+ // This was 1619.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1963), rPolygon[0].Y);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3181), rPolygon[1].X);
+ // This was 1962.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1620), rPolygon[1].Y);
+}
+#endif
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/Library_writerfilter.mk b/writerfilter/Library_writerfilter.mk
index c81ff56..5ec43d2 100644
--- a/writerfilter/Library_writerfilter.mk
+++ b/writerfilter/Library_writerfilter.mk
@@ -35,6 +35,7 @@ $(eval $(call gb_Library_add_defs,writerfilter,\
))
$(eval $(call gb_Library_use_libraries,writerfilter,\
+ basegfx \
comphelper \
cppu \
cppuhelper \
diff --git a/writerfilter/source/rtftok/rtfsdrimport.cxx b/writerfilter/source/rtftok/rtfsdrimport.cxx
index fcc20d4..32846ed 100644
--- a/writerfilter/source/rtftok/rtfsdrimport.cxx
+++ b/writerfilter/source/rtftok/rtfsdrimport.cxx
@@ -33,6 +33,7 @@
#include <oox/drawingml/shapepropertymap.hxx>
#include <oox/helper/propertyset.hxx>
#include <boost/logic/tribool.hpp>
+#include <basegfx/matrix/b2dhommatrix.hxx>
using namespace com::sun::star;
@@ -346,6 +347,7 @@ void RTFSdrImport::resolve(RTFShape& rShape, bool bClose, ShapeOrPict const shap
boost::optional<sal_Int16> oRelativeWidth, oRelativeHeight;
sal_Int16 nRelativeWidthRelation = text::RelOrientation::PAGE_FRAME;
sal_Int16 nRelativeHeightRelation = text::RelOrientation::PAGE_FRAME;
+ boost::logic::tribool obRelFlipV(boost::logic::indeterminate);
bool bCustom(false);
int const nType = initShape(xShape, xPropertySet, bCustom, rShape, bClose, shapeOrPict);
@@ -778,6 +780,8 @@ void RTFSdrImport::resolve(RTFShape& rShape, bool bClose, ShapeOrPict const shap
while (nCharIndex >= 0);
rShape.aWrapPolygonSprms = aPolygonSprms;
}
+ else if (i->first == "fRelFlipV")
+ obRelFlipV = i->second.toInt32() == 1;
else
SAL_INFO("writerfilter", "TODO handle shape property '" << i->first << "':'" << i->second << "'");
}
@@ -836,6 +840,33 @@ void RTFSdrImport::resolve(RTFShape& rShape, bool bClose, ShapeOrPict const shap
}
if (!aGeometry.empty() && xPropertySet.is() && !m_bTextFrame)
xPropertySet->setPropertyValue("CustomShapeGeometry", uno::Any(comphelper::containerToSequence(aGeometry)));
+ if (!boost::logic::indeterminate(obRelFlipV) && xPropertySet.is())
+ {
+ if (nType == ESCHER_ShpInst_Line)
+ {
+ // Line shape inside group shape: get the polygon sequence and transform it.
+ uno::Sequence< uno::Sequence<awt::Point> > aPolyPolySequence;
+ if ((xPropertySet->getPropertyValue("PolyPolygon") >>= aPolyPolySequence) && aPolyPolySequence.hasElements())
+ {
+ uno::Sequence<awt::Point>& rPolygon = aPolyPolySequence[0];
+ basegfx::B2DPolygon aPoly;
+ for (sal_Int32 i = 0; i < rPolygon.getLength(); ++i)
+ {
+ const awt::Point& rPoint = rPolygon[i];
+ aPoly.insert(i, basegfx::B2DPoint(rPoint.X, rPoint.Y));
+ }
+ basegfx::B2DHomMatrix aTransformation;
+ aTransformation.scale(1.0, obRelFlipV ? -1.0 : 1.0);
+ aPoly.transform(aTransformation);
+ for (sal_Int32 i = 0; i < rPolygon.getLength(); ++i)
+ {
+ basegfx::B2DPoint aPoint(aPoly.getB2DPoint(i));
+ rPolygon[i] = awt::Point(static_cast<sal_Int32>(convertMm100ToTwip(aPoint.getX())), static_cast<sal_Int32>(convertMm100ToTwip(aPoint.getY())));
+ }
+ xPropertySet->setPropertyValue("PolyPolygon", uno::makeAny(aPolyPolySequence));
+ }
+ }
+ }
// Set position and size
if (xShape.is())
commit 0380e89ca16906ae41219244ba7d419a9d126912
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Sat Apr 23 20:34:57 2016 +0200
Related: tdf#65642 RTF filter: import \pgndec
This as a side effect also implements support for DOCX <w:pgNumType
w:fmt="decimal" .../>.
Reviewed-on: https://gerrit.libreoffice.org/24457
Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
Tested-by: Jenkins <ci at libreoffice.org>
(cherry picked from commit b94d753ac9e3894da055d31bbb7bb20e11b97b5a)
Change-Id: I747c3f610dc13f614b6f962c2a498c987765ebb6
diff --git a/sw/qa/extras/rtfexport/data/pgndec.rtf b/sw/qa/extras/rtfexport/data/pgndec.rtf
new file mode 100644
index 0000000..7f38c69
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/pgndec.rtf
@@ -0,0 +1,23 @@
+{\rtf1
+\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0
+{\field\fldedit
+{\*\fldinst
+{ PAGE \\* MERGEFORMAT }
+}
+{\fldrslt
+{1}
+}
+}
+\sect
+\sectd\pgnrestart\pgnlcrm\pgndec
+{\field\fldedit
+{\*\fldinst
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid525329 PAGE \\* MERGEFORMAT }
+}
+{\fldrslt
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1024\langfe1024\noproof\insrsid9597790 1}
+}
+}
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid13321744
+\par }
+}
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx
index b650888..cda0b35 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -929,6 +929,12 @@ DECLARE_RTFEXPORT_TEST(testTdf96175, "tdf96175.rtf")
CPPUNIT_ASSERT_EQUAL(OUString("foobar"), getProperty<OUString>(xUserDefinedProperties, "Company"));
}
+DECLARE_RTFEXPORT_TEST(testPgndec, "pgndec.rtf")
+{
+ // The second page's numbering type: this was style::NumberingType::ROMAN_LOWER.
+ CPPUNIT_ASSERT_EQUAL(style::NumberingType::ARABIC, getProperty<sal_Int16>(getStyles("PageStyles")->getByName("Converted1"), "NumberingType"));
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 61ff534..7669dfa 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -971,6 +971,10 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
{
switch (nIntValue)
{
+ case NS_ooxml::LN_Value_ST_NumberFormat_decimal:
+ // 1, 2, ...
+ pSectionContext->SetPageNumberType(style::NumberingType::ARABIC);
+ break;
case NS_ooxml::LN_Value_ST_NumberFormat_upperLetter:
// A, B, ...
pSectionContext->SetPageNumberType(style::NumberingType::CHARS_UPPER_LETTER_N);
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 799186d..e5e8f16 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -3244,7 +3244,6 @@ RTFError RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
m_aStates.top().aSectionSprms.set(NS_ooxml::LN_EG_SectPrContents_formProt, pValue);
}
break;
- case RTF_PGNDEC:
case RTF_PGNUCRM:
case RTF_PGNLCRM:
case RTF_PGNLCLTR:
@@ -3557,6 +3556,12 @@ RTFError RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
lcl_putNestedAttribute(m_aStates.top().aSectionSprms, NS_ooxml::LN_EG_SectPrContents_pgNumType, NS_ooxml::LN_CT_PageNumber_fmt, pIntValue);
}
break;
+ case RTF_PGNDEC:
+ {
+ auto pIntValue = std::make_shared<RTFValue>(NS_ooxml::LN_Value_ST_NumberFormat_decimal);
+ lcl_putNestedAttribute(m_aStates.top().aSectionSprms, NS_ooxml::LN_EG_SectPrContents_pgNumType, NS_ooxml::LN_CT_PageNumber_fmt, pIntValue);
+ }
+ break;
default:
{
SAL_INFO("writerfilter", "TODO handle flag '" << lcl_RtfToString(nKeyword) << "'");
More information about the Libreoffice-commits
mailing list