X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTextMetrics.cpp;h=50f6062275a685b238031c94eb8c02cccc8bf8f5;hb=8ea66efe16ad109a5c107716185fb82bbebca8c8;hp=7d967f37a2be7e8c31f00786563494ef2028cb1d;hpb=53e8746b4761daeb0a0f6a31019bf8dc5a8df5dc;p=lyx.git diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp index 7d967f37a2..50f6062275 100644 --- a/src/TextMetrics.cpp +++ b/src/TextMetrics.cpp @@ -158,6 +158,7 @@ pair TextMetrics::first() const pair TextMetrics::last() const { + LASSERT(!par_metrics_.empty(), /**/); ParMetricsCache::const_reverse_iterator it = par_metrics_.rbegin(); return make_pair(it->first, &it->second); } @@ -374,6 +375,21 @@ bool TextMetrics::redoParagraph(pit_type const pit) main_text_ = (text_ == &buffer.text()); bool changed = false; + // FIXME: This check ought to be done somewhere else. It is the reason + // why text_ is not const. But then, where else to do it? + // Well, how can you end up with either (a) a biblio environment that + // has no InsetBibitem or (b) a biblio environment with more than one + // InsetBibitem? I think the answer is: when paragraphs are merged; + // when layout is set; when material is pasted. + int const moveCursor = par.checkBiblio(buffer); + if (moveCursor > 0) + const_cast(bv_->cursor()).posForward(); + else if (moveCursor < 0) { + Cursor & cursor = const_cast(bv_->cursor()); + if (cursor.pos() >= -moveCursor) + cursor.posBackward(); + } + // Optimisation: this is used in the next two loops // so better to calculate that once here. int const right_margin = rightMargin(pm); @@ -400,6 +416,7 @@ bool TextMetrics::redoParagraph(pit_type const pit) InsetList::const_iterator ii = par.insetList().begin(); InsetList::const_iterator iend = par.insetList().end(); for (; ii != iend; ++ii) { + // FIXME Doesn't this HAVE to be non-empty? // position already initialized? if (!parPos.empty()) { parPos.pos() = ii->pos; @@ -581,6 +598,11 @@ void TextMetrics::computeRowMetrics(pit_type const pit, } } + // Has the user requested we not justify stuff? + if (!bv_->buffer().params().justification + && align == LYX_ALIGN_BLOCK) + align = LYX_ALIGN_LEFT; + switch (align) { case LYX_ALIGN_BLOCK: { int const ns = numberOfSeparators(par, row); @@ -1494,7 +1516,7 @@ Inset * TextMetrics::editXY(Cursor & cur, int x, int y, // This should be just before or just behind the // cursor position set above. LASSERT(inset == inset_before - || inset == pars[pit].getInset(pos), /**/); + || inset == pars[pit].getInset(pos), return 0); // Make sure the cursor points to the position before // this inset.