summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2013-10-31 17:05:57 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2013-10-31 18:17:48 +0100
commitf91775c00dfd50e89cfcbc280d90309a5d08d727 (patch)
tree690218166c0b375ae5f7b9c401cc18e18d07c1b5 /writerfilter
parentb74e0da1df405151cfdb6c8cc84fad797f28e1f7 (diff)
writerfilter: implement BorderHandler::getInteropGrabBag()
Change-Id: I86922585122898692dc4fb1fbbee11e1864dad29
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/BorderHandler.cxx66
-rw-r--r--writerfilter/source/dmapper/BorderHandler.hxx6
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx12
-rw-r--r--writerfilter/source/dmapper/TDefTableHandler.cxx9
-rw-r--r--writerfilter/source/dmapper/TDefTableHandler.hxx2
-rw-r--r--writerfilter/source/dmapper/TablePropertiesHandler.cxx4
6 files changed, 90 insertions, 9 deletions
diff --git a/writerfilter/source/dmapper/BorderHandler.cxx b/writerfilter/source/dmapper/BorderHandler.cxx
index a5d8560f70f0..c010c13b5c37 100644
--- a/writerfilter/source/dmapper/BorderHandler.cxx
+++ b/writerfilter/source/dmapper/BorderHandler.cxx
@@ -17,6 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include <BorderHandler.hxx>
+#include <TDefTableHandler.hxx>
#include <PropertyMap.hxx>
#include <resourcemodel/QNameToString.hxx>
#include <doctok/resourceids.hxx>
@@ -24,6 +25,7 @@
#include <com/sun/star/table/BorderLine2.hpp>
#include <ooxml/resourceids.hxx>
#include <dmapperLoggers.hxx>
+#include <filter/msfilter/util.hxx>
namespace writerfilter {
@@ -72,16 +74,20 @@ void BorderHandler::lcl_attribute(Id rName, Value & rVal)
case NS_rtf::LN_DPTLINEWIDTH: // 0x2871
// width of a single line in 1/8 pt, max of 32 pt -> twip * 5 / 2.
m_nLineWidth = nIntValue * 5 / 2;
+ appendGrabBag("sz", OUString::number(nIntValue));
break;
case NS_rtf::LN_BRCTYPE: // 0x2872
m_nLineType = nIntValue;
+ appendGrabBag("val", TDefTableHandler::getBorderTypeString(nIntValue));
break;
case NS_ooxml::LN_CT_Border_color:
case NS_rtf::LN_ICO: // 0x2873
m_nLineColor = nIntValue;
+ appendGrabBag("color", OStringToOUString(msfilter::util::ConvertColor(nIntValue), RTL_TEXTENCODING_UTF8));
break;
case NS_rtf::LN_DPTSPACE: // border distance in points
m_nLineDistance = ConversionHelper::convertTwipToMM100( nIntValue * 20 );
+ appendGrabBag("space", OUString::number(nIntValue));
break;
case NS_rtf::LN_FSHADOW: // 0x2875
m_bShadow = nIntValue;
@@ -90,8 +96,12 @@ void BorderHandler::lcl_attribute(Id rName, Value & rVal)
case NS_rtf::LN_UNUSED2_15: // 0x2877
// ignored
break;
- case NS_ooxml::LN_CT_Border_themeTint: break;
- case NS_ooxml::LN_CT_Border_themeColor: break;
+ case NS_ooxml::LN_CT_Border_themeTint:
+ appendGrabBag("themeTint", OUString::number(nIntValue, 16));
+ break;
+ case NS_ooxml::LN_CT_Border_themeColor:
+ appendGrabBag("themeColor", TDefTableHandler::getThemeColorTypeString(nIntValue));
+ break;
default:
OSL_FAIL( "unknown attribute");
}
@@ -101,31 +111,40 @@ void BorderHandler::lcl_sprm(Sprm & rSprm)
{
BorderPosition pos = BORDER_COUNT; // invalid pos
bool rtl = false; // TODO detect
+ OUString aBorderPos;
switch( rSprm.getId())
{
case NS_ooxml::LN_CT_TblBorders_top:
pos = BORDER_TOP;
+ aBorderPos = "top";
break;
case NS_ooxml::LN_CT_TblBorders_start:
pos = rtl ? BORDER_RIGHT : BORDER_LEFT;
+ aBorderPos = "start";
break;
case NS_ooxml::LN_CT_TblBorders_left:
pos = BORDER_LEFT;
+ aBorderPos = "left";
break;
case NS_ooxml::LN_CT_TblBorders_bottom:
pos = BORDER_BOTTOM;
+ aBorderPos = "bottom";
break;
case NS_ooxml::LN_CT_TblBorders_end:
pos = rtl ? BORDER_LEFT : BORDER_RIGHT;
+ aBorderPos = "end";
break;
case NS_ooxml::LN_CT_TblBorders_right:
pos = BORDER_RIGHT;
+ aBorderPos = "right";
break;
case NS_ooxml::LN_CT_TblBorders_insideH:
pos = BORDER_HORIZONTAL;
+ aBorderPos = "insideH";
break;
case NS_ooxml::LN_CT_TblBorders_insideV:
pos = BORDER_VERTICAL;
+ aBorderPos = "insideV";
break;
default:
break;
@@ -134,7 +153,20 @@ void BorderHandler::lcl_sprm(Sprm & rSprm)
{
writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
if( pProperties.get())
+ {
+ std::vector<beans::PropertyValue> aSavedGrabBag;
+ if (!m_aInteropGrabBagName.isEmpty())
+ {
+ aSavedGrabBag = m_aInteropGrabBag;
+ m_aInteropGrabBag.clear();
+ }
pProperties->resolve(*this);
+ if (!m_aInteropGrabBagName.isEmpty())
+ {
+ aSavedGrabBag.push_back(getInteropGrabBag(aBorderPos));
+ m_aInteropGrabBag = aSavedGrabBag;
+ }
+ }
ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor,
m_aBorderLines[ pos ], m_bOOXML );
m_aFilledLines[ pos ] = true;
@@ -180,6 +212,36 @@ bool BorderHandler::getShadow()
return m_bShadow;
}
+void BorderHandler::enableInteropGrabBag(OUString aName)
+{
+ m_aInteropGrabBagName = aName;
+}
+
+beans::PropertyValue BorderHandler::getInteropGrabBag(OUString aName)
+{
+ beans::PropertyValue aRet;
+ if (aName.isEmpty())
+ aRet.Name = m_aInteropGrabBagName;
+ else
+ aRet.Name = aName;
+
+ uno::Sequence<beans::PropertyValue> aSeq(m_aInteropGrabBag.size());
+ beans::PropertyValue* pSeq = aSeq.getArray();
+ for (std::vector<beans::PropertyValue>::iterator i = m_aInteropGrabBag.begin(); i != m_aInteropGrabBag.end(); ++i)
+ *pSeq++ = *i;
+
+ aRet.Value = uno::makeAny(aSeq);
+ return aRet;
+}
+
+void BorderHandler::appendGrabBag(OUString aKey, OUString aValue)
+{
+ beans::PropertyValue aProperty;
+ aProperty.Name = aKey;
+ aProperty.Value = uno::makeAny(aValue);
+ m_aInteropGrabBag.push_back(aProperty);
+}
+
} //namespace dmapper
} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/BorderHandler.hxx b/writerfilter/source/dmapper/BorderHandler.hxx
index 3d43c4a864da..692d7ca40988 100644
--- a/writerfilter/source/dmapper/BorderHandler.hxx
+++ b/writerfilter/source/dmapper/BorderHandler.hxx
@@ -23,6 +23,7 @@
#include <resourcemodel/LoggedResources.hxx>
#include <boost/shared_ptr.hpp>
#include <com/sun/star/table/BorderLine2.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
namespace writerfilter {
namespace dmapper
@@ -55,6 +56,9 @@ private:
bool m_aFilledLines[BORDER_COUNT];
::com::sun::star::table::BorderLine2 m_aBorderLines[BORDER_COUNT];
+ OUString m_aInteropGrabBagName;
+ std::vector<beans::PropertyValue> m_aInteropGrabBag;
+ void appendGrabBag(OUString aKey, OUString aValue);
// Properties
virtual void lcl_attribute(Id Name, Value & val);
@@ -68,6 +72,8 @@ public:
::com::sun::star::table::BorderLine2 getBorderLine();
sal_Int32 getLineDistance() const { return m_nLineDistance;}
bool getShadow();
+ void enableInteropGrabBag(OUString aName);
+ beans::PropertyValue getInteropGrabBag(OUString aName = OUString());
};
typedef boost::shared_ptr< BorderHandler > BorderHandlerPtr;
}}
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index a0c4bef1d261..0d48d9998b32 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -1168,6 +1168,10 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
{
if (nName == NS_ooxml::LN_CT_Language_eastAsia)
m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "eastAsia", sStringValue);
+ else if (nName == NS_ooxml::LN_CT_Language_val)
+ m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "val", sStringValue);
+ else if (nName == NS_ooxml::LN_CT_Language_bidi)
+ m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "bidi", sStringValue);
lang::Locale aLocale( LanguageTag::convertToLocale( sStringValue));
if (m_pImpl->GetTopContext())
m_pImpl->GetTopContext()->Insert(NS_ooxml::LN_CT_Language_val== nName ? PROP_CHAR_LOCALE :
@@ -2251,8 +2255,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType
// Make sure char sizes defined in the stylesheets don't affect char props from direct formatting.
if (!m_pImpl->IsStyleSheetImport())
m_pImpl->deferCharacterProperty( nSprmId, uno::makeAny( nIntValue ));
- if (nSprmId == NS_sprm::LN_CHps)
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "sz", OUString::number(nIntValue));
+ m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, (nSprmId == NS_sprm::LN_CHps ? OUString("sz") : OUString("szCs")), OUString::number(nIntValue));
}
break;
case NS_sprm::LN_CHpsInc:
@@ -4056,19 +4059,23 @@ void DomainMapper::handleParaJustification(const sal_Int32 nIntValue, const ::bo
{
sal_Int16 nAdjust = 0;
sal_Int16 nLastLineAdjust = 0;
+ OUString aStringValue = "left";
switch(nIntValue)
{
case 1:
nAdjust = style::ParagraphAdjust_CENTER;
+ aStringValue = "center";
break;
case 2:
nAdjust = static_cast< sal_Int16 > (bExchangeLeftRight ? style::ParagraphAdjust_LEFT : style::ParagraphAdjust_RIGHT);
+ aStringValue = "right";
break;
case 4:
nLastLineAdjust = style::ParagraphAdjust_BLOCK;
//no break;
case 3:
nAdjust = style::ParagraphAdjust_BLOCK;
+ aStringValue = "both";
break;
case 0:
default:
@@ -4077,6 +4084,7 @@ void DomainMapper::handleParaJustification(const sal_Int32 nIntValue, const ::bo
}
pContext->Insert( PROP_PARA_ADJUST, uno::makeAny( nAdjust ) );
pContext->Insert( PROP_PARA_LAST_LINE_ADJUST, uno::makeAny( nLastLineAdjust ) );
+ m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "jc", aStringValue);
}
bool DomainMapper::getColorFromIndex(const sal_Int32 nIndex, sal_Int32 &nColor)
diff --git a/writerfilter/source/dmapper/TDefTableHandler.cxx b/writerfilter/source/dmapper/TDefTableHandler.cxx
index f242f2817454..737ddefb5251 100644
--- a/writerfilter/source/dmapper/TDefTableHandler.cxx
+++ b/writerfilter/source/dmapper/TDefTableHandler.cxx
@@ -50,7 +50,7 @@ TDefTableHandler::~TDefTableHandler()
{
}
-OUString lcl_getBorderTypeString(sal_Int32 nType)
+OUString TDefTableHandler::getBorderTypeString(sal_Int32 nType)
{
switch (nType)
{
@@ -250,7 +250,7 @@ OUString lcl_getBorderTypeString(sal_Int32 nType)
return OUString();
}
-OUString lcl_getThemeColorTypeString(sal_Int32 nType)
+OUString TDefTableHandler::getThemeColorTypeString(sal_Int32 nType)
{
switch (nType)
{
@@ -332,7 +332,7 @@ void TDefTableHandler::lcl_attribute(Id rName, Value & rVal)
break;
case NS_rtf::LN_BRCTYPE: // 0x2872
m_nLineType = nIntValue;
- appendGrabBag("val", lcl_getBorderTypeString(nIntValue));
+ appendGrabBag("val", TDefTableHandler::getBorderTypeString(nIntValue));
break;
case NS_ooxml::LN_CT_Border_color:
case NS_rtf::LN_ICO: // 0x2873
@@ -350,7 +350,7 @@ void TDefTableHandler::lcl_attribute(Id rName, Value & rVal)
// ignored
break;
case NS_ooxml::LN_CT_Border_themeColor:
- appendGrabBag("themeColor", lcl_getThemeColorTypeString(nIntValue));
+ appendGrabBag("themeColor", TDefTableHandler::getThemeColorTypeString(nIntValue));
break;
case NS_ooxml::LN_CT_Border_themeTint:
case NS_ooxml::LN_CT_Border_themeShade:
@@ -373,7 +373,6 @@ void TDefTableHandler::localResolve(Id rName, writerfilter::Reference<Properties
aSavedGrabBag = m_aInteropGrabBag;
m_aInteropGrabBag.clear();
}
- m_aInteropGrabBag.clear();
pProperties->resolve( *this );
table::BorderLine2 aBorderLine;
ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor,
diff --git a/writerfilter/source/dmapper/TDefTableHandler.hxx b/writerfilter/source/dmapper/TDefTableHandler.hxx
index 993baf7f5799..11be96634bc7 100644
--- a/writerfilter/source/dmapper/TDefTableHandler.hxx
+++ b/writerfilter/source/dmapper/TDefTableHandler.hxx
@@ -82,6 +82,8 @@ public:
sal_Int32 getTableWidth() const;
void enableInteropGrabBag(OUString aName);
beans::PropertyValue getInteropGrabBag(OUString aName = OUString());
+ static OUString getBorderTypeString(sal_Int32 nType);
+ static OUString getThemeColorTypeString(sal_Int32 nType);
};
typedef boost::shared_ptr< TDefTableHandler > TDefTableHandlerPtr;
}}
diff --git a/writerfilter/source/dmapper/TablePropertiesHandler.cxx b/writerfilter/source/dmapper/TablePropertiesHandler.cxx
index fe64c4779386..824cd0bda829 100644
--- a/writerfilter/source/dmapper/TablePropertiesHandler.cxx
+++ b/writerfilter/source/dmapper/TablePropertiesHandler.cxx
@@ -169,7 +169,11 @@ namespace dmapper {
if( pProperties.get())
{
BorderHandlerPtr pBorderHandler( new BorderHandler(m_bOOXML) );
+ if (m_pCurrentInteropGrabBag)
+ pBorderHandler->enableInteropGrabBag("tblBorders");
pProperties->resolve(*pBorderHandler);
+ if (m_pCurrentInteropGrabBag)
+ m_pCurrentInteropGrabBag->push_back(pBorderHandler->getInteropGrabBag());
TablePropertyMapPtr pTablePropMap( new TablePropertyMap );
pTablePropMap->InsertProps(pBorderHandler->getProperties());