diff options
author | Justin Luth <justin.luth@collabora.com> | 2019-04-24 22:20:51 +0300 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2019-04-30 15:16:19 +0200 |
commit | f6f53f76e15f5eecc5b6ce56e471c53cebfea8ad (patch) | |
tree | eebcdbb7728fb765860cef94f85fde69f61c6315 /writerfilter | |
parent | cc899c6967238877f0094bcf00627145e484ffec (diff) |
tdf#123636 writerfilter: handle deferred breaks on frames
...similar to handling breaks before shapes in lcl_startShape.
Three different examples found to create/split a paragraph.
Which one to use? (addDummy, m_bIsSplitPara, and
lcl_startCharacterGroup). SplitPara is not good because the
paragraph properties probably should not be copied to the
dummy paragraph (like numbering for example). Slightly
modified the lcl_startChar example to ensure that the dummy
paragraph doesn't steal a part of the properties, but is
only default properties plus page-break.
This doesn't export very well, so roundtripping is very poor.
Research Note: There exists a compat flag showBreaksInFrames
(Display Page/Column Breaks Present in Frames)
"This element specifies whether applications should
honor the presence of page and/or column breaks which are
present within the contents of paragraphs which have been
defined as frames using the framePr element."
--Currently, LO does nothing with this flag. Probably too
exotic and irrelevant (word 2003 era?).
No existing unit tests found that have isSet(pg_brk) frames.
Change-Id: I29f815355401c7af8b347a3ed9d0298bc9b27b93
Reviewed-on: https://gerrit.libreoffice.org/71255
Tested-by: Jenkins
Reviewed-by: Justin Luth <justin_luth@sil.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 1a9be316b85d..cc7b7c720e05 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -1965,6 +1965,22 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH); if( pContext.get() ) { + // If there is a deferred page break applied to this framed paragraph, + // create a dummy paragraph without extra properties, + // so that the anchored frame will be on the correct page (similar to shapes). + if (pContext->isSet(PROP_BREAK_TYPE)) + { + pContext->Erase(PROP_BREAK_TYPE); + + lcl_startParagraphGroup(); + m_pImpl->GetTopContext()->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_PAGE_BEFORE)); + lcl_startCharacterGroup(); + sal_uInt8 const sBreak[] = { 0xd }; + lcl_text(sBreak, 1); + lcl_endCharacterGroup(); + lcl_endParagraphGroup(); + } + ParagraphPropertyMap* pParaContext = dynamic_cast< ParagraphPropertyMap* >( pContext.get() ); if (pParaContext) pParaContext->SetFrameMode(); |