]> git.lyx.org Git - lyx.git/blobdiff - src/text.C
Lars says _(_(b)) is a bug ... fix
[lyx.git] / src / text.C
index 74349c6dcb0f5d8f1a36b2acdf0272f5ef38dbc3..46259d4d8b7b5f20dc52bf6fc9ba559670616bea 100644 (file)
 #include "bufferparams.h"
 #include "buffer.h"
 #include "debug.h"
+#include "intl.h"
 #include "lyxrc.h"
 #include "encoding.h"
 #include "frontends/LyXView.h"
 #include "frontends/Painter.h"
 #include "frontends/font_metrics.h"
 #include "frontends/screen.h"
+#include "frontends/WorkArea.h"
 #include "bufferview_funcs.h"
 #include "BufferView.h"
 #include "language.h"
 #include "ParagraphParameters.h"
 #include "undo_funcs.h"
+#include "WordLangTuple.h"
+#include "paragraph_funcs.h"
 
 #include "insets/insetbib.h"
 #include "insets/insettext.h"
@@ -77,7 +81,7 @@ int LyXText::workWidth(BufferView * bview, Inset * inset) const
                Buffer::inset_iterator it = bview->buffer()->inset_iterator_begin();
                Buffer::inset_iterator end = bview->buffer()->inset_iterator_end();
                for (; it != end; ++it) {
-                       if (*it == inset) {
+                       if (&(*it) == inset) {
                                par = it.getPar();
                                pos = it.getPos();
                                break;
@@ -146,12 +150,14 @@ unsigned char LyXText::transformChar(unsigned char c, Paragraph * par,
                }
 
        if (Encodings::is_arabic(next_char)) {
-               if (Encodings::is_arabic(prev_char))
+               if (Encodings::is_arabic(prev_char) &&
+                       !Encodings::is_arabic_special(prev_char))
                        return Encodings::TransformChar(c, Encodings::FORM_MEDIAL);
                else
                        return Encodings::TransformChar(c, Encodings::FORM_INITIAL);
        } else {
-               if (Encodings::is_arabic(prev_char))
+               if (Encodings::is_arabic(prev_char) &&
+                       !Encodings::is_arabic_special(prev_char))
                        return Encodings::TransformChar(c, Encodings::FORM_FINAL);
                else
                        return Encodings::TransformChar(c, Encodings::FORM_ISOLATED);
@@ -686,13 +692,6 @@ bool LyXText::draw(DrawRowParams & p, pos_type & vpos)
 
        drawForeignMark(p, orig_x, orig_font);
 
-#ifdef INHERIT_LANGUAGE
-#ifdef WITH_WARNINGS
-       if ((font.language() == inherit_language) ||
-               (font.language() == ignore_language))
-               lyxerr << "No this shouldn't happen!\n";
-#endif
-#endif
        return true;
 }
 
@@ -732,8 +731,7 @@ int LyXText::leftMargin(BufferView * bview, Row const * row) const
        } else {
                // find the next level paragraph
 
-               Paragraph * newpar =
-                       row->par()->outerHook();
+               Paragraph * newpar = row->par()->outerHook();
 
                // make a corresponding row. Needed to call LeftMargin()
 
@@ -851,7 +849,7 @@ int LyXText::leftMargin(BufferView * bview, Row const * row) const
                LyXLength const len = row->par()->params().leftIndent();
                int const tw = inset_owner ?
                        inset_owner->latexTextWidth(bview) : workWidth(bview);
-               x += len.inPixels(tw, bview->text->defaultHeight());
+               x += len.inPixels(tw);
        }
 
        LyXAlignment align; // wrong type
@@ -1756,8 +1754,8 @@ void LyXText::breakParagraph(BufferView * bview, char keep_layout)
        // paragraph before or behind and we should react on that one
        // but we can fix this in 1.3.0 (Jug 20020509)
        bool const isempty = (layout->keepempty && cursor.par()->empty());
-       cursor.par()->breakParagraph(bview->buffer()->params, cursor.pos(),
-                               keep_layout);
+       ::breakParagraph(bview->buffer()->params, cursor.par(), cursor.pos(),
+                      keep_layout);
 
        // well this is the caption hack since one caption is really enough
        if (layout->labeltype == LABEL_SENSITIVE) {
@@ -2030,11 +2028,10 @@ void LyXText::insertChar(BufferView * bview, char c)
                // we would not get a rebreak!
                row->fill(fill(bview, row, workWidth(bview)));
        }
+
        if (c == Paragraph::META_INSET || row->fill() < 0) {
                refresh_y = y;
                refresh_row = row;
-               refresh_x = cursor.x();
-               refresh_pos = cursor.pos();
                status(bview, LyXText::NEED_MORE_REFRESH);
                breakAgainOneRow(bview, row);
                // will the cursor be in another row now?
@@ -2059,9 +2056,7 @@ void LyXText::insertChar(BufferView * bview, char c)
                        need_break_row = 0;
        } else {
                refresh_y = y;
-               refresh_x = cursor.x();
                refresh_row = row;
-               refresh_pos = cursor.pos();
 
                int const tmpheight = row->height();
                setHeightOfRow(bview, row);
@@ -2288,7 +2283,7 @@ void LyXText::cursorLeftOneWord(BufferView * bview)  const
 }
 
 
-void LyXText::cursorLeftOneWord(LyXCursor  & cur)  const
+void LyXText::cursorLeftOneWord(LyXCursor & cur) const
 {
        // treat HFills, floats and Insets as words
        cur = cursor;
@@ -2310,7 +2305,7 @@ void LyXText::cursorLeftOneWord(LyXCursor  & cur)  const
                }
        } else {                // Here, cur != 0
                while (cur.pos() > 0 &&
-                      cur.par()->isWord(cur.pos()-1))
+                      cur.par()->isWord(cur.pos() - 1))
                        cur.pos(cur.pos() - 1);
        }
 }
@@ -2328,8 +2323,8 @@ void LyXText::getWord(LyXCursor & from, LyXCursor & to,
                if (cursor.pos() == 0 || cursor.pos() == cursor.par()->size()
                    || cursor.par()->isSeparator(cursor.pos())
                    || cursor.par()->isKomma(cursor.pos())
-                   || cursor.par()->isSeparator(cursor.pos() -1)
-                   || cursor.par()->isKomma(cursor.pos() -1)) {
+                   || cursor.par()->isSeparator(cursor.pos() - 1)
+                   || cursor.par()->isKomma(cursor.pos() - 1)) {
                        to = from;
                        return;
                }
@@ -2393,13 +2388,14 @@ bool LyXText::selectWordWhenUnderCursor(BufferView * bview,
 
 // This function is only used by the spellchecker for NextWord().
 // It doesn't handle LYX_ACCENTs and probably never will.
-WordLangTuple LyXText::selectNextWordToSpellcheck(BufferView * bview,
-                                                float & value) const
+WordLangTuple const
+LyXText::selectNextWordToSpellcheck(BufferView * bview, float & value) const
 {
        if (the_locking_inset) {
                WordLangTuple word = the_locking_inset->selectNextWordToSpellcheck(bview, value);
                if (!word.word().empty()) {
-                       value += float(cursor.y())/float(height);
+                       value += float(cursor.y());
+                       value /= float(height);
                        return word;
                }
                // we have to go on checking so move cursor to the next char
@@ -2793,7 +2789,7 @@ void LyXText::backspace(BufferView * bview)
                    && cursor.par()->getAlign() == tmppar->getAlign()) {
                        removeParagraph(tmprow);
                        removeRow(tmprow);
-                       cursor.par()->pasteParagraph(bview->buffer()->params);
+                       mergeParagraph(bview->buffer()->params, cursor.par());
 
                        if (!cursor.pos() || !cursor.par()->isSeparator(cursor.pos() - 1))
                                ; //cursor.par()->insertChar(cursor.pos(), ' ');
@@ -3129,26 +3125,22 @@ void LyXText::paintRowSelection(DrawRowParams & p)
                }
                return;
        } else if (startrow != row && endrow != row) {
-               int w = p.width;
-               int h = row->height();
                if (p.y > starty && p.y < endy) {
+                       int w = p.width;
+                       int h = row->height();
                        p.pain->fillRectangle(p.xo, p.yo, w, h, LColor::selection);
                }
                return;
        }
 
-       if (!((startrow != row && !is_rtl) || (endrow != row && is_rtl))) {
-               return;
-       }
-
-       float tmpx = p.x;
-
-       p.pain->fillRectangle(p.xo, p.yo, int(p.x), row->height(), LColor::selection);
+       if ((startrow != row && !is_rtl) || (endrow != row && is_rtl))
+               p.pain->fillRectangle(p.xo, p.yo, int(p.x), row->height(), LColor::selection);
 
        Buffer const * buffer = p.bv->buffer();
        Paragraph * par = row->par();
        pos_type main_body = beginningOfMainBody(buffer, par);
        pos_type const last = rowLastPrintable(row);
+       float tmpx = p.x;
 
        for (pos_type vpos = row->pos(); vpos <= last; ++vpos)  {
                pos_type pos = vis2log(vpos);
@@ -3186,12 +3178,12 @@ void LyXText::paintRowSelection(DrawRowParams & p)
                                int(tmpx - old_tmpx + 1),
                                row->height(), LColor::selection);
                }
+       }
 
-               if ((startrow != row && is_rtl) || (endrow != row && !is_rtl)) {
-                       p.pain->fillRectangle(p.xo + int(tmpx),
-                               p.yo, int(p.bv->workWidth() - tmpx),
-                               row->height(), LColor::selection);
-               }
+       if ((startrow != row && is_rtl) || (endrow != row && !is_rtl)) {
+               p.pain->fillRectangle(p.xo + int(tmpx),
+                                     p.yo, int(p.bv->workWidth() - tmpx),
+                                     row->height(), LColor::selection);
        }
 }
 
@@ -3279,7 +3271,7 @@ int LyXText::drawLengthMarker(DrawRowParams & p, string const & prefix,
        switch (vsp.kind()) {
        case VSpace::LENGTH:
        {
-               str = prefix + " (" + vsp.asLyXCommand() + ")";
+               str = prefix + " (" + vsp.asLyXCommand() + ')';
                // adding or removing space
                bool const added = !(vsp.length().len().value() < 0.0);
                ty1 = added ? (start + arrow_size) : start;
@@ -3288,8 +3280,8 @@ int LyXText::drawLengthMarker(DrawRowParams & p, string const & prefix,
                by2 = added ? end : (end - arrow_size);
                break;
        }
-       case VSpace:: VFILL:
-               str = prefix + " (vertical fill)";
+       case VSpace::VFILL:
+               str = prefix + _(" (vertical fill)");
                ty1 = ty2 = start;
                by1 = by2 = end;
                break;
@@ -3796,7 +3788,7 @@ LyXText::getColumnNearX(BufferView * bview, Row * row, int & x,
                }
 
                if (hfillExpansion(bview->buffer(), row, c)) {
-                       x += singleWidth(bview, row->par(), c);
+                       tmpx += singleWidth(bview, row->par(), c);
                        if (c >= main_body)
                                tmpx += fill_hfill;
                        else