setRowHeight(row, pit);
row.setChanged(false);
if (row_index || row.endpos() < par.size()
- || (row.right_boundary() && par.inInset().lyxCode() != CELL_CODE))
+ || (row.right_boundary() && par.inInset().lyxCode() != CELL_CODE)) {
/* If there is more than one row or the row has been
* broken by a display inset or a newline, expand the text
* to the full allowable width. This setting here is
* that, and it triggers when using a caption in a
* longtable (see bugs #9945 and #9757).
*/
- dim_.wid = max_width_;
+ if (dim_.wid < max_width_)
+ dim_.wid = max_width_;
+ }
int const max_row_width = max(dim_.wid, row.width());
computeRowMetrics(pit, row, max_row_width);
first = row.endpos();
pos_type const pos = row.pos();
pos_type const body_pos = par.beginOfBody();
bool const is_rtl = text_->isRTL(par);
+ bool need_new_row = false;
row.clear();
row.left_margin = leftMargin(max_width_, pit, pos);
// the width available for the row.
int const width = max_width_ - row.right_margin;
- if (pos >= end) {
- row.endpos(end);
- return;
- }
-
ParagraphList const & pars = text_->paragraphs();
#if 0
pos_type i = pos;
FontIterator fi = FontIterator(*this, par, pit, pos);
do {
+ // this can happen for an empty row after a newline
+ if (i >= end)
+ break;
char_type c = par.getChar(i);
// The most special cases are handled first.
if (par.isInset(i)) {
|| (!row.empty() && row.back().inset
&& row.back().inset->display())) {
row.right_boundary(true);
+ need_new_row = par.isNewline(i);
++i;
break;
}
row.endpos(i);
// End of paragraph marker
- if (lyxrc.paragraph_markers
+ if (lyxrc.paragraph_markers && !need_new_row
&& i == end && size_type(pit + 1) < pars.size()) {
// add a virtual element for the end-of-paragraph
// marker; it is shown on screen, but does not exist
row.addVirtual(end, docstring(1, char_type(0x00B6)), f, Change());
}
- // if the row is too large, try to cut at last separator.
- row.shortenIfNeeded(body_pos, width);
+ // if the row is too large, try to cut at last separator. In case
+ // of success, reset indication that the row was broken abruptly.
+ if (row.shortenIfNeeded(body_pos, width))
+ row.right_boundary(false);
// make sure that the RTL elements are in reverse ordering
row.reverseRTL(is_rtl);
* row is larger than the end of its last element.
*/
if (!row.empty() && pos == row.back().endpos
- && row.back().endpos == row.endpos())
- boundary = true;
-
+ && row.back().endpos == row.endpos()) {
+ Inset const * inset = row.back().inset;
+ if (inset && (inset->lyxCode() == NEWLINE_CODE
+ || inset->lyxCode() == SEPARATOR_CODE))
+ pos = row.back().pos;
+ else
+ boundary = row.right_boundary();
+ }
x += xo;
//LYXERR0("getPosNearX ==> pos=" << pos << ", boundary=" << boundary);
return pos;