sw/source/filter/ww8/docxattributeoutput.cxx | 3 + writerfilter/source/dmapper/DomainMapper.cxx | 59 ++++++++++++++++++++++ writerfilter/source/dmapper/DomainMapper_Impl.hxx | 2 writerfilter/source/dmapper/PropertyIds.cxx | 2 writerfilter/source/dmapper/PropertyIds.hxx | 2 writerfilter/source/dmapper/PropertyMap.cxx | 53 ++++++++++++++++++- writerfilter/source/dmapper/PropertyMap.hxx | 1 7 files changed, 117 insertions(+), 5 deletions(-)
New commits: commit 942f1ed93c4e26e883b7d1d3ee6b729ef72cec67 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Wed Aug 6 13:20:19 2014 +0200 DOCX import: handle <w:cnfStyle> cell property Change-Id: I849daf0ddee370775fda73e04739e69acbc64246 diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 051b6c1..6ab6bde 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -3290,6 +3290,9 @@ void DocxAttributeOutput::TableBackgrounds( ww8::WW8TableNodeInfoInner::Pointer_ for( aGrabBagElement = aGrabBag.begin(); aGrabBagElement != aGrabBag.end(); ++aGrabBagElement ) { + if (!aGrabBagElement->second.has<OUString>()) + continue; + OString sValue = OUStringToOString( aGrabBagElement->second.get<OUString>(), RTL_TEXTENCODING_UTF8 ); if( aGrabBagElement->first == "themeFill") AddToAttrList( aAttrList, FSNS( XML_w, XML_themeFill ), sValue.getStr() ); diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index c89395f..7864dd9 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -2504,6 +2504,18 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext ) } } break; + case NS_ooxml::LN_CT_TcPrBase_cnfStyle: + { + m_pImpl->enableInteropGrabBag("cnfStyle"); + resourcemodel::resolveSprmProps(*this, rSprm); + + TablePropertyMapPtr pPropMap(new TablePropertyMap()); + pPropMap->Insert(PROP_CELL_CNF_STYLE, uno::makeAny(uno::makeAny(m_pImpl->m_aInteropGrabBag.getAsConstList())), true, CELL_GRAB_BAG); + m_pImpl->getTableManager().cellProps(pPropMap); + + m_pImpl->disableInteropGrabBag(); + } + break; case NS_ooxml::LN_CT_PPrBase_cnfStyle: { m_pImpl->enableInteropGrabBag("cnfStyle"); diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx index 6d236c1..c12e97a 100644 --- a/writerfilter/source/dmapper/PropertyIds.cxx +++ b/writerfilter/source/dmapper/PropertyIds.cxx @@ -397,6 +397,7 @@ OUString PropertyNameSupplier::GetName( PropertyIds eId ) const case PROP_PARA_SDT_END_BEFORE: sName = "ParaSdtEndBefore"; break; case META_PROP_TABLE_LOOK: sName = "TableStyleLook"; break; case PROP_PARA_CNF_STYLE: sName = "ParaCnfStyle"; break; + case PROP_CELL_CNF_STYLE: sName = "CellCnfStyle"; break; } ::std::pair<PropertyNameMap_t::iterator,bool> aInsertIt = m_pImpl->aNameMap.insert( PropertyNameMap_t::value_type( eId, sName )); diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx index 5814c34..0ff6ee3 100644 --- a/writerfilter/source/dmapper/PropertyIds.hxx +++ b/writerfilter/source/dmapper/PropertyIds.hxx @@ -369,6 +369,7 @@ enum PropertyIds ,PROP_PARA_SDT_END_BEFORE ,META_PROP_TABLE_LOOK ,PROP_PARA_CNF_STYLE + ,PROP_CELL_CNF_STYLE }; struct PropertyNameSupplier_Impl; class PropertyNameSupplier diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx index ab1d48d..62c5ba6 100644 --- a/writerfilter/source/dmapper/PropertyMap.cxx +++ b/writerfilter/source/dmapper/PropertyMap.cxx @@ -66,30 +66,50 @@ uno::Sequence< beans::PropertyValue > PropertyMap::GetPropertyValues(bool bCharG { size_t nCharGrabBag = 0; size_t nParaGrabBag = 0; + size_t nCellGrabBag = 0; + size_t nCellGrabBagSaved = 0; // How many entries do we save from the returned sequence. for (MapIterator i = m_vMap.begin(); i != m_vMap.end(); ++i) { if ( i->second.getGrabBagType() == CHAR_GRAB_BAG ) nCharGrabBag++; else if ( i->second.getGrabBagType() == PARA_GRAB_BAG ) nParaGrabBag++; + else if ( i->second.getGrabBagType() == CELL_GRAB_BAG ) + { + nCellGrabBag++; + nCellGrabBagSaved++; + } + else if ( i->first == PROP_CELL_INTEROP_GRAB_BAG) + { + uno::Sequence<beans::PropertyValue> aSeq; + i->second.getValue() >>= aSeq; + nCellGrabBag += aSeq.getLength(); + nCellGrabBagSaved++; + } } // In case there are properties to be grab-bagged and we can have a char grab-bag, allocate one slot for it. size_t nCharGrabBagSize = 0; if (bCharGrabBag) nCharGrabBagSize = nCharGrabBag ? 1 : 0; + size_t nParaGrabBagSize = nParaGrabBag ? 1 : 0; + size_t nCellGrabBagSize = nCellGrabBag ? 1 : 0; // If there are any grab bag properties, we need one slot for them. m_aValues.realloc( m_vMap.size() - nCharGrabBag + nCharGrabBagSize - - nParaGrabBag + (nParaGrabBag ? 1 : 0)); + - nParaGrabBag + nParaGrabBagSize + - nCellGrabBagSaved + nCellGrabBagSize); ::com::sun::star::beans::PropertyValue* pValues = m_aValues.getArray(); uno::Sequence<beans::PropertyValue> aCharGrabBagValues(nCharGrabBag); uno::Sequence<beans::PropertyValue> aParaGrabBagValues(nParaGrabBag); + uno::Sequence<beans::PropertyValue> aCellGrabBagValues(nCellGrabBag); beans::PropertyValue* pCharGrabBagValues = aCharGrabBagValues.getArray(); beans::PropertyValue* pParaGrabBagValues = aParaGrabBagValues.getArray(); + beans::PropertyValue* pCellGrabBagValues = aCellGrabBagValues.getArray(); //style names have to be the first elements within the property sequence //otherwise they will overwrite 'hard' attributes sal_Int32 nValue = 0; + sal_Int32 nCellGrabBagValue = 0; sal_Int32 nParaGrabBagValue = 0; sal_Int32 nCharGrabBagValue = 0; PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier(); @@ -135,11 +155,30 @@ uno::Sequence< beans::PropertyValue > PropertyMap::GetPropertyValues(bool bCharG pParaGrabBagValues[nParaGrabBagValue].Value = aMapIter->second.getValue(); ++nParaGrabBagValue; } + else if ( aMapIter->second.getGrabBagType() == CELL_GRAB_BAG ) + { + pCellGrabBagValues[nCellGrabBagValue].Name = rPropNameSupplier.GetName( aMapIter->first ); + pCellGrabBagValues[nCellGrabBagValue].Value = aMapIter->second.getValue(); + ++nCellGrabBagValue; + } else { - pValues[nValue].Name = rPropNameSupplier.GetName( aMapIter->first ); - pValues[nValue].Value = aMapIter->second.getValue(); - ++nValue; + if (aMapIter->first == PROP_CELL_INTEROP_GRAB_BAG) + { + uno::Sequence<beans::PropertyValue> aSeq; + aMapIter->second.getValue() >>= aSeq; + for (sal_Int32 i = 0; i < aSeq.getLength(); ++i) + { + pCellGrabBagValues[nCellGrabBagValue] = aSeq[i]; + ++nCellGrabBagValue; + } + } + else + { + pValues[nValue].Name = rPropNameSupplier.GetName( aMapIter->first ); + pValues[nValue].Value = aMapIter->second.getValue(); + ++nValue; + } } } } @@ -155,6 +194,12 @@ uno::Sequence< beans::PropertyValue > PropertyMap::GetPropertyValues(bool bCharG pValues[nValue].Value = uno::makeAny(aParaGrabBagValues); ++nValue; } + if (nCellGrabBag) + { + pValues[nValue].Name = "CellInteropGrabBag"; + pValues[nValue].Value = uno::makeAny(aCellGrabBagValues); + ++nValue; + } } return m_aValues; } diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx index c9f78aa..53f306e 100644 --- a/writerfilter/source/dmapper/PropertyMap.hxx +++ b/writerfilter/source/dmapper/PropertyMap.hxx @@ -68,6 +68,7 @@ enum BorderPosition enum GrabBagType { NO_GRAB_BAG, + CELL_GRAB_BAG, PARA_GRAB_BAG, CHAR_GRAB_BAG }; commit 5e2081fb7c49edd46f2981fbc230982e6a8b87b5 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Wed Aug 6 12:18:59 2014 +0200 DOCX import: handle <w:cnfStyle> paragraph property Change-Id: I47d9dab17d4891d05cf7497e53026bc801f2726b diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 90dbf14..c89395f 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -971,6 +971,45 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) case NS_ooxml::LN_CT_PTab_relativeTo: case NS_ooxml::LN_CT_PTab_alignment: break; + case NS_ooxml::LN_CT_Cnf_lastRowLastColumn: + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "lastRowLastColumn", OUString::number(nIntValue)); + break; + case NS_ooxml::LN_CT_Cnf_lastRowFirstColumn: + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "lastRowFirstColumn", OUString::number(nIntValue)); + break; + case NS_ooxml::LN_CT_Cnf_firstRowLastColumn: + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "firstRowLastColumn", OUString::number(nIntValue)); + break; + case NS_ooxml::LN_CT_Cnf_oddHBand: + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "oddHBand", OUString::number(nIntValue)); + break; + case NS_ooxml::LN_CT_Cnf_firstRowFirstColumn: + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "firstRowFirstColumn", OUString::number(nIntValue)); + break; + case NS_ooxml::LN_CT_Cnf_evenVBand: + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "evenVBand", OUString::number(nIntValue)); + break; + case NS_ooxml::LN_CT_Cnf_evenHBand: + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "evenHBand", OUString::number(nIntValue)); + break; + case NS_ooxml::LN_CT_Cnf_lastColumn: + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "lastColumn", OUString::number(nIntValue)); + break; + case NS_ooxml::LN_CT_Cnf_firstColumn: + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "firstColumn", OUString::number(nIntValue)); + break; + case NS_ooxml::LN_CT_Cnf_oddVBand: + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "oddVBand", OUString::number(nIntValue)); + break; + case NS_ooxml::LN_CT_Cnf_lastRow: + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "lastRow", OUString::number(nIntValue)); + break; + case NS_ooxml::LN_CT_Cnf_firstRow: + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "firstRow", OUString::number(nIntValue)); + break; + case NS_ooxml::LN_CT_Cnf_val: + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "val", sStringValue); + break; default: { #if OSL_DEBUG_LEVEL > 0 @@ -2465,6 +2504,14 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext ) } } break; + case NS_ooxml::LN_CT_PPrBase_cnfStyle: + { + m_pImpl->enableInteropGrabBag("cnfStyle"); + resourcemodel::resolveSprmProps(*this, rSprm); + rContext->Insert(PROP_PARA_CNF_STYLE, uno::makeAny(m_pImpl->m_aInteropGrabBag.getAsConstList()), true, PARA_GRAB_BAG); + m_pImpl->disableInteropGrabBag(); + } + break; default: { #ifdef DEBUG_DOMAINMAPPER diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index e0d8259..98d6b0c 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -809,7 +809,7 @@ public: OUString m_aInteropGrabBagName; /// A toplevel dmapper grabbag, like 'pPr'. - std::vector<css::beans::PropertyValue> m_aInteropGrabBag; + comphelper::SequenceAsVector<css::beans::PropertyValue> m_aInteropGrabBag; /// A sub-grabbag of m_aInteropGrabBag, like 'spacing'. std::vector<css::beans::PropertyValue> m_aSubInteropGrabBag; diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx index af8b1b3..6d236c1 100644 --- a/writerfilter/source/dmapper/PropertyIds.cxx +++ b/writerfilter/source/dmapper/PropertyIds.cxx @@ -396,6 +396,7 @@ OUString PropertyNameSupplier::GetName( PropertyIds eId ) const case PROP_SDT_END_BEFORE: sName = "SdtEndBefore"; break; case PROP_PARA_SDT_END_BEFORE: sName = "ParaSdtEndBefore"; break; case META_PROP_TABLE_LOOK: sName = "TableStyleLook"; break; + case PROP_PARA_CNF_STYLE: sName = "ParaCnfStyle"; break; } ::std::pair<PropertyNameMap_t::iterator,bool> aInsertIt = m_pImpl->aNameMap.insert( PropertyNameMap_t::value_type( eId, sName )); diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx index c3cea17..5814c34 100644 --- a/writerfilter/source/dmapper/PropertyIds.hxx +++ b/writerfilter/source/dmapper/PropertyIds.hxx @@ -368,6 +368,7 @@ enum PropertyIds ,PROP_SDT_END_BEFORE ,PROP_PARA_SDT_END_BEFORE ,META_PROP_TABLE_LOOK + ,PROP_PARA_CNF_STYLE }; struct PropertyNameSupplier_Impl; class PropertyNameSupplier _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits