diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2013-10-29 16:40:51 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2013-10-29 17:34:20 +0100 |
commit | 97e9eda0cec15e4d8e8d86010b98f303cbf4fd02 (patch) | |
tree | 1fc6a465e805ba91fe958fa123a736c3f6ac0b15 /writerfilter | |
parent | Resolves: rhbz#1021915 force menubar menus to be up/down only (diff) | |
download | core-97e9eda0cec15e4d8e8d86010b98f303cbf4fd02.tar.gz core-97e9eda0cec15e4d8e8d86010b98f303cbf4fd02.zip |
DOCX import: read tblStylePr into InteropGrabBag
Change-Id: I0217b76c8e2447c9053611f7d187251bf76c58e4
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 13 | ||||
-rw-r--r-- | writerfilter/source/dmapper/StyleSheetTable.cxx | 2 | ||||
-rw-r--r-- | writerfilter/source/dmapper/TblStylePrHandler.cxx | 21 |
3 files changed, 36 insertions, 0 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 75fbe654e4e6..1139671f48de 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -58,6 +58,7 @@ #include <com/sun/star/text/XFootnote.hpp> #include <comphelper/types.hxx> #include <comphelper/storagehelper.hxx> +#include <filter/msfilter/util.hxx> #include <CellColorHandler.hxx> #include <SectionColumnHandler.hxx> @@ -914,6 +915,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) case NS_ooxml::LN_CT_Color_val: if (m_pImpl->GetTopContext()) m_pImpl->GetTopContext()->Insert(PROP_CHAR_COLOR, uno::makeAny( nIntValue ) ); + m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "val", OStringToOUString(msfilter::util::ConvertColor(nIntValue), RTL_TEXTENCODING_UTF8)); break; case NS_ooxml::LN_CT_Underline_color: if (m_pImpl->GetTopContext()) @@ -2152,6 +2154,8 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType uno::Reference<beans::XPropertySet> xCharStyle(m_pImpl->GetCurrentNumberingCharStyle()); if (xCharStyle.is()) xCharStyle->setPropertyValue(rPropNameSupplier.GetName(PROP_CHAR_WEIGHT), aBold); + if (nSprmId == NS_sprm::LN_CFBold) + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "b", OUString::number(nIntValue)); } break; case 61: /*sprmCFItalic*/ @@ -2162,6 +2166,8 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType rContext->Insert( ePropertyId, aPosture ); if( nSprmId != NS_sprm::LN_CFItalicBi ) // sprmCFItalicBi rContext->Insert(PROP_CHAR_POSTURE_ASIAN, aPosture ); + if (nSprmId == NS_sprm::LN_CFItalic) + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "i", OUString::number(nIntValue)); } break; case NS_sprm::LN_CFStrike: /*sprmCFStrike*/ @@ -2239,6 +2245,8 @@ 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)); } break; case NS_sprm::LN_CHpsInc: @@ -3005,6 +3013,11 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "rFonts", m_pImpl->m_aSubInteropGrabBag); else if (nSprmId == NS_ooxml::LN_EG_RPrBase_lang) m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "lang", m_pImpl->m_aSubInteropGrabBag); + else if (nSprmId == NS_ooxml::LN_EG_RPrBase_color) + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "color", m_pImpl->m_aSubInteropGrabBag); + break; + case NS_ooxml::LN_CT_PPrBase_wordWrap: + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "wordWrap", ""); break; case NS_ooxml::LN_EG_SectPrContents_footnotePr: case NS_ooxml::LN_EG_SectPrContents_endnotePr: diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx index 45adc73f5f98..4506b6943759 100644 --- a/writerfilter/source/dmapper/StyleSheetTable.cxx +++ b/writerfilter/source/dmapper/StyleSheetTable.cxx @@ -663,6 +663,8 @@ void StyleSheetTable::lcl_sprm(Sprm & rSprm) { pTableEntry->AppendInteropGrabBag(pTblStylePrHandler->getInteropGrabBag("tblPr")); } + else if (nSprmId == NS_ooxml::LN_CT_Style_tblStylePr) + pTableEntry->AppendInteropGrabBag(pTblStylePrHandler->getInteropGrabBag("tblStylePr")); } break; } diff --git a/writerfilter/source/dmapper/TblStylePrHandler.cxx b/writerfilter/source/dmapper/TblStylePrHandler.cxx index 7884cbca0af9..faedeba19533 100644 --- a/writerfilter/source/dmapper/TblStylePrHandler.cxx +++ b/writerfilter/source/dmapper/TblStylePrHandler.cxx @@ -78,7 +78,23 @@ void TblStylePrHandler::lcl_sprm(Sprm & rSprm) case NS_ooxml::LN_CT_TblPrBase: case NS_ooxml::LN_CT_TrPrBase: case NS_ooxml::LN_CT_TcPrBase: + { + std::vector<beans::PropertyValue> aSavedGrabBag; + if (rSprm.getId() == NS_ooxml::LN_CT_PPrBase || rSprm.getId() == NS_ooxml::LN_EG_RPrBase) + { + aSavedGrabBag = m_aInteropGrabBag; + m_aInteropGrabBag.clear(); + } resolveSprmProps( rSprm ); + if (rSprm.getId() == NS_ooxml::LN_CT_PPrBase || rSprm.getId() == NS_ooxml::LN_EG_RPrBase) + { + if (rSprm.getId() == NS_ooxml::LN_CT_PPrBase) + aSavedGrabBag.push_back(getInteropGrabBag("pPr")); + else if (rSprm.getId() == NS_ooxml::LN_EG_RPrBase) + aSavedGrabBag.push_back(getInteropGrabBag("rPr")); + m_aInteropGrabBag = aSavedGrabBag; + } + } break; default: // Tables specific properties have to handled here @@ -90,7 +106,12 @@ void TblStylePrHandler::lcl_sprm(Sprm & rSprm) { // The DomainMapper can handle some of the properties m_rDMapper.PushStyleSheetProperties( m_pProperties, true ); + // Just pass a non-empty string, the array will have a single element anyway. + m_rDMapper.enableInteropGrabBag("TblStylePrHandler"); m_rDMapper.sprm( rSprm ); + uno::Sequence<beans::PropertyValue> aGrabBag = m_rDMapper.getInteropGrabBag().Value.get< uno::Sequence<beans::PropertyValue> >(); + if (aGrabBag.hasElements()) + m_aInteropGrabBag.push_back(aGrabBag[0]); m_rDMapper.PopStyleSheetProperties( true ); } } |