sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 19 +++++++++++++ sw/source/filter/ww8/docxattributeoutput.cxx | 33 +++++++++++++++++++++++ sw/source/filter/ww8/docxtablestyleexport.cxx | 36 ++++++++++++++++++++++++++ sw/source/filter/ww8/docxtablestyleexport.hxx | 3 ++ 4 files changed, 90 insertions(+), 1 deletion(-)
New commits: commit 994cca6b4d090abf7b262ab8b16a46528bef6c21 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Wed Aug 6 16:56:54 2014 +0200 DOCX export: handle <w:cnfStyle> row property Change-Id: Ice1cf2ce078b130130c44952ec2be0f8642f21a8 diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index d595af3..b242714 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -1980,6 +1980,25 @@ DECLARE_OOXMLEXPORT_TEST(testTableThemePreservation, "table-theme-preservation.d // check that one cell attribute present in the original document has been preserved assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[1]/w:tcPr/w:tcBorders/*", 1); + // Check that w:cnfStyle row, cell and paragraph property is preserved. + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:trPr/w:cnfStyle", "val", "100000000000"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:trPr/w:cnfStyle", "firstRow", "1"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:trPr/w:cnfStyle", "lastRow", "0"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:trPr/w:cnfStyle", "firstColumn", "0"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:trPr/w:cnfStyle", "lastColumn", "0"); + + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc/w:tcPr/w:cnfStyle", "val", "001000000000"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc/w:tcPr/w:cnfStyle", "oddVBand", "0"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc/w:tcPr/w:cnfStyle", "evenVBand", "0"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc/w:tcPr/w:cnfStyle", "oddHBand", "0"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc/w:tcPr/w:cnfStyle", "evenHBand", "0"); + + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc[2]/w:p/w:pPr/w:cnfStyle", "val", "100000000000"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc[2]/w:p/w:pPr/w:cnfStyle", "firstRowFirstColumn", "0"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc[2]/w:p/w:pPr/w:cnfStyle", "firstRowLastColumn", "0"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc[2]/w:p/w:pPr/w:cnfStyle", "lastRowFirstColumn", "0"); + assertXPath(pXmlDocument, "//w:tbl/w:tr[1]/w:tc[2]/w:p/w:pPr/w:cnfStyle", "lastRowLastColumn", "0"); + } DECLARE_OOXMLEXPORT_TEST(testcantSplit, "2_table_doc.docx") diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 3db0385..92b7b1e 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -2921,6 +2921,20 @@ void DocxAttributeOutput::StartTableRow( ww8::WW8TableNodeInfoInner::Pointer_t p TableHeight( pTableTextNodeInfoInner ); TableCanSplit( pTableTextNodeInfoInner ); + const SwTableBox *pTableBox = pTableTextNodeInfoInner->getTableBox(); + const SwTableLine* pTableLine = pTableBox->GetUpper(); + if (const SfxGrabBagItem* pItem = sw::util::HasItem<SfxGrabBagItem>(pTableLine->GetFrmFmt()->GetAttrSet(), RES_FRMATR_GRABBAG)) + { + const std::map<OUString, uno::Any>& rGrabBag = pItem->GetGrabBag(); + std::map<OUString, uno::Any>::const_iterator it = rGrabBag.find("RowCnfStyle"); + if (it != rGrabBag.cend()) + { + uno::Sequence<beans::PropertyValue> aAttributes = it->second.get< uno::Sequence<beans::PropertyValue> >(); + m_pTableStyleExport->CnfStyle(aAttributes); + } + } + + m_pSerializer->endElementNS( XML_w, XML_trPr ); } commit dbaff6d0b62426ef76acb0a08140eab1371381be Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Wed Aug 6 16:43:50 2014 +0200 DOCX export: handle <w:cnfStyle> cell property Change-Id: I7ff2411aed76aa74c8c0d111962773e7af12a7df diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index c199240..3db0385 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -2783,6 +2783,18 @@ void DocxAttributeOutput::TableCellProperties( ww8::WW8TableNodeInfoInner::Point FSEND ); } + if (const SfxGrabBagItem* pItem = sw::util::HasItem<SfxGrabBagItem>(pTblBox->GetFrmFmt()->GetAttrSet(), RES_FRMATR_GRABBAG)) + { + const std::map<OUString, uno::Any>& rGrabBag = pItem->GetGrabBag(); + std::map<OUString, uno::Any>::const_iterator it = rGrabBag.find("CellCnfStyle"); + if (it != rGrabBag.cend()) + { + uno::Sequence<beans::PropertyValue> aAttributes = it->second.get< uno::Sequence<beans::PropertyValue> >(); + m_pTableStyleExport->CnfStyle(aAttributes); + } + } + + const SvxBoxItem& rBox = pTblBox->GetFrmFmt( )->GetBox( ); const SvxBoxItem& rDefaultBox = (*tableFirstCells.rbegin())->getTableBox( )->GetFrmFmt( )->GetBox( ); { @@ -7819,39 +7831,8 @@ void DocxAttributeOutput::ParaGrabBag(const SfxGrabBagItem& rItem) } else if (i->first == "ParaCnfStyle") { - FastAttributeList* pAttributeList = m_pSerializer->createAttrList(); - uno::Sequence<beans::PropertyValue> aAttributeList = i->second.get< uno::Sequence<beans::PropertyValue> >(); - - for (sal_Int32 j = 0; j < aAttributeList.getLength(); ++j) - { - if (aAttributeList[j].Name == "val") - pAttributeList->add(FSNS(XML_w, XML_val), rtl::OUStringToOString(aAttributeList[j].Value.get<OUString>(), RTL_TEXTENCODING_UTF8)); - else - { - static DocxStringTokenMap const aTokens[] = - { - {"firstRow", XML_firstRow}, - {"lastRow", XML_lastRow}, - {"firstColumn", XML_firstColumn}, - {"lastColumn", XML_lastColumn}, - {"oddVBand", XML_oddVBand}, - {"evenVBand", XML_evenVBand}, - {"oddHBand", XML_oddHBand}, - {"evenHBand", XML_evenHBand}, - {"firstRowFirstColumn", XML_firstRowFirstColumn}, - {"firstRowLastColumn", XML_firstRowLastColumn}, - {"lastRowFirstColumn", XML_lastRowFirstColumn}, - {"lastRowLastColumn", XML_lastRowLastColumn}, - {0, 0} - }; - - if (sal_Int32 nToken = DocxStringGetToken(aTokens, aAttributeList[j].Name)) - pAttributeList->add(FSNS(XML_w, nToken), rtl::OUStringToOString(aAttributeList[j].Value.get<OUString>(), RTL_TEXTENCODING_UTF8)); - } - } - - XFastAttributeListRef xAttributeList(pAttributeList); - m_pSerializer->singleElementNS(XML_w, XML_cnfStyle, xAttributeList); + uno::Sequence<beans::PropertyValue> aAttributes = i->second.get< uno::Sequence<beans::PropertyValue> >(); + m_pTableStyleExport->CnfStyle(aAttributes); } else SAL_WARN("sw.ww8", "DocxAttributeOutput::ParaGrabBag: unhandled grab bag property " << i->first ); diff --git a/sw/source/filter/ww8/docxtablestyleexport.cxx b/sw/source/filter/ww8/docxtablestyleexport.cxx index e431da9..6c038cd 100644 --- a/sw/source/filter/ww8/docxtablestyleexport.cxx +++ b/sw/source/filter/ww8/docxtablestyleexport.cxx @@ -72,6 +72,42 @@ void DocxTableStyleExport::CharFormat(css::uno::Sequence<css::beans::PropertyVal m_pImpl->tableStyleRPr(rRPr); } +void DocxTableStyleExport::CnfStyle(uno::Sequence<beans::PropertyValue>& rAttributeList) +{ + sax_fastparser::FastAttributeList* pAttributeList = m_pImpl->m_pSerializer->createAttrList(); + + for (sal_Int32 j = 0; j < rAttributeList.getLength(); ++j) + { + if (rAttributeList[j].Name == "val") + pAttributeList->add(FSNS(XML_w, XML_val), rtl::OUStringToOString(rAttributeList[j].Value.get<OUString>(), RTL_TEXTENCODING_UTF8)); + else + { + static DocxStringTokenMap const aTokens[] = + { + {"firstRow", XML_firstRow}, + {"lastRow", XML_lastRow}, + {"firstColumn", XML_firstColumn}, + {"lastColumn", XML_lastColumn}, + {"oddVBand", XML_oddVBand}, + {"evenVBand", XML_evenVBand}, + {"oddHBand", XML_oddHBand}, + {"evenHBand", XML_evenHBand}, + {"firstRowFirstColumn", XML_firstRowFirstColumn}, + {"firstRowLastColumn", XML_firstRowLastColumn}, + {"lastRowFirstColumn", XML_lastRowFirstColumn}, + {"lastRowLastColumn", XML_lastRowLastColumn}, + {0, 0} + }; + + if (sal_Int32 nToken = DocxStringGetToken(aTokens, rAttributeList[j].Name)) + pAttributeList->add(FSNS(XML_w, nToken), rtl::OUStringToOString(rAttributeList[j].Value.get<OUString>(), RTL_TEXTENCODING_UTF8)); + } + } + + sax_fastparser::XFastAttributeListRef xAttributeList(pAttributeList); + m_pImpl->m_pSerializer->singleElementNS(XML_w, XML_cnfStyle, xAttributeList); +} + void DocxTableStyleExport::TableStyles(sal_uInt16 nCountStylesToWrite) { // Do we have table styles from InteropGrabBag available? diff --git a/sw/source/filter/ww8/docxtablestyleexport.hxx b/sw/source/filter/ww8/docxtablestyleexport.hxx index 78d5209..4b6e037 100644 --- a/sw/source/filter/ww8/docxtablestyleexport.hxx +++ b/sw/source/filter/ww8/docxtablestyleexport.hxx @@ -29,6 +29,9 @@ public: /// Writes <w:rPr>...</w:rPr> based on grab-bagged character properties. void CharFormat(css::uno::Sequence<css::beans::PropertyValue>& rRPr); + /// Writes <w:cnfStyle .../> based on grab-bagged para, cell or row properties. + void CnfStyle(css::uno::Sequence<css::beans::PropertyValue>& rAttributeList); + void SetSerializer(sax_fastparser::FSHelperPtr pSerializer); DocxTableStyleExport(SwDoc* pDoc, sax_fastparser::FSHelperPtr pSerializer); ~DocxTableStyleExport(); commit ccd1eb4a023219cfea46c259972af168b3431de4 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Wed Aug 6 16:09:55 2014 +0200 DOCX export: handle <w:cnfStyle> paragraph property Change-Id: I9654da23886d52968c3c95300cc7ad4f772cbb8d diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 6ab6bde..c199240 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -7817,8 +7817,44 @@ void DocxAttributeOutput::ParaGrabBag(const SfxGrabBagItem& rItem) SAL_INFO("sw.ww8", "DocxAttributeOutput::ParaGrabBag: unhandled SdtPr grab bag property " << aPropertyValue.Name); } } + else if (i->first == "ParaCnfStyle") + { + FastAttributeList* pAttributeList = m_pSerializer->createAttrList(); + uno::Sequence<beans::PropertyValue> aAttributeList = i->second.get< uno::Sequence<beans::PropertyValue> >(); + + for (sal_Int32 j = 0; j < aAttributeList.getLength(); ++j) + { + if (aAttributeList[j].Name == "val") + pAttributeList->add(FSNS(XML_w, XML_val), rtl::OUStringToOString(aAttributeList[j].Value.get<OUString>(), RTL_TEXTENCODING_UTF8)); + else + { + static DocxStringTokenMap const aTokens[] = + { + {"firstRow", XML_firstRow}, + {"lastRow", XML_lastRow}, + {"firstColumn", XML_firstColumn}, + {"lastColumn", XML_lastColumn}, + {"oddVBand", XML_oddVBand}, + {"evenVBand", XML_evenVBand}, + {"oddHBand", XML_oddHBand}, + {"evenHBand", XML_evenHBand}, + {"firstRowFirstColumn", XML_firstRowFirstColumn}, + {"firstRowLastColumn", XML_firstRowLastColumn}, + {"lastRowFirstColumn", XML_lastRowFirstColumn}, + {"lastRowLastColumn", XML_lastRowLastColumn}, + {0, 0} + }; + + if (sal_Int32 nToken = DocxStringGetToken(aTokens, aAttributeList[j].Name)) + pAttributeList->add(FSNS(XML_w, nToken), rtl::OUStringToOString(aAttributeList[j].Value.get<OUString>(), RTL_TEXTENCODING_UTF8)); + } + } + + XFastAttributeListRef xAttributeList(pAttributeList); + m_pSerializer->singleElementNS(XML_w, XML_cnfStyle, xAttributeList); + } else - SAL_INFO("sw.ww8", "DocxAttributeOutput::ParaGrabBag: unhandled grab bag property " << i->first ); + SAL_WARN("sw.ww8", "DocxAttributeOutput::ParaGrabBag: unhandled grab bag property " << i->first ); } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits