summaryrefslogtreecommitdiff
path: root/writerfilter/source/dmapper
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2020-03-16 17:25:31 +0100
committerMiklos Vajna <vmiklos@collabora.com>2020-05-19 11:30:09 +0200
commit0acdc84c5053dc32c0f65ec416f3f21502537496 (patch)
tree9fb263c2b859f25123a17d946cecf95ddff868e4 /writerfilter/source/dmapper
parent34c10f30268b515e7bf7fcecb4241c36a6512e15 (diff)
DOCX import: tokenize <w:numFmt w:val="custom" w:format="...">
Which means CT_NumFmt has to be a property resource, not a single value, and also ST_NumberFormat needs to recognize "custom" as a valid value. Adapt the RTF tokenizer to emit the new token format. This is needed (but not enough) to support markup like this: <w:numFmt w:val="custom" w:format="001, 002, 003, ..."/> (cherry picked from commit 496197fe4dff2cd94ceeb42fc04d0263ac8d8971) Conflicts: writerfilter/source/dmapper/NumberingManager.cxx writerfilter/source/rtftok/rtfdispatchvalue.cxx Change-Id: I767e4b92fc41f9425f446d6eaad1d875e2233964
Diffstat (limited to 'writerfilter/source/dmapper')
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx43
-rw-r--r--writerfilter/source/dmapper/NumberingManager.cxx21
2 files changed, 58 insertions, 6 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 72ec656a7574..a749169dc009 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -1180,6 +1180,37 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
m_pImpl->startOrEndPermissionRange(nIntValue);
break;
}
+ case NS_ooxml::LN_CT_NumFmt_val:
+ {
+ try
+ {
+ uno::Reference<beans::XPropertySet> xFtnEdnSettings;
+ if (m_pImpl->IsInFootnoteProperties())
+ {
+ uno::Reference<text::XFootnotesSupplier> xFootnotesSupplier(
+ m_pImpl->GetTextDocument(), uno::UNO_QUERY);
+ if (xFootnotesSupplier.is())
+ xFtnEdnSettings = xFootnotesSupplier->getFootnoteSettings();
+ }
+ else
+ {
+ uno::Reference<text::XEndnotesSupplier> xEndnotesSupplier(
+ m_pImpl->GetTextDocument(), uno::UNO_QUERY);
+ if (xEndnotesSupplier.is())
+ xFtnEdnSettings = xEndnotesSupplier->getEndnoteSettings();
+ }
+ if (xFtnEdnSettings.is())
+ {
+ sal_Int16 nNumType = ConversionHelper::ConvertNumberingType(nIntValue);
+ xFtnEdnSettings->setPropertyValue(getPropertyName(PROP_NUMBERING_TYPE),
+ uno::makeAny(nNumType));
+ }
+ }
+ catch (const uno::Exception&)
+ {
+ }
+ }
+ break;
default:
SAL_WARN("writerfilter", "DomainMapper::lcl_attribute: unhandled token: " << nName);
}
@@ -2290,11 +2321,19 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext )
//endnotes in word can be at section end or document end - writer supports only the latter
// -> so this property can be ignored
break;
- case NS_ooxml::LN_EG_FtnEdnNumProps_numStart:
- case NS_ooxml::LN_EG_FtnEdnNumProps_numRestart:
case NS_ooxml::LN_CT_FtnProps_numFmt:
case NS_ooxml::LN_CT_EdnProps_numFmt:
{
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if (pProperties.get())
+ {
+ pProperties->resolve(*this);
+ }
+ }
+ break;
+ case NS_ooxml::LN_EG_FtnEdnNumProps_numStart:
+ case NS_ooxml::LN_EG_FtnEdnNumProps_numRestart:
+ {
try
{
uno::Reference< beans::XPropertySet > xFtnEdnSettings;
diff --git a/writerfilter/source/dmapper/NumberingManager.cxx b/writerfilter/source/dmapper/NumberingManager.cxx
index 764fe2a387a7..e3feb55ee2ef 100644
--- a/writerfilter/source/dmapper/NumberingManager.cxx
+++ b/writerfilter/source/dmapper/NumberingManager.cxx
@@ -105,7 +105,7 @@ void ListLevel::SetValue( Id nId, sal_Int32 nValue )
case NS_ooxml::LN_CT_NumLvl_startOverride:
m_nStartOverride = nValue;
break;
- case NS_ooxml::LN_CT_Lvl_numFmt:
+ case NS_ooxml::LN_CT_NumFmt_val:
m_nNFC = nValue;
break;
case NS_ooxml::LN_CT_Lvl_isLgl:
@@ -687,6 +687,8 @@ void ListsManager::lcl_attribute( Id nName, Value& rVal )
break;
case NS_ooxml::LN_CT_Lvl_start:
case NS_ooxml::LN_CT_Lvl_numFmt:
+ case NS_ooxml::LN_CT_NumFmt_format:
+ case NS_ooxml::LN_CT_NumFmt_val:
case NS_ooxml::LN_CT_Lvl_isLgl:
case NS_ooxml::LN_CT_Lvl_legacy:
if ( pCurrentLvl.get( ) )
@@ -909,18 +911,29 @@ void ListsManager::lcl_sprm( Sprm& rSprm )
bIsStartVisited = true;
break;
case NS_ooxml::LN_CT_Lvl_numFmt:
- case NS_ooxml::LN_CT_Lvl_isLgl:
- case NS_ooxml::LN_CT_Lvl_legacy:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if (pProperties.get())
+ {
+ pProperties->resolve(*this);
+ }
if (ListLevel::Pointer pCurrentLevel = m_pCurrentDefinition->GetCurrentLevel())
{
- pCurrentLevel->SetValue( nSprmId, nIntValue );
if( !bIsStartVisited )
{
pCurrentLevel->SetValue( NS_ooxml::LN_CT_Lvl_start, 0 );
bIsStartVisited = true;
}
}
+ }
break;
+ case NS_ooxml::LN_CT_Lvl_isLgl:
+ case NS_ooxml::LN_CT_Lvl_legacy:
+ if (ListLevel::Pointer pCurrentLevel = m_pCurrentDefinition->GetCurrentLevel())
+ {
+ pCurrentLevel->SetValue(nSprmId, nIntValue);
+ }
+ break;
case NS_ooxml::LN_CT_Lvl_suff:
{
if (ListLevel::Pointer pCurrentLevel = m_pCurrentDefinition->GetCurrentLevel())