]> git.lyx.org Git - lyx.git/blobdiff - src/text.C
remove noload/don't typeset
[lyx.git] / src / text.C
index 9392cb5913d17fb9cb3fc2de6dff9b724cf538d6..097d595e1e2b05f85fb9241a73c158e414951eb4 100644 (file)
 
 #include "lyxtext.h"
 #include "lyxrow.h"
-#include "lyxtextclasslist.h"
 #include "paragraph.h"
 #include "gettext.h"
 #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"
@@ -78,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;
@@ -687,13 +690,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;
 }
 
@@ -707,7 +703,7 @@ int LyXText::leftMargin(BufferView * bview, Row const * row) const
                return LYX_PAPER_MARGIN;
 
        LyXTextClass const & tclass =
-               textclasslist[bview->buffer()->params.textclass];
+               bview->buffer()->params.getLyXTextClass();
        LyXLayout_ptr const & layout = row->par()->layout();
 
        string parindent = layout->parindent;
@@ -733,8 +729,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()
 
@@ -899,7 +894,7 @@ int LyXText::rightMargin(Buffer const * buf, Row const * row) const
                (ins->needFullRow() || ins->display()))
                return LYX_PAPER_MARGIN;
 
-       LyXTextClass const & tclass = textclasslist[buf->params.textclass];
+       LyXTextClass const & tclass = buf->params.getLyXTextClass();
        LyXLayout_ptr const & layout = row->par()->layout();
 
        int x = LYX_PAPER_MARGIN
@@ -1726,12 +1721,12 @@ void LyXText::breakAgainOneRow(BufferView * bview, Row * row)
 void LyXText::breakParagraph(BufferView * bview, char keep_layout)
 {
        LyXTextClass const & tclass =
-               textclasslist[bview->buffer()->params.textclass];
+               bview->buffer()->params.getLyXTextClass();
        LyXLayout_ptr const & layout = cursor.par()->layout();
 
        // this is only allowed, if the current paragraph is not empty or caption
        // and if it has not the keepempty flag aktive
-       if ((cursor.par()->size() <= 0)
+       if (cursor.par()->empty()
           && layout->labeltype != LABEL_SENSITIVE
           && !layout->keepempty)
                return;
@@ -1756,9 +1751,9 @@ void LyXText::breakParagraph(BufferView * bview, char keep_layout)
        // breakParagraph call should return a bool if it inserts the
        // 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()->size());
-       cursor.par()->breakParagraph(bview->buffer()->params, cursor.pos(),
-                               keep_layout);
+       bool const isempty = (layout->keepempty && cursor.par()->empty());
+       ::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) {
@@ -1800,13 +1795,13 @@ void LyXText::breakParagraph(BufferView * bview, char keep_layout)
 
        setHeightOfRow(bview, cursor.row());
 
-       while (cursor.par()->next()->size()
+       while (!cursor.par()->next()->empty()
          && cursor.par()->next()->isNewline(0))
           cursor.par()->next()->erase(0);
 
        insertParagraph(bview, cursor.par()->next(), cursor.row());
 
-       updateCounters(bview, cursor.row()->previous());
+       updateCounters(bview);
 
        // This check is necessary. Otherwise the new empty paragraph will
        // be deleted automatically. And it is more friendly for the user!
@@ -2394,19 +2389,19 @@ 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.
-string const LyXText::selectNextWordToSpellcheck(BufferView * bview,
-                                                float & value) const
+WordLangTuple const
+LyXText::selectNextWordToSpellcheck(BufferView * bview, float & value) const
 {
        if (the_locking_inset) {
-               string str = the_locking_inset->selectNextWordToSpellcheck(bview, value);
-               if (!str.empty()) {
+               WordLangTuple word = the_locking_inset->selectNextWordToSpellcheck(bview, value);
+               if (!word.word().empty()) {
                        value += float(cursor.y())/float(height);
-                       return str;
+                       return word;
                }
-               // we have to go on checking so move cusor to the next char
+               // we have to go on checking so move cursor to the next char
                if (cursor.pos() == cursor.par()->size()) {
                        if (!cursor.par()->next())
-                               return str;
+                               return word;
                        cursor.par(cursor.par()->next());
                        cursor.pos(0);
                } else
@@ -2458,6 +2453,9 @@ string const LyXText::selectNextWordToSpellcheck(BufferView * bview,
        // Start the selection from here
        selection.cursor = cursor;
 
+       string lang_code(
+               getFont(bview->buffer(), cursor.par(), cursor.pos())
+                       .language()->code());
        // and find the end of the word (insets like optional hyphens
        // and ligature break are part of a word)
        while (cursor.pos() < cursor.par()->size()
@@ -2473,7 +2471,7 @@ string const LyXText::selectNextWordToSpellcheck(BufferView * bview,
                                str += cursor.par()->getChar(i);
                }
        }
-       return str;
+       return WordLangTuple(str, lang_code);
 }
 
 
@@ -2505,7 +2503,7 @@ void LyXText::selectSelectedWord(BufferView * bview)
 // Delete from cursor up to the end of the current or next word.
 void LyXText::deleteWordForward(BufferView * bview)
 {
-       if (!cursor.par()->size())
+       if (cursor.par()->empty())
                cursorRight(bview);
        else {
                LyXCursor tmpcursor = cursor;
@@ -2526,7 +2524,7 @@ void LyXText::deleteWordForward(BufferView * bview)
 // Delete from cursor to start of current or prior word.
 void LyXText::deleteWordBackward(BufferView * bview)
 {
-       if (!cursor.par()->size())
+       if (cursor.par()->empty())
                cursorLeft(bview);
        else {
                LyXCursor tmpcursor = cursor;
@@ -2545,7 +2543,7 @@ void LyXText::deleteWordBackward(BufferView * bview)
 // Kill to end of line.
 void LyXText::deleteLineForward(BufferView * bview)
 {
-       if (!cursor.par()->size())
+       if (cursor.par()->empty())
                // Paragraph is empty, so we just go to the right
                cursorRight(bview);
        else {
@@ -2782,7 +2780,8 @@ void LyXText::backspace(BufferView * bview)
                // different wether it is open or closed.
 
                //      Correction: Pasting is always allowed with standard-layout
-               LyXTextClass const & tclass = textclasslist[bview->buffer()->params.textclass];
+               LyXTextClass const & tclass =
+                       bview->buffer()->params.getLyXTextClass();
 
                if (cursor.par() != tmppar
                    && (cursor.par()->layout() == tmppar->layout()
@@ -2790,7 +2789,7 @@ void LyXText::backspace(BufferView * bview)
                    && cursor.par()->getAlign() == tmppar->getAlign()) {
                        removeParagraph(tmprow);
                        removeRow(tmprow);
-                       cursor.par()->pasteParagraph(bview->buffer()->params);
+                       pasteParagraph(bview->buffer()->params, cursor.par());
 
                        if (!cursor.pos() || !cursor.par()->isSeparator(cursor.pos() - 1))
                                ; //cursor.par()->insertChar(cursor.pos(), ' ');
@@ -2815,7 +2814,7 @@ void LyXText::backspace(BufferView * bview)
 
                        // This rebuilds the rows.
                        appendParagraph(bview, cursor.row());
-                       updateCounters(bview, cursor.row());
+                       updateCounters(bview);
 
                        // the row may have changed, block, hfills etc.
                        setCursor(bview, cursor.par(), cursor.pos(), false);
@@ -2895,7 +2894,7 @@ void LyXText::backspace(BufferView * bview)
                        }
 
                        // delete newlines at the beginning of paragraphs
-                       while (cursor.par()->size() &&
+                       while (!cursor.par()->empty() &&
                               cursor.par()->isNewline(cursor.pos()) &&
                               cursor.pos() == beginningOfMainBody(bview->buffer(),
                                                                   cursor.par())) {
@@ -3126,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);
@@ -3183,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);
        }
 }
 
@@ -3339,9 +3334,9 @@ int LyXText::paintPageBreak(string const & label, int y, DrawRowParams & p)
 
        int const text_start = p.xo + ((p.width - w) / 2);
        int const text_end = text_start + w;
+
        p.pain->rectText(text_start, y + d, label, pb_font);
+
        p.pain->line(p.xo, y, text_start, y,
                LColor::pagebreak, Painter::line_onoffdash);
        p.pain->line(text_end, y, p.xo + p.width, y,
@@ -3349,7 +3344,7 @@ int LyXText::paintPageBreak(string const & label, int y, DrawRowParams & p)
 
        return 3 * defaultHeight();
 }
+
 
 void LyXText::paintFirstRow(DrawRowParams & p)
 {
@@ -3607,7 +3602,7 @@ void LyXText::paintLastRow(DrawRowParams & p)
                break;
        }
 }
+
 
 void LyXText::paintRowText(DrawRowParams & p)
 {
@@ -3793,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