FontIterator fi = FontIterator(*this, par, pit, pos);
pos_type point = end;
pos_type i = pos;
+
+ ParagraphList const & pars_ = text_->paragraphs();
+ bool const draw_par_end_marker = lyxrc.paragraph_markers
+ && size_type(pit + 1) < pars_.size();
+
for ( ; i < end; ++i, ++fi) {
int thiswidth = pm.singleWidth(i, *fi);
- if (i == end - 1 && lyxrc.paragraph_markers)
- // enlarge the last character to hold the
- // end-of-par marker
+ if (draw_par_end_marker && i == end - 1)
+ // enlarge the last character to hold the end-of-par marker
thiswidth += par_marker_width;
// add inline completion width
// count the paragraph end marker.
if (end == par.size() && lyxrc.paragraph_markers) {
- docstring const s(1, char_type(0x00B6));
- Font f;
- w += theFontMetrics(f).width(s);
+ ParagraphList const & pars_ = text_->paragraphs();
+ if (size_type(pit + 1) < pars_.size()) {
+ // enlarge the last character to hold the
+ // end-of-par marker
+ docstring const s(1, char_type(0x00B6));
+ Font f;
+ w += theFontMetrics(f).width(s);
+ }
}
if (body_pos > 0 && body_pos >= end) {
skipped_sep_vpos = bidi.log2vis(end - 1);
if (lyxrc.paragraph_markers && text_->isRTL(par)) {
- FontInfo f;
- docstring const s = docstring(1, char_type(0x00B6));
- x += theFontMetrics(f).width(s);
+ ParagraphList const & pars_ = text_->paragraphs();
+ if (size_type(pit + 1) < pars_.size()) {
+ FontInfo f;
+ docstring const s = docstring(1, char_type(0x00B6));
+ x += theFontMetrics(f).width(s);
+ }
}
// Inline completion RTL special case row_pos == cursor_pos:
}
case END_LABEL_NO_LABEL:
- if (lyxrc.paragraph_markers) {
+ if (lyxrc.paragraph_markers && size_type(pit_ + 1) < pars_.size()) {
docstring const s = docstring(1, char_type(0x00B6));
FontInfo f = FontInfo();
FontMetrics const & fm = theFontMetrics(f);
- double const x = x_;
f.setColor(Color_paragraphmarker);
- pi_.pain.text(int(x), yo_, s, f);
+ pi_.pain.text(int(x_), yo_, s, f);
x_ += fm.width(s);
}
break;