diff options
-rw-r--r-- | include/vcl/print.hxx | 1 | ||||
-rw-r--r-- | sw/inc/unoprnms.hxx | 1 | ||||
-rw-r--r-- | sw/source/core/unocore/unomap1.cxx | 1 | ||||
-rw-r--r-- | sw/source/core/unocore/unostyle.cxx | 28 | ||||
-rw-r--r-- | vcl/inc/osx/salprn.h | 2 | ||||
-rw-r--r-- | vcl/inc/salprn.hxx | 3 | ||||
-rw-r--r-- | vcl/inc/unx/genprn.h | 2 | ||||
-rw-r--r-- | vcl/inc/win/salprn.h | 3 | ||||
-rw-r--r-- | vcl/osx/salprn.cxx | 5 | ||||
-rw-r--r-- | vcl/source/gdi/print.cxx | 8 | ||||
-rw-r--r-- | vcl/unx/generic/print/genprnpsp.cxx | 5 | ||||
-rw-r--r-- | vcl/win/gdi/salprn.cxx | 19 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 17 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 8 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.hxx | 22 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyIds.cxx | 1 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyIds.hxx | 1 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyMap.cxx | 24 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyMap.hxx | 7 | ||||
-rw-r--r-- | writerfilter/source/ooxml/model.xml | 4 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfdispatchvalue.cxx | 12 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfdocumentimpl.cxx | 5 |
22 files changed, 167 insertions, 12 deletions
diff --git a/include/vcl/print.hxx b/include/vcl/print.hxx index d6ce7728f9a6..e23cf8d0af1b 100644 --- a/include/vcl/print.hxx +++ b/include/vcl/print.hxx @@ -227,6 +227,7 @@ public: bool SetPaperBin( sal_uInt16 nPaperBin ); sal_uInt16 GetPaperBin() const; + sal_uInt16 GetPaperBinBySourceIndex(sal_uInt16 nPaperSource) const; void SetPaper( Paper ePaper ); bool SetPaperSizeUser( const Size& rSize ); /** @return The paper format of the printer's current "jobsetup". Note that if PAPER_USER the actual size can be anything. */ diff --git a/sw/inc/unoprnms.hxx b/sw/inc/unoprnms.hxx index 396e8e3d7e29..a6a2cf373e87 100644 --- a/sw/inc/unoprnms.hxx +++ b/sw/inc/unoprnms.hxx @@ -205,6 +205,7 @@ inline constexpr OUString UNO_NAME_POSITION_PROTECTED = u"PositionProtected"_ust inline constexpr OUString UNO_NAME_ALTERNATIVE_TEXT = u"AlternativeText"_ustr; inline constexpr OUString UNO_NAME_PRIMARY_KEY = u"PrimaryKey"_ustr; inline constexpr OUString UNO_NAME_PRINTER_PAPER_TRAY = u"PrinterPaperTray"_ustr; +inline constexpr OUString UNO_NAME_PRINTER_PAPER_TRAY_INDEX = u"PrinterPaperTrayIndex"_ustr; inline constexpr OUString UNO_NAME_RELATIVE_WIDTH = u"RelativeWidth"_ustr; inline constexpr OUString UNO_NAME_RELATIVE_WIDTH_RELATION = u"RelativeWidthRelation"_ustr; inline constexpr OUString UNO_NAME_RELATIVE_HEIGHT = u"RelativeHeight"_ustr; diff --git a/sw/source/core/unocore/unomap1.cxx b/sw/source/core/unocore/unomap1.cxx index ee4422a22e9d..12db464a874b 100644 --- a/sw/source/core/unocore/unomap1.cxx +++ b/sw/source/core/unocore/unomap1.cxx @@ -537,6 +537,7 @@ std::span<const SfxItemPropertyMapEntry> SwUnoPropertyMapProvider::GetPageStyleP { UNO_NAME_NUMBERING_TYPE, SID_ATTR_PAGE, cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE , MID_PAGE_NUMTYPE }, { UNO_NAME_PAGE_STYLE_LAYOUT, SID_ATTR_PAGE, cppu::UnoType<css::style::PageStyleLayout>::get(), PROPERTY_NONE ,MID_PAGE_LAYOUT }, { UNO_NAME_PRINTER_PAPER_TRAY, RES_PAPER_BIN, cppu::UnoType<OUString>::get(), PROPERTY_NONE , 0 }, + { UNO_NAME_PRINTER_PAPER_TRAY_INDEX, RES_PAPER_BIN, cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE , 0 }, // { UNO_NAME_REGISTER_MODE_ACTIVE, SID_SWREGISTER_MODE, cppu::UnoType<bool>::get(), PROPERTY_NONE , 0 }, { UNO_NAME_REGISTER_PARAGRAPH_STYLE, SID_SWREGISTER_COLLECTION, cppu::UnoType<OUString>::get(), PROPERTY_NONE , 0 }, { UNO_NAME_SIZE, SID_ATTR_PAGE_SIZE, cppu::UnoType<css::awt::Size>::get(), PROPERTY_NONE, MID_SIZE_SIZE|CONVERT_TWIPS}, diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index c4fa8a3f4668..a68424c221a3 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -1669,27 +1669,37 @@ void SwXStyle::SetPropertyValue<OWN_ATTR_FILLBMP_MODE>(const SfxItemPropertyMapE template<> void SwXStyle::SetPropertyValue<sal_uInt16(RES_PAPER_BIN)>(const SfxItemPropertyMapEntry& rEntry, const SfxItemPropertySet& rPropSet, const uno::Any& rValue, SwStyleBase_Impl& o_rStyleBase) { - if(!rValue.has<OUString>()) + if (!rValue.has<OUString>() && !rValue.has<sal_Int32>()) throw lang::IllegalArgumentException(); SfxPrinter* pPrinter = m_pDoc->getIDocumentDeviceAccess().getPrinter(true); - OUString sValue(rValue.get<OUString>()); using printeridx_t = decltype(pPrinter->GetPaperBinCount()); printeridx_t nBin = std::numeric_limits<printeridx_t>::max(); - if(sValue == "[From printer settings]") - nBin = std::numeric_limits<printeridx_t>::max()-1; - else if(pPrinter) + if(rValue.has<OUString>()) { - for(sal_uInt16 i=0, nEnd = pPrinter->GetPaperBinCount(); i < nEnd; ++i) + OUString sValue(rValue.get<OUString>()); + if(sValue == "[From printer settings]") + nBin = std::numeric_limits<printeridx_t>::max()-1; + else if(pPrinter) { - if (sValue == pPrinter->GetPaperBinName(i)) + for(printeridx_t i=0, nEnd = pPrinter->GetPaperBinCount(); i < nEnd; ++i) { - nBin = i; - break; + if (sValue == pPrinter->GetPaperBinName(i)) + { + nBin = i; + break; + } } } } + else if (rValue.has<sal_Int32>() && pPrinter) + { + sal_Int32 nValue (rValue.get<sal_Int32>()); + nBin = pPrinter->GetPaperBinBySourceIndex(nValue); + } + if(nBin == std::numeric_limits<printeridx_t>::max()) throw lang::IllegalArgumentException(); + SfxItemSet& rStyleSet = o_rStyleBase.GetItemSet(); SfxItemSet aSet(*rStyleSet.GetPool(), rEntry.nWID, rEntry.nWID); aSet.SetParent(&rStyleSet); diff --git a/vcl/inc/osx/salprn.h b/vcl/inc/osx/salprn.h index 7bfd41787e99..9c26e171db23 100644 --- a/vcl/inc/osx/salprn.h +++ b/vcl/inc/osx/salprn.h @@ -82,6 +82,8 @@ class AquaSalInfoPrinter : public SalInfoPrinter virtual sal_uInt32 GetCapabilities( const ImplJobSetup* i_pSetupData, PrinterCapType i_nType ) override; virtual sal_uInt16 GetPaperBinCount( const ImplJobSetup* i_pSetupData ) override; virtual OUString GetPaperBinName( const ImplJobSetup* i_pSetupData, sal_uInt16 i_nPaperBin ) override; + virtual sal_uInt16 GetPaperBinBySourceIndex(const ImplJobSetup* pSetupData, + sal_uInt16 nPaperSource) override; virtual void InitPaperFormats( const ImplJobSetup* i_pSetupData ) override; virtual int GetLandscapeAngle( const ImplJobSetup* i_pSetupData ) override; diff --git a/vcl/inc/salprn.hxx b/vcl/inc/salprn.hxx index 97a0fe13aab2..ae0b313dab05 100644 --- a/vcl/inc/salprn.hxx +++ b/vcl/inc/salprn.hxx @@ -82,6 +82,9 @@ public: virtual sal_uInt32 GetCapabilities( const ImplJobSetup* pSetupData, PrinterCapType nType ) = 0; virtual sal_uInt16 GetPaperBinCount( const ImplJobSetup* pSetupData ) = 0; virtual OUString GetPaperBinName( const ImplJobSetup* pSetupData, sal_uInt16 nPaperBin ) = 0; + virtual sal_uInt16 GetPaperBinBySourceIndex(const ImplJobSetup* pSetupData, + sal_uInt16 nPaperSource) = 0; + // fills m_aPaperFormats and sets m_bPapersInit to true virtual void InitPaperFormats( const ImplJobSetup* pSetupData ) = 0; // returns angle that a landscape page will be turned counterclockwise wrt to portrait diff --git a/vcl/inc/unx/genprn.h b/vcl/inc/unx/genprn.h index d030c461439a..abe84b71ca21 100644 --- a/vcl/inc/unx/genprn.h +++ b/vcl/inc/unx/genprn.h @@ -45,6 +45,8 @@ public: virtual sal_uInt32 GetCapabilities( const ImplJobSetup* pSetupData, PrinterCapType nType ) override; virtual sal_uInt16 GetPaperBinCount( const ImplJobSetup* pSetupData ) override; virtual OUString GetPaperBinName( const ImplJobSetup* pSetupData, sal_uInt16 nPaperBin ) override; + virtual sal_uInt16 GetPaperBinBySourceIndex(const ImplJobSetup* pSetupData, + sal_uInt16 nPaperSource) override; virtual void InitPaperFormats( const ImplJobSetup* pSetupData ) override; virtual int GetLandscapeAngle( const ImplJobSetup* pSetupData ) override; }; diff --git a/vcl/inc/win/salprn.h b/vcl/inc/win/salprn.h index e1bbb665e29d..b0ec1697c3a5 100644 --- a/vcl/inc/win/salprn.h +++ b/vcl/inc/win/salprn.h @@ -69,6 +69,9 @@ public: virtual sal_uInt32 GetCapabilities( const ImplJobSetup* pSetupData, PrinterCapType nType ) override; virtual sal_uInt16 GetPaperBinCount( const ImplJobSetup* pSetupData ) override; virtual OUString GetPaperBinName( const ImplJobSetup* pSetupData, sal_uInt16 nPaperBin ) override; + virtual sal_uInt16 GetPaperBinBySourceIndex(const ImplJobSetup* pSetupData, + sal_uInt16 nPaperSource) override; + virtual void InitPaperFormats( const ImplJobSetup* pSetupData ) override; virtual int GetLandscapeAngle( const ImplJobSetup* pSetupData ) override; }; diff --git a/vcl/osx/salprn.cxx b/vcl/osx/salprn.cxx index 9f9c8c08f3db..3de45d9e8005 100644 --- a/vcl/osx/salprn.cxx +++ b/vcl/osx/salprn.cxx @@ -265,6 +265,11 @@ OUString AquaSalInfoPrinter::GetPaperBinName( const ImplJobSetup*, sal_uInt16 ) return OUString(); } +sal_uInt16 AquaSalInfoPrinter::GetPaperBinBySourceIndex( const ImplJobSetup*, sal_uInt16 ) +{ + return 0xffff; +} + sal_uInt32 AquaSalInfoPrinter::GetCapabilities( const ImplJobSetup*, PrinterCapType i_nType ) { switch( i_nType ) diff --git a/vcl/source/gdi/print.cxx b/vcl/source/gdi/print.cxx index eff94a9211ea..401d38118c38 100644 --- a/vcl/source/gdi/print.cxx +++ b/vcl/source/gdi/print.cxx @@ -1479,6 +1479,14 @@ OUString Printer::GetPaperBinName( sal_uInt16 nPaperBin ) const return OUString(); } +sal_uInt16 Printer::GetPaperBinBySourceIndex(sal_uInt16 nPaperSource) const +{ + if ( IsDisplayPrinter() ) + return 0; + + return mpInfoPrinter->GetPaperBinBySourceIndex( &maJobSetup.ImplGetConstData(), nPaperSource ); +} + void Printer::SetCopyCount( sal_uInt16 nCopy, bool bCollate ) { mnCopyCount = nCopy; diff --git a/vcl/unx/generic/print/genprnpsp.cxx b/vcl/unx/generic/print/genprnpsp.cxx index 33990decad1c..ce5a45624dfc 100644 --- a/vcl/unx/generic/print/genprnpsp.cxx +++ b/vcl/unx/generic/print/genprnpsp.cxx @@ -638,6 +638,11 @@ OUString PspSalInfoPrinter::GetPaperBinName( const ImplJobSetup* pJobSetup, sal_ return OUString(); } +sal_uInt16 PspSalInfoPrinter::GetPaperBinBySourceIndex( const ImplJobSetup*, sal_uInt16 ) +{ + return 0xffff; +} + sal_uInt32 PspSalInfoPrinter::GetCapabilities( const ImplJobSetup* pJobSetup, PrinterCapType nType ) { switch( nType ) diff --git a/vcl/win/gdi/salprn.cxx b/vcl/win/gdi/salprn.cxx index 3302efa2d986..065b06019635 100644 --- a/vcl/win/gdi/salprn.cxx +++ b/vcl/win/gdi/salprn.cxx @@ -1196,6 +1196,25 @@ OUString WinSalInfoPrinter::GetPaperBinName( const ImplJobSetup* pSetupData, sal return aPaperBinName; } +sal_uInt16 WinSalInfoPrinter::GetPaperBinBySourceIndex( const ImplJobSetup* pSetupData, sal_uInt16 nPaperSource ) +{ + DWORD nBins = ImplDeviceCaps( this, DC_BINNAMES, nullptr, pSetupData ); + if (nBins != GDI_ERROR) + { + auto pBuffer = std::make_unique<sal_uInt16[]>(nBins); + DWORD nBins = ImplDeviceCaps( this, DC_BINS, reinterpret_cast<BYTE*>(pBuffer.get()), pSetupData ); + if (nBins != GDI_ERROR) + { + for (DWORD nBin = 0; nBin < nBins; ++nBin) + { + if (nPaperSource == *(pBuffer.get() + nBin)) + return nBin; + } + } + } + return 0xffff; +} + sal_uInt32 WinSalInfoPrinter::GetCapabilities( const ImplJobSetup* pSetupData, PrinterCapType nType ) { DWORD nRet; diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index d6717cc4600e..30c2203ef578 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -703,6 +703,12 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) case NS_ooxml::LN_CT_PageMar_gutter: m_pImpl->SetPageMarginTwip( PAGE_MAR_GUTTER, nIntValue ); break; + case NS_ooxml::LN_CT_PaperSource_first: + m_pImpl->SetPaperSource(PAPER_SOURCE_FIRST, nIntValue); + break; + case NS_ooxml::LN_CT_PaperSource_other: + m_pImpl->SetPaperSource(PAPER_SOURCE_OTHER, nIntValue); + break; case NS_ooxml::LN_CT_Language_val: //90314 case NS_ooxml::LN_CT_Language_eastAsia: //90315 case NS_ooxml::LN_CT_Language_bidi: //90316 @@ -2493,7 +2499,16 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) pSectionContext->SetGutterMargin(rPageMar.gutter); } break; - + case NS_ooxml::LN_EG_SectPrContents_paperSrc: + m_pImpl->InitPaperSource(); + resolveSprmProps(*this, rSprm); + OSL_ENSURE(pSectionContext, "SectionContext unavailable!"); + if(pSectionContext) + { + const PaperSource& rPaperSource = m_pImpl->GetPaperSource(); + pSectionContext->SetPaperSource( rPaperSource.first, rPaperSource.other ); + } + break; case NS_ooxml::LN_EG_SectPrContents_cols: { writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps(); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 96043cb368b9..86065066403e 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -9329,6 +9329,14 @@ void DomainMapper_Impl::SetPageMarginTwip( PageMarElement eElement, sal_Int32 nV } } +void DomainMapper_Impl::SetPaperSource(PaperSourceElement eElement, sal_Int32 nValue) +{ + if(eElement == PAPER_SOURCE_FIRST) + m_aPaperSource.first = nValue; + else + m_aPaperSource.other = nValue; +} + PageMar::PageMar() : top(ConversionHelper::convertTwipToMM100( sal_Int32(1440))) diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index dc8dbcee3880..18bec93a6cb2 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -103,6 +103,23 @@ enum PageMarElement PAGE_MAR_GUTTER }; +struct PaperSource +{ + sal_Int32 first; + sal_Int32 other; + public: + PaperSource() : + first(0), + other(0) + {} +}; + +enum PaperSourceElement +{ + PAPER_SOURCE_FIRST, + PAPER_SOURCE_OTHER, +}; + /// property stack element enum ContextType { @@ -504,6 +521,7 @@ private: OUString m_sCurrentPermEdGrp; PageMar m_aPageMargins; + PaperSource m_aPaperSource; SymbolData m_aSymbolData; // TableManagers are stacked: one for each stream to avoid any confusion @@ -1014,6 +1032,10 @@ public: void SetPageMarginTwip( PageMarElement eElement, sal_Int32 nValue ); const PageMar& GetPageMargins() const {return m_aPageMargins;} + void InitPaperSource() { m_aPaperSource = PaperSource(); } + void SetPaperSource( PaperSourceElement eElement, sal_Int32 nValue ); + const PaperSource& GetPaperSource() {return m_aPaperSource;} + const LineNumberSettings& GetLineNumberSettings() const { return m_aLineNumberSettings;} void SetLineNumberSettings(const LineNumberSettings& rSet) { m_aLineNumberSettings = rSet;} diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx index 01cf1203d3cb..b8b4efc06222 100644 --- a/writerfilter/source/dmapper/PropertyIds.cxx +++ b/writerfilter/source/dmapper/PropertyIds.cxx @@ -383,6 +383,7 @@ namespace { PROP_CURSOR_NOT_IGNORE_TABLES_IN_HF, u"CursorNotIgnoreTables"}, { PROP_PARA_CONNECT_BORDERS, u"ParaIsConnectBorder"}, { PROP_DECORATIVE, u"Decorative"}, + { PROP_PAPER_TRAY, u"PrinterPaperTray"}, }); } // end anonymous ns diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx index 83d05d81c815..b39fcd24fa49 100644 --- a/writerfilter/source/dmapper/PropertyIds.hxx +++ b/writerfilter/source/dmapper/PropertyIds.hxx @@ -262,6 +262,7 @@ enum PropertyIds ,PROP_PARA_TOP_MARGIN ,PROP_PARA_VERT_ALIGNMENT ,PROP_PARA_WIDOWS + ,PROP_PAPER_TRAY ,PROP_PARENT_NUMBERING ,PROP_POSITION_AND_SPACE_MODE ,PROP_POSITION_PROTECTED diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx index 9f9269b73471..29444d809b1e 100644 --- a/writerfilter/source/dmapper/PropertyMap.cxx +++ b/writerfilter/source/dmapper/PropertyMap.cxx @@ -429,6 +429,8 @@ SectionPropertyMap::SectionPropertyMap( bool bIsFirstSection ) , m_nLnc(NS_ooxml::LN_Value_ST_LineNumberRestart_newPage) , m_ndxaLnn( 0 ) , m_nLnnMin( 0 ) + , m_nPaperSourceFirst( 0 ) + , m_nPaperSourceOther( 0 ) , m_bDynamicHeightTop( true ) , m_bDynamicHeightBottom( true ) { @@ -575,6 +577,27 @@ void SectionPropertyMap::SetBorder( BorderPosition ePos, sal_Int32 nLineDistance m_bBorderShadows[ePos] = bShadow; } +void SectionPropertyMap::ApplyPaperSource(DomainMapper_Impl& rDM_Impl) +{ + uno::Reference<beans::XPropertySet> xFirst; + // todo: negative spacing (from ww8par6.cxx) + if (!m_sPageStyleName.isEmpty()) + { + xFirst = GetPageStyle(rDM_Impl); + if ( xFirst.is() ) + try + { + //TODO: which of the two tray values needs to be set? first/other - the interfaces requires the name of the tray! + xFirst->setPropertyValue(getPropertyName(PROP_PAPER_TRAY), + uno::Any(m_nPaperSourceFirst)); + } + catch (const uno::Exception&) + { + TOOLS_WARN_EXCEPTION("writerfilter", "Paper source not found"); + } + } +} + void SectionPropertyMap::ApplyBorderToPageStyles( DomainMapper_Impl& rDM_Impl, BorderApply /*eBorderApply*/, BorderOffsetFrom eOffsetFrom ) { @@ -1751,6 +1774,7 @@ void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl ) ApplyProperties_(xPageStyle); ApplyBorderToPageStyles( rDM_Impl, m_eBorderApply, m_eBorderOffsetFrom ); + ApplyPaperSource(rDM_Impl); try { diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx index d6ecfb2e71d7..3b1b55dede9c 100644 --- a/writerfilter/source/dmapper/PropertyMap.hxx +++ b/writerfilter/source/dmapper/PropertyMap.hxx @@ -295,6 +295,9 @@ private: sal_Int32 m_ndxaLnn; sal_Int32 m_nLnnMin; + sal_Int32 m_nPaperSourceFirst; + sal_Int32 m_nPaperSourceOther; + bool m_bDynamicHeightTop; bool m_bDynamicHeightBottom; @@ -409,12 +412,14 @@ public: void SetdxaLnn( sal_Int32 nValue ) { m_ndxaLnn = nValue; } void SetLnnMin( sal_Int32 nValue ) { m_nLnnMin = nValue; } + void SetPaperSource(sal_Int32 first, sal_Int32 other) { m_nPaperSourceFirst = first; m_nPaperSourceOther = other;} + void addRelativeWidthShape( css::uno::Reference<css::drawing::XShape> xShape ) { m_xRelativeWidthShapes.push_back( xShape ); } // determine which style gets the borders void ApplyBorderToPageStyles( DomainMapper_Impl &rDM_Impl, BorderApply eBorderApply, BorderOffsetFrom eOffsetFrom ); - + void ApplyPaperSource(DomainMapper_Impl& rDM_Impl); void CloseSectionGroup( DomainMapper_Impl& rDM_Impl ); // Handling of margins, header and footer for any kind of sections breaks. void HandleMarginsHeaderFooter(DomainMapper_Impl& rDM_Impl); diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml index fd99a745e623..2c174743f990 100644 --- a/writerfilter/source/ooxml/model.xml +++ b/writerfilter/source/ooxml/model.xml @@ -17964,6 +17964,10 @@ <attribute name="footer" tokenid="ooxml:CT_PageMar_footer"/> <attribute name="gutter" tokenid="ooxml:CT_PageMar_gutter"/> </resource> + <resource name="CT_PaperSource" resource="Properties"> + <attribute name="first" tokenid="ooxml:CT_PaperSource_first"/> + <attribute name="other" tokenid="ooxml:CT_PaperSource_other"/> + </resource> <resource name="ST_PageBorderZOrder" resource="List"> <value tokenid="ooxml:Value_doc_ST_PageBorderZOrder_front">front</value> <value tokenid="ooxml:Value_doc_ST_PageBorderZOrder_back">back</value> diff --git a/writerfilter/source/rtftok/rtfdispatchvalue.cxx b/writerfilter/source/rtftok/rtfdispatchvalue.cxx index 69157a97829f..f699b0ed39d1 100644 --- a/writerfilter/source/rtftok/rtfdispatchvalue.cxx +++ b/writerfilter/source/rtftok/rtfdispatchvalue.cxx @@ -1342,6 +1342,18 @@ RTFError RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam) NS_ooxml::LN_EG_SectPrContents_pgSz, NS_ooxml::LN_CT_PageSz_w, pIntValue); break; + case RTFKeyword::BINFSXN: + putNestedAttribute(m_aStates.top().getSectionSprms(), + NS_ooxml::LN_EG_SectPrContents_paperSrc, + NS_ooxml::LN_CT_PaperSource_first, pIntValue); + break; + case RTFKeyword::BINSXN: + { + putNestedAttribute(m_aStates.top().getSectionSprms(), + NS_ooxml::LN_EG_SectPrContents_paperSrc, + NS_ooxml::LN_CT_PaperSource_other, pIntValue); + } + break; case RTFKeyword::MARGL: putNestedAttribute(m_aDefaultState.getSectionSprms(), NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_left, diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index b8d15fb70474..8a820fa477da 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -2120,6 +2120,8 @@ RTFError RTFDocumentImpl::pushState() case Destination::FIELDRESULT: case Destination::SHAPETEXT: case Destination::FORMFIELD: + //TODO: if this is pushed then the font encoding is used which results in a broken command string + // if it is not pushed to NORMAL then it is not restored in time. case Destination::FIELDINSTRUCTION: case Destination::PICT: m_aStates.top().setDestination(Destination::NORMAL); @@ -3790,7 +3792,8 @@ void RTFDocumentImpl::checkUnicode(bool bUnicode, bool bHex) if (bHex && !m_aHexBuffer.isEmpty()) { rtl_TextEncoding nEncoding = m_aStates.top().getCurrentEncoding(); - if (m_aStates.top().getDestination() == Destination::FONTENTRY + if ((m_aStates.top().getDestination() == Destination::FONTENTRY + || m_aStates.top().getDestination() == Destination::FIELDINSTRUCTION) && m_aStates.top().getCurrentEncoding() == RTL_TEXTENCODING_SYMBOL) nEncoding = RTL_TEXTENCODING_MS_1252; OUString aString = OStringToOUString(m_aHexBuffer, nEncoding); |