summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx28
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx14
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx18
3 files changed, 34 insertions, 26 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index ccbe8d8d197b..2c2d33febd8e 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -1078,9 +1078,20 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
}
break;
case NS_ooxml::LN_CT_FtnEdn_type:
- // This is the "separator" footnote, ignore its linebreak.
+ // This is the "separator" footnote, ignore its linebreaks/text.
if (static_cast<sal_uInt32>(nIntValue) == NS_ooxml::LN_Value_doc_ST_FtnEdn_separator)
- m_pImpl->SeenFootOrEndnoteSeparator();
+ m_pImpl->SetSkipFootnoteState( SkipFootnoteSeparator::ON );
+ else
+ m_pImpl->SetSkipFootnoteState( SkipFootnoteSeparator::OFF );
+ break;
+ case NS_ooxml::LN_CT_FtnEdn_id:
+ {
+ SkipFootnoteSeparator eSkip = m_pImpl->GetSkipFootnoteState();
+ if ( eSkip == SkipFootnoteSeparator::ON )
+ m_pImpl->SetSkipFootnoteState( SkipFootnoteSeparator::SKIPPING );
+ else if ( eSkip == SkipFootnoteSeparator::SKIPPING )
+ m_pImpl->SetSkipFootnoteState( SkipFootnoteSeparator::OFF );
+ }
break;
case NS_ooxml::LN_CT_DataBinding_prefixMappings:
m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_DataBinding_prefixMappings", sStringValue);
@@ -3383,18 +3394,19 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
if (!m_pImpl->hasTableManager())
return;
+ SkipFootnoteSeparator eSkip = m_pImpl->GetSkipFootnoteState();
+ if ( eSkip == SkipFootnoteSeparator::ON || eSkip == SkipFootnoteSeparator::SKIPPING )
+ {
+ m_pImpl->SetSkipFootnoteState( SkipFootnoteSeparator::SKIPPING );
+ return;
+ }
+
try
{
m_pImpl->getTableManager().utext(data_, len);
if (bNewLine)
{
- if (m_pImpl->m_bIgnoreNextPara)
- {
- m_pImpl->m_bIgnoreNextPara = false;
- return;
- }
-
const bool bSingleParagraph = m_pImpl->GetIsFirstParagraphInSection() && m_pImpl->GetIsLastParagraphInSection();
const bool bSingleParagraphAfterRedline = m_pImpl->GetIsFirstParagraphInSection(true) && m_pImpl->GetIsLastParagraphInSection();
PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index d63e60714fa5..694bd2ec52a3 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -275,7 +275,7 @@ DomainMapper_Impl::DomainMapper_Impl(
m_bInFootOrEndnote(false),
m_bHasFootnoteStyle(false),
m_bCheckFootnoteStyle(false),
- m_bSeenFootOrEndnoteSeparator(false),
+ m_eSkipFootnoteState(SkipFootnoteSeparator::OFF),
m_bLineNumberingSet( false ),
m_bIsInFootnoteProperties( false ),
m_bIsParaMarkerChange( false ),
@@ -307,7 +307,6 @@ DomainMapper_Impl::DomainMapper_Impl(
m_nLastTableCellParagraphDepth(0),
m_bHasFtn(false),
m_bHasFtnSep(false),
- m_bIgnoreNextPara(false),
m_bCheckFirstFootnoteTab(false),
m_bIgnoreNextTab(false),
m_bIsSplitPara(false),
@@ -2512,21 +2511,12 @@ void DomainMapper_Impl::PopFootOrEndnote()
return;
}
m_aRedlines.pop();
- m_bSeenFootOrEndnoteSeparator = false;
+ m_eSkipFootnoteState = SkipFootnoteSeparator::OFF;
m_bInFootOrEndnote = false;
m_pFootnoteContext = nullptr;
m_bFirstParagraphInCell = m_bSaveFirstParagraphInCell;
}
-void DomainMapper_Impl::SeenFootOrEndnoteSeparator()
-{
- if (!m_bSeenFootOrEndnoteSeparator)
- {
- m_bSeenFootOrEndnoteSeparator = true;
- m_bIgnoreNextPara = true;
- }
-}
-
void DomainMapper_Impl::PopAnnotation()
{
RemoveLastParagraph();
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 97f7cddb7f16..f3f9f77ce1cf 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -114,6 +114,13 @@ enum BreakType
COLUMN_BREAK
};
+enum SkipFootnoteSeparator
+{
+ OFF,
+ ON,
+ SKIPPING
+};
+
/**
* Storage for state that is relevant outside a header/footer, but not inside it.
*
@@ -505,8 +512,8 @@ private:
PropertyMapPtr m_pFootnoteContext;
bool m_bHasFootnoteStyle;
bool m_bCheckFootnoteStyle;
- /// Did we get a <w:separator/> for this footnote already?
- bool m_bSeenFootOrEndnoteSeparator;
+ /// Skip paragraphs from the <w:separator/> footnote
+ SkipFootnoteSeparator m_eSkipFootnoteState;
bool m_bLineNumberingSet;
bool m_bIsInFootnoteProperties;
@@ -780,8 +787,9 @@ public:
void SetCheckFootnoteStyle(bool bVal) { m_bCheckFootnoteStyle = bVal; }
const PropertyMapPtr& GetFootnoteContext() const { return m_pFootnoteContext; }
- /// Got a <w:separator/>.
- void SeenFootOrEndnoteSeparator();
+
+ SkipFootnoteSeparator GetSkipFootnoteState() const { return m_eSkipFootnoteState; }
+ void SetSkipFootnoteState(SkipFootnoteSeparator eId) { m_eSkipFootnoteState = eId; }
void PushAnnotation();
void PopAnnotation();
@@ -991,8 +999,6 @@ public:
/// If the current section has a footnote separator.
bool m_bHasFtnSep;
- /// If the next newline should be ignored, used by the special footnote separator paragraph.
- bool m_bIgnoreNextPara;
/// If the next tab should be ignored, used for footnotes.
bool m_bCheckFirstFootnoteTab;
bool m_bIgnoreNextTab;