[Libreoffice-commits] core.git: 4 commits - writerfilter/inc writerfilter/Library_writerfilter.mk writerfilter/source
Miklos Vajna
vmiklos at collabora.co.uk
Sun Dec 21 10:14:16 PST 2014
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 <vmiklos at 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 <vmiklos at 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 <vmiklos at 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 <vmiklos at 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);
More information about the Libreoffice-commits
mailing list