Kaydet (Commit) 7ab5fcfb authored tarafından Miklos Vajna's avatar Miklos Vajna

DOCX import: handle exact end of w:sdt tags

Change-Id: I5b6158281782fc07ffe0eef73ab94345563498f9
üst f136890d
...@@ -902,6 +902,11 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) ...@@ -902,6 +902,11 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
break; break;
case NS_ooxml::LN_CT_SdtBlock_sdtEndContent: case NS_ooxml::LN_CT_SdtBlock_sdtEndContent:
m_pImpl->SetSdt(false); m_pImpl->SetSdt(false);
// It's not possible to insert the relevant property to the character context here:
// the previous, already sent character context may be still active, so the property would be lost.
m_pImpl->setSdtEndDeferred(true);
if (!m_pImpl->m_pSdtHelper->getDropDownItems().empty()) if (!m_pImpl->m_pSdtHelper->getDropDownItems().empty())
m_pImpl->m_pSdtHelper->createDropDownControl(); m_pImpl->m_pSdtHelper->createDropDownControl();
break; break;
...@@ -2653,6 +2658,11 @@ void DomainMapper::lcl_startCharacterGroup() ...@@ -2653,6 +2658,11 @@ void DomainMapper::lcl_startCharacterGroup()
if (m_pImpl->m_bFrameBtLr) if (m_pImpl->m_bFrameBtLr)
// No support for this in core, work around by char rotation, as we do so for table cells already. // No support for this in core, work around by char rotation, as we do so for table cells already.
m_pImpl->GetTopContext()->Insert(PROP_CHAR_ROTATION, uno::makeAny(sal_Int16(900))); m_pImpl->GetTopContext()->Insert(PROP_CHAR_ROTATION, uno::makeAny(sal_Int16(900)));
if (m_pImpl->isSdtEndDeferred())
{
m_pImpl->GetTopContext()->Insert(PROP_SDT_END_BEFORE, uno::makeAny(true), true, CHAR_GRAB_BAG);
m_pImpl->setSdtEndDeferred(false);
}
} }
void DomainMapper::lcl_endCharacterGroup() void DomainMapper::lcl_endCharacterGroup()
......
...@@ -160,6 +160,7 @@ DomainMapper_Impl::DomainMapper_Impl( ...@@ -160,6 +160,7 @@ DomainMapper_Impl::DomainMapper_Impl(
m_bIsFirstSection( true ), m_bIsFirstSection( true ),
m_bIsColumnBreakDeferred( false ), m_bIsColumnBreakDeferred( false ),
m_bIsPageBreakDeferred( false ), m_bIsPageBreakDeferred( false ),
m_bSdtEndDeferred(false),
m_bStartTOC(false), m_bStartTOC(false),
m_bStartTOCHeaderFooter(false), m_bStartTOCHeaderFooter(false),
m_bStartedTOC(false), m_bStartedTOC(false),
...@@ -706,6 +707,15 @@ void DomainMapper_Impl::clearDeferredBreaks() ...@@ -706,6 +707,15 @@ void DomainMapper_Impl::clearDeferredBreaks()
m_bIsPageBreakDeferred = false; m_bIsPageBreakDeferred = false;
} }
void DomainMapper_Impl::setSdtEndDeferred(bool bSdtEndDeferred)
{
m_bSdtEndDeferred = bSdtEndDeferred;
}
bool DomainMapper_Impl::isSdtEndDeferred()
{
return m_bSdtEndDeferred;
}
void lcl_MoveBorderPropertiesToFrame(comphelper::SequenceAsHashMap& rFrameProperties, void lcl_MoveBorderPropertiesToFrame(comphelper::SequenceAsHashMap& rFrameProperties,
uno::Reference<text::XTextRange> xStartTextRange, uno::Reference<text::XTextRange> xStartTextRange,
......
...@@ -319,6 +319,8 @@ private: ...@@ -319,6 +319,8 @@ private:
bool m_bIsFirstSection; bool m_bIsFirstSection;
bool m_bIsColumnBreakDeferred; bool m_bIsColumnBreakDeferred;
bool m_bIsPageBreakDeferred; bool m_bIsPageBreakDeferred;
/// If we want to set "sdt end" on the next character contet.
bool m_bSdtEndDeferred;
bool m_bStartTOC; bool m_bStartTOC;
bool m_bStartTOCHeaderFooter; bool m_bStartTOCHeaderFooter;
/// If we got any text that is the pre-rendered result of the TOC field. /// If we got any text that is the pre-rendered result of the TOC field.
...@@ -489,6 +491,10 @@ public: ...@@ -489,6 +491,10 @@ public:
bool isBreakDeferred( BreakType deferredBreakType ); bool isBreakDeferred( BreakType deferredBreakType );
void clearDeferredBreaks(); void clearDeferredBreaks();
void clearDeferredBreak(BreakType deferredBreakType); void clearDeferredBreak(BreakType deferredBreakType);
void setSdtEndDeferred(bool bSdtEndDeferred);
bool isSdtEndDeferred();
void finishParagraph( PropertyMapPtr pPropertyMap ); void finishParagraph( PropertyMapPtr pPropertyMap );
void appendTextPortion( const OUString& rString, PropertyMapPtr pPropertyMap ); void appendTextPortion( const OUString& rString, PropertyMapPtr pPropertyMap );
void appendTextContent( const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent >, void appendTextContent( const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent >,
......
...@@ -393,6 +393,7 @@ OUString PropertyNameSupplier::GetName( PropertyIds eId ) const ...@@ -393,6 +393,7 @@ OUString PropertyNameSupplier::GetName( PropertyIds eId ) const
case PROP_TABLE_INTEROP_GRAB_BAG : sName = "TableInteropGrabBag"; break; case PROP_TABLE_INTEROP_GRAB_BAG : sName = "TableInteropGrabBag"; break;
case PROP_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING : sName = "ApplyParagraphMarkFormatToNumbering"; break; case PROP_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING : sName = "ApplyParagraphMarkFormatToNumbering"; break;
case PROP_CELL_DIRECTION: sName = "CellDirection"; break; case PROP_CELL_DIRECTION: sName = "CellDirection"; break;
case PROP_SDT_END_BEFORE: sName = "SdtEndBefore"; break;
} }
::std::pair<PropertyNameMap_t::iterator,bool> aInsertIt = ::std::pair<PropertyNameMap_t::iterator,bool> aInsertIt =
m_pImpl->aNameMap.insert( PropertyNameMap_t::value_type( eId, sName )); m_pImpl->aNameMap.insert( PropertyNameMap_t::value_type( eId, sName ));
......
...@@ -365,6 +365,7 @@ enum PropertyIds ...@@ -365,6 +365,7 @@ enum PropertyIds
,PROP_INDEX_ENTRY_TYPE ,PROP_INDEX_ENTRY_TYPE
,PROP_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING ,PROP_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING
,PROP_CELL_DIRECTION ,PROP_CELL_DIRECTION
,PROP_SDT_END_BEFORE
}; };
struct PropertyNameSupplier_Impl; struct PropertyNameSupplier_Impl;
class PropertyNameSupplier class PropertyNameSupplier
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment