]> git.lyx.org Git - lyx.git/blobdiff - src/TextMetrics.cpp
installer: further preparation
[lyx.git] / src / TextMetrics.cpp
index 938223050961fbe55778f9d7719849ae62ba137f..4e70dc0b82091b5b207a45e49d8f3c43d648796d 100644 (file)
@@ -51,6 +51,7 @@
 
 #include "support/debug.h"
 #include "support/docstring_list.h"
+#include "support/gettext.h"
 #include "support/lassert.h"
 
 #include <cstdlib>
@@ -128,7 +129,7 @@ static int numberOfHfills(Paragraph const & par, Row const & row)
 TextMetrics::TextMetrics(BufferView * bv, Text * text)
        : bv_(bv), text_(text)
 {
-       LASSERT(bv_, /**/);
+       LBUFERR(bv_);
        max_width_ = bv_->workWidth();
        dim_.wid = max_width_;
        dim_.asc = 10;
@@ -158,7 +159,7 @@ pair<pit_type, ParagraphMetrics const *> TextMetrics::first() const
 
 pair<pit_type, ParagraphMetrics const *> TextMetrics::last() const
 {
-       LASSERT(!par_metrics_.empty(), /**/);
+       LBUFERR(!par_metrics_.empty());
        ParMetricsCache::const_reverse_iterator it = par_metrics_.rbegin();
        return make_pair(it->first, &it->second);
 }
@@ -179,7 +180,7 @@ ParagraphMetrics & TextMetrics::parMetrics(pit_type pit, bool redo)
 
 bool TextMetrics::metrics(MetricsInfo & mi, Dimension & dim, int min_width)
 {
-       LASSERT(mi.base.textwidth > 0, /**/);
+       LBUFERR(mi.base.textwidth > 0);
        max_width_ = mi.base.textwidth;
        // backup old dimension.
        Dimension const old_dim = dim_;
@@ -239,7 +240,7 @@ void TextMetrics::applyOuterFont(Font & font) const
 
 Font TextMetrics::displayFont(pit_type pit, pos_type pos) const
 {
-       LASSERT(pos >= 0, /**/);
+       LASSERT(pos >= 0, { static Font f; return f; });
 
        ParagraphList const & pars = text_->paragraphs();
        Paragraph const & par = pars[pit];
@@ -416,7 +417,7 @@ bool TextMetrics::redoParagraph(pit_type const pit)
                // should be.
                bv_->buffer().updateBuffer();
                parPos = text_->macrocontextPosition();
-               LASSERT(!parPos.empty(), /**/);
+               LBUFERR(!parPos.empty());
                parPos.pit() = pit;
        }
 
@@ -692,7 +693,7 @@ int TextMetrics::labelFill(pit_type const pit, Row const & row) const
        Paragraph const & par = text_->getPar(pit);
 
        pos_type last = par.beginOfBody();
-       LASSERT(last > 0, /**/);
+       LBUFERR(last > 0);
 
        // -1 because a label ends with a space that is in the label
        --last;
@@ -770,7 +771,7 @@ public:
        FontIterator & operator++()
        {
                ++pos_;
-               if (pos_ > endspan_ || pos_ == bodypos_) {
+               if (pos_ < par_.size() && (pos_ > endspan_ || pos_ == bodypos_)) {
                        font_ = tm_.displayFont(pit_, pos_);
                        endspan_ = par_.fontSpan(pos_).last;
                }
@@ -1102,20 +1103,9 @@ Dimension TextMetrics::rowHeight(pit_type const pit, pos_type const first,
                if (par.params().startOfAppendix())
                        maxasc += int(3 * dh);
 
-               // This is special code for the chapter, since the label of this
-               // layout is printed in an extra row
-               if (layout.counter == "chapter"
-                   && !par.params().labelString().empty()) {
-                       labeladdon = int(labelfont_metrics.maxHeight()
-                                    * layout.spacing.getValue()
-                                    * text_->spacing(par));
-               }
-
                // special code for the top label
-               if ((layout.labeltype == LABEL_TOP_ENVIRONMENT
-                    || layout.labeltype == LABEL_BIBLIO
-                    || layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT)
-                   && text_->isFirstInSequence(pit)
+               if (layout.labelIsAbove()
+                   && (!layout.isParagraphGroup() || text_->isFirstInSequence(pit))
                    && !par.labelString().empty())
                {
                        labeladdon = int(
@@ -1279,7 +1269,8 @@ pos_type TextMetrics::getColumnNearX(pit_type const pit,
                left_side = true;
        }
 
-       LASSERT(vc <= end, /**/);  // This shouldn't happen.
+       // This shouldn't happen. But we can reset and try to continue.
+       LASSERT(vc <= end, vc = end);
 
        boundary = false;
 
@@ -1352,7 +1343,7 @@ pos_type TextMetrics::x2pos(pit_type pit, int row, int x) const
        // upDownInText() while in selection mode.
        ParagraphMetrics const & pm = parMetrics(pit);
 
-       LASSERT(row < int(pm.rows().size()), /**/);
+       LBUFERR(row < int(pm.rows().size()));
        bool bound = false;
        Row const & r = pm.rows()[row];
        return r.pos() + getColumnNearX(pit, r, x, bound);
@@ -1455,7 +1446,7 @@ Row const & TextMetrics::getPitAndRowNearY(int & y, pit_type & pit,
        ParagraphMetrics const & pm = par_metrics_[pit];
 
        int yy = pm.position() - pm.ascent();
-       LASSERT(!pm.rows().empty(), /**/);
+       LBUFERR(!pm.rows().empty());
        RowList::const_iterator rit = pm.rows().begin();
        RowList::const_iterator rlast = pm.rows().end();
        --rlast;
@@ -1555,8 +1546,8 @@ Inset * TextMetrics::editXY(Cursor & cur, int x, int y,
 
 void TextMetrics::setCursorFromCoordinates(Cursor & cur, int const x, int const y)
 {
-       LASSERT(text_ == cur.text(), /**/);
-       pit_type pit = getPitNearY(y);
+       LASSERT(text_ == cur.text(), return);
+       pit_type const pit = getPitNearY(y);
        LASSERT(pit != -1, return);
 
        ParagraphMetrics const & pm = par_metrics_[pit];
@@ -1566,7 +1557,7 @@ void TextMetrics::setCursorFromCoordinates(Cursor & cur, int const x, int const
                " pit: " << pit << " yy: " << yy);
 
        int r = 0;
-       LASSERT(pm.rows().size(), /**/);
+       LBUFERR(pm.rows().size());
        for (; r < int(pm.rows().size()) - 1; ++r) {
                Row const & row = pm.rows()[r];
                if (int(yy + row.height()) > y)
@@ -1636,7 +1627,7 @@ Inset * TextMetrics::checkInsetHit(int x, int y)
 int TextMetrics::cursorX(CursorSlice const & sl,
                bool boundary) const
 {
-       LASSERT(sl.text() == text_, /**/);
+       LASSERT(sl.text() == text_, return 0);
        pit_type const pit = sl.pit();
        Paragraph const & par = text_->paragraphs()[pit];
        ParagraphMetrics const & pm = par_metrics_[pit];
@@ -1811,7 +1802,7 @@ int TextMetrics::cursorY(CursorSlice const & sl, bool boundary) const
 
 bool TextMetrics::cursorHome(Cursor & cur)
 {
-       LASSERT(text_ == cur.text(), /**/);
+       LASSERT(text_ == cur.text(), return false);
        ParagraphMetrics const & pm = par_metrics_[cur.pit()];
        Row const & row = pm.getRow(cur.pos(),cur.boundary());
        return text_->setCursor(cur, cur.pit(), row.pos());
@@ -1820,7 +1811,7 @@ bool TextMetrics::cursorHome(Cursor & cur)
 
 bool TextMetrics::cursorEnd(Cursor & cur)
 {
-       LASSERT(text_ == cur.text(), /**/);
+       LASSERT(text_ == cur.text(), return false);
        // if not on the last row of the par, put the cursor before
        // the final space exept if I have a spanning inset or one string
        // is so long that we force a break.
@@ -1842,7 +1833,7 @@ bool TextMetrics::cursorEnd(Cursor & cur)
 
 void TextMetrics::deleteLineForward(Cursor & cur)
 {
-       LASSERT(text_ == cur.text(), /**/);
+       LASSERT(text_ == cur.text(), return);
        if (cur.lastpos() == 0) {
                // Paragraph is empty, so we just go forward
                text_->cursorForward(cur);
@@ -1877,8 +1868,6 @@ bool TextMetrics::isFirstRow(pit_type pit, Row const & row) const
 
 int TextMetrics::leftMargin(int max_width, pit_type pit) const
 {
-       LASSERT(pit >= 0, /**/);
-       LASSERT(pit < int(text_->paragraphs().size()), /**/);
        return leftMargin(max_width, pit, text_->paragraphs()[pit].size());
 }
 
@@ -1888,11 +1877,11 @@ int TextMetrics::leftMargin(int max_width,
 {
        ParagraphList const & pars = text_->paragraphs();
 
-       LASSERT(pit >= 0, /**/);
-       LASSERT(pit < int(pars.size()), /**/);
+       LASSERT(pit >= 0, return 0);
+       LASSERT(pit < int(pars.size()), return 0);
        Paragraph const & par = pars[pit];
-       LASSERT(pos >= 0, /**/);
-       LASSERT(pos <= par.size(), /**/);
+       LASSERT(pos >= 0, return 0);
+       LASSERT(pos <= par.size(), return 0);
        Buffer const & buffer = bv_->buffer();
        //lyxerr << "TextMetrics::leftMargin: pit: " << pit << " pos: " << pos << endl;
        DocumentClass const & tclass = buffer.params().documentClass();
@@ -1981,10 +1970,7 @@ int TextMetrics::leftMargin(int max_width,
                               && layout.latextype == LATEX_ENVIRONMENT
                               && !text_->isFirstInSequence(pit))) {
                        l_margin += labelfont_metrics.signedWidth(layout.leftmargin);
-               } else if (layout.labeltype != LABEL_TOP_ENVIRONMENT
-                          && layout.labeltype != LABEL_BIBLIO
-                          && layout.labeltype !=
-                          LABEL_CENTERED_TOP_ENVIRONMENT) {
+               } else if (!layout.labelIsAbove()) {
                        l_margin += labelfont_metrics.signedWidth(layout.labelindent);
                        l_margin += labelfont_metrics.width(layout.labelsep);
                        l_margin += labelfont_metrics.width(par.labelString());
@@ -2026,8 +2012,8 @@ int TextMetrics::leftMargin(int max_width,
        // set the correct parindent
        if (pos == 0
            && (layout.labeltype == LABEL_NO_LABEL
-              || layout.labeltype == LABEL_TOP_ENVIRONMENT
-              || layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT
+              || layout.labeltype == LABEL_ABOVE
+              || layout.labeltype == LABEL_CENTERED
               || (layout.labeltype == LABEL_STATIC
                   && layout.latextype == LATEX_ENVIRONMENT
                   && !text_->isFirstInSequence(pit)))