writerfilter/Library_writerfilter.mk | 2 writerfilter/inc/resourcemodel/TagLogger.hxx | 83 ------ writerfilter/inc/resourcemodel/WW8ResourceModel.hxx | 18 + writerfilter/source/dmapper/DomainMapper.cxx | 31 ++ writerfilter/source/dmapper/DomainMapper.hxx | 3 writerfilter/source/dmapper/DomainMapper_Impl.cxx | 11 writerfilter/source/dmapper/DomainMapper_Impl.hxx | 10 writerfilter/source/dmapper/GraphicHelpers.cxx | 116 +++----- writerfilter/source/dmapper/GraphicHelpers.hxx | 11 writerfilter/source/dmapper/GraphicImport.cxx | 14 - writerfilter/source/dmapper/GraphicImport.hxx | 2 writerfilter/source/dmapper/LoggedResources.cxx | 30 ++ writerfilter/source/dmapper/LoggedResources.hxx | 7 writerfilter/source/dmapper/PropertyMap.hxx | 2 writerfilter/source/dmapper/PropertyMapHelper.cxx | 2 writerfilter/source/dmapper/TableManager.hxx | 2 writerfilter/source/dmapper/TagLogger.cxx | 243 ++++++++++++++++++ writerfilter/source/dmapper/TagLogger.hxx | 83 ++++++ writerfilter/source/dmapper/dmapperLoggers.hxx | 2 writerfilter/source/ooxml/OOXMLFastContextHandler.cxx | 28 -- writerfilter/source/resourcemodel/TagLogger.cxx | 243 ------------------ writerfilter/source/rtftok/rtfdocumentimpl.cxx | 41 +-- 22 files changed, 519 insertions(+), 465 deletions(-)
New commits: commit be34823092ce05002be61a50d0dbf156bb5095ba Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Sun Dec 21 15:08:02 2014 +0100 writerfilter: hardcoded cFieldStart/Sep/End Change-Id: If7278418e1c7f8b8f812ce0b01720f8666e9ae5a diff --git a/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx b/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx index f00592d..b6ba40e 100644 --- a/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx +++ b/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx @@ -170,6 +170,10 @@ protected: ~BinaryObj() {} }; +const sal_uInt8 cFieldStart = 0x13; +const sal_uInt8 cFieldSep = 0x14; +const sal_uInt8 cFieldEnd = 0x15; + /** Handler for a stream. */ diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index af00497..b85538c 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -2856,15 +2856,15 @@ void DomainMapper::lcl_text(const sal_uInt8 * data_, size_t len) m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH)); return; } - case 0x13: + case cFieldStart: m_pImpl->PushFieldContext(); return; - case 0x14: + case cFieldSep: // delimiter not necessarily available // appears only if field contains further content m_pImpl->CloseFieldCommand(); return; - case 0x15: /* end of field */ + case cFieldEnd: m_pImpl->PopFieldContext(); return; default: diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index df119b5..678b19e 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -2551,9 +2551,6 @@ uno::Reference< beans::XPropertySet > DomainMapper_Impl::FindOrCreateFieldMaster return xMaster; } -/*------------------------------------------------------------------------- -//field context starts with a 0x13 - -----------------------------------------------------------------------*/ void DomainMapper_Impl::PushFieldContext() { m_bParaHadField = true; @@ -3389,9 +3386,6 @@ void DomainMapper_Impl::handleIndex } } -/*------------------------------------------------------------------------- -//the field command has to be closed (0x14 appeared) - -----------------------------------------------------------------------*/ void DomainMapper_Impl::CloseFieldCommand() { if(m_bDiscardHeaderFooter) @@ -4278,9 +4272,6 @@ void DomainMapper_Impl::SetFieldFFData(FFDataHandler::Pointer_t pFFDataHandler) #endif } -/*------------------------------------------------------------------------- -//the end of field is reached (0x15 appeared) - the command might still be open - -----------------------------------------------------------------------*/ void DomainMapper_Impl::PopFieldContext() { if(m_bDiscardHeaderFooter) diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 3a9658f..3cabbf5 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -614,7 +614,7 @@ public: void PushAnnotation(); void PopAnnotation(); - //field context starts with a 0x13 + /// A field context starts with a cFieldStart. void PushFieldContext(); //the current field context waits for the completion of the command bool IsOpenFieldCommand() const; @@ -662,7 +662,7 @@ public: (FieldContextPtr pContext, PropertyNameSupplier& rPropNameSupplier, const OUString & sTOCServiceName); - //the field command has to be closed (0x14 appeared) + /// The field command has to be closed (cFieldSep appeared). void CloseFieldCommand(); //the _current_ fields require a string type result while TOCs accept richt results bool IsFieldResultAsString(); @@ -671,7 +671,7 @@ public: void SetFieldResult(OUString const& rResult); // set FFData of top field context void SetFieldFFData( FFDataHandler::Pointer_t pFFDataHandler ); - //the end of field is reached (0x15 appeared) - the command might still be open + /// The end of field is reached (cFieldEnd appeared) - the command might still be open. void PopFieldContext(); void SetBookmarkName( const OUString& rBookmarkName ); diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx index 69f953f..9fcd1d9 100644 --- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx +++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx @@ -43,9 +43,6 @@ static const sal_Unicode uNoBreakHyphen = 0x2011; static const sal_Unicode uSoftHyphen = 0xAD; static const sal_uInt8 cFtnEdnCont = 0x4; -static const sal_uInt8 cFieldStart = 0x13; -static const sal_uInt8 cFieldSep = 0x14; -static const sal_uInt8 cFieldEnd = 0x15; static const sal_uInt8 cFieldLock = 0x8; namespace writerfilter { diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index cd2ec81..1c605dd 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -1551,7 +1551,7 @@ int RTFDocumentImpl::dispatchDestination(RTFKeyword nKeyword) if (aBuf.toString().indexOf(OString("FORM")) != -1) m_bFormField = true; - singleChar(0x13); + singleChar(cFieldStart); m_aStates.top().nDestinationState = DESTINATION_FIELDINSTRUCTION; } break; @@ -2391,10 +2391,10 @@ int RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword) case RTF_CHPGN: { OUString aStr("PAGE"); - singleChar(0x13); + singleChar(cFieldStart); text(aStr); - singleChar(0x14, true); - singleChar(0x15); + singleChar(cFieldSep, true); + singleChar(cFieldEnd); } break; case RTF_CHFTNSEP: @@ -5098,11 +5098,11 @@ int RTFDocumentImpl::popState() } m_aFormfieldAttributes.clear(); m_aFormfieldSprms.clear(); - singleChar(0x14); + singleChar(cFieldSep); } break; case DESTINATION_FIELDRESULT: - singleChar(0x15); + singleChar(cFieldEnd); break; case DESTINATION_LEVELTEXT: { @@ -5212,11 +5212,11 @@ int RTFDocumentImpl::popState() OUString const field( (DESTINATION_INDEXENTRY == aState.nDestinationState) ? OUStringLiteral("XE") : OUStringLiteral("TC")); str = field + " \"" + str.replaceAll("\"", "\\\"") + "\""; - singleChar(0x13); + singleChar(cFieldStart); Mapper().utext(reinterpret_cast<sal_uInt8 const*>(str.getStr()), str.getLength()); - singleChar(0x14); + singleChar(cFieldSep); // no result - singleChar(0x15); + singleChar(cFieldEnd); } break; case DESTINATION_FORMFIELDNAME: @@ -5987,7 +5987,7 @@ int RTFDocumentImpl::popState() break; case DESTINATION_FIELD: if (aState.nFieldStatus == FIELD_INSTRUCTION) - singleChar(0x15); + singleChar(cFieldEnd); break; case DESTINATION_SHAPEPROPERTYVALUEPICT: if (!m_aStates.empty()) commit 94b068298de792d5662c21c467e822c32e173434 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Sun Dec 21 14:51:10 2014 +0100 TagLogger is used only in dmapper Change-Id: Ic88909ded4a28b1c019a03eefdaf3716cfbe9079 diff --git a/writerfilter/Library_writerfilter.mk b/writerfilter/Library_writerfilter.mk index 3516777..e84bf5b 100644 --- a/writerfilter/Library_writerfilter.mk +++ b/writerfilter/Library_writerfilter.mk @@ -106,6 +106,7 @@ $(eval $(call gb_Library_add_exception_objects,writerfilter,\ writerfilter/source/dmapper/TableManager \ writerfilter/source/dmapper/TablePositionHandler \ writerfilter/source/dmapper/TablePropertiesHandler \ + writerfilter/source/dmapper/TagLogger \ writerfilter/source/dmapper/TextEffectsHandler \ writerfilter/source/dmapper/TblStylePrHandler \ writerfilter/source/dmapper/ThemeTable \ @@ -126,7 +127,6 @@ $(eval $(call gb_Library_add_exception_objects,writerfilter,\ writerfilter/source/ooxml/OOXMLStreamImpl \ writerfilter/source/ooxml/qnametostrcore \ writerfilter/source/resourcemodel/ResourceModelHelper \ - writerfilter/source/resourcemodel/TagLogger \ )) $(eval $(call gb_Library_add_generated_exception_objects,writerfilter,\ diff --git a/writerfilter/source/dmapper/LoggedResources.hxx b/writerfilter/source/dmapper/LoggedResources.hxx index 6162408..78d2920 100644 --- a/writerfilter/source/dmapper/LoggedResources.hxx +++ b/writerfilter/source/dmapper/LoggedResources.hxx @@ -21,7 +21,7 @@ #define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_LOGGEDRESOURCES_HXX #include <resourcemodel/WW8ResourceModel.hxx> -#include <resourcemodel/TagLogger.hxx> +#include "TagLogger.hxx" namespace writerfilter diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx index 36d7705..71a92d9 100644 --- a/writerfilter/source/dmapper/PropertyMap.hxx +++ b/writerfilter/source/dmapper/PropertyMap.hxx @@ -30,7 +30,7 @@ #include <map> #include <vector> -#include <resourcemodel/TagLogger.hxx> +#include "TagLogger.hxx" namespace com{namespace sun{namespace star{ namespace beans{ diff --git a/writerfilter/source/dmapper/PropertyMapHelper.cxx b/writerfilter/source/dmapper/PropertyMapHelper.cxx index 278b0cf..ad503a6 100644 --- a/writerfilter/source/dmapper/PropertyMapHelper.cxx +++ b/writerfilter/source/dmapper/PropertyMapHelper.cxx @@ -18,7 +18,7 @@ */ #include <com/sun/star/text/TableColumnSeparator.hpp> -#include <resourcemodel/TagLogger.hxx> +#include "TagLogger.hxx" #include "PropertyMapHelper.hxx" namespace writerfilter diff --git a/writerfilter/source/dmapper/TableManager.hxx b/writerfilter/source/dmapper/TableManager.hxx index a01a3a3..018b7d9 100644 --- a/writerfilter/source/dmapper/TableManager.hxx +++ b/writerfilter/source/dmapper/TableManager.hxx @@ -26,7 +26,7 @@ #include <boost/shared_ptr.hpp> #include <stack> -#include <resourcemodel/TagLogger.hxx> +#include "TagLogger.hxx" #include <rtl/strbuf.hxx> #include <PropertyMap.hxx> diff --git a/writerfilter/source/resourcemodel/TagLogger.cxx b/writerfilter/source/dmapper/TagLogger.cxx similarity index 99% rename from writerfilter/source/resourcemodel/TagLogger.cxx rename to writerfilter/source/dmapper/TagLogger.cxx index d6c17b5..5865e32 100644 --- a/writerfilter/source/resourcemodel/TagLogger.cxx +++ b/writerfilter/source/dmapper/TagLogger.cxx @@ -19,7 +19,7 @@ #include <libxml/xmlstring.h> #include <string.h> -#include <resourcemodel/TagLogger.hxx> +#include "TagLogger.hxx" #include <ooxml/QNameToString.hxx> #include <boost/unordered_map.hpp> diff --git a/writerfilter/inc/resourcemodel/TagLogger.hxx b/writerfilter/source/dmapper/TagLogger.hxx similarity index 93% rename from writerfilter/inc/resourcemodel/TagLogger.hxx rename to writerfilter/source/dmapper/TagLogger.hxx index b5e5d67..e704310 100644 --- a/writerfilter/inc/resourcemodel/TagLogger.hxx +++ b/writerfilter/source/dmapper/TagLogger.hxx @@ -17,8 +17,8 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_WRITERFILTER_INC_RESOURCEMODEL_TAGLOGGER_HXX -#define INCLUDED_WRITERFILTER_INC_RESOURCEMODEL_TAGLOGGER_HXX +#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TAGLOGGER_HXX +#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TAGLOGGER_HXX #include <rtl/ustring.hxx> #include <com/sun/star/beans/XPropertySet.hpp> @@ -78,6 +78,6 @@ namespace writerfilter }; } -#endif // INCLUDED_WRITERFILTER_INC_RESOURCEMODEL_TAGLOGGER_HXX +#endif // INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TAGLOGGER_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/dmapper/dmapperLoggers.hxx b/writerfilter/source/dmapper/dmapperLoggers.hxx index 4ef17c3..5e774c9 100644 --- a/writerfilter/source/dmapper/dmapperLoggers.hxx +++ b/writerfilter/source/dmapper/dmapperLoggers.hxx @@ -20,7 +20,7 @@ #ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_DMAPPERLOGGERS_HXX #define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_DMAPPERLOGGERS_HXX -#include <resourcemodel/TagLogger.hxx> +#include "TagLogger.hxx" namespace writerfilter { namespace dmapper { commit a3a049840f101cd47e0ec04afef1964c61641a85 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Sun Dec 21 14:22:13 2014 +0100 writerfilter: refactor to get rid of remaining scary PositionHandler statics Change-Id: I954504ad6b730866504a470b8d966fdfe1d58550 diff --git a/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx b/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx index 7bdfeea..f00592d 100644 --- a/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx +++ b/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx @@ -248,6 +248,12 @@ public: virtual void positionOffset(const OUString& rText, bool bVertical) = 0; /// Returns the last set offsets of a shape in HMM. virtual css::awt::Point getPositionOffset() = 0; + /** + * Horizontal and vertical alignment for a shape. + * + * Call *before* an ooxml:CT_PosH/V_align sprm is sent. + */ + virtual void align(const OUString& rText, bool bVertical) = 0; virtual void positivePercentage(const OUString& rText) = 0; /** diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index eb10e40..af00497 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -2924,6 +2924,14 @@ awt::Point DomainMapper::getPositionOffset() return aRet; } +void DomainMapper::lcl_align(const OUString& rText, bool bVertical) +{ + if (bVertical) + m_pImpl->m_aAligns.second = rText; + else + m_pImpl->m_aAligns.first = rText; +} + void DomainMapper::lcl_positivePercentage(const OUString& rText) { m_pImpl->m_aPositivePercentages.push(rText); diff --git a/writerfilter/source/dmapper/DomainMapper.hxx b/writerfilter/source/dmapper/DomainMapper.hxx index 013fe2d..5fc092d 100644 --- a/writerfilter/source/dmapper/DomainMapper.hxx +++ b/writerfilter/source/dmapper/DomainMapper.hxx @@ -147,6 +147,7 @@ private: virtual void lcl_utext(const sal_uInt8 * data, size_t len) SAL_OVERRIDE; virtual void lcl_positionOffset(const OUString& rText, bool bVertical) SAL_OVERRIDE; virtual css::awt::Point getPositionOffset() SAL_OVERRIDE; + virtual void lcl_align(const OUString& rText, bool bVertical) SAL_OVERRIDE; virtual void lcl_positivePercentage(const OUString& rText) SAL_OVERRIDE; virtual void lcl_props(writerfilter::Reference<Properties>::Pointer_t ref) SAL_OVERRIDE; virtual void lcl_table(Id name, diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 4e0835f..df119b5 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -4557,7 +4557,7 @@ void DomainMapper_Impl::AddAnnotationPosition( GraphicImportPtr DomainMapper_Impl::GetGraphicImport(GraphicImportType eGraphicImportType) { if(!m_pGraphicImport) - m_pGraphicImport.reset( new GraphicImport( m_xComponentContext, m_xTextFactory, m_rDMapper, eGraphicImportType, m_aPositionOffsets, m_aPositivePercentages ) ); + m_pGraphicImport.reset( new GraphicImport( m_xComponentContext, m_xTextFactory, m_rDMapper, eGraphicImportType, m_aPositionOffsets, m_aAligns, m_aPositivePercentages ) ); return m_pGraphicImport; } /*------------------------------------------------------------------------- diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index c2ccf2b..3a9658f 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -828,6 +828,8 @@ public: /// ST_PositionOffset values we received std::pair<OUString, OUString> m_aPositionOffsets; + /// ST_AlignH/V values we received + std::pair<OUString, OUString> m_aAligns; /// ST_PositivePercentage values we received std::queue<OUString> m_aPositivePercentages; bool isInIndexContext() { return m_bStartIndex;} diff --git a/writerfilter/source/dmapper/GraphicHelpers.cxx b/writerfilter/source/dmapper/GraphicHelpers.cxx index 53143dd..de940e5 100644 --- a/writerfilter/source/dmapper/GraphicHelpers.cxx +++ b/writerfilter/source/dmapper/GraphicHelpers.cxx @@ -39,24 +39,14 @@ namespace dmapper { using namespace com::sun::star; -int PositionHandler::savedAlignV = text::VertOrientation::NONE; -int PositionHandler::savedAlignH = text::HoriOrientation::NONE; - -PositionHandler::PositionHandler( bool vertical, std::pair<OUString, OUString>& rPositionOffsets ) : +PositionHandler::PositionHandler( std::pair<OUString, OUString>& rPositionOffsets, std::pair<OUString, OUString>& rAligns ) : LoggedProperties(dmapper_logger, "PositionHandler"), -m_rPositionOffsets(rPositionOffsets) +m_nOrient(text::VertOrientation::NONE), +m_nPosition(0), +m_rPositionOffsets(rPositionOffsets), +m_rAligns(rAligns) { m_nRelation = text::RelOrientation::FRAME; - if( vertical ) - { - m_nOrient = savedAlignV; - savedAlignV = text::VertOrientation::NONE; - } - else - { - m_nOrient = savedAlignH; - savedAlignH = text::HoriOrientation::NONE; - } } PositionHandler::~PositionHandler( ) @@ -140,6 +130,36 @@ void PositionHandler::lcl_sprm(Sprm& rSprm) case NS_ooxml::LN_CT_PosV_posOffset: m_nPosition = oox::drawingml::convertEmuToHmm(m_rPositionOffsets.second.toInt32()); break; + case NS_ooxml::LN_CT_PosH_align: + { + OUString& rAlign = m_rAligns.first; + if (rAlign == "left") + m_nOrient = text::HoriOrientation::LEFT; + else if (rAlign == "right") + m_nOrient = text::HoriOrientation::RIGHT; + else if (rAlign == "center") + m_nOrient = text::HoriOrientation::CENTER; + else if (rAlign == "inside") + m_nOrient = text::HoriOrientation::INSIDE; + else if (rAlign == "outside") + m_nOrient = text::HoriOrientation::OUTSIDE; + break; + } + case NS_ooxml::LN_CT_PosV_align: + { + OUString& rAlign = m_rAligns.second; + if (rAlign == "top") + m_nOrient = text::VertOrientation::TOP; + else if (rAlign == "bottom") + m_nOrient = text::VertOrientation::BOTTOM; + else if (rAlign == "center") + m_nOrient = text::VertOrientation::CENTER; + else if (rAlign == "inside") + m_nOrient = text::VertOrientation::NONE; + else if (rAlign == "outside") + m_nOrient = text::VertOrientation::NONE; + break; + } } } @@ -156,36 +176,6 @@ sal_Int16 PositionHandler::orientation() const return m_nOrient; } - - -void PositionHandler::setAlignH(const OUString & sText) -{ - if( sText == "left") - savedAlignH = text::HoriOrientation::LEFT; - else if( sText == "right" ) - savedAlignH = text::HoriOrientation::RIGHT; - else if( sText == "center" ) - savedAlignH = text::HoriOrientation::CENTER; - else if( sText == "inside" ) - savedAlignH = text::HoriOrientation::INSIDE; - else if( sText == "outside" ) - savedAlignH = text::HoriOrientation::OUTSIDE; -} - -void PositionHandler::setAlignV(const OUString & sText) -{ - if( sText == "top" ) - savedAlignV = text::VertOrientation::TOP; - else if( sText == "bottom" ) - savedAlignV = text::VertOrientation::BOTTOM; - else if( sText == "center" ) - savedAlignV = text::VertOrientation::CENTER; - else if( sText == "inside" ) - savedAlignV = text::VertOrientation::NONE; - else if( sText == "outside" ) - savedAlignV = text::VertOrientation::NONE; -} - WrapHandler::WrapHandler( ) : LoggedProperties(dmapper_logger, "WrapHandler"), m_nType( 0 ), diff --git a/writerfilter/source/dmapper/GraphicHelpers.hxx b/writerfilter/source/dmapper/GraphicHelpers.hxx index 68eca32..f2f791c 100644 --- a/writerfilter/source/dmapper/GraphicHelpers.hxx +++ b/writerfilter/source/dmapper/GraphicHelpers.hxx @@ -34,10 +34,8 @@ namespace dmapper class PositionHandler: public LoggedProperties { public: - PositionHandler( bool vertical, std::pair<OUString, OUString>& rPositionOffsets ); + PositionHandler( std::pair<OUString, OUString>& rPositionOffsets, std::pair<OUString, OUString>& rAligns ); virtual ~PositionHandler( ); - static void setAlignH(const OUString & sText); - static void setAlignV(const OUString & sText); sal_Int16 orientation() const; sal_Int16 relation() const { return m_nRelation;} sal_Int32 position() const { return m_nPosition;} @@ -47,8 +45,8 @@ public: sal_Int16 m_nOrient; sal_Int16 m_nRelation; sal_Int32 m_nPosition; - static int savedAlignV, savedAlignH; std::pair<OUString, OUString>& m_rPositionOffsets; + std::pair<OUString, OUString>& m_rAligns; }; typedef boost::shared_ptr<PositionHandler> PositionHandlerPtr; diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx index fae9b3d..9f91f30 100644 --- a/writerfilter/source/dmapper/GraphicImport.cxx +++ b/writerfilter/source/dmapper/GraphicImport.cxx @@ -262,6 +262,7 @@ public: OUString sAlternativeText; OUString title; std::pair<OUString, OUString>& m_rPositionOffsets; + std::pair<OUString, OUString>& m_rAligns; std::queue<OUString>& m_rPositivePercentages; OUString sAnchorId; comphelper::SequenceAsHashMap m_aInteropGrabBag; @@ -270,7 +271,7 @@ public: boost::optional<sal_Int32> m_oEffectExtentRight; boost::optional<sal_Int32> m_oEffectExtentBottom; - GraphicImport_Impl(GraphicImportType eImportType, DomainMapper& rDMapper, std::pair<OUString, OUString>& rPositionOffsets, std::queue<OUString>& rPositivePercentages) : + GraphicImport_Impl(GraphicImportType eImportType, DomainMapper& rDMapper, std::pair<OUString, OUString>& rPositionOffsets, std::pair<OUString, OUString>& rAligns, std::queue<OUString>& rPositivePercentages) : nXSize(0) ,bXSizeValid(false) ,nYSize(0) @@ -322,6 +323,7 @@ public: ,bPositionProtected(false) ,nShapeOptionType(0) ,m_rPositionOffsets(rPositionOffsets) + ,m_rAligns(rAligns) ,m_rPositivePercentages(rPositivePercentages) {} @@ -447,11 +449,12 @@ GraphicImport::GraphicImport(uno::Reference<uno::XComponentContext> const& xComp DomainMapper& rDMapper, GraphicImportType eImportType, std::pair<OUString, OUString>& rPositionOffsets, + std::pair<OUString, OUString>& rAligns, std::queue<OUString>& rPositivePercentages) : LoggedProperties(dmapper_logger, "GraphicImport") , LoggedTable(dmapper_logger, "GraphicImport") , LoggedStream(dmapper_logger, "GraphicImport") -, m_pImpl(new GraphicImport_Impl(eImportType, rDMapper, rPositionOffsets, rPositivePercentages)) +, m_pImpl(new GraphicImport_Impl(eImportType, rDMapper, rPositionOffsets, rAligns, rPositivePercentages)) , m_xComponentContext(xComponentContext) , m_xTextFactory(xTextFactory) { @@ -1048,7 +1051,7 @@ void GraphicImport::lcl_sprm(Sprm& rSprm) case NS_ooxml::LN_CT_Anchor_positionH: // 90976; { // Use a special handler for the positionning - PositionHandlerPtr pHandler( new PositionHandler( false, m_pImpl->m_rPositionOffsets )); + PositionHandlerPtr pHandler( new PositionHandler( m_pImpl->m_rPositionOffsets, m_pImpl->m_rAligns )); writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps(); if( pProperties.get( ) ) { @@ -1074,7 +1077,7 @@ void GraphicImport::lcl_sprm(Sprm& rSprm) case NS_ooxml::LN_CT_Anchor_positionV: // 90977; { // Use a special handler for the positionning - PositionHandlerPtr pHandler( new PositionHandler( true, m_pImpl->m_rPositionOffsets )); + PositionHandlerPtr pHandler( new PositionHandler( m_pImpl->m_rPositionOffsets, m_pImpl->m_rAligns)); writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps(); if( pProperties.get( ) ) { diff --git a/writerfilter/source/dmapper/GraphicImport.hxx b/writerfilter/source/dmapper/GraphicImport.hxx index 89fc5c1..0d5c07c 100644 --- a/writerfilter/source/dmapper/GraphicImport.hxx +++ b/writerfilter/source/dmapper/GraphicImport.hxx @@ -84,6 +84,7 @@ public: DomainMapper& rDomainMapper, GraphicImportType eGraphicImportType, std::pair<OUString, OUString>& rPositionOffsets, + std::pair<OUString, OUString>& rAligns, std::queue<OUString>& rPositivePercentages); virtual ~GraphicImport(); diff --git a/writerfilter/source/dmapper/LoggedResources.cxx b/writerfilter/source/dmapper/LoggedResources.cxx index 3fafd30..9f430a4 100644 --- a/writerfilter/source/dmapper/LoggedResources.cxx +++ b/writerfilter/source/dmapper/LoggedResources.cxx @@ -219,6 +219,21 @@ void LoggedStream::positionOffset(const OUString& rText, bool bVertical) #endif } +void LoggedStream::align(const OUString& rText, bool bVertical) +{ +#ifdef DEBUG_WRITERFILTER + mHelper.startElement("align"); + mHelper.attribute("vertical", static_cast<int>(bVertical)); + mHelper.chars(rText); +#endif + + lcl_align(rText, bVertical); + +#ifdef DEBUG_WRITERFILTER + mHelper.endElement("align"); +#endif +} + void LoggedStream::positivePercentage(const OUString& rText) { #ifdef DEBUG_WRITERFILTER diff --git a/writerfilter/source/dmapper/LoggedResources.hxx b/writerfilter/source/dmapper/LoggedResources.hxx index 2524485..6162408 100644 --- a/writerfilter/source/dmapper/LoggedResources.hxx +++ b/writerfilter/source/dmapper/LoggedResources.hxx @@ -64,6 +64,7 @@ public: void text(const sal_uInt8 * data, size_t len) SAL_OVERRIDE; void utext(const sal_uInt8 * data, size_t len) SAL_OVERRIDE; void positionOffset(const OUString& rText, bool bVertical) SAL_OVERRIDE; + void align(const OUString& rText, bool bVertical) SAL_OVERRIDE; void positivePercentage(const OUString& rText) SAL_OVERRIDE; void props(writerfilter::Reference<Properties>::Pointer_t ref) SAL_OVERRIDE; void table(Id name, writerfilter::Reference<Table>::Pointer_t ref) SAL_OVERRIDE; @@ -83,6 +84,7 @@ protected: virtual void lcl_utext(const sal_uInt8 * data, size_t len) = 0; virtual void lcl_positionOffset(const OUString& /*rText*/, bool /*bVertical*/) { } virtual css::awt::Point getPositionOffset() { return css::awt::Point(); } + virtual void lcl_align(const OUString& /*rText*/, bool /*bVertical*/) { } virtual void lcl_positivePercentage(const OUString& /*rText*/) { } virtual void lcl_props(writerfilter::Reference<Properties>::Pointer_t ref) = 0; virtual void lcl_table(Id name, writerfilter::Reference<Table>::Pointer_t ref) = 0; diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx index 3c7094f..69f953f 100644 --- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx +++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx @@ -26,7 +26,6 @@ #include <ooxml/QNameToString.hxx> #include <ooxml/resourceids.hxx> #include <oox/token/namespaces.hxx> -#include <dmapper/GraphicHelpers.hxx> #include <comphelper/embeddedobjectcontainer.hxx> #include <tools/globname.hxx> #include <comphelper/classids.hxx> @@ -666,16 +665,16 @@ void OOXMLFastContextHandler::ignore() { } -void OOXMLFastContextHandler::alignH(const OUString & sText) +void OOXMLFastContextHandler::alignH(const OUString& rText) { if (isForwardEvents()) - ::writerfilter::dmapper::PositionHandler::setAlignH( sText ); + mpStream->align(rText, /*bVertical=*/false); } -void OOXMLFastContextHandler::alignV(const OUString & sText) +void OOXMLFastContextHandler::alignV(const OUString& rText) { if (isForwardEvents()) - ::writerfilter::dmapper::PositionHandler::setAlignV( sText ); + mpStream->align(rText, /*bVertical=*/true); } void OOXMLFastContextHandler::positivePercentage(const OUString& rText) diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 36ceed1..cd2ec81 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -34,7 +34,6 @@ #include <ooxml/resourceids.hxx> #include <oox/token/namespaces.hxx> #include <oox/drawingml/drawingmltypes.hxx> -#include <dmapper/GraphicHelpers.hxx> #include <rtfsdrimport.hxx> #include <rtflookahead.hxx> #include <rtfcharsets.hxx> commit 44ea0b3a2550a79148fb86f3e7175fffe77674b4 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Sun Dec 21 11:12:40 2014 +0100 writerfilter: refactor to get rid of savedPositionOffset{V,H} statics Which are extremely scary, allowing a shape position from one doc to appear in an other if two writerfilter import is in progress at the same time. This partially reverts 8fa1a0874765ea7db57e496f1d92731b9ab09280 (read wp:positionOffset, wp:alignV and wp:alignH properly (bnc#513579), 2011-05-04). Change-Id: I0fcddf88fa56f5f9288e47bcd100c38ee9cf2f13 diff --git a/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx b/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx index b4254b6..7bdfeea 100644 --- a/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx +++ b/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx @@ -240,6 +240,14 @@ public: */ virtual void utext(const sal_uInt8 * data, size_t len) = 0; + /** + * Offset in EMUs for a shape. + * + * Call *before* an ooxml::CT_PosH/V_posOffset sprm is sent. + */ + virtual void positionOffset(const OUString& rText, bool bVertical) = 0; + /// Returns the last set offsets of a shape in HMM. + virtual css::awt::Point getPositionOffset() = 0; virtual void positivePercentage(const OUString& rText) = 0; /** diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index e6cf4fe..eb10e40 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -28,6 +28,7 @@ #include <i18nlangtag/languagetag.hxx> #include <i18nutil/paper.hxx> #include <oox/token/tokens.hxx> +#include <oox/drawingml/drawingmltypes.hxx> #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp> #include <com/sun/star/document/XOOXMLDocumentPropertiesImporter.hpp> #include <com/sun/star/table/ShadowFormat.hpp> @@ -2907,6 +2908,22 @@ void DomainMapper::lcl_text(const sal_uInt8 * data_, size_t len) } } +void DomainMapper::lcl_positionOffset(const OUString& rText, bool bVertical) +{ + if (bVertical) + m_pImpl->m_aPositionOffsets.second = rText; + else + m_pImpl->m_aPositionOffsets.first = rText; +} + +awt::Point DomainMapper::getPositionOffset() +{ + awt::Point aRet; + aRet.X = oox::drawingml::convertEmuToHmm(m_pImpl->m_aPositionOffsets.first.toInt32()); + aRet.Y = oox::drawingml::convertEmuToHmm(m_pImpl->m_aPositionOffsets.second.toInt32()); + return aRet; +} + void DomainMapper::lcl_positivePercentage(const OUString& rText) { m_pImpl->m_aPositivePercentages.push(rText); diff --git a/writerfilter/source/dmapper/DomainMapper.hxx b/writerfilter/source/dmapper/DomainMapper.hxx index 67c16f3..013fe2d 100644 --- a/writerfilter/source/dmapper/DomainMapper.hxx +++ b/writerfilter/source/dmapper/DomainMapper.hxx @@ -145,6 +145,8 @@ private: virtual void lcl_text(const sal_uInt8 * data, size_t len) SAL_OVERRIDE; virtual void lcl_utext(const sal_uInt8 * data, size_t len) SAL_OVERRIDE; + virtual void lcl_positionOffset(const OUString& rText, bool bVertical) SAL_OVERRIDE; + virtual css::awt::Point getPositionOffset() SAL_OVERRIDE; virtual void lcl_positivePercentage(const OUString& rText) SAL_OVERRIDE; virtual void lcl_props(writerfilter::Reference<Properties>::Pointer_t ref) SAL_OVERRIDE; virtual void lcl_table(Id name, diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index a3694bd..4e0835f 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -4557,7 +4557,7 @@ void DomainMapper_Impl::AddAnnotationPosition( GraphicImportPtr DomainMapper_Impl::GetGraphicImport(GraphicImportType eGraphicImportType) { if(!m_pGraphicImport) - m_pGraphicImport.reset( new GraphicImport( m_xComponentContext, m_xTextFactory, m_rDMapper, eGraphicImportType, m_aPositivePercentages ) ); + m_pGraphicImport.reset( new GraphicImport( m_xComponentContext, m_xTextFactory, m_rDMapper, eGraphicImportType, m_aPositionOffsets, m_aPositivePercentages ) ); return m_pGraphicImport; } /*------------------------------------------------------------------------- diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 30fef54..c2ccf2b 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -826,6 +826,8 @@ public: /// A sub-grabbag of m_aInteropGrabBag, like 'spacing'. std::vector<css::beans::PropertyValue> m_aSubInteropGrabBag; + /// ST_PositionOffset values we received + std::pair<OUString, OUString> m_aPositionOffsets; /// ST_PositivePercentage values we received std::queue<OUString> m_aPositivePercentages; bool isInIndexContext() { return m_bStartIndex;} diff --git a/writerfilter/source/dmapper/GraphicHelpers.cxx b/writerfilter/source/dmapper/GraphicHelpers.cxx index 0dfc80e..53143dd 100644 --- a/writerfilter/source/dmapper/GraphicHelpers.cxx +++ b/writerfilter/source/dmapper/GraphicHelpers.cxx @@ -39,27 +39,22 @@ namespace dmapper { using namespace com::sun::star; -int PositionHandler::savedPositionOffsetV = 0; -int PositionHandler::savedPositionOffsetH = 0; int PositionHandler::savedAlignV = text::VertOrientation::NONE; int PositionHandler::savedAlignH = text::HoriOrientation::NONE; -PositionHandler::PositionHandler( bool vertical ) : -LoggedProperties(dmapper_logger, "PositionHandler") +PositionHandler::PositionHandler( bool vertical, std::pair<OUString, OUString>& rPositionOffsets ) : +LoggedProperties(dmapper_logger, "PositionHandler"), +m_rPositionOffsets(rPositionOffsets) { m_nRelation = text::RelOrientation::FRAME; if( vertical ) { - m_nPosition = savedPositionOffsetV; m_nOrient = savedAlignV; - savedPositionOffsetV = 0; savedAlignV = text::VertOrientation::NONE; } else { - m_nPosition = savedPositionOffsetH; m_nOrient = savedAlignH; - savedPositionOffsetH = 0; savedAlignH = text::HoriOrientation::NONE; } } @@ -133,8 +128,19 @@ void PositionHandler::lcl_attribute( Id aName, Value& rVal ) } } -void PositionHandler::lcl_sprm( Sprm& ) +void PositionHandler::lcl_sprm(Sprm& rSprm) { + sal_uInt32 nSprmId = rSprm.getId(); + + switch (nSprmId) + { + case NS_ooxml::LN_CT_PosH_posOffset: + m_nPosition = oox::drawingml::convertEmuToHmm(m_rPositionOffsets.first.toInt32()); + break; + case NS_ooxml::LN_CT_PosV_posOffset: + m_nPosition = oox::drawingml::convertEmuToHmm(m_rPositionOffsets.second.toInt32()); + break; + } } sal_Int16 PositionHandler::orientation() const @@ -152,22 +158,6 @@ sal_Int16 PositionHandler::orientation() const -void PositionHandler::setPositionOffset(const OUString & sText, bool vertical) -{ - if( vertical ) - savedPositionOffsetV = oox::drawingml::convertEmuToHmm(sText.toInt32()); - else - savedPositionOffsetH = oox::drawingml::convertEmuToHmm(sText.toInt32()); -} - -int PositionHandler::getPositionOffset(bool vertical) -{ - if (vertical) - return savedPositionOffsetV; - else - return savedPositionOffsetH; -} - void PositionHandler::setAlignH(const OUString & sText) { if( sText == "left") diff --git a/writerfilter/source/dmapper/GraphicHelpers.hxx b/writerfilter/source/dmapper/GraphicHelpers.hxx index 545dd95..68eca32 100644 --- a/writerfilter/source/dmapper/GraphicHelpers.hxx +++ b/writerfilter/source/dmapper/GraphicHelpers.hxx @@ -25,6 +25,7 @@ #include <boost/shared_ptr.hpp> #include <map> +#include <utility> namespace writerfilter { namespace dmapper @@ -33,10 +34,8 @@ namespace dmapper class PositionHandler: public LoggedProperties { public: - PositionHandler( bool vertical ); + PositionHandler( bool vertical, std::pair<OUString, OUString>& rPositionOffsets ); virtual ~PositionHandler( ); - static void setPositionOffset(const OUString & sText, bool vertical); - static int getPositionOffset(bool vertical); static void setAlignH(const OUString & sText); static void setAlignV(const OUString & sText); sal_Int16 orientation() const; @@ -48,8 +47,8 @@ public: sal_Int16 m_nOrient; sal_Int16 m_nRelation; sal_Int32 m_nPosition; - static int savedPositionOffsetV, savedPositionOffsetH; static int savedAlignV, savedAlignH; + std::pair<OUString, OUString>& m_rPositionOffsets; }; typedef boost::shared_ptr<PositionHandler> PositionHandlerPtr; diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx index de999af..fae9b3d 100644 --- a/writerfilter/source/dmapper/GraphicImport.cxx +++ b/writerfilter/source/dmapper/GraphicImport.cxx @@ -261,6 +261,7 @@ public: OUString sName; OUString sAlternativeText; OUString title; + std::pair<OUString, OUString>& m_rPositionOffsets; std::queue<OUString>& m_rPositivePercentages; OUString sAnchorId; comphelper::SequenceAsHashMap m_aInteropGrabBag; @@ -269,7 +270,7 @@ public: boost::optional<sal_Int32> m_oEffectExtentRight; boost::optional<sal_Int32> m_oEffectExtentBottom; - GraphicImport_Impl(GraphicImportType eImportType, DomainMapper& rDMapper, std::queue<OUString>& rPositivePercentages) : + GraphicImport_Impl(GraphicImportType eImportType, DomainMapper& rDMapper, std::pair<OUString, OUString>& rPositionOffsets, std::queue<OUString>& rPositivePercentages) : nXSize(0) ,bXSizeValid(false) ,nYSize(0) @@ -320,6 +321,7 @@ public: ,bSizeProtected(false) ,bPositionProtected(false) ,nShapeOptionType(0) + ,m_rPositionOffsets(rPositionOffsets) ,m_rPositivePercentages(rPositivePercentages) {} @@ -444,11 +446,12 @@ GraphicImport::GraphicImport(uno::Reference<uno::XComponentContext> const& xComp uno::Reference<lang::XMultiServiceFactory> const& xTextFactory, DomainMapper& rDMapper, GraphicImportType eImportType, + std::pair<OUString, OUString>& rPositionOffsets, std::queue<OUString>& rPositivePercentages) : LoggedProperties(dmapper_logger, "GraphicImport") , LoggedTable(dmapper_logger, "GraphicImport") , LoggedStream(dmapper_logger, "GraphicImport") -, m_pImpl(new GraphicImport_Impl(eImportType, rDMapper, rPositivePercentages)) +, m_pImpl(new GraphicImport_Impl(eImportType, rDMapper, rPositionOffsets, rPositivePercentages)) , m_xComponentContext(xComponentContext) , m_xTextFactory(xTextFactory) { @@ -1045,7 +1048,7 @@ void GraphicImport::lcl_sprm(Sprm& rSprm) case NS_ooxml::LN_CT_Anchor_positionH: // 90976; { // Use a special handler for the positionning - PositionHandlerPtr pHandler( new PositionHandler( false )); + PositionHandlerPtr pHandler( new PositionHandler( false, m_pImpl->m_rPositionOffsets )); writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps(); if( pProperties.get( ) ) { @@ -1071,7 +1074,7 @@ void GraphicImport::lcl_sprm(Sprm& rSprm) case NS_ooxml::LN_CT_Anchor_positionV: // 90977; { // Use a special handler for the positionning - PositionHandlerPtr pHandler( new PositionHandler( true )); + PositionHandlerPtr pHandler( new PositionHandler( true, m_pImpl->m_rPositionOffsets )); writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps(); if( pProperties.get( ) ) { diff --git a/writerfilter/source/dmapper/GraphicImport.hxx b/writerfilter/source/dmapper/GraphicImport.hxx index 3552d26..89fc5c1 100644 --- a/writerfilter/source/dmapper/GraphicImport.hxx +++ b/writerfilter/source/dmapper/GraphicImport.hxx @@ -83,6 +83,7 @@ public: css::uno::Reference<css::lang::XMultiServiceFactory> const& xTextFactory, DomainMapper& rDomainMapper, GraphicImportType eGraphicImportType, + std::pair<OUString, OUString>& rPositionOffsets, std::queue<OUString>& rPositivePercentages); virtual ~GraphicImport(); diff --git a/writerfilter/source/dmapper/LoggedResources.cxx b/writerfilter/source/dmapper/LoggedResources.cxx index 4d8051e..3fafd30 100644 --- a/writerfilter/source/dmapper/LoggedResources.cxx +++ b/writerfilter/source/dmapper/LoggedResources.cxx @@ -204,6 +204,21 @@ void LoggedStream::utext(const sal_uInt8 * data, size_t len) #endif } +void LoggedStream::positionOffset(const OUString& rText, bool bVertical) +{ +#ifdef DEBUG_WRITERFILTER + mHelper.startElement("positionOffset"); + mHelper.attribute("vertical", static_cast<int>(bVertical)); + mHelper.chars(rText); +#endif + + lcl_positionOffset(rText, bVertical); + +#ifdef DEBUG_WRITERFILTER + mHelper.endElement("positionOffset"); +#endif +} + void LoggedStream::positivePercentage(const OUString& rText) { #ifdef DEBUG_WRITERFILTER diff --git a/writerfilter/source/dmapper/LoggedResources.hxx b/writerfilter/source/dmapper/LoggedResources.hxx index 5147511..2524485 100644 --- a/writerfilter/source/dmapper/LoggedResources.hxx +++ b/writerfilter/source/dmapper/LoggedResources.hxx @@ -63,6 +63,7 @@ public: void endShape() SAL_OVERRIDE; void text(const sal_uInt8 * data, size_t len) SAL_OVERRIDE; void utext(const sal_uInt8 * data, size_t len) SAL_OVERRIDE; + void positionOffset(const OUString& rText, bool bVertical) SAL_OVERRIDE; void positivePercentage(const OUString& rText) SAL_OVERRIDE; void props(writerfilter::Reference<Properties>::Pointer_t ref) SAL_OVERRIDE; void table(Id name, writerfilter::Reference<Table>::Pointer_t ref) SAL_OVERRIDE; @@ -80,6 +81,8 @@ protected: virtual void lcl_endShape() = 0; virtual void lcl_text(const sal_uInt8 * data, size_t len) = 0; virtual void lcl_utext(const sal_uInt8 * data, size_t len) = 0; + virtual void lcl_positionOffset(const OUString& /*rText*/, bool /*bVertical*/) { } + virtual css::awt::Point getPositionOffset() { return css::awt::Point(); } virtual void lcl_positivePercentage(const OUString& /*rText*/) { } virtual void lcl_props(writerfilter::Reference<Properties>::Pointer_t ref) = 0; virtual void lcl_table(Id name, writerfilter::Reference<Table>::Pointer_t ref) = 0; diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx index a461ed7..3c7094f 100644 --- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx +++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx @@ -656,20 +656,10 @@ void OOXMLFastContextHandler::text(const OUString & sText) sText.getLength()); } -/* - HACK. An ugly hack. The problem with wp:positionOffset, wp:alignV and wp:alignH - is that they do not work in the usual OOXML way of <tag val="value"/> but instead - it's <tag>value</tag>, which is otherwise used only things like <t>. And I really - haven't managed to find out how to make this XML parsing monstrosity to handle this - on its own, so the code is modelled after <t> handling and does it manually in a hackish - way - it reads the value as text and converts itself, moreover the reading of the value - is done sooner than lcl_sprms() actually results in processing the tags it is enclosed - in, so the values are stored in PositionHandler for later use. -*/ -void OOXMLFastContextHandler::positionOffset(const OUString & sText) +void OOXMLFastContextHandler::positionOffset(const OUString& rText) { if (isForwardEvents()) - ::writerfilter::dmapper::PositionHandler::setPositionOffset( sText, inPositionV ); + mpStream->positionOffset(rText, inPositionV); } void OOXMLFastContextHandler::ignore() @@ -1632,7 +1622,7 @@ void OOXMLFastContextHandlerShape::sendShape( Token_t Element ) { if ( mrShapeContext.is() && !m_bShapeSent ) { - awt::Point aPosition(writerfilter::dmapper::PositionHandler::getPositionOffset(false), writerfilter::dmapper::PositionHandler::getPositionOffset(true)); + awt::Point aPosition = mpStream->getPositionOffset(); mrShapeContext->setPosition(aPosition); uno::Reference<drawing::XShape> xShape(mrShapeContext->getShape()); if (xShape.is()) diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 433bbf9..36ceed1 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -950,19 +950,27 @@ int RTFDocumentImpl::resolvePict(bool const bInline, uno::Reference<drawing::XSh aAnchorSprms.set(NS_ooxml::LN_EG_WrapType_wrapSquare, pAnchorWrapValue); // See OOXMLFastContextHandler::positionOffset(), we can't just put offset values in an RTFValue. + RTFSprms aPoshAttributes; RTFSprms aPoshSprms; if (m_aStates.top().aShape.nHoriOrientRelationToken > 0) - aPoshSprms.set(NS_ooxml::LN_CT_PosH_relativeFrom, RTFValue::Pointer_t(new RTFValue(m_aStates.top().aShape.nHoriOrientRelationToken))); + aPoshAttributes.set(NS_ooxml::LN_CT_PosH_relativeFrom, RTFValue::Pointer_t(new RTFValue(m_aStates.top().aShape.nHoriOrientRelationToken))); if (m_aStates.top().aShape.nLeft != 0) - writerfilter::dmapper::PositionHandler::setPositionOffset(OUString::number(oox::drawingml::convertHmmToEmu(m_aStates.top().aShape.nLeft)), false); - aAnchorSprms.set(NS_ooxml::LN_CT_Anchor_positionH, RTFValue::Pointer_t(new RTFValue(aPoshSprms))); + { + Mapper().positionOffset(OUString::number(oox::drawingml::convertHmmToEmu(m_aStates.top().aShape.nLeft)), /*bVertical=*/false); + aPoshSprms.set(NS_ooxml::LN_CT_PosH_posOffset, RTFValue::Pointer_t(new RTFValue())); + } + aAnchorSprms.set(NS_ooxml::LN_CT_Anchor_positionH, RTFValue::Pointer_t(new RTFValue(aPoshAttributes, aPoshSprms))); + RTFSprms aPosvAttributes; RTFSprms aPosvSprms; if (m_aStates.top().aShape.nVertOrientRelationToken > 0) - aPosvSprms.set(NS_ooxml::LN_CT_PosV_relativeFrom, RTFValue::Pointer_t(new RTFValue(m_aStates.top().aShape.nVertOrientRelationToken))); + aPosvAttributes.set(NS_ooxml::LN_CT_PosV_relativeFrom, RTFValue::Pointer_t(new RTFValue(m_aStates.top().aShape.nVertOrientRelationToken))); if (m_aStates.top().aShape.nTop != 0) - writerfilter::dmapper::PositionHandler::setPositionOffset(OUString::number(oox::drawingml::convertHmmToEmu(m_aStates.top().aShape.nTop)), true); - aAnchorSprms.set(NS_ooxml::LN_CT_Anchor_positionV, RTFValue::Pointer_t(new RTFValue(aPosvSprms))); + { + Mapper().positionOffset(OUString::number(oox::drawingml::convertHmmToEmu(m_aStates.top().aShape.nTop)), /*bVertical=*/true); + aPosvSprms.set(NS_ooxml::LN_CT_PosV_posOffset, RTFValue::Pointer_t(new RTFValue())); + } + aAnchorSprms.set(NS_ooxml::LN_CT_Anchor_positionV, RTFValue::Pointer_t(new RTFValue(aPosvAttributes, aPosvSprms))); aAnchorSprms.set(NS_ooxml::LN_CT_Anchor_docPr, pDocprValue); aAnchorSprms.set(NS_ooxml::LN_graphic_graphic, pGraphicValue); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits