]> git.lyx.org Git - features.git/blobdiff - src/text2.C
Replace LString.h with support/std_string.h,
[features.git] / src / text2.C
index 6b9387d36880607e33898bc0dd4d1ce85eff1bef..aa8a4fe64178d999fb6f3171d4408d1ac128346e 100644 (file)
 #include <config.h>
 
 #include "lyxtext.h"
-#include "LString.h"
-#include "Lsstream.h"
-#include "paragraph.h"
+#include "support/std_sstream.h"
 #include "funcrequest.h"
 #include "frontends/LyXView.h"
 #include "undo_funcs.h"
 #include "buffer.h"
 #include "buffer_funcs.h"
-#include "bufferparams.h"
-#include "errorlist.h"
 #include "gettext.h"
 #include "BufferView.h"
 #include "CutAndPaste.h"
-#include "frontends/Painter.h"
 #include "frontends/font_metrics.h"
 #include "debug.h"
 #include "lyxrc.h"
+#include "Floating.h"
 #include "FloatList.h"
 #include "language.h"
 #include "ParagraphParameters.h"
@@ -56,7 +52,6 @@
 
 #include <boost/tuple/tuple.hpp>
 
-#include <algorithm>
 
 using namespace lyx::support;
 
@@ -282,7 +277,7 @@ void LyXText::toggleInset()
        else
                inset->open(bv());
 
-       bv()->updateInset();
+       bv()->updateInset(inset);
 }
 
 
@@ -596,7 +591,7 @@ int LyXText::redoParagraphs(ParagraphList::iterator start,
        int pars_width = 0;
        for ( ; start != end; ++start) {
                int par_width = redoParagraphInternal(start);
-               pars_width = std::max(par_width, pars_width);   
+               pars_width = std::max(par_width, pars_width);
        }
        updateRowPositions();
        return pars_width;
@@ -671,25 +666,7 @@ void LyXText::cursorHome()
 
 void LyXText::cursorEnd()
 {
-       if (cursor.par()->empty())
-               return;
-
-       RowList::iterator rit = cursorRow();
-       RowList::iterator next_rit = boost::next(rit);
-       RowList::iterator end = boost::next(rit);
-       ParagraphList::iterator pit = cursor.par();
-       pos_type last_pos = lastPos(*pit, rit);
-
-       if (next_rit == end) {
-               ++last_pos;
-       } else {
-               if (pit->empty() ||
-                   (pit->getChar(last_pos) != ' ' && !pit->isNewline(last_pos))) {
-                       ++last_pos;
-               }
-       }
-
-       setCursor(pit, last_pos);
+       setCursor(cursor.par(), cursorRow()->end() - 1);
 }
 
 
@@ -753,7 +730,7 @@ string LyXText::getStringToIndex()
        else if (selection.start.par() != selection.end.par())
                bv()->owner()->message(_("Cannot index more than one paragraph!"));
        else
-               idxstring = selectionAsString(bv()->buffer(), false);
+               idxstring = selectionAsString(*bv()->buffer(), false);
 
        // Reset cursors to their original position.
        cursor = reset_cursor;
@@ -848,14 +825,14 @@ void LyXText::setParagraph(bool line_top, bool line_bottom,
        setSelection();
        setCursor(tmpcursor.par(), tmpcursor.pos());
        if (inset_owner)
-               bv()->updateInset();
+               bv()->updateInset(inset_owner);
 }
 
 
 // set the counter of a paragraph. This includes the labels
-void LyXText::setCounter(Buffer const * buf, ParagraphList::iterator pit)
+void LyXText::setCounter(Buffer const & buf, ParagraphList::iterator pit)
 {
-       LyXTextClass const & textclass = buf->params.getLyXTextClass();
+       LyXTextClass const & textclass = buf.params.getLyXTextClass();
        LyXLayout_ptr const & layout = pit->layout();
 
        if (pit != ownerParagraphs().begin()) {
@@ -913,7 +890,7 @@ void LyXText::setCounter(Buffer const * buf, ParagraphList::iterator pit)
 
                ostringstream s;
 
-               if (i >= 0 && i <= buf->params.secnumdepth) {
+               if (i >= 0 && i <= buf.params.secnumdepth) {
                        string numbertype;
                        string langtype;
 
@@ -921,9 +898,9 @@ void LyXText::setCounter(Buffer const * buf, ParagraphList::iterator pit)
 
                        // Is there a label? Useful for Chapter layout
                        if (!pit->params().appendix()) {
-                               s << buf->B_(layout->labelstring());
+                               s << buf.B_(layout->labelstring());
                        } else {
-                               s << buf->B_(layout->labelstring_appendix());
+                               s << buf.B_(layout->labelstring_appendix());
                        }
 
                        // Use of an integer is here less than elegant. For now.
@@ -932,7 +909,7 @@ void LyXText::setCounter(Buffer const * buf, ParagraphList::iterator pit)
                                numbertype = "sectioning";
                        } else {
                                numbertype = "appendix";
-                               if (pit->isRightToLeftPar(buf->params))
+                               if (pit->isRightToLeftPar(buf.params))
                                        langtype = "hebrew";
                                else
                                        langtype = "latin";
@@ -986,7 +963,7 @@ void LyXText::setCounter(Buffer const * buf, ParagraphList::iterator pit)
                }
                // In biblio should't be following counters but...
        } else {
-               string s = buf->B_(layout->labelstring());
+               string s = buf.B_(layout->labelstring());
 
                // the caption hack:
                if (layout->labeltype == LABEL_SENSITIVE) {
@@ -1003,9 +980,10 @@ void LyXText::setCounter(Buffer const * buf, ParagraphList::iterator pit)
                                        isOK = true;
                                        break;
                                } else {
+                                       Paragraph const * owner = &ownerPar(buf, in);
                                        tmppit = ownerParagraphs().begin();
                                        for ( ; tmppit != end; ++tmppit)
-                                               if (&*tmppit == in->parOwner())
+                                               if (&*tmppit == owner)
                                                        break;
                                }
                        }
@@ -1025,7 +1003,7 @@ void LyXText::setCounter(Buffer const * buf, ParagraphList::iterator pit)
                                textclass.counters().step(fl.type());
 
                                // Doesn't work... yet.
-                               s = bformat(_("%1$s #:"), buf->B_(fl.name()));
+                               s = bformat(_("%1$s #:"), buf.B_(fl.name()));
                        } else {
                                // par->SetLayout(0);
                                // s = layout->labelstring;
@@ -1071,7 +1049,7 @@ void LyXText::updateCounters()
                        pit->params().depth(maxdepth);
 
                // setCounter can potentially change the labelString.
-               setCounter(bv()->buffer(), pit);
+               setCounter(*bv()->buffer(), pit);
 
                string const & newLabel = pit->params().labelString();
 
@@ -1092,7 +1070,7 @@ void LyXText::insertInset(InsetOld * inset)
        // The character will not be inserted a second time
        insertChar(Paragraph::META_INSET);
        // If we enter a highly editable inset the cursor should be before
-       // the inset. After an Undo LyX tries to call inset->edit(...) 
+       // the inset. After an Undo LyX tries to call inset->edit(...)
        // and fails if the cursor is behind the inset and getInset
        // does not return the inset!
        if (isHighlyEditableInset(inset))
@@ -1111,7 +1089,7 @@ void LyXText::cutSelection(bool doclear, bool realcut)
        // finished. The solution used currently just works, to make it
        // faster we need to be more clever and probably also have more
        // calls to stuffClipboard. (Lgb)
-       bv()->stuffClipboard(selectionAsString(bv()->buffer(), true));
+       bv()->stuffClipboard(selectionAsString(*bv()->buffer(), true));
 
        // This doesn't make sense, if there is no selection
        if (!selection.set())
@@ -1176,7 +1154,7 @@ void LyXText::cutSelection(bool doclear, bool realcut)
 void LyXText::copySelection()
 {
        // stuff the selection onto the X clipboard, from an explicit copy request
-       bv()->stuffClipboard(selectionAsString(bv()->buffer(), true));
+       bv()->stuffClipboard(selectionAsString(*bv()->buffer(), true));
 
        // this doesnt make sense, if there is no selection
        if (!selection.set())
@@ -1359,19 +1337,13 @@ void LyXText::setCursor(LyXCursor & cur, ParagraphList::iterator pit,
 
        RowList::iterator row = getRow(pit, pos);
        int y = row->y();
-       
-       RowList::iterator old_row = row;
-       // if we are before the first char of this row and are still in the
-       // same paragraph and there is a previous row then put the cursor on
-       // the end of the previous row
-       cur.iy(y + row->baseline());
 
        // y is now the beginning of the cursor row
        y += row->baseline();
        // y is now the cursor baseline
        cur.y(y);
 
-       pos_type last = lastPrintablePos(*pit, old_row);
+       pos_type last = lastPos(*pit, row);
 
        // None of these should happen, but we're scaredy-cats
        if (pos > pit->size()) {
@@ -1393,22 +1365,6 @@ void LyXText::setCursor(LyXCursor & cur, ParagraphList::iterator pit,
        float x = getCursorX(pit, row, pos, last, boundary);
        cur.x(int(x));
        cur.x_fix(cur.x());
-       if (old_row != row) {
-               x = getCursorX(pit, old_row, pos, last, boundary);
-               cur.ix(int(x));
-       } else
-               cur.ix(cur.x());
-/* We take out this for the time being because 1) the redraw code is not
-   prepared to this yet and 2) because some good policy has yet to be decided
-   while editting: for instance how to act on rows being created/deleted
-   because of DEPM.
-*/
-#if 0
-       //if the cursor is in a visible row, anchor to it
-       int topy = top_y();
-       if (topy < y && y < topy + bv()->workHeight())
-               anchor_row(row);
-#endif
 }
 
 
@@ -1503,7 +1459,7 @@ void LyXText::setCurrentFont()
        real_current_font = getFont(pit, pos);
 
        if (cursor.pos() == pit->size() &&
-           isBoundary(bv()->buffer(), *pit, cursor.pos()) &&
+           isBoundary(*bv()->buffer(), *pit, cursor.pos()) &&
            !cursor.boundary()) {
                Language const * lang =
                        pit->getParLanguage(bv()->buffer()->params);
@@ -1526,7 +1482,7 @@ pos_type LyXText::getColumnNearX(ParagraphList::iterator pit,
        double fill_label_hfill = rit->fill_label_hfill();
 
        pos_type vc = rit->pos();
-       pos_type last = lastPrintablePos(*pit, rit);
+       pos_type last = lastPos(*pit, rit);
        pos_type c = 0;
        LyXLayout_ptr const & layout = pit->layout();
 
@@ -1604,7 +1560,7 @@ pos_type LyXText::getColumnNearX(ParagraphList::iterator pit,
                bool const rtl = (bidi_level(c) % 2 == 1);
                if (left_side == rtl) {
                        ++c;
-                       boundary = isBoundary(bv()->buffer(), *pit, c);
+                       boundary = isBoundary(*bv()->buffer(), *pit, c);
                }
        }
 
@@ -1645,9 +1601,6 @@ void LyXText::setCursorFromCoordinates(LyXCursor & cur, int x, int y)
        cur.x(x);
        cur.y(y + rit->baseline());
 
-       cur.iy(cur.y());
-       cur.ix(cur.x());
-
        cur.boundary(bound);
 }
 
@@ -1658,7 +1611,7 @@ void LyXText::cursorLeft(bool internal)
                bool boundary = cursor.boundary();
                setCursor(cursor.par(), cursor.pos() - 1, true, false);
                if (!internal && !boundary &&
-                   isBoundary(bv()->buffer(), *cursor.par(), cursor.pos() + 1))
+                   isBoundary(*bv()->buffer(), *cursor.par(), cursor.pos() + 1))
                        setCursor(cursor.par(), cursor.pos() + 1, true, true);
        } else if (cursor.par() != ownerParagraphs().begin()) {
                // steps into the paragraph above
@@ -1679,7 +1632,7 @@ void LyXText::cursorRight(bool internal)
        else if (!at_end) {
                setCursor(cursor.par(), cursor.pos() + 1, true, false);
                if (!internal &&
-                   isBoundary(bv()->buffer(), *cursor.par(), cursor.pos()))
+                   isBoundary(*bv()->buffer(), *cursor.par(), cursor.pos()))
                        setCursor(cursor.par(), cursor.pos(), true, true);
        } else if (boost::next(cursor.par()) != ownerParagraphs().end())
                setCursor(boost::next(cursor.par()), 0);
@@ -1693,8 +1646,8 @@ void LyXText::cursorUp(bool selecting)
        int y = cursor.y() - cursorRow()->baseline() - 1;
        setCursorFromCoordinates(x, y);
        if (!selecting) {
-               int topy = top_y();
-               int y1 = cursor.iy() - topy;
+               int topy = bv_owner->top_y();
+               int y1 = cursor.y() - topy;
                int y2 = y1;
                y -= topy;
                InsetOld * inset_hit = checkInsetHit(x, y1);
@@ -1719,8 +1672,8 @@ void LyXText::cursorDown(bool selecting)
        int y = cursor.y() - cursorRow()->baseline() + cursorRow()->height() + 1;
        setCursorFromCoordinates(x, y);
        if (!selecting && cursorRow() == cursorIRow()) {
-               int topy = top_y();
-               int y1 = cursor.iy() - topy;
+               int topy = bv_owner->top_y();
+               int y1 = cursor.y() - topy;
                int y2 = y1;
                y -= topy;
                InsetOld * inset_hit = checkInsetHit(x, y1);
@@ -1877,7 +1830,7 @@ bool LyXText::deleteEmptyParagraphMechanism(LyXCursor const & old_cursor)
                ParagraphList::iterator endpit = boost::next(old_cursor.par());
                while (endpit != ownerParagraphs().end() && endpit->getDepth())
                        ++endpit;
-       
+
                recordUndo(bv(), Undo::DELETE, old_cursor.par(), boost::prior(endpit));
                cursor = tmpcursor;