writerfilter/source/dmapper/DomainMapper.cxx      |    8 +-
 writerfilter/source/dmapper/DomainMapper_Impl.cxx |   40 ++++++++------
 writerfilter/source/dmapper/DomainMapper_Impl.hxx |    7 +-
 writerfilter/source/dmapper/PropertyIds.cxx       |    5 +
 writerfilter/source/dmapper/PropertyIds.hxx       |   60 +++++++++++-----------
 5 files changed, 69 insertions(+), 51 deletions(-)

New commits:
commit 5e97d1a57717f8dbf69b987d2bda8616972eec52
Author:     Justin Luth <justin.l...@collabora.com>
AuthorDate: Thu Oct 3 15:42:47 2019 +0300
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Wed Oct 9 13:53:17 2019 +0200

    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 <vmik...@collabora.com>
    Tested-by: Miklos Vajna <vmik...@collabora.com>

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
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to