diff options
author | Justin Luth <justin.luth@collabora.com> | 2019-10-03 15:42:47 +0300 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2019-10-09 13:53:17 +0200 |
commit | 5e97d1a57717f8dbf69b987d2bda8616972eec52 (patch) | |
tree | 90870bf4d77394acb4259056aec4b12a2ce09ab4 | |
parent | 2fdfd6fcf6da5f11846c8c99943e24d85baf92c5 (diff) |
NFC writerfilter: preparation for adding CharProps to GetAnyProperty
...for tdf#99602 specifically, but I've intended to do this for a
long time.
Currently GetAnyProperty doesn't look in Character Styles for the
requested property. But it should. GetPropertyFromCharStySheet
can re-use a lot of the code for GetPropertyFromStyleSheet,
so split that up and explicitly identify the existing function
as ParaStyle.
Change-Id: I9843153a6c09a10d63a575cb1f35a56c21c9cb9c
Reviewed-on: https://gerrit.libreoffice.org/80180
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Miklos Vajna <vmiklos@collabora.com>
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 8 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 40 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.hxx | 7 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyIds.cxx | 5 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyIds.hxx | 60 |
5 files changed, 69 insertions, 51 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 3d7216e62854..3eb61085fcb2 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -419,7 +419,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) // Don't overwrite NS_ooxml::LN_CT_Spacing_afterAutospacing. m_pImpl->GetTopContext()->Insert(PROP_PARA_BOTTOM_MARGIN, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ), false); - uno::Any aContextualSpacingFromStyle = m_pImpl->GetPropertyFromStyleSheet(PROP_PARA_CONTEXT_MARGIN); + uno::Any aContextualSpacingFromStyle = m_pImpl->GetPropertyFromParaStyleSheet(PROP_PARA_CONTEXT_MARGIN); if (aContextualSpacingFromStyle.hasValue()) // Setting "after" spacing means Writer doesn't inherit // contextual spacing anymore from style, but Word does. @@ -1460,7 +1460,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) const sal_Int16 nWritingMode = nIntValue ? text::WritingMode2::RL_TB : text::WritingMode2::LR_TB; sal_Int16 nParentBidi = -1; - m_pImpl->GetPropertyFromStyleSheet(PROP_WRITING_MODE) >>= nParentBidi; + m_pImpl->GetPropertyFromParaStyleSheet(PROP_WRITING_MODE) >>= nParentBidi; // Paragraph justification reverses its meaning in an RTL context. // 1. Only make adjustments if the BiDi changes. if ( nParentBidi != nWritingMode && !IsRTFImport() ) @@ -1566,7 +1566,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) { //get value from style sheet and invert it sal_Int16 nStyleValue = 0; - uno::Any aStyleVal = m_pImpl->GetPropertyFromStyleSheet(ePropertyId); + uno::Any aStyleVal = m_pImpl->GetPropertyFromParaStyleSheet(ePropertyId); if( !aStyleVal.hasValue() ) { nIntValue = NS_ooxml::LN_EG_RPrBase_smallCaps == nSprmId ? @@ -1841,7 +1841,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) // not applied to the paragraph directly => don't InitTabStopFromStyle if ( !IsRTFImport() ) { - uno::Any aValue = m_pImpl->GetPropertyFromStyleSheet(PROP_PARA_TAB_STOPS); + uno::Any aValue = m_pImpl->GetPropertyFromParaStyleSheet(PROP_PARA_TAB_STOPS); uno::Sequence< style::TabStop > aStyleTabStops; if(aValue >>= aStyleTabStops) { diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index ec8728122337..509ca2384109 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -738,16 +738,8 @@ OUString DomainMapper_Impl::GetDefaultParaStyleName() return m_sDefaultParaStyleName; } -/*------------------------------------------------------------------------- - returns the value from the current paragraph style - if available - -----------------------------------------------------------------------*/ -uno::Any DomainMapper_Impl::GetPropertyFromStyleSheet(PropertyIds eId) +uno::Any DomainMapper_Impl::GetPropertyFromStyleSheet(PropertyIds eId, StyleSheetEntryPtr pEntry, const bool bPara) { - StyleSheetEntryPtr pEntry; - if( m_bInStyleSheetImport ) - pEntry = GetStyleSheetTable()->GetCurrentEntry(); - else - pEntry = GetStyleSheetTable()->FindStyleSheetByConvertedStyleName(GetCurrentParaStyleName()); while(pEntry.get( ) ) { if(pEntry->pProperties) @@ -772,6 +764,7 @@ uno::Any DomainMapper_Impl::GetPropertyFromStyleSheet(PropertyIds eId) pEntry = pNewEntry; } // not found in style, try the document's DocDefault properties + if ( bPara ) { const PropertyMapPtr& pDefaultParaProps = GetStyleSheetTable()->GetDefaultParaProps(); if ( pDefaultParaProps ) @@ -780,6 +773,9 @@ uno::Any DomainMapper_Impl::GetPropertyFromStyleSheet(PropertyIds eId) if ( aProperty ) return aProperty->second; } + } + if ( isCharacterProperty(eId) ) + { const PropertyMapPtr& pDefaultCharProps = GetStyleSheetTable()->GetDefaultCharProps(); if ( pDefaultCharProps ) { @@ -791,6 +787,16 @@ uno::Any DomainMapper_Impl::GetPropertyFromStyleSheet(PropertyIds eId) return uno::Any(); } +uno::Any DomainMapper_Impl::GetPropertyFromParaStyleSheet(PropertyIds eId) +{ + StyleSheetEntryPtr pEntry; + if ( m_bInStyleSheetImport ) + pEntry = GetStyleSheetTable()->GetCurrentEntry(); + else + pEntry = GetStyleSheetTable()->FindStyleSheetByConvertedStyleName(GetCurrentParaStyleName()); + return GetPropertyFromStyleSheet(eId, pEntry, /*bPara=*/true); +} + uno::Any DomainMapper_Impl::GetAnyProperty(PropertyIds eId, const PropertyMapPtr& rContext) { if ( rContext ) @@ -799,7 +805,7 @@ uno::Any DomainMapper_Impl::GetAnyProperty(PropertyIds eId, const PropertyMapPtr if ( aProperty ) return aProperty->second; } - return GetPropertyFromStyleSheet(eId); + return GetPropertyFromParaStyleSheet(eId); } ListsManager::Pointer const & DomainMapper_Impl::GetListTable() @@ -1607,19 +1613,19 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con if ( !bTopSet ) { - uno::Any aMargin = GetPropertyFromStyleSheet(PROP_PARA_TOP_MARGIN); + uno::Any aMargin = GetPropertyFromParaStyleSheet(PROP_PARA_TOP_MARGIN); if ( aMargin != uno::Any() ) xParaProps->setPropertyValue("ParaTopMargin", aMargin); } if ( !bBottomSet ) { - uno::Any aMargin = GetPropertyFromStyleSheet(PROP_PARA_BOTTOM_MARGIN); + uno::Any aMargin = GetPropertyFromParaStyleSheet(PROP_PARA_BOTTOM_MARGIN); if ( aMargin != uno::Any() ) xParaProps->setPropertyValue("ParaBottomMargin", aMargin); } if ( !bContextSet ) { - uno::Any aMargin = GetPropertyFromStyleSheet(PROP_PARA_CONTEXT_MARGIN); + uno::Any aMargin = GetPropertyFromParaStyleSheet(PROP_PARA_CONTEXT_MARGIN); if ( aMargin != uno::Any() ) xParaProps->setPropertyValue("ParaContextMargin", aMargin); } @@ -1636,19 +1642,19 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con { if ( !bLeftSet ) { - uno::Any aMargin = GetPropertyFromStyleSheet(PROP_PARA_LEFT_MARGIN); + uno::Any aMargin = GetPropertyFromParaStyleSheet(PROP_PARA_LEFT_MARGIN); if ( aMargin != uno::Any() ) xParaProps->setPropertyValue("ParaLeftMargin", aMargin); } if ( !bRightSet ) { - uno::Any aMargin = GetPropertyFromStyleSheet(PROP_PARA_RIGHT_MARGIN); + uno::Any aMargin = GetPropertyFromParaStyleSheet(PROP_PARA_RIGHT_MARGIN); if ( aMargin != uno::Any() ) xParaProps->setPropertyValue("ParaRightMargin", aMargin); } if ( !bFirstSet ) { - uno::Any aMargin = GetPropertyFromStyleSheet(PROP_PARA_FIRST_LINE_INDENT); + uno::Any aMargin = GetPropertyFromParaStyleSheet(PROP_PARA_FIRST_LINE_INDENT); if ( aMargin != uno::Any() ) xParaProps->setPropertyValue("ParaFirstLineIndent", aMargin); } @@ -4503,7 +4509,7 @@ void DomainMapper_Impl::CloseFieldCommand() PropertyMapPtr pCharContext = GetTopContext(); // dHeight is the font size of the current style. double dHeight = 0; - if ((GetPropertyFromStyleSheet(PROP_CHAR_HEIGHT) >>= dHeight) && dHeight != 0) + if ((GetPropertyFromParaStyleSheet(PROP_CHAR_HEIGHT) >>= dHeight) && dHeight != 0) // Character escapement should be given in negative percents for subscripts. pCharContext->Insert(PROP_CHAR_ESCAPEMENT, uno::makeAny( sal_Int16(- 100 * nDown / dHeight) ) ); appendTextPortion(aContent, pCharContext); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 1a1be8dc32bd..40ac9db86fdd 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -712,8 +712,11 @@ public: OUString GetCurrentParaStyleName(); OUString GetDefaultParaStyleName(); - css::uno::Any GetPropertyFromStyleSheet(PropertyIds eId); - // get property first from the given context, or secondly from its stylesheet + // specified style - including inherited properties. Indicate whether paragraph defaults should be checked. + css::uno::Any GetPropertyFromStyleSheet(PropertyIds eId, StyleSheetEntryPtr pEntry, const bool bPara); + // current paragraph style - including inherited properties + css::uno::Any GetPropertyFromParaStyleSheet(PropertyIds eId); + // get property first from the given context, or secondly via inheritance from styles/docDefaults css::uno::Any GetAnyProperty(PropertyIds eId, const PropertyMapPtr& rContext); void SetStyleSheetImport( bool bSet ) { m_bInStyleSheetImport = bSet;} bool IsStyleSheetImport()const { return m_bInStyleSheetImport;} diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx index 28b9092e96e2..cf683112f30f 100644 --- a/writerfilter/source/dmapper/PropertyIds.cxx +++ b/writerfilter/source/dmapper/PropertyIds.cxx @@ -359,6 +359,11 @@ OUString getPropertyName( PropertyIds eId ) return sName; } +bool isCharacterProperty( const PropertyIds eId ) +{ + return eId > PROP_CHARACTER_STYLES && eId < PROP_CHARACTER_END; +} + } //namespace dmapper } //namespace writerfilter diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx index eed9dd62bb30..8c8e9ca1a09c 100644 --- a/writerfilter/source/dmapper/PropertyIds.hxx +++ b/writerfilter/source/dmapper/PropertyIds.hxx @@ -21,6 +21,7 @@ namespace writerfilter { namespace dmapper{ +// Ensure that Character Properties are placed between PROP_CHARACTER_STYLES and PROP_CHARACTER_END enum PropertyIds { PROP_ID_START = 1 @@ -90,11 +91,27 @@ enum PropertyIds ,PROP_CHAR_RELIEF ,PROP_CHAR_ROTATION ,PROP_CHAR_ROTATION_IS_FIT_TO_LINE - ,PROP_CHAR_SHADOW_FORMAT ,PROP_CHAR_SCALE_WIDTH + ,PROP_CHAR_SHADOW_FORMAT + ,PROP_CHAR_SHADING_MARKER + ,PROP_CHAR_SHADING_VALUE ,PROP_CHAR_SHADOWED ,PROP_CHAR_STRIKEOUT ,PROP_CHAR_STYLE_NAME + ,PROP_CHAR_TEXTOUTLINE_TEXT_EFFECT + ,PROP_CHAR_TEXTFILL_TEXT_EFFECT + ,PROP_CHAR_THEME_NAME_ASCII + ,PROP_CHAR_THEME_NAME_CS + ,PROP_CHAR_THEME_NAME_H_ANSI + ,PROP_CHAR_THEME_NAME_EAST_ASIA + ,PROP_CHAR_THEME_FONT_NAME_ASCII + ,PROP_CHAR_THEME_FONT_NAME_CS + ,PROP_CHAR_THEME_FONT_NAME_EAST_ASIA + ,PROP_CHAR_THEME_COLOR + ,PROP_CHAR_THEME_ORIGINAL_COLOR + ,PROP_CHAR_THEME_COLOR_SHADE + ,PROP_CHAR_THEME_FILL + ,PROP_CHAR_THEME_COLOR_TINT ,PROP_CHAR_UNDERLINE ,PROP_CHAR_UNDERLINE_COLOR ,PROP_CHAR_UNDERLINE_HAS_COLOR @@ -102,7 +119,18 @@ enum PropertyIds ,PROP_CHAR_WEIGHT_ASIAN ,PROP_CHAR_WEIGHT_COMPLEX ,PROP_CHAR_WORD_MODE - ,PROP_CONTENT + ,PROP_CHAR_GLOW_TEXT_EFFECT + ,PROP_CHAR_SHADOW_TEXT_EFFECT + ,PROP_CHAR_REFLECTION_TEXT_EFFECT + ,PROP_CHAR_SCENE3D_TEXT_EFFECT + ,PROP_CHAR_PROPS3D_TEXT_EFFECT + ,PROP_CHAR_LIGATURES_TEXT_EFFECT + ,PROP_CHAR_NUMFORM_TEXT_EFFECT + ,PROP_CHAR_NUMSPACING_TEXT_EFFECT + ,PROP_CHAR_STYLISTICSETS_TEXT_EFFECT + ,PROP_CHAR_CNTXTALTS_TEXT_EFFECT + ,PROP_CHARACTER_END + ,PROP_CONTENT = PROP_CHARACTER_END ,PROP_CONTOUR_OUTSIDE ,PROP_CONTOUR_POLY_POLYGON ,PROP_COUNT_EMPTY_LINES @@ -287,8 +315,6 @@ enum PropertyIds ,PROP_IS_WIDTH_RELATIVE ,PROP_GRAPHIC_BITMAP ,PROP_GRAPHIC_SIZE - ,PROP_CHAR_SHADING_VALUE - ,PROP_CHAR_SHADING_MARKER ,PROP_MIRROR_INDENTS ,PROP_SURROUND_TEXT_WRAP_SMALL ,PROP_PARA_SHADOW_FORMAT @@ -296,36 +322,12 @@ enum PropertyIds ,PROP_PARA_TOP_MARGIN_BEFORE_AUTO_SPACING ,PROP_PARA_BOTTOM_MARGIN_AFTER_AUTO_SPACING ,PROP_TBL_HEADER - ,PROP_CHAR_THEME_NAME_ASCII - ,PROP_CHAR_THEME_NAME_CS - ,PROP_CHAR_THEME_NAME_H_ANSI - ,PROP_CHAR_THEME_NAME_EAST_ASIA - ,PROP_CHAR_THEME_FONT_NAME_ASCII - ,PROP_CHAR_THEME_FONT_NAME_CS - ,PROP_CHAR_THEME_FONT_NAME_EAST_ASIA - ,PROP_CHAR_THEME_COLOR - ,PROP_CHAR_THEME_ORIGINAL_COLOR - ,PROP_CHAR_THEME_COLOR_SHADE - ,PROP_CHAR_THEME_FILL ,PROP_HORIZONTAL_MERGE ,PROP_HIDE_TAB_LEADER_AND_PAGE_NUMBERS ,PROP_TAB_IN_TOC ,PROP_TOC_BOOKMARK ,PROP_TOC_NEW_LINE ,PROP_TOC_PARAGRAPH_OUTLINE_LEVEL - ,PROP_CHAR_THEME_COLOR_TINT - ,PROP_CHAR_GLOW_TEXT_EFFECT - ,PROP_CHAR_SHADOW_TEXT_EFFECT - ,PROP_CHAR_REFLECTION_TEXT_EFFECT - ,PROP_CHAR_TEXTOUTLINE_TEXT_EFFECT - ,PROP_CHAR_TEXTFILL_TEXT_EFFECT - ,PROP_CHAR_SCENE3D_TEXT_EFFECT - ,PROP_CHAR_PROPS3D_TEXT_EFFECT - ,PROP_CHAR_LIGATURES_TEXT_EFFECT - ,PROP_CHAR_NUMFORM_TEXT_EFFECT - ,PROP_CHAR_NUMSPACING_TEXT_EFFECT - ,PROP_CHAR_STYLISTICSETS_TEXT_EFFECT - ,PROP_CHAR_CNTXTALTS_TEXT_EFFECT ,PROP_SDTPR ,PROP_CELL_INTEROP_GRAB_BAG ,PROP_TABLE_INTEROP_GRAB_BAG @@ -357,6 +359,8 @@ enum PropertyIds //Returns the UNO string equivalent to eId. OUString getPropertyName(PropertyIds eId); +bool isCharacterProperty(const PropertyIds eId); + } //namespace dmapper } // namespace writerfilter #endif |