summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorJustin Luth <justin.luth@collabora.com>2019-10-03 15:42:47 +0300
committerMiklos Vajna <vmiklos@collabora.com>2019-10-09 13:53:17 +0200
commit5e97d1a57717f8dbf69b987d2bda8616972eec52 (patch)
tree90870bf4d77394acb4259056aec4b12a2ce09ab4 /writerfilter
parent2fdfd6fcf6da5f11846c8c99943e24d85baf92c5 (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>
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx8
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx40
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx7
-rw-r--r--writerfilter/source/dmapper/PropertyIds.cxx5
-rw-r--r--writerfilter/source/dmapper/PropertyIds.hxx60
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