summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/qa/extras/ooxmlexport/data/calendar2.docxbin0 -> 9178 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport.cxx14
-rw-r--r--sw/source/filter/ww8/docxtablestyleexport.cxx39
-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
9 files changed, 134 insertions, 18 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/calendar2.docx b/sw/qa/extras/ooxmlexport/data/calendar2.docx
new file mode 100644
index 000000000000..e89222f895bc
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/calendar2.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index f63dd4af040a..86e50ad4f308 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -1323,6 +1323,20 @@ DECLARE_OOXML_TEST(testCalendar1, "calendar1.docx")
assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar1']/w:tblStylePr[@w:type='band2Horz']/w:tcPr/w:tcBorders/w:top", "themeColor", "text1");
}
+DECLARE_OOXML_TEST(testCalendar2, "calendar2.docx")
+{
+ // This paragraph property was missing in table style.
+ xmlDocPtr pXmlStyles = parseExport("word/styles.xml");
+ assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:pPr/w:jc", "val", "center");
+
+ // These run properties were missing
+ assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:rPr/w:lang", "val", "en-US");
+ assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:rPr/w:lang", "bidi", "ar-SA");
+
+ // Table borders were also missing
+ assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:tblPr/w:tblBorders/w:insideV", "themeTint", "99");
+}
+
DECLARE_OOXML_TEST(testSmartart, "smartart.docx")
{
uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
diff --git a/sw/source/filter/ww8/docxtablestyleexport.cxx b/sw/source/filter/ww8/docxtablestyleexport.cxx
index 940301f796dc..cc92461373a9 100644
--- a/sw/source/filter/ww8/docxtablestyleexport.cxx
+++ b/sw/source/filter/ww8/docxtablestyleexport.cxx
@@ -97,6 +97,7 @@ static DocxStringTokenMap const aTcBorderTokens[] = {
{"color", XML_color},
{"space", XML_space},
{"themeColor", XML_themeColor},
+ {"themeTint", XML_themeTint},
{0, 0}
};
@@ -129,17 +130,17 @@ DocxStringTokenMap const aTcBordersTokens[] = {
{0, 0}
};
-/// Export of w:tcBorders in a table style.
-void lcl_TableStyleTcBorders(sax_fastparser::FSHelperPtr pSerializer, uno::Sequence<beans::PropertyValue>& rTcBorders)
+/// Export of w:tcBorders (and w:tblBorders) in a table style.
+void lcl_TableStyleTcBorders(sax_fastparser::FSHelperPtr pSerializer, uno::Sequence<beans::PropertyValue>& rTcBorders, sal_Int32 nToken = XML_tcBorders)
{
if (!rTcBorders.hasElements())
return;
- pSerializer->startElementNS(XML_w, XML_tcBorders, FSEND);
+ pSerializer->startElementNS(XML_w, nToken, FSEND);
for (sal_Int32 i = 0; i < rTcBorders.getLength(); ++i)
- if (sal_Int32 nToken = DocxStringGetToken(aTcBordersTokens, rTcBorders[i].Name))
- lcl_TableStyleTcBorder(pSerializer, nToken, rTcBorders[i].Value.get< uno::Sequence<beans::PropertyValue> >());
- pSerializer->endElementNS(XML_w, XML_tcBorders);
+ if (sal_Int32 nSubToken = DocxStringGetToken(aTcBordersTokens, rTcBorders[i].Name))
+ lcl_TableStyleTcBorder(pSerializer, nSubToken, rTcBorders[i].Value.get< uno::Sequence<beans::PropertyValue> >());
+ pSerializer->endElementNS(XML_w, nToken);
}
/// Export of w:shd in a table style.
@@ -189,6 +190,10 @@ void lcl_TableStyleRLang(sax_fastparser::FSHelperPtr pSerializer, uno::Sequence<
{
if (rLang[i].Name == "eastAsia")
pAttributeList->add(FSNS(XML_w, XML_eastAsia), OUStringToOString(rLang[i].Value.get<OUString>(), RTL_TEXTENCODING_UTF8).getStr());
+ else if (rLang[i].Name == "val")
+ pAttributeList->add(FSNS(XML_w, XML_val), OUStringToOString(rLang[i].Value.get<OUString>(), RTL_TEXTENCODING_UTF8).getStr());
+ else if (rLang[i].Name == "bidi")
+ pAttributeList->add(FSNS(XML_w, XML_bidi), OUStringToOString(rLang[i].Value.get<OUString>(), RTL_TEXTENCODING_UTF8).getStr());
}
sax_fastparser::XFastAttributeListRef xAttributeList(pAttributeList);
pSerializer->singleElementNS(XML_w, XML_lang, xAttributeList);
@@ -280,7 +285,7 @@ void lcl_TableStyleRPr(sax_fastparser::FSHelperPtr pSerializer, uno::Sequence<be
pSerializer->startElementNS(XML_w, XML_rPr, FSEND);
uno::Sequence<beans::PropertyValue> aRFonts, aLang, aColor;
- OUString aB, aI, aSz;
+ OUString aB, aI, aSz, aSzCs;
for (sal_Int32 i = 0; i < rRPr.getLength(); ++i)
{
if (rRPr[i].Name == "rFonts")
@@ -295,6 +300,8 @@ void lcl_TableStyleRPr(sax_fastparser::FSHelperPtr pSerializer, uno::Sequence<be
aColor = rRPr[i].Value.get< uno::Sequence<beans::PropertyValue> >();
else if (rRPr[i].Name == "sz")
aSz = rRPr[i].Value.get<OUString>();
+ else if (rRPr[i].Name == "szCs")
+ aSzCs = rRPr[i].Value.get<OUString>();
}
lcl_TableStyleRRFonts(pSerializer, aRFonts);
lcl_TableStyleRLang(pSerializer, aLang);
@@ -305,6 +312,10 @@ void lcl_TableStyleRPr(sax_fastparser::FSHelperPtr pSerializer, uno::Sequence<be
pSerializer->singleElementNS(XML_w, XML_sz,
FSNS(XML_w, XML_val), OUStringToOString(aSz, RTL_TEXTENCODING_UTF8).getStr(),
FSEND);
+ if (!aSzCs.isEmpty())
+ pSerializer->singleElementNS(XML_w, XML_szCs,
+ FSNS(XML_w, XML_val), OUStringToOString(aSzCs, RTL_TEXTENCODING_UTF8).getStr(),
+ FSEND);
pSerializer->endElementNS(XML_w, XML_rPr);
}
@@ -319,16 +330,23 @@ void lcl_TableStylePPr(sax_fastparser::FSHelperPtr pSerializer, uno::Sequence<be
uno::Sequence<beans::PropertyValue> aSpacing;
bool bWordWrap = false;
+ OUString aJc;
for (sal_Int32 i = 0; i < rPPr.getLength(); ++i)
{
if (rPPr[i].Name == "spacing")
aSpacing = rPPr[i].Value.get< uno::Sequence<beans::PropertyValue> >();
- if (rPPr[i].Name == "wordWrap")
+ else if (rPPr[i].Name == "wordWrap")
bWordWrap = true;
+ else if (rPPr[i].Name == "jc")
+ aJc = rPPr[i].Value.get<OUString>();
}
if (bWordWrap)
pSerializer->singleElementNS(XML_w, XML_wordWrap, FSEND);
lcl_TableStylePSpacing(pSerializer, aSpacing);
+ if (!aJc.isEmpty())
+ pSerializer->singleElementNS(XML_w, XML_jc,
+ FSNS(XML_w, XML_val), OUStringToOString(aJc, RTL_TEXTENCODING_UTF8).getStr(),
+ FSEND);
pSerializer->endElementNS(XML_w, XML_pPr);
}
@@ -341,7 +359,7 @@ void lcl_TableStyleTblPr(sax_fastparser::FSHelperPtr pSerializer, uno::Sequence<
pSerializer->startElementNS(XML_w, XML_tblPr, FSEND);
- uno::Sequence<beans::PropertyValue> aTblInd, aTblCellMar;
+ uno::Sequence<beans::PropertyValue> aTblInd, aTblBorders, aTblCellMar;
boost::optional<sal_Int32> oTblStyleRowBandSize, oTblStyleColBandSize;
for (sal_Int32 i = 0; i < rTblPr.getLength(); ++i)
{
@@ -351,6 +369,8 @@ void lcl_TableStyleTblPr(sax_fastparser::FSHelperPtr pSerializer, uno::Sequence<
oTblStyleColBandSize = rTblPr[i].Value.get<sal_Int32>();
else if (rTblPr[i].Name == "tblInd")
aTblInd = rTblPr[i].Value.get< uno::Sequence<beans::PropertyValue> >();
+ else if (rTblPr[i].Name == "tblBorders")
+ aTblBorders = rTblPr[i].Value.get< uno::Sequence<beans::PropertyValue> >();
else if (rTblPr[i].Name == "tblCellMar")
aTblCellMar = rTblPr[i].Value.get< uno::Sequence<beans::PropertyValue> >();
}
@@ -363,6 +383,7 @@ void lcl_TableStyleTblPr(sax_fastparser::FSHelperPtr pSerializer, uno::Sequence<
FSNS(XML_w, XML_val), OString::number(oTblStyleColBandSize.get()),
FSEND);
lcl_TableStyleTblInd(pSerializer, aTblInd);
+ lcl_TableStyleTcBorders(pSerializer, aTblBorders, XML_tblBorders);
lcl_TableStyleTblCellMar(pSerializer, aTblCellMar);
pSerializer->endElementNS(XML_w, XML_tblPr);
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());