#include "TextClass.h"
#include "VSpace.h"
+#include "insets/InsetSeparator.h"
#include "insets/InsetText.h"
#include "mathed/MacroTable.h"
if (Inset const * inset = par.getInset(row.pos())) {
if (inset->rowFlags() & Display) {
if (inset->rowFlags() & AlignLeft)
- align = LYX_ALIGN_BLOCK;
+ align = LYX_ALIGN_LEFT;
else if (inset->rowFlags() & AlignRight)
align = LYX_ALIGN_RIGHT;
else
// ⤶ U+2936 ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS
// ¶ U+00B6 PILCROW SIGN
char_type const screen_char = (c == 0x2028) ? 0x2936 : 0x00B6;
- row.add(i, screen_char, *fi, par.lookupChange(i), i >= body_pos);
+ row.add(i, screen_char, *fi, par.lookupChange(i));
} else
// row elements before body are unbreakable
- row.add(i, c, *fi, par.lookupChange(i), i >= body_pos);
+ row.add(i, c, *fi, par.lookupChange(i));
// add inline completion width
// draw logically behind the previous character
public:
//
- flexible_const_iterator operator++() {
+ flexible_const_iterator & operator++() {
if (pile_.empty())
++cit_;
else
if (!at_end && !row.flushed())
row.back().rtrim();
// boundary exists when there was no space at the end of row
- row.right_boundary(!at_end && row.back().endpos == row.endpos());
+ row.end_boundary(!at_end && row.back().endpos == row.endpos());
// make sure that the RTL elements are in reverse ordering
row.reverseRTL();
}
rb.push_back(elt);
rb.finalizeLast();
if (rb.width() > width) {
- LATTEST(tail.empty());
+ // Keep the tail for later; this ought to be rare, but play safe.
+ if (!tail.empty())
+ fcit.put(tail);
// if the row is too large, try to cut at last separator.
tail = rb.shortenIfNeeded(width, next_width);
}
&& prevpar.getLabelWidthString() == par.getLabelWidthString()) {
layoutasc = layout.itemsep * dh;
} else if (pit != 0 && layout.topsep > 0)
- layoutasc = layout.topsep * dh;
+ // combine the separation between different layouts (with same depth)
+ layoutasc = max(0.0,
+ prevpar.getDepth() != par.getDepth() ? layout.topsep
+ : layout.topsep - prevpar.layout().bottomsep) * dh;
asc += int(layoutasc * 2 / (2 + pars[pit].getDepth()));
|| inset->lyxCode() == SEPARATOR_CODE))
pos = row.back().pos;
else
- boundary = row.right_boundary();
+ boundary = row.end_boundary();
}
x += xo - offset;
}
}
- // This happens after sections or environments in standard classes.
- // We have to check the previous layout at same depth.
+ // Check for reasons to remove indentation.
+ // First, at document level.
if (buffer.params().paragraph_separation ==
BufferParams::ParagraphSkipSeparation)
parindent.erase();
+ // This happens after sections or environments in standard classes.
+ // We have to check the previous layout at same depth.
else if (pit > 0 && pars[pit - 1].getDepth() >= par.getDepth()) {
pit_type prev = text_->depthHook(pit, par.getDepth());
if (par.layout() == pars[prev].layout()) {
} else if (pars[prev].layout().nextnoindent)
parindent.erase();
}
+ // The previous paragraph may have ended with a separator inset.
+ if (pit > 0) {
+ Paragraph const & ppar = pars[pit - 1];
+ if (ppar.size() > 0) {
+ auto * in = dynamic_cast<InsetSeparator const *>(ppar.getInset(ppar.size() - 1));
+ if (in != nullptr && in->nextnoindent())
+ parindent.erase();
+ }
+ }
FontInfo const labelfont = text_->labelFont(par);
FontMetrics const & lfm = theFontMetrics(labelfont);
swap(pi.leftx, pi.rightx);
BookmarksSection::BookmarkPosList bpl =
- theSession().bookmarks().bookmarksInPar(bv_->buffer().fileName(), pm.par().id());
+ theSession().bookmarks().bookmarksInPar(bv_->buffer().fileName(), pm.id());
for (size_t i = 0; i != nrows; ++i) {
// already cleared because of a full repaint.
if (!pi.full_repaint && row.changed()) {
LYXERR(Debug::PAINTING, "Clear rect@("
- << max(row_x, 0) << ", " << y - row.ascent() << ")="
+ << x << ", " << y - row.ascent() << ")="
<< width() << " x " << row.height());
- pi.pain.fillRectangle(row_x, y - row.ascent(),
+ pi.pain.fillRectangle(x, y - row.ascent(),
width(), row.height(), pi.background_color);
}