summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2013-10-31 15:23:12 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2013-10-31 15:50:00 +0100
commitfbe12f72bc59ca0b202d972ee098d16f66195c13 (patch)
treea6e626a980182840f269beacd2c366440e57592c
parentfc68745898647e1b9070459be43c5d1e0e933150 (diff)
DOCX filter: roundtrip more table cell border properties for table styles
Change-Id: Ia93bd2083b00f62770970a4efa783b6b19967acb
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport.cxx1
-rw-r--r--sw/source/filter/ww8/docxtablestyleexport.cxx16
-rw-r--r--writerfilter/source/dmapper/TDefTableHandler.cxx32
3 files changed, 45 insertions, 4 deletions
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index 32f592505f10..f63dd4af040a 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -1320,6 +1320,7 @@ DECLARE_OOXML_TEST(testCalendar1, "calendar1.docx")
assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar1']/w:tblStylePr[@w:type='firstRow']/w:tblPr", 1);
assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar1']/w:tblStylePr[@w:type='firstRow']/w:tcPr/w:vAlign", "val", "bottom");
assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar1']/w:tblStylePr[@w:type='lastRow']/w:tcPr/w:tcBorders/w:tr2bl", "val", "nil");
+ 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(testSmartart, "smartart.docx")
diff --git a/sw/source/filter/ww8/docxtablestyleexport.cxx b/sw/source/filter/ww8/docxtablestyleexport.cxx
index 9aaad80ad22e..940301f796dc 100644
--- a/sw/source/filter/ww8/docxtablestyleexport.cxx
+++ b/sw/source/filter/ww8/docxtablestyleexport.cxx
@@ -91,6 +91,15 @@ void lcl_TableStyleTblCellMar(sax_fastparser::FSHelperPtr pSerializer, uno::Sequ
pSerializer->endElementNS(XML_w, XML_tblCellMar);
}
+static DocxStringTokenMap const aTcBorderTokens[] = {
+ {"val", XML_val},
+ {"sz", XML_sz},
+ {"color", XML_color},
+ {"space", XML_space},
+ {"themeColor", XML_themeColor},
+ {0, 0}
+};
+
/// Export of a given table cell border type in a table style.
void lcl_TableStyleTcBorder(sax_fastparser::FSHelperPtr pSerializer, sal_Int32 nToken, const uno::Sequence<beans::PropertyValue>& rTcBorder)
{
@@ -99,10 +108,9 @@ void lcl_TableStyleTcBorder(sax_fastparser::FSHelperPtr pSerializer, sal_Int32 n
sax_fastparser::FastAttributeList* pAttributeList = pSerializer->createAttrList();
for (sal_Int32 i = 0; i < rTcBorder.getLength(); ++i)
- {
- if (rTcBorder[i].Name == "val")
- pAttributeList->add(FSNS(XML_w, XML_val), OUStringToOString(rTcBorder[i].Value.get<OUString>(), RTL_TEXTENCODING_UTF8).getStr());
- }
+ if (sal_Int32 nAttrToken = DocxStringGetToken(aTcBorderTokens, rTcBorder[i].Name))
+ pAttributeList->add(FSNS(XML_w, nAttrToken), OUStringToOString(rTcBorder[i].Value.get<OUString>(), RTL_TEXTENCODING_UTF8).getStr());
+
sax_fastparser::XFastAttributeListRef xAttributeList(pAttributeList);
pSerializer->singleElementNS(XML_w, nToken, xAttributeList);
}
diff --git a/writerfilter/source/dmapper/TDefTableHandler.cxx b/writerfilter/source/dmapper/TDefTableHandler.cxx
index 5e9c5b5d46ac..f242f2817454 100644
--- a/writerfilter/source/dmapper/TDefTableHandler.cxx
+++ b/writerfilter/source/dmapper/TDefTableHandler.cxx
@@ -21,6 +21,7 @@
#include <ConversionHelper.hxx>
#include <ooxml/resourceids.hxx>
#include <doctok/resourceids.hxx>
+#include <filter/msfilter/util.hxx>
#include <com/sun/star/table/BorderLine2.hpp>
#include <com/sun/star/text/TableColumnSeparator.hpp>
#include <com/sun/star/text/VertOrientation.hpp>
@@ -249,6 +250,32 @@ OUString lcl_getBorderTypeString(sal_Int32 nType)
return OUString();
}
+OUString lcl_getThemeColorTypeString(sal_Int32 nType)
+{
+ switch (nType)
+ {
+ case NS_ooxml::LN_Value_St_ThemeColor_dark1: return OUString("dark1");
+ case NS_ooxml::LN_Value_St_ThemeColor_light1: return OUString("light1");
+ case NS_ooxml::LN_Value_St_ThemeColor_dark2: return OUString("dark2");
+ case NS_ooxml::LN_Value_St_ThemeColor_light2: return OUString("light2");
+ case NS_ooxml::LN_Value_St_ThemeColor_accent1: return OUString("accent1");
+ case NS_ooxml::LN_Value_St_ThemeColor_accent2: return OUString("accent2");
+ case NS_ooxml::LN_Value_St_ThemeColor_accent3: return OUString("accent3");
+ case NS_ooxml::LN_Value_St_ThemeColor_accent4: return OUString("accent4");
+ case NS_ooxml::LN_Value_St_ThemeColor_accent5: return OUString("accent5");
+ case NS_ooxml::LN_Value_St_ThemeColor_accent6: return OUString("accent6");
+ case NS_ooxml::LN_Value_St_ThemeColor_hyperlink: return OUString("hyperlink");
+ case NS_ooxml::LN_Value_St_ThemeColor_followedHyperlink: return OUString("followedHyperlink");
+ case NS_ooxml::LN_Value_St_ThemeColor_none: return OUString("none");
+ case NS_ooxml::LN_Value_St_ThemeColor_background1: return OUString("background1");
+ case NS_ooxml::LN_Value_St_ThemeColor_text1: return OUString("text1");
+ case NS_ooxml::LN_Value_St_ThemeColor_background2: return OUString("background2");
+ case NS_ooxml::LN_Value_St_ThemeColor_text2: return OUString("text2");
+ default: break;
+ }
+ return OUString();
+}
+
void TDefTableHandler::lcl_attribute(Id rName, Value & rVal)
{
sal_Int32 nIntValue = rVal.getInt();
@@ -301,6 +328,7 @@ void TDefTableHandler::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;
@@ -308,9 +336,11 @@ void TDefTableHandler::lcl_attribute(Id rName, Value & rVal)
break;
case NS_ooxml::LN_CT_Border_color:
case NS_rtf::LN_ICO: // 0x2873
+ appendGrabBag("color", OStringToOUString(msfilter::util::ConvertColor(nIntValue), RTL_TEXTENCODING_UTF8));
m_nLineColor = nIntValue;
break;
case NS_rtf::LN_DPTSPACE: // 0x2874
+ appendGrabBag("space", OUString::number(nIntValue));
m_nLineDistance = nIntValue;
break;
case NS_rtf::LN_FSHADOW: // 0x2875
@@ -320,6 +350,8 @@ void TDefTableHandler::lcl_attribute(Id rName, Value & rVal)
// ignored
break;
case NS_ooxml::LN_CT_Border_themeColor:
+ appendGrabBag("themeColor", lcl_getThemeColorTypeString(nIntValue));
+ break;
case NS_ooxml::LN_CT_Border_themeTint:
case NS_ooxml::LN_CT_Border_themeShade:
// ignored