Commit c110c654 authored by Martin Tobias Holmedahl Sandsmark's avatar Martin Tobias Holmedahl Sandsmark
Browse files

Improve page breaks and batch up cursor edits in epub generator

Patch by Guillaume Maudoux (layus).

CCBUG: 359932
parent 7490f372
......@@ -175,6 +175,7 @@ QTextDocument* Converter::convert( const QString &fileName )
mTextDocument = newDocument;
QTextCursor *_cursor = new QTextCursor( mTextDocument );
_cursor->beginEditBlock();
mLocalLinks.clear();
mSectionMap.clear();
......@@ -346,19 +347,21 @@ QTextDocument* Converter::convert( const QString &fileName )
_handle_anchors(before, link);
const int page = mTextDocument->pageCount();
// it will clear the previous format
// Force a page break.
// The new format will also clear the previous one,
// useful when the last line had a bullet
_cursor->insertBlock(QTextBlockFormat());
while(mTextDocument->pageCount() == page)
_cursor->insertText(QStringLiteral("\n"));
QTextBlockFormat pageBreak;
pageBreak.setPageBreakPolicy(QTextFormat::PageBreak_AlwaysAfter);
_cursor->insertBlock(pageBreak);
}
} while (epub_it_get_next(it));
epub_free_iterator(it);
// Clear the previous format
// In particular, clear the last page break.
_cursor->insertBlock(QTextBlockFormat());
// handle toc
struct titerator *tit;
......@@ -397,10 +400,8 @@ QTextDocument* Converter::convert( const QString &fileName )
_handle_anchors(block, link);
}
// Start new file in a new page
int page = mTextDocument->pageCount();
while(mTextDocument->pageCount() == page)
_cursor->insertText(QStringLiteral("\n"));
// start a new page.
_cursor->block().blockFormat().setPageBreakPolicy(QTextFormat::PageBreak_AlwaysAfter);
}
free(data);
......@@ -447,6 +448,8 @@ QTextDocument* Converter::convert( const QString &fileName )
}
}
_cursor->endEditBlock();
delete _cursor;
return mTextDocument;
......
Supports Markdown
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