X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftext.C;h=075df005f7d354e404cb6afaa318ce4b13b0f69f;hb=15271fce0705ea5611647b5b3d1e993362ff5284;hp=36ba36c2e9460c0d1b8d69091061addd1fd946da;hpb=8cb2e519b3975cc643f2c93706137cf2e6a4f4d8;p=lyx.git diff --git a/src/text.C b/src/text.C index 36ba36c2e9..075df005f7 100644 --- a/src/text.C +++ b/src/text.C @@ -13,9 +13,9 @@ #include #include +#include "lyxtext.h" #include "layout.h" #include "lyxparagraph.h" -#include "lyxtext.h" #include "support/textutils.h" #include "insets/insetbib.h" #include "insets/insettext.h" @@ -23,24 +23,27 @@ #include "gettext.h" #include "bufferparams.h" #include "buffer.h" -#include "minibuffer.h" #include "debug.h" #include "lyxrc.h" #include "LyXView.h" -#include "lyxrow.h" #include "Painter.h" #include "tracer.h" #include "font.h" #include "encoding.h" #include "lyxscreen.h" #include "bufferview_funcs.h" +#include "language.h" using std::max; using std::min; using std::endl; using std::pair; -static const int LYX_PAPER_MARGIN = 20; +namespace { + +int const LYX_PAPER_MARGIN = 20; + +} // namespace anon extern int bibitemMaxWidth(BufferView *, LyXFont const &); @@ -48,7 +51,7 @@ extern int bibitemMaxWidth(BufferView *, LyXFont const &); int LyXText::workWidth(BufferView * bview) const { if (inset_owner) { - return inset_owner->textWidth(bview->painter()); + return inset_owner->textWidth(bview); } return bview->workWidth(); } @@ -74,11 +77,8 @@ unsigned char LyXText::TransformChar(unsigned char c, LyXParagraph * par, unsigned char const prev_char = pos > 0 ? par->GetChar(pos-1) : ' '; unsigned char next_char = ' '; -#ifndef NEW_INSETS - for (LyXParagraph::size_type i = pos+1; i < par->Last(); ++i) -#else + for (LyXParagraph::size_type i = pos+1; i < par->size(); ++i) -#endif if (!Encodings::IsComposeChar_arabic(par->GetChar(i))) { next_char = par->GetChar(i); break; @@ -133,7 +133,7 @@ int LyXText::SingleWidth(BufferView * bview, LyXParagraph * par, int LyXText::SingleWidth(BufferView * bview, LyXParagraph * par, LyXParagraph::size_type pos, char c) const { - LyXFont font = GetFont(bview->buffer(), par, pos); + LyXFont const font = GetFont(bview->buffer(), par, pos); // The most common case is handled first (Asger) if (IsPrintable(c)) { @@ -154,42 +154,6 @@ int LyXText::SingleWidth(BufferView * bview, LyXParagraph * par, } else if (IsHfillChar(c)) { return 3; /* Because of the representation * as vertical lines */ -#ifndef NEW_INSETS - } else if (c == LyXParagraph::META_FOOTNOTE || - c == LyXParagraph::META_MARGIN || - c == LyXParagraph::META_FIG || - c == LyXParagraph::META_TAB || - c == LyXParagraph::META_WIDE_FIG || - c == LyXParagraph::META_WIDE_TAB || - c == LyXParagraph::META_ALGORITHM) { - string fs; - switch (c) { - case LyXParagraph::META_MARGIN: - fs = "margin"; - break; - case LyXParagraph::META_FIG: - fs = "fig"; - break; - case LyXParagraph::META_TAB: - fs = "tab"; - break; - case LyXParagraph::META_ALGORITHM: - fs = "alg"; - break; - case LyXParagraph::META_WIDE_FIG: - fs = "wide-fig"; - break; - case LyXParagraph::META_WIDE_TAB: - fs = "wide-tab"; - break; - case LyXParagraph::META_FOOTNOTE: - fs = "foot"; - break; - } - font.decSize(); - font.decSize(); - return lyxfont::width(fs, font); -#endif } else if (c == LyXParagraph::META_INSET) { Inset * tmpinset = par->GetInset(pos); if (tmpinset) { @@ -209,21 +173,12 @@ int LyXText::SingleWidth(BufferView * bview, LyXParagraph * par, // Returns the paragraph position of the last character in the specified row LyXParagraph::size_type LyXText::RowLast(Row const * row) const { -#ifndef NEW_INSETS - if (row->next() == 0) - return row->par()->Last() - 1; - else if (row->next()->par() != row->par()) - return row->par()->Last() - 1; - else - return row->next()->pos() - 1; -#else if (row->next() == 0) return row->par()->size() - 1; else if (row->next()->par() != row->par()) return row->par()->size() - 1; else return row->next()->pos() - 1; -#endif } @@ -376,7 +331,7 @@ bool LyXText::IsBoundary(Buffer const * buf, LyXParagraph * par, } bool const rtl = bidi_level(pos - 1) % 2; - bool rtl2 = bidi_InRange(pos) + bool const rtl2 = bidi_InRange(pos) ? bidi_level(pos) % 2 : par->isRightToLeftPar(buf->params); return rtl != rtl2; @@ -391,7 +346,7 @@ bool LyXText::IsBoundary(Buffer const * buf, LyXParagraph * par, return false; // This is just for speedup bool const rtl = font.isVisibleRightToLeft(); - bool rtl2 = bidi_InRange(pos) + bool const rtl2 = bidi_InRange(pos) ? bidi_level(pos) % 2 : par->isRightToLeftPar(buf->params); return rtl != rtl2; @@ -415,7 +370,8 @@ void LyXText::draw(BufferView * bview, Row const * row, int const wid = lyxfont::width('n', font); int const asc = lyxfont::maxAscent(font); int const y = offset + row->baseline(); - int xp[3], yp[3]; + int xp[3]; + int yp[3]; if (bidi_level(pos) % 2 == 0) { xp[0] = int(x + wid * 0.375); @@ -468,60 +424,8 @@ void LyXText::draw(BufferView * bview, Row const * row, LyXFont font = GetFont(bview->buffer(), row->par(), pos); LyXFont font2 = font; -#ifndef NEW_INSETS - if (c == LyXParagraph::META_FOOTNOTE - || c == LyXParagraph::META_MARGIN - || c == LyXParagraph::META_FIG - || c == LyXParagraph::META_TAB - || c == LyXParagraph::META_WIDE_FIG - || c == LyXParagraph::META_WIDE_TAB - || c == LyXParagraph::META_ALGORITHM) { - string fs; - switch (c) { - case LyXParagraph::META_MARGIN: - fs = "margin"; - break; - case LyXParagraph::META_FIG: - fs = "fig"; - break; - case LyXParagraph::META_TAB: - fs = "tab"; - break; - case LyXParagraph::META_ALGORITHM: - fs = "alg"; - break; - case LyXParagraph::META_WIDE_FIG: - fs = "wide-fig"; - break; - case LyXParagraph::META_WIDE_TAB: - fs = "wide-tab"; - break; - case LyXParagraph::META_FOOTNOTE: - fs = "foot"; - break; - } - font.decSize(); - font.decSize(); - - // calculate the position of the footnotemark - int const y = (row->baseline() - lyxfont::maxAscent(font2) - + lyxfont::maxAscent(font)); - - font.setColor(LColor::footnote); - - // draw it and set new x position - - pain.text(int(x), offset + y, fs, font); - x += lyxfont::width(fs, font); - pain.line(int(tmpx), offset + row->baseline(), - int(x), offset + row->baseline(), - LColor::footnote); - ++vpos; - return; - } else -#endif - if (c == LyXParagraph::META_INSET) { + if (c == LyXParagraph::META_INSET) { Inset * tmpinset = row->par()->GetInset(pos); if (tmpinset) { // tmpinset->update(bview, font, false); @@ -686,25 +590,14 @@ int LyXText::LeftMargin(BufferView * bview, Row const * row) const textclasslist .TextClass(bview->buffer()->params.textclass) .defaultfont()); -#ifndef NEW_INSETS - if (row->par()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE) { - LyXFont font(LyXFont::ALL_SANE); - font.setSize(LyXFont::SIZE_SMALL); - x += lyxfont::width("Mwide-figM", font) - + LYX_PAPER_MARGIN/2; - } -#endif + // this is the way, LyX handles the LaTeX-Environments. // I have had this idea very late, so it seems to be a // later added hack and this is true if (!row->par()->GetDepth()) { if (!row->par()->GetLayout()) { // find the previous same level paragraph -#ifndef NEW_INSETS - if (row->par()->FirstPhysicalPar()->previous()) { -#else if (row->par()->previous()) { -#endif LyXParagraph * newpar = row->par() ->DepthHook(row->par()->GetDepth()); if (newpar && @@ -724,38 +617,23 @@ int LyXText::LeftMargin(BufferView * bview, Row const * row) const // check wether it is a sufficent paragraph if (newpar -#ifndef NEW_INSETS - && newpar->footnoteflag == row->par()->footnoteflag -#endif && textclasslist .Style(bview->buffer()->params.textclass, newpar->GetLayout()).isEnvironment()) { Row dummyrow; dummyrow.par(newpar); -#ifndef NEW_INSETS - dummyrow.pos(newpar->Last()); -#else dummyrow.pos(newpar->size()); -#endif x = LeftMargin(bview, &dummyrow); } else { // this is no longer an error, because this function // is used to clear impossible depths after changing // a layout. Since there is always a redo, // LeftMargin() is always called -#ifndef NEW_INSETS - row->par()->FirstPhysicalPar()->params.depth(0); -#else row->par()->params.depth(0); -#endif } if (newpar && !row->par()->GetLayout()) { -#ifndef NEW_INSETS - if (newpar->FirstPhysicalPar()->params.noindent()) -#else if (newpar->params.noindent()) -#endif parindent.erase(); else parindent = textclasslist @@ -853,34 +731,14 @@ int LyXText::LeftMargin(BufferView * bview, Row const * row) const } break; } - if ((workWidth(bview) > 0) && - (row->par()->params.pextraType() == LyXParagraph::PEXTRA_INDENT)) { - if (!row->par()->params.pextraWidthp().empty()) { - x += workWidth(bview) * - lyx::atoi(row->par()->params.pextraWidthp()) / 100; - } else if (!row->par()->params.pextraWidth().empty()) { - int xx = VSpace(row->par()->params.pextraWidth()).inPixels(bview); - if (xx > workWidth(bview)) - xx = workWidth(bview) * 80 / 100; - x += xx; - } else { // should not happen - LyXFont font(LyXFont::ALL_SANE); - x += lyxfont::width("XXXXXX", font); - } - } int align; // wrong type -#ifndef NEW_INSETS - if (row->par()->FirstPhysicalPar()->params.align() == LYX_ALIGN_LAYOUT) - align = layout.align; - else - align = row->par()->FirstPhysicalPar()->params.align(); -#else + if (row->par()->params.align() == LYX_ALIGN_LAYOUT) align = layout.align; else align = row->par()->params.align(); -#endif + // set the correct parindent if (row->pos() == 0) { if ((layout.labeltype == LABEL_NO_LABEL @@ -889,9 +747,6 @@ int LyXText::LeftMargin(BufferView * bview, Row const * row) const || (layout.labeltype == LABEL_STATIC && layout.latextype == LATEX_ENVIRONMENT && ! row->par()->IsFirstInSequence())) -#ifndef NEW_INSETS - && row->par() == row->par()->FirstPhysicalPar() -#endif && align == LYX_ALIGN_BLOCK && !row->par()->params.noindent() && (row->par()->layout || @@ -928,11 +783,6 @@ int LyXText::RightMargin(Buffer const * buf, Row const * row) const .TextClass(buf->params.textclass) .defaultfont()); -#ifndef NEW_INSETS - if (row->par()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE) { - x += LYX_PAPER_MARGIN / 2; - } -#endif // this is the way, LyX handles the LaTeX-Environments. // I have had this idea very late, so it seems to be a // later added hack and this is true @@ -941,27 +791,15 @@ int LyXText::RightMargin(Buffer const * buf, Row const * row) const LyXParagraph * newpar = row->par(); -#ifndef NEW_INSETS - do { - newpar = newpar->FirstPhysicalPar()->previous(); - if (newpar) - newpar = newpar->FirstPhysicalPar(); - } while (newpar && newpar->GetDepth() >= row->par()->GetDepth() - && newpar->footnoteflag == row->par()->footnoteflag); -#else do { newpar = newpar->previous(); } while (newpar && newpar->GetDepth() >= row->par()->GetDepth()); -#endif // make a corresponding row. Needed to call LeftMargin() // check wether it is a sufficent paragraph if (newpar -#ifndef NEW_INSETS - && newpar->footnoteflag == row->par()->footnoteflag -#endif && textclasslist.Style(buf->params.textclass, newpar->GetLayout()) .isEnvironment()) { @@ -974,11 +812,7 @@ int LyXText::RightMargin(Buffer const * buf, Row const * row) const // is used to clear impossible depths after changing // a layout. Since there is always a redo, // LeftMargin() is always called -#ifndef NEW_INSETS - row->par()->FirstPhysicalPar()->params.depth(0); -#else row->par()->params.depth(0); -#endif } } @@ -998,11 +832,7 @@ int LyXText::LabelEnd(BufferView * bview, Row const * row) const == MARGIN_MANUAL) { Row tmprow; tmprow = *row; -#ifndef NEW_INSETS - tmprow.pos(row->par()->Last()); -#else tmprow.pos(row->par()->size()); -#endif return LeftMargin(bview, &tmprow); /* just the beginning of the main body */ } else @@ -1019,11 +849,7 @@ LyXText::NextBreakPoint(BufferView * bview, Row const * row, int width) const LyXParagraph * par = row->par(); if (width < 0) -#ifndef NEW_INSETS - return par->Last(); -#else return par->size(); -#endif LyXParagraph::size_type const pos = row->pos(); @@ -1041,18 +867,10 @@ LyXText::NextBreakPoint(BufferView * bview, Row const * row, int width) const if (layout.margintype == MARGIN_RIGHT_ADDRESS_BOX) { /* special code for right address boxes, only newlines count */ -#ifndef NEW_INSETS - while (i < par->Last()) { -#else while (i < par->size()) { -#endif if (par->IsNewline(i)) { last_separator = i; -#ifndef NEW_INSETS - i = par->Last() - 1; // this means break -#else i = par->size() - 1; // this means break -#endif //x = width; } else if (par->GetChar(i) == LyXParagraph::META_INSET && par->GetInset(i) && par->GetInset(i)->display()){ @@ -1062,13 +880,8 @@ LyXText::NextBreakPoint(BufferView * bview, Row const * row, int width) const } } else { // Last position is an invariant -#ifndef NEW_INSETS - LyXParagraph::size_type const last = - par->Last(); -#else LyXParagraph::size_type const last = par->size(); -#endif // this is the usual handling int x = LeftMargin(bview, row); bool doitonetime = true; @@ -1151,7 +964,7 @@ LyXText::NextBreakPoint(BufferView * bview, Row const * row, int width) const int LyXText::Fill(BufferView * bview, Row * row, int paper_width) const { if (paper_width < 0) - return 0; + return 20; int w; // get the pure distance @@ -1196,6 +1009,13 @@ int LyXText::Fill(BufferView * bview, Row * row, int paper_width) const } int const fill = paper_width - w - RightMargin(bview->buffer(), row); +#ifdef WITH_WARNINGS +#warning Please fix me (Jug!) +#endif +#if 0 + if (fill < 0) + return 0; +#endif return fill; } @@ -1360,22 +1180,13 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const /* Correction: only the fontsize count. The other properties are taken from the layoutfont. Nicer on the screen :) */ -#ifndef NEW_INSETS - LyXParagraph * par = row_ptr->par()->LastPhysicalPar(); - LyXParagraph * firstpar = row_ptr->par()->FirstPhysicalPar(); -#else LyXParagraph * par = row_ptr->par(); LyXParagraph * firstpar = row_ptr->par(); -#endif LyXLayout const & layout = textclasslist.Style(bview->buffer()->params.textclass, firstpar->GetLayout()); -#ifndef NEW_INSETS - LyXFont font = GetFont(bview->buffer(), par, par->Last() - 1); -#else LyXFont font = GetFont(bview->buffer(), par, par->size() - 1); -#endif LyXFont::FONT_SIZE const size = font.size(); font = GetFont(bview->buffer(), par, -1); font.setSize(size); @@ -1406,7 +1217,7 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const tmpfont = GetFont(bview->buffer(), row_ptr->par(), pos); tmpinset = row_ptr->par()->GetInset(pos); if (tmpinset) { - tmpinset->update(bview, tmpfont); +// tmpinset->update(bview, tmpfont); asc = tmpinset->ascent(bview, tmpfont); desc = tmpinset->descent(bview, tmpfont); maxwidth += tmpinset->width(bview, tmpfont); @@ -1441,10 +1252,10 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const row_ptr->ascent_of_text(maxasc); - /* is it a top line? */ + // is it a top line? if (!row_ptr->pos() && (row_ptr->par() == firstpar)) { - /* some parksips VERY EASY IMPLEMENTATION */ + // some parksips VERY EASY IMPLEMENTATION if (bview->buffer()->params.paragraph_separation == BufferParams::PARSEP_SKIP) { if (layout.isParagraph() @@ -1459,31 +1270,26 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const maxasc += bview->buffer()->params.getDefSkip().inPixels(bview); } - /* the paper margins */ -#ifndef NEW_INSETS - if (!row_ptr->par()->previous_ && bv_owner) - maxasc += LYX_PAPER_MARGIN; -#else + // the paper margins if (!row_ptr->par()->previous() && bv_owner) maxasc += LYX_PAPER_MARGIN; -#endif - /* add the vertical spaces, that the user added */ + // add the vertical spaces, that the user added if (firstpar->params.spaceTop().kind() != VSpace::NONE) maxasc += int(firstpar->params.spaceTop().inPixels(bview)); - /* do not forget the DTP-lines! - * there height depends on the font of the nearest character */ + // do not forget the DTP-lines! + // there height depends on the font of the nearest character if (firstpar->params.lineTop()) maxasc += 2 * lyxfont::ascent('x', GetFont(bview->buffer(), firstpar, 0)); - /* and now the pagebreaks */ + // and now the pagebreaks if (firstpar->params.pagebreakTop()) maxasc += 3 * DefaultHeight(); - /* this is special code for the chapter, since the label of this - * layout is printed in an extra row */ + // This is special code for the chapter, since the label of this + // layout is printed in an extra row if (layout.labeltype == LABEL_COUNTER_CHAPTER && bview->buffer()->params.secnumdepth >= 0) { float spacing_val = 1.0; @@ -1501,7 +1307,7 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const spacing_val); } - /* special code for the top label */ + // special code for the top label if ((layout.labeltype == LABEL_TOP_ENVIRONMENT || layout.labeltype == LABEL_BIBLIO || layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT) @@ -1525,8 +1331,8 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const + layout.labelbottomsep * DefaultHeight()); } - /* and now the layout spaces, for example before and after a section, - * or between the items of a itemize or enumerate environment */ + // and now the layout spaces, for example before and after a section, + // or between the items of a itemize or enumerate environment if (!firstpar->params.pagebreakTop()) { LyXParagraph * prev = row_ptr->par()->previous(); @@ -1565,7 +1371,7 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const if (firstpar->previous() && firstpar->previous()->GetDepth() == 0 && firstpar->previous()->GetLayout() != firstpar->GetLayout()) { - /* avoid parsep */ + // avoid parsep } else if (firstpar->previous()){ maxasc += int(layout.parsep * DefaultHeight()); @@ -1574,47 +1380,32 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const } } - /* is it a bottom line? */ - if ( -#ifndef NEW_INSETS - row_ptr->par()->ParFromPos(RowLast(row_ptr) + 1) == par -#else - row_ptr->par() == par -#endif + // is it a bottom line? + if (row_ptr->par() == par && (!row_ptr->next() || row_ptr->next()->par() != row_ptr->par())) { - /* the paper margins */ -#ifndef NEW_INSETS - if (!par->next_ && bv_owner) - maxdesc += LYX_PAPER_MARGIN; -#else + // the paper margins if (!par->next() && bv_owner) maxdesc += LYX_PAPER_MARGIN; -#endif - /* add the vertical spaces, that the user added */ + // add the vertical spaces, that the user added if (firstpar->params.spaceBottom().kind() != VSpace::NONE) maxdesc += int(firstpar->params.spaceBottom().inPixels(bview)); - /* do not forget the DTP-lines! - * there height depends on the font of the nearest character */ -#ifndef NEW_INSETS - if (firstpar->params.lineBottom()) - maxdesc += 2 * lyxfont::ascent('x', GetFont(bview->buffer(), - par, par->Last() - 1)); -#else + // do not forget the DTP-lines! + // there height depends on the font of the nearest character if (firstpar->params.lineBottom()) maxdesc += 2 * lyxfont::ascent('x', GetFont(bview->buffer(), par, par->size() - 1)); -#endif - /* and now the pagebreaks */ + // and now the pagebreaks if (firstpar->params.pagebreakBottom()) maxdesc += 3 * DefaultHeight(); - /* and now the layout spaces, for example before and after a section, - * or between the items of a itemize or enumerate environment */ + // and now the layout spaces, for example before and after + // a section, or between the items of a itemize or enumerate + // environment if (!firstpar->params.pagebreakBottom() && row_ptr->par()->next()) { LyXParagraph * nextpar = row_ptr->par()->next(); LyXParagraph * comparepar = row_ptr->par(); @@ -1644,18 +1435,19 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const } } - /* incalculate the layout spaces */ + // incalculate the layout spaces maxasc += int(layoutasc * 2 / (2 + firstpar->GetDepth())); maxdesc += int(layoutdesc * 2 / (2 + firstpar->GetDepth())); - /* calculate the new height of the text */ + // calculate the new height of the text height -= row_ptr->height(); row_ptr->height(maxasc + maxdesc + labeladdon); row_ptr->baseline(maxasc + labeladdon); height += row_ptr->height(); - float x, dummy; + float x; + float dummy; PrepareToPrint(bview, row_ptr, x, dummy, dummy, dummy, false); row_ptr->width(int(maxwidth + x)); if (inset_owner) { @@ -1678,11 +1470,7 @@ void LyXText::AppendParagraph(BufferView * bview, Row * row) const // The last character position of a paragraph is an invariant so we can // safely get it here. (Asger) -#ifndef NEW_INSETS - int const lastposition = row->par()->Last(); -#else int const lastposition = row->par()->size(); -#endif do { // Get the next breakpoint int z = NextBreakPoint(bview, row, workWidth(bview)); @@ -1712,15 +1500,11 @@ void LyXText::BreakAgain(BufferView * bview, Row * row) const bool not_ready = true; do { - /* get the next breakpoint */ + // get the next breakpoint LyXParagraph::size_type z = NextBreakPoint(bview, row, workWidth(bview)); Row * tmprow = row; -#ifndef NEW_INSETS - if (z < row->par()->Last()) { -#else if (z < row->par()->size()) { -#endif if (!row->next() || (row->next() && row->next()->par() != row->par())) { // insert a new row ++z; @@ -1764,11 +1548,7 @@ void LyXText::BreakAgainOneRow(BufferView * bview, Row * row) LyXParagraph::size_type z = NextBreakPoint(bview, row, workWidth(bview)); Row * tmprow = row; -#ifndef NEW_INSETS - if (z < row->par()->Last()) { -#else if (z < row->par()->size()) { -#endif if (!row->next() || (row->next() && row->next()->par() != row->par())) { /* insert a new row */ @@ -1809,16 +1589,6 @@ void LyXText::BreakParagraph(BufferView * bview, char keep_layout) cursor.par()->GetLayout()); // this is only allowed, if the current paragraph is not empty or caption -#ifndef NEW_INSETS - if ((cursor.par()->Last() <= 0 - && !cursor.par()->IsDummy()) - && layout.labeltype!= LABEL_SENSITIVE) - return; - - SetUndo(bview->buffer(), Undo::INSERT, - cursor.par()->ParFromPos(cursor.pos())->previous_, - cursor.par()->ParFromPos(cursor.pos())->next_); -#else if ((cursor.par()->size() <= 0) && layout.labeltype!= LABEL_SENSITIVE) return; @@ -1826,16 +1596,11 @@ void LyXText::BreakParagraph(BufferView * bview, char keep_layout) SetUndo(bview->buffer(), Undo::INSERT, cursor.par()->previous(), cursor.par()->next()); -#endif // Always break behind a space // // It is better to erase the space (Dekel) -#ifndef NEW_INSETS - if (cursor.pos() < cursor.par()->Last() -#else if (cursor.pos() < cursor.par()->size() -#endif && cursor.par()->IsLineSeparator(cursor.pos())) cursor.par()->Erase(cursor.pos()); // cursor.pos(cursor.pos() + 1); @@ -1852,10 +1617,10 @@ void LyXText::BreakParagraph(BufferView * bview, char keep_layout) if (layout.labeltype == LABEL_SENSITIVE) { if (!cursor.pos()) // set to standard-layout - cursor.par()->SetLayout(bview->buffer()->params, 0); + cursor.par()->SetLayout(0); else // set to standard-layout - cursor.par()->next()->SetLayout(bview->buffer()->params, 0); + cursor.par()->next()->SetLayout(0); } /* if the cursor is at the beginning of a row without prior newline, @@ -1886,11 +1651,7 @@ void LyXText::BreakParagraph(BufferView * bview, char keep_layout) SetHeightOfRow(bview, cursor.row()); -#ifndef NEW_INSETS - while (cursor.par()->next()->Last() -#else while (cursor.par()->next()->size() -#endif && cursor.par()->next()->IsNewline(0)) cursor.par()->next()->Erase(0); @@ -1912,64 +1673,6 @@ void LyXText::BreakParagraph(BufferView * bview, char keep_layout) } -#ifndef NEW_INSETS -void LyXText::OpenFootnote(BufferView * bview) -{ - LyXParagraph * endpar,* tmppar; - Row * row; - - LyXParagraph * par = cursor.par()->ParFromPos(cursor.pos()); - - /* if there is no footnote in this paragraph, just return. */ - if (!par->next_ - || par->next_->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE) - return; - - /* ok, move the cursor right before the footnote */ - - /* just a little faster than using CursorRight() */ - for (cursor.pos(0); - cursor.par()->ParFromPos(cursor.pos()) != par;) { - cursor.pos(cursor.pos() + 1); - } - - /* now the cursor is at the beginning of the physical par */ - SetCursor(bview, cursor.par(), - cursor.pos() + cursor.par()->ParFromPos(cursor.pos())->size()); - - /* the cursor must be exactly before the footnote */ - par = cursor.par()->ParFromPos(cursor.pos()); - - status = LyXText::NEED_MORE_REFRESH; - refresh_row = cursor.row(); - refresh_y = cursor.y() - cursor.row()->baseline(); - - tmppar = cursor.par(); - endpar = cursor.par()->next(); - row = cursor.row(); - - tmppar->OpenFootnote(cursor.pos()); - RemoveParagraph(row); - /* set the dimensions of the cursor row */ - row->fill(Fill(bview, row, workWidth(bview))); - SetHeightOfRow(bview, row); - // CHECK See comment on top of text.C - tmppar = tmppar->next(); - - while (tmppar != endpar) { - if (tmppar) { - InsertParagraph(bview, tmppar, row); - while (row->next() && row->next()->par() == tmppar) - row = row->next(); - tmppar = tmppar->next(); - } - } - SetCursor(bview, par->next_, 0); - sel_cursor = cursor; -} -#endif - - // Just a macro to make some thing easier. void LyXText::RedoParagraph(BufferView * bview) const { @@ -1984,14 +1687,8 @@ void LyXText::RedoParagraph(BufferView * bview) const void LyXText::InsertChar(BufferView * bview, char c) { SetUndo(bview->buffer(), Undo::INSERT, -#ifndef NEW_INSETS - cursor.par()->ParFromPos(cursor.pos())->previous_, - cursor.par()->ParFromPos(cursor.pos())->next_ -#else cursor.par()->previous(), - cursor.par()->next() -#endif - ); + cursor.par()->next()); // When the free-spacing option is set for the current layout, // disable the double-space checking @@ -2068,13 +1765,10 @@ void LyXText::InsertChar(BufferView * bview, char c) * current font */ // Get the font that is used to calculate the baselineskip -#ifndef NEW_INSETS - LyXParagraph::size_type const lastpos = cursor.par()->Last(); -#else LyXParagraph::size_type const lastpos = cursor.par()->size(); -#endif - LyXFont rawparfont = cursor.par()->GetFontSettings(bview->buffer()->params, - lastpos - 1); + LyXFont rawparfont = + cursor.par()->GetFontSettings(bview->buffer()->params, + lastpos - 1); bool jumped_over_space = false; @@ -2083,26 +1777,20 @@ void LyXText::InsertChar(BufferView * bview, char c) && cursor.par()->IsLineSeparator(cursor.pos() - 1)) || (cursor.pos() > 0 && cursor.par()->IsNewline(cursor.pos() - 1)) - || (cursor.pos() == 0 -#ifndef NEW_INSETS - && !(cursor.par()->previous() - && cursor.par()->previous()->footnoteflag - == LyXParagraph::OPEN_FOOTNOTE) -#endif - )) { - if (cursor.pos() == 0 ) - bview->owner()->getMiniBuffer()->Set(_("You cannot insert a space at the beginning of a paragraph. Please read the Tutorial.")); - else - bview->owner()->getMiniBuffer()->Set(_("You cannot type two spaces this way. Please read the Tutorial.")); + || (cursor.pos() == 0)) { + static bool sent_space_message = false; + if (!sent_space_message) { + if (cursor.pos() == 0) + bview->owner()->message(_("You cannot insert a space at the beginning of a paragraph. Please read the Tutorial.")); + else + bview->owner()->message(_("You cannot type two spaces this way. Please read the Tutorial.")); + sent_space_message = true; + } charInserted(); return; } } else if (IsNewlineChar(c)) { -#ifndef NEW_INSETS - if (cursor.par()->FirstPhysicalPar() == cursor.par() -#else if (cursor.par() == cursor.par() -#endif && cursor.pos() <= BeginningOfMainBody(bview->buffer(), cursor.par())) { charInserted(); return; @@ -2111,11 +1799,7 @@ void LyXText::InsertChar(BufferView * bview, char c) * of a paragraph or behind labels. * TeX does not allow that. */ -#ifndef NEW_INSETS - if (cursor.pos() < cursor.par()->Last() && -#else if (cursor.pos() < cursor.par()->size() && -#endif cursor.par()->IsLineSeparator(cursor.pos())) // newline always after a blank! CursorRight(bview); @@ -2183,11 +1867,7 @@ void LyXText::InsertChar(BufferView * bview, char c) need_break_row = 0; // check, wether the last characters font has changed. -#ifndef NEW_INSETS - if (cursor.pos() && cursor.pos() == cursor.par()->Last() -#else if (cursor.pos() && cursor.pos() == cursor.par()->size() -#endif && rawparfont != rawtmpfont) RedoHeightOfParagraph(bview, cursor); @@ -2248,11 +1928,7 @@ void LyXText::InsertChar(BufferView * bview, char c) } // check, wether the last characters font has changed. -#ifndef NEW_INSETS - if (cursor.pos() && cursor.pos() == cursor.par()->Last() -#else if (cursor.pos() && cursor.pos() == cursor.par()->size() -#endif && rawparfont != rawtmpfont) { RedoHeightOfParagraph(bview, cursor); } else { @@ -2302,13 +1978,6 @@ void LyXText::PrepareToPrint(BufferView * bview, if (is_rtl) { x = (workWidth(bview) > 0) ? RightMargin(bview->buffer(), row) : 0; -#ifndef NEW_INSETS - if (row->par()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE) { - LyXFont font(LyXFont::ALL_SANE); - font.setSize(LyXFont::SIZE_SMALL); - x += lyxfont::width("Mwide-figM", font); - } -#endif } else x = (workWidth(bview) > 0) ? LeftMargin(bview, row) : 0; @@ -2334,17 +2003,10 @@ void LyXText::PrepareToPrint(BufferView * bview, // is it block, flushleft or flushright? // set x how you need it int align; -#ifndef NEW_INSETS - if (row->par()->FirstPhysicalPar()->params.align() == LYX_ALIGN_LAYOUT) - align = textclasslist.Style(bview->buffer()->params.textclass, row->par()->GetLayout()).align; - else - align = row->par()->FirstPhysicalPar()->params.align(); -#else if (row->par()->params.align() == LYX_ALIGN_LAYOUT) align = textclasslist.Style(bview->buffer()->params.textclass, row->par()->GetLayout()).align; else align = row->par()->params.align(); -#endif // center displayed insets Inset * inset; @@ -2411,11 +2073,7 @@ void LyXText::CursorRightOneWord(BufferView * bview) const LyXCursor tmpcursor = cursor; // CHECK See comment on top of text.C -#ifndef NEW_INSETS - if (tmpcursor.pos() == tmpcursor.par()->Last() -#else if (tmpcursor.pos() == tmpcursor.par()->size() -#endif && tmpcursor.par()->next()) { tmpcursor.par(tmpcursor.par()->next()); tmpcursor.pos(0); @@ -2423,25 +2081,15 @@ void LyXText::CursorRightOneWord(BufferView * bview) const int steps = 0; // Skip through initial nonword stuff. -#ifndef NEW_INSETS - while (tmpcursor.pos() < tmpcursor.par()->Last() && -#else while (tmpcursor.pos() < tmpcursor.par()->size() && -#endif - ! tmpcursor.par()->IsWord( tmpcursor.pos() ) ) - { + ! tmpcursor.par()->IsWord( tmpcursor.pos())) { // printf("Current pos1 %d", tmpcursor.pos()) ; tmpcursor.pos(tmpcursor.pos() + 1); ++steps; } // Advance through word. -#ifndef NEW_INSETS - while (tmpcursor.pos() < tmpcursor.par()->Last() && -#else while (tmpcursor.pos() < tmpcursor.par()->size() && -#endif - tmpcursor.par()->IsWord( tmpcursor.pos() ) ) - { + tmpcursor.par()->IsWord( tmpcursor.pos())) { // printf("Current pos2 %d", tmpcursor.pos()) ; tmpcursor.pos(tmpcursor.pos() + 1); ++steps; @@ -2454,19 +2102,11 @@ void LyXText::CursorRightOneWord(BufferView * bview) const void LyXText::CursorTab(BufferView * bview) const { LyXCursor tmpcursor = cursor; -#ifndef NEW_INSETS - while (tmpcursor.pos() < tmpcursor.par()->Last() -#else while (tmpcursor.pos() < tmpcursor.par()->size() -#endif && !tmpcursor.par()->IsNewline(tmpcursor.pos())) tmpcursor.pos(tmpcursor.pos() + 1); -#ifndef NEW_INSETS - if (tmpcursor.pos() == tmpcursor.par()->Last()){ -#else if (tmpcursor.pos() == tmpcursor.par()->size()){ -#endif if (tmpcursor.par()->next()) { tmpcursor.par(tmpcursor.par()->next()); tmpcursor.pos(0); @@ -2488,27 +2128,17 @@ void LyXText::CursorLeftOneWord(BufferView * bview) const && (tmpcursor.par()->IsSeparator(tmpcursor.pos() - 1) || tmpcursor.par()->IsKomma(tmpcursor.pos() - 1)) && !(tmpcursor.par()->IsHfill(tmpcursor.pos() - 1) -#ifndef NEW_INSETS - || tmpcursor.par()->IsFloat(tmpcursor.pos() - 1) -#endif || tmpcursor.par()->IsInset(tmpcursor.pos() - 1))) tmpcursor.pos(tmpcursor.pos() - 1); if (tmpcursor.pos() && (tmpcursor.par()->IsInset(tmpcursor.pos() - 1) -#ifndef NEW_INSETS - || tmpcursor.par()->IsFloat(tmpcursor.pos() - 1) -#endif || tmpcursor.par()->IsHfill(tmpcursor.pos() - 1))) { tmpcursor.pos(tmpcursor.pos() - 1); } else if (!tmpcursor.pos()) { if (tmpcursor.par()->previous()){ tmpcursor.par(tmpcursor.par()->previous()); -#ifndef NEW_INSETS - tmpcursor.pos(tmpcursor.par()->Last()); -#else tmpcursor.pos(tmpcursor.par()->size()); -#endif } } else { // Here, tmpcursor != 0 while (tmpcursor.pos() > 0 && @@ -2532,11 +2162,7 @@ void LyXText::SelectWord(BufferView * bview) // set the sel cursor sel_cursor = cursor; -#ifndef NEW_INSETS - while (cursor.pos() < cursor.par()->Last() -#else while (cursor.pos() < cursor.par()->size() -#endif && !cursor.par()->IsSeparator(cursor.pos()) && !cursor.par()->IsKomma(cursor.pos()) ) cursor.pos(cursor.pos() + 1); @@ -2554,11 +2180,7 @@ void LyXText::SelectWord(BufferView * bview) bool LyXText::SelectWordWhenUnderCursor(BufferView * bview) { if (!selection && -#ifndef NEW_INSETS - cursor.pos() > 0 && cursor.pos() < cursor.par()->Last() -#else cursor.pos() > 0 && cursor.pos() < cursor.par()->size() -#endif && !cursor.par()->IsSeparator(cursor.pos()) && !cursor.par()->IsKomma(cursor.pos()) && !cursor.par()->IsSeparator(cursor.pos() -1) @@ -2580,40 +2202,20 @@ string const LyXText::SelectNextWord(BufferView * bview, // If this is not the very first word, skip rest of // current word because we are probably in the middle // of a word if there is text here. -#ifndef NEW_INSETS - if (cursor.pos() || cursor.par()->previous_) { - while (cursor.pos() < cursor.par()->Last() - && cursor.par()->IsLetter(cursor.pos())) - cursor.pos(cursor.pos() + 1); - } -#else if (cursor.pos() || cursor.par()->previous()) { while (cursor.pos() < cursor.par()->size() && cursor.par()->IsLetter(cursor.pos())) cursor.pos(cursor.pos() + 1); } -#endif // Now, skip until we have real text (will jump paragraphs) -#ifndef NEW_INSETS - while ((cursor.par()->Last() > cursor.pos() -#else while ((cursor.par()->size() > cursor.pos() -#endif && (!cursor.par()->IsLetter(cursor.pos()) || cursor.par()->getFont(bview->buffer()->params, cursor.pos()) .latex() == LyXFont::ON)) -#ifndef NEW_INSETS - || (cursor.par()->Last() == cursor.pos() -#else || (cursor.par()->size() == cursor.pos() -#endif && cursor.par()->next())){ -#ifndef NEW_INSETS - if (cursor.pos() == cursor.par()->Last()) { -#else if (cursor.pos() == cursor.par()->size()) { -#endif cursor.par(cursor.par()->next()); cursor.pos(0); } else @@ -2633,11 +2235,7 @@ string const LyXText::SelectNextWord(BufferView * bview, // and find the end of the word // (optional hyphens are part of a word) -#ifndef NEW_INSETS - while (cursor.pos() < cursor.par()->Last() -#else while (cursor.pos() < cursor.par()->size() -#endif && (cursor.par()->IsLetter(cursor.pos())) || (cursor.par()->GetChar(cursor.pos()) == LyXParagraph::META_INSET && cursor.par()->GetInset(cursor.pos()) != 0 @@ -2671,11 +2269,7 @@ void LyXText::SelectSelectedWord(BufferView * bview) std::ostringstream latex; // now find the end of the word -#ifndef NEW_INSETS - while (cursor.pos() < cursor.par()->Last() -#else while (cursor.pos() < cursor.par()->size() -#endif && (cursor.par()->IsLetter(cursor.pos()) || (cursor.par()->GetChar(cursor.pos()) == LyXParagraph::META_INSET && cursor.par()->GetInset(cursor.pos()) != 0 @@ -2694,11 +2288,7 @@ void LyXText::SelectSelectedWord(BufferView * bview) /* -------> Delete from cursor up to the end of the current or next word. */ void LyXText::DeleteWordForward(BufferView * bview) { -#ifndef NEW_INSETS - if (!cursor.par()->Last()) -#else if (!cursor.par()->size()) -#endif CursorRight(bview); else { LyXCursor tmpcursor = cursor; @@ -2719,11 +2309,7 @@ void LyXText::DeleteWordForward(BufferView * bview) /* -------> Delete from cursor to start of current or prior word. */ void LyXText::DeleteWordBackward(BufferView * bview) { -#ifndef NEW_INSETS - if (!cursor.par()->Last()) -#else if (!cursor.par()->size()) -#endif CursorLeft(bview); else { LyXCursor tmpcursor = cursor; @@ -2742,11 +2328,7 @@ void LyXText::DeleteWordBackward(BufferView * bview) /* -------> Kill to end of line. */ void LyXText::DeleteLineForward(BufferView * bview) { -#ifndef NEW_INSETS - if (!cursor.par()->Last()) -#else if (!cursor.par()->size()) -#endif // Paragraph is empty, so we just go to the right CursorRight(bview); else { @@ -2779,22 +2361,12 @@ void LyXText::DeleteLineForward(BufferView * bview) // version did. (JMarc) void LyXText::ChangeWordCase(BufferView * bview, LyXText::TextCase action) { -#ifndef NEW_INSETS - LyXParagraph * tmppar = cursor.par()->ParFromPos(cursor.pos()); - - SetUndo(bview->buffer(),Undo::FINISH, - tmppar->previous_, tmppar->next_); - - LyXParagraph::size_type tmppos = - cursor.par()->PositionInParFromPos(cursor.pos()); -#else LyXParagraph * tmppar = cursor.par(); SetUndo(bview->buffer(),Undo::FINISH, tmppar->previous(), tmppar->next()); LyXParagraph::size_type tmppos = cursor.pos(); -#endif while (tmppos < tmppar->size()) { unsigned char c = tmppar->GetChar(tmppos); @@ -2824,19 +2396,45 @@ void LyXText::ChangeWordCase(BufferView * bview, LyXText::TextCase action) } +void LyXText::TransposeChars(BufferView const & bview) +{ + LyXParagraph * tmppar = cursor.par(); + + SetUndo(bview.buffer(), Undo::FINISH, + tmppar->previous(), tmppar->next()); + + LyXParagraph::size_type tmppos = cursor.pos(); + + // First decide if it is possible to transpose at all + + // We are at the beginning of a paragraph. + if (tmppos == 0) return; + + // We are at the end of a paragraph. + if (tmppos == tmppar->size() - 1) return; + + unsigned char c1 = tmppar->GetChar(tmppos); + unsigned char c2 = tmppar->GetChar(tmppos - 1); + + if (c1 != LyXParagraph::META_INSET + && c2 != LyXParagraph::META_INSET) { + tmppar->SetChar(tmppos, c2); + tmppar->SetChar(tmppos - 1, c1); + } + // We should have an implementation that handles insets + // as well, but that will have to come later. (Lgb) + CheckParagraph(const_cast(&bview), tmppar, tmppos); +} + + void LyXText::Delete(BufferView * bview) { // this is a very easy implementation LyXCursor old_cursor = cursor; int const old_cur_par_id = old_cursor.par()->id(); -#ifndef NEW_INSETS - int const old_cur_par_prev_id = old_cursor.par()->previous_ ? - old_cursor.par()->previous_->id() : 0; -#else int const old_cur_par_prev_id = old_cursor.par()->previous() ? old_cursor.par()->previous()->id() : 0; -#endif // just move to the right CursorRight(bview); @@ -2847,12 +2445,7 @@ void LyXText::Delete(BufferView * bview) // and that can very well delete the par or par->previous in // old_cursor. Will a solution where we compare paragraph id's //work better? - if ( -#ifndef NEW_INSETS - (cursor.par()->previous_ ? cursor.par()->previous_->id() : 0) -#else - (cursor.par()->previous() ? cursor.par()->previous()->id() : 0) -#endif + if ((cursor.par()->previous() ? cursor.par()->previous()->id() : 0) == old_cur_par_prev_id && cursor.par()->id() != old_cur_par_id) return; // delete-empty-paragraph-mechanism has done it @@ -2862,14 +2455,8 @@ void LyXText::Delete(BufferView * bview) LyXCursor tmpcursor = cursor; cursor = old_cursor; // to make sure undo gets the right cursor position SetUndo(bview->buffer(), Undo::DELETE, -#ifndef NEW_INSETS - cursor.par()->ParFromPos(cursor.pos())->previous_, - cursor.par()->ParFromPos(cursor.pos())->next_ -#else cursor.par()->previous(), - cursor.par()->next() -#endif - ); + cursor.par()->next()); cursor = tmpcursor; Backspace(bview); } @@ -2879,13 +2466,10 @@ void LyXText::Delete(BufferView * bview) void LyXText::Backspace(BufferView * bview) { // Get the font that is used to calculate the baselineskip -#ifndef NEW_INSETS - LyXParagraph::size_type lastpos = cursor.par()->Last(); -#else LyXParagraph::size_type lastpos = cursor.par()->size(); -#endif - LyXFont rawparfont = cursor.par()->GetFontSettings(bview->buffer()->params, - lastpos - 1); + LyXFont rawparfont = + cursor.par()->GetFontSettings(bview->buffer()->params, + lastpos - 1); if (cursor.pos() == 0) { // The cursor is at the beginning of a paragraph, @@ -2896,27 +2480,14 @@ void LyXText::Backspace(BufferView * bview) // is it an empty paragraph? if ((lastpos == 0 - || (lastpos == 1 && cursor.par()->IsSeparator(0))) -#ifndef NEW_INSETS - && !(cursor.par()->next() - && cursor.par()->footnoteflag == LyXParagraph::NO_FOOTNOTE - && cursor.par()->next()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE) -#endif - ) { + || (lastpos == 1 && cursor.par()->IsSeparator(0)))) { // This is an empty paragraph and we delete it just by moving the cursor one step // left and let the DeleteEmptyParagraphMechanism handle the actual deletion // of the paragraph. -#ifndef NEW_INSETS - if (cursor.par()->previous_) { - LyXParagraph * tmppar = cursor.par()->previous_->FirstPhysicalPar(); - if (cursor.par()->GetLayout() == tmppar->GetLayout() - && cursor.par()->footnoteflag == tmppar->footnoteflag -#else if (cursor.par()->previous()) { LyXParagraph * tmppar = cursor.par()->previous(); if (cursor.par()->GetLayout() == tmppar->GetLayout() -#endif && cursor.par()->GetAlign() == tmppar->GetAlign()) { // Inherit bottom DTD from the paragraph below. // (the one we are deleting) @@ -2939,19 +2510,11 @@ void LyXText::Backspace(BufferView * bview) } } -#ifndef NEW_INSETS - if (cursor.par()->ParFromPos(cursor.pos())->previous_) { - SetUndo(bview->buffer(), Undo::DELETE, - cursor.par()->ParFromPos(cursor.pos())->previous_->previous_, - cursor.par()->ParFromPos(cursor.pos())->next_); - } -#else if (cursor.par()->previous()) { SetUndo(bview->buffer(), Undo::DELETE, cursor.par()->previous()->previous(), cursor.par()->next()); } -#endif LyXParagraph * tmppar = cursor.par(); Row * tmprow = cursor.row(); @@ -2962,14 +2525,9 @@ void LyXText::Backspace(BufferView * bview) // without the dreaded mechanism. (JMarc) if (cursor.par()->previous()) { // steps into the above paragraph. -#ifndef NEW_INSETS - SetCursorIntern(bview, cursor.par()->previous(), - cursor.par()->previous()->Last(), false); -#else SetCursorIntern(bview, cursor.par()->previous(), cursor.par()->previous()->size(), false); -#endif } /* Pasting is not allowed, if the paragraphs have different @@ -2985,9 +2543,6 @@ void LyXText::Backspace(BufferView * bview) if (cursor.par() != tmppar && (cursor.par()->GetLayout() == tmppar->GetLayout() || tmppar->GetLayout() == 0 /*standard*/) -#ifndef NEW_INSETS - && cursor.par()->footnoteflag == tmppar->footnoteflag -#endif && cursor.par()->GetAlign() == tmppar->GetAlign()) { RemoveParagraph(tmprow); @@ -3026,14 +2581,8 @@ void LyXText::Backspace(BufferView * bview) /* this is the code for a normal backspace, not pasting * any paragraphs */ SetUndo(bview->buffer(), Undo::DELETE, -#ifndef NEW_INSETS - cursor.par()->ParFromPos(cursor.pos())->previous_, - cursor.par()->ParFromPos(cursor.pos())->next_ -#else cursor.par()->previous(), - cursor.par()->next() -#endif - ); + cursor.par()->next()); // We used to do CursorLeftIntern() here, but it is // not a good idea since it triggers the auto-delete // mechanism. So we do a CursorLeftIntern()-lite, @@ -3080,13 +2629,8 @@ void LyXText::Backspace(BufferView * bview) if (cursor.par()->IsLineSeparator(cursor.pos() - 1)) cursor.pos(cursor.pos() - 1); -#ifndef NEW_INSETS - if (cursor.pos() < cursor.par()->Last() - && !cursor.par()->IsSeparator(cursor.pos())) { -#else if (cursor.pos() < cursor.par()->size() && !cursor.par()->IsSeparator(cursor.pos())) { -#endif cursor.par()->InsertChar(cursor.pos(), ' '); SetCharFont(bview->buffer(), cursor.par(), cursor.pos(), current_font); @@ -3109,11 +2653,7 @@ void LyXText::Backspace(BufferView * bview) } // delete newlines at the beginning of paragraphs -#ifndef NEW_INSETS - while (cursor.par()->Last() && -#else while (cursor.par()->size() && -#endif cursor.par()->IsNewline(cursor.pos()) && cursor.pos() == BeginningOfMainBody(bview->buffer(), cursor.par())) { @@ -3138,11 +2678,7 @@ void LyXText::Backspace(BufferView * bview) Row * tmprow = row->previous(); // maybe the current row is now empty -#ifndef NEW_INSETS - if (row->pos() >= row->par()->Last()) { -#else if (row->pos() >= row->par()->size()) { -#endif // remove it RemoveRow(row); need_break_row = 0; @@ -3168,15 +2704,9 @@ void LyXText::Backspace(BufferView * bview) //current_font = rawtmpfont; //real_current_font = realtmpfont; // check, whether the last character's font has changed. -#ifndef NEW_INSETS - if (rawparfont != - cursor.par()->GetFontSettings(bview->buffer()->params, - cursor.par()->Last() - 1)) -#else if (rawparfont != cursor.par()->GetFontSettings(bview->buffer()->params, cursor.par()->size() - 1)) -#endif RedoHeightOfParagraph(bview, cursor); return; } @@ -3184,22 +2714,14 @@ void LyXText::Backspace(BufferView * bview) // break the cursor row again if (row->next() && row->next()->par() == row->par() && -#ifndef NEW_INSETS - (RowLast(row) == row->par()->Last() - 1 || -#else (RowLast(row) == row->par()->size() - 1 || -#endif NextBreakPoint(bview, row, workWidth(bview)) != RowLast(row))) { /* it can happen that a paragraph loses one row * without a real breakup. This is when a word * is to long to be broken. Well, I don t care this * hack ;-) */ -#ifndef NEW_INSETS - if (RowLast(row) == row->par()->Last() - 1) -#else if (RowLast(row) == row->par()->size() - 1) -#endif RemoveRow(row->next()); refresh_y = y; @@ -3243,11 +2765,7 @@ void LyXText::Backspace(BufferView * bview) SetCursor(bview, cursor.par(), cursor.pos(), false, !cursor.boundary()); -#ifndef NEW_INSETS - lastpos = cursor.par()->Last(); -#else lastpos = cursor.par()->size(); -#endif if (cursor.pos() == lastpos) SetCurrentFont(bview); @@ -3268,7 +2786,7 @@ void LyXText::Backspace(BufferView * bview) void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, Row * row_ptr, int y, bool cleared) { - /* returns a printed row */ + // returns a printed row Painter & pain = bview->painter(); bool const is_rtl = @@ -3276,11 +2794,10 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, LyXParagraph::size_type const last = RowLastPrintable(row_ptr); - LyXParagraph::size_type vpos, pos; - float x; + LyXParagraph::size_type vpos; + LyXParagraph::size_type pos; + float tmpx; - int y_top; - int y_bottom; LyXFont font(LyXFont::ALL_SANE); int maxdesc; @@ -3290,6 +2807,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, return; } + float x; float fill_separator; float fill_hfill; float fill_label_hfill; @@ -3301,7 +2819,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, x += x_offset; // clear the area where we want to paint/print - int ww = bview->workWidth(); + int const ww = bview->workWidth(); bool clear_area = true; Inset * inset = 0; @@ -3350,7 +2868,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, if (selection) { int const w = (inset_owner ? inset_owner->width(bview, font) : ww); - /* selection code */ + // selection code if (bidi_same_direction) { if (sel_start_cursor.row() == row_ptr && sel_end_cursor.row() == row_ptr) { @@ -3445,7 +2963,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, sel_start_cursor.pos() <= pos) && (sel_end_cursor.row() != row_ptr || pos < sel_end_cursor.pos()) ) - /// Here we do not use x_offset as x_offset was + // Here we do not use x_offset as x_offset was // added to x. pain.fillRectangle(int(old_tmpx), y_offset, @@ -3465,133 +2983,10 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, } int box_x = 0; -#ifndef NEW_INSETS - if (row_ptr->par()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE) { - LyXFont font(LyXFont::ALL_SANE); - font.setSize(LyXFont::SIZE_FOOTNOTE); - font.setColor(LColor::footnote); - - box_x = LYX_PAPER_MARGIN + lyxfont::width(" wide-tab ", font); - if (row_ptr->previous() && - row_ptr->previous()->par()->footnoteflag != LyXParagraph::OPEN_FOOTNOTE){ - string fs; - switch (row_ptr->par()->footnotekind) { - case LyXParagraph::MARGIN: - fs = " margin"; - break; - case LyXParagraph::FIG: - fs = " fig"; - break; - case LyXParagraph::TAB: - fs = " tab"; - break; - case LyXParagraph::WIDE_FIG: - fs = " wide-fig"; - break; - case LyXParagraph::WIDE_TAB: - fs = " wide-tab"; - break; - case LyXParagraph::ALGORITHM: - fs = " alg"; - break; - case LyXParagraph::FOOTNOTE: - fs = " foot"; - break; - } - - pain.fillRectangle(LYX_PAPER_MARGIN, - y_offset + 1, - box_x - LYX_PAPER_MARGIN, - int(lyxfont::maxAscent(font) - + lyxfont::maxDescent(font)), - LColor::footnotebg); - - pain.line(LYX_PAPER_MARGIN, y_offset, - workWidth(bview) - LYX_PAPER_MARGIN, y_offset, - LColor::footnoteframe); - - pain.text(LYX_PAPER_MARGIN, - y_offset + int(lyxfont::maxAscent(font)) + 1, - fs, font); - - pain.line(LYX_PAPER_MARGIN, y_offset, - LYX_PAPER_MARGIN, - y_offset + int(lyxfont::maxAscent(font) - + lyxfont::maxDescent(font)), - LColor::footnoteframe); - - pain.line(LYX_PAPER_MARGIN, - y_offset + int(lyxfont::maxAscent(font) - + lyxfont::maxDescent(font)) + 1, - box_x, - y_offset + int(lyxfont::maxAscent(font) - + lyxfont::maxDescent(font)) + 1, - LColor::footnoteframe); - - } - - /* draw the open floats in a red box */ - pain.line(box_x, y_offset, - box_x, y_offset + row_ptr->height(), - LColor::footnoteframe); - - pain.line(workWidth(bview) - LYX_PAPER_MARGIN, - y_offset, - workWidth(bview) - LYX_PAPER_MARGIN, - y_offset + row_ptr->height(), - LColor::footnoteframe); - - - // Draw appendix lines - LyXParagraph * p = row_ptr->par()->PreviousBeforeFootnote()->FirstPhysicalPar(); - if (p->params.appendix()) { - pain.line(1, y_offset, - 1, y_offset + row_ptr->height(), - LColor::appendixline); - pain.line(workWidth(bview) - 2, y_offset, - workWidth(bview) - 2, - y_offset + row_ptr->height(), - LColor::appendixline); - } - // Draw minipage line - bool const minipage = - (p->params.pextraType() == LyXParagraph::PEXTRA_MINIPAGE); - if (minipage) - pain.line(LYX_PAPER_MARGIN/5, y_offset, - LYX_PAPER_MARGIN/5, - y_offset + row_ptr->height() - 1, - LColor::minipageline); - - // Draw depth lines - int const depth = p->GetDepth(); - for (int i = 1; i <= depth; ++i) { - int const line_x = (LYX_PAPER_MARGIN / 5) * - (i + minipage); - pain.line(line_x, y_offset, line_x, - y_offset + row_ptr->height() - 1, - LColor::depthbar); - } - } else if (row_ptr->previous() && - row_ptr->previous()->par()->footnoteflag - == LyXParagraph::OPEN_FOOTNOTE) { - LyXFont font(LyXFont::ALL_SANE); - font.setSize(LyXFont::SIZE_FOOTNOTE); - - int const box_x = LYX_PAPER_MARGIN - + lyxfont::width(" wide-tab ", font); - - pain.line(box_x, y_offset, - workWidth(bview) - LYX_PAPER_MARGIN, - y_offset, LColor::footnote); - } -#endif // Draw appendix lines -#ifndef NEW_INSETS - LyXParagraph * firstpar = row_ptr->par()->FirstPhysicalPar(); -#else LyXParagraph * firstpar = row_ptr->par(); -#endif + if (firstpar->params.appendix()) { pain.line(1, y_offset, 1, y_offset + row_ptr->height(), @@ -3601,44 +2996,19 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, LColor::appendixline); } - // Draw minipage line - bool const minipage = - (firstpar->params.pextraType() == LyXParagraph::PEXTRA_MINIPAGE); - if (minipage) - pain.line(LYX_PAPER_MARGIN/5 + box_x, y_offset, - LYX_PAPER_MARGIN/5 + box_x, - y_offset + row_ptr->height() - 1, - LColor::minipageline); - // Draw depth lines int const depth = firstpar->GetDepth(); if (depth > 0) { int next_depth = 0; int prev_depth = 0; if (row_ptr->next()) -#ifndef NEW_INSETS - if (row_ptr->par()->footnoteflag == - row_ptr->next()->par()->footnoteflag) next_depth = row_ptr->next()->par()->GetDepth(); - else if (row_ptr->par()->footnoteflag != LyXParagraph::OPEN_FOOTNOTE) - next_depth = depth; -#else - next_depth = row_ptr->next()->par()->GetDepth(); -#endif if (row_ptr->previous()) -#ifndef NEW_INSETS - if (row_ptr->par()->footnoteflag == - row_ptr->previous()->par()->footnoteflag) prev_depth = row_ptr->previous()->par()->GetDepth(); - else if (row_ptr->par()->footnoteflag != LyXParagraph::OPEN_FOOTNOTE) - prev_depth = depth; -#else - prev_depth = row_ptr->previous()->par()->GetDepth(); -#endif for (int i = 1; i <= depth; ++i) { int const line_x = (LYX_PAPER_MARGIN / 5) * - (i + minipage) + box_x + x_offset; + i + box_x + x_offset; pain.line(line_x, y_offset, line_x, y_offset + row_ptr->height() - 1 - (i - next_depth - 1) * 3, LColor::depthbar); @@ -3659,28 +3029,30 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, textclasslist.Style(bview->buffer()->params.textclass, row_ptr->par()->GetLayout()); - y_top = 0; - y_bottom = row_ptr->height(); + int y_top = 0; + int y_bottom = row_ptr->height(); - /* is it a first row? */ + // is it a first row? if (!row_ptr->pos() && (row_ptr->par() == firstpar)) { - /* start of appendix? */ + // start of appendix? if (row_ptr->par()->params.startOfAppendix()) { pain.line(1, y_offset, ww - 2, y_offset, LColor::appendixline); } - /* think about the margins */ + // think about the margins if (!row_ptr->previous() && bv_owner) y_top += LYX_PAPER_MARGIN; - /* draw a top pagebreak */ + // draw a top pagebreak if (row_ptr->par()->params.pagebreakTop()) { LyXFont pb_font; pb_font.setColor(LColor::pagebreak).decSize(); - int w = 0, a = 0, d = 0; + int w = 0; + int a = 0; + int d = 0; pain.line(0, y_offset + y_top + 2*DefaultHeight(), ww, y_offset + y_top + 2 * DefaultHeight(), @@ -3702,7 +3074,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, } if (row_ptr->par()->params.spaceTop().kind() == VSpace::VFILL) { - /* draw a vfill top */ + // draw a vfill top pain.line(0, y_offset + 2 + y_top, LYX_PAPER_MARGIN, y_offset + 2 + y_top, LColor::vfillline); @@ -3720,11 +3092,11 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, y_top += 3 * DefaultHeight(); } - /* think about user added space */ + // think about user added space y_top += int(row_ptr->par()->params.spaceTop().inPixels(bview)); - /* think about the parskip */ - /* some parskips VERY EASY IMPLEMENTATION */ + // think about the parskip + // some parskips VERY EASY IMPLEMENTATION if (bview->buffer()->params.paragraph_separation == BufferParams::PARSEP_SKIP) { if (layout.latextype == LATEX_PARAGRAPH && firstpar->GetDepth() == 0 @@ -3738,7 +3110,8 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, y_top += bview->buffer()->params.getDefSkip().inPixels(bview); } - if (row_ptr->par()->params.lineTop()) { /* draw a top line */ + if (row_ptr->par()->params.lineTop()) { + // draw a top line y_top += lyxfont::ascent('x', GetFont(bview->buffer(), row_ptr->par(), 0)); @@ -3755,7 +3128,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, row_ptr->par(), 0)); } - /* should we print a label? */ + // should we print a label? if (layout.labeltype >= LABEL_STATIC && (layout.labeltype != LABEL_STATIC || layout.latextype != LATEX_ENVIRONMENT @@ -3768,8 +3141,11 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, if (layout.labeltype == LABEL_COUNTER_CHAPTER) { if (bview->buffer()->params.secnumdepth >= 0) { - /* this is special code for the chapter layout. This is printed in - * an extra row and has a pagebreak at the top. */ + // this is special code for + // the chapter layout. This is + // printed in an extra row + // and has a pagebreak at + // the top. float spacing_val = 1.0; if (!row_ptr->par()->params.spacing().isDefault()) { spacing_val = row_ptr->par()->params.spacing().getValue(); @@ -3790,24 +3166,18 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, if (is_rtl) { tmpx = ww - LeftMargin(bview, row_ptr) + lyxfont::width(layout.labelsep, font); -#ifndef NEW_INSETS - if (row_ptr->par()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE) { - LyXFont font(LyXFont::ALL_SANE); - font.setSize(LyXFont::SIZE_SMALL); - tmpx += lyxfont::width("Mwide-fixM", font); - } -#endif } else tmpx = x - lyxfont::width(layout.labelsep, font) - lyxfont::width(tmpstring, font); - /* draw it! */ + // draw it! pain.text(int(tmpx), y_offset + row_ptr->baseline(), tmpstring, font); } } - /* the labels at the top of an environment. More or less for bibliography */ + // the labels at the top of an environment. + // More or less for bibliography } else if (layout.labeltype == LABEL_TOP_ENVIRONMENT || layout.labeltype == LABEL_BIBLIO || layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT) { @@ -3857,43 +3227,34 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, } } - /* is it a last row? */ -#ifndef NEW_INSETS - LyXParagraph * par = row_ptr->par()->LastPhysicalPar(); -#else + // is it a last row? LyXParagraph * par = row_ptr->par(); -#endif - if ( -#ifndef NEW_INSETS - row_ptr->par()->ParFromPos(last + 1) == par -#else - row_ptr->par() == par -#endif - && (!row_ptr->next() || row_ptr->next()->par() != row_ptr->par())) - { - /* think about the margins */ + if (row_ptr->par() == par + && (!row_ptr->next() || row_ptr->next()->par() != row_ptr->par())) { + // think about the margins if (!row_ptr->next() && bv_owner) y_bottom -= LYX_PAPER_MARGIN; - /* draw a bottom pagebreak */ + // draw a bottom pagebreak if (firstpar->params.pagebreakBottom()) { LyXFont pb_font; pb_font.setColor(LColor::pagebreak).decSize(); - int w = 0, a = 0, d = 0; - pain.line(0, - y_offset + y_bottom - 2 * DefaultHeight(), - ww, - y_offset + y_bottom - 2 * DefaultHeight(), - LColor::pagebreak, - Painter::line_onoffdash) - .rectText(0, - 0, + int const y_place = y_offset + y_bottom + - 2 * DefaultHeight(); + + int w = 0; + int a = 0; + int d = 0; + pain + .line(0, y_place, ww, y_place, + LColor::pagebreak, + Painter::line_onoffdash) + .rectText(0, 0, _("Page Break (bottom)"), pb_font, LColor::background, LColor::background, false, w, a, d); - pain.rectText((ww - w) / 2, - y_offset + y_top + 2 * DefaultHeight() + d, + pain.rectText((ww - w) / 2, y_place + d, _("Page Break (bottom)"), pb_font, LColor::background, @@ -3902,39 +3263,34 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, } if (firstpar->params.spaceBottom().kind() == VSpace::VFILL) { - /* draw a vfill bottom */ - pain.line(0, y_offset + y_bottom - 3 * DefaultHeight(), - LYX_PAPER_MARGIN, - y_offset + y_bottom - 3 * DefaultHeight(), + // draw a vfill bottom + int const y_place = y_offset + y_bottom + - 3 * DefaultHeight(); + + pain.line(0, y_place, + LYX_PAPER_MARGIN, y_place, LColor::vfillline); pain.line(0, y_offset + y_bottom - 2, LYX_PAPER_MARGIN, y_offset + y_bottom - 2, LColor::vfillline); pain.line(LYX_PAPER_MARGIN / 2, - y_offset + y_bottom - 3 * DefaultHeight(), + y_place, LYX_PAPER_MARGIN / 2, y_offset + y_bottom - 2, LColor::vfillline); y_bottom -= 3 * DefaultHeight(); } - /* think about user added space */ + // think about user added space y_bottom -= int(firstpar->params.spaceBottom().inPixels(bview)); if (firstpar->params.lineBottom()) { - /* draw a bottom line */ -#ifndef NEW_INSETS - y_bottom -= lyxfont::ascent('x', - GetFont(bview->buffer(), - par, - par->Last() - 1)); -#else + // draw a bottom line y_bottom -= lyxfont::ascent('x', GetFont(bview->buffer(), par, par->size() - 1)); -#endif int const w = (inset_owner ? inset_owner->width(bview, font) : ww); int const xp = static_cast(inset_owner ? x : 0); @@ -3942,17 +3298,10 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, w, y_offset + y_bottom, LColor::topline, Painter::line_solid, Painter::line_thick); -#ifndef NEW_INSETS - y_bottom -= lyxfont::ascent('x', - GetFont(bview->buffer(), - par, - par->Last() - 1)); -#else y_bottom -= lyxfont::ascent('x', GetFont(bview->buffer(), par, par->size() - 1)); -#endif } // draw an endlabel @@ -3968,15 +3317,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, int const y = (y_offset + row_ptr->baseline()) - size; int x = is_rtl ? LYX_PAPER_MARGIN : ww - LYX_PAPER_MARGIN - size; -#ifndef NEW_INSETS - if (row_ptr->par()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE) - if (is_rtl) { - LyXFont font(LyXFont::ALL_SANE); - font.setSize(LyXFont::SIZE_SMALL); - x += lyxfont::width("Mwide-figM", font); - } else - x -= LYX_PAPER_MARGIN/2; -#endif + if (row_ptr->fill() <= size) x += (size - row_ptr->fill() + 1) * (is_rtl ? -1 : 1); if (endlabel == END_LABEL_BOX) { @@ -4011,7 +3352,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, } } - /* draw the text in the pixmap */ + // draw the text in the pixmap vpos = row_ptr->pos(); @@ -4195,153 +3536,13 @@ int LyXText::GetColumnNearX(BufferView * bview, Row * row, int & x, } -#ifndef NEW_INSETS -/* turn the selection into a new environment. If there is no selection, -* create an empty environment */ -void LyXText::InsertFootnoteEnvironment(BufferView * bview, - LyXParagraph::footnote_kind kind) -{ - /* no footnoteenvironment in a footnoteenvironment */ - if (cursor.par()->footnoteflag != LyXParagraph::NO_FOOTNOTE) { - WriteAlert(_("Impossible operation"), - _("You can't insert a float in a float!"), - _("Sorry.")); - return; - } - /* no marginpars in minipages */ - if (kind == LyXParagraph::MARGIN - && cursor.par()->params.pextraType() == LyXParagraph::PEXTRA_MINIPAGE) { - WriteAlert(_("Impossible operation"), - _("You can't insert a marginpar in a minipage!"), - _("Sorry.")); - return; - } - - /* this doesnt make sense, if there is no selection */ - bool dummy_selection = false; - if (!selection) { - sel_start_cursor = cursor; /* dummy selection */ - sel_end_cursor = cursor; - dummy_selection = true; - } - - LyXParagraph * tmppar; - - /* a test to make sure there is not already a footnote - * in the selection. */ - - tmppar = sel_start_cursor.par()->ParFromPos(sel_start_cursor.pos()); - - while (tmppar != sel_end_cursor.par()->ParFromPos(sel_end_cursor.pos()) && - tmppar->footnoteflag == LyXParagraph::NO_FOOTNOTE) - tmppar = tmppar->next_; - - if (tmppar != sel_end_cursor.par()->ParFromPos(sel_end_cursor.pos()) - || tmppar->footnoteflag != LyXParagraph::NO_FOOTNOTE) { - WriteAlert(_("Impossible operation"), - _("Float would include float!"), - _("Sorry.")); - return; - } - - /* ok we have a selection. This is always between sel_start_cursor - * and sel_end cursor */ - - SetUndo(bview->buffer(), Undo::FINISH, - sel_start_cursor.par()->ParFromPos(sel_start_cursor.pos())->previous_, - sel_end_cursor.par()->ParFromPos(sel_end_cursor.pos())->next_); - - if (sel_end_cursor.pos() > 0 - && sel_end_cursor.par()->IsLineSeparator(sel_end_cursor.pos() - 1)) - sel_end_cursor.pos(sel_end_cursor.pos() - 1); - /* please break before a space at the end */ - if (sel_start_cursor.par() == sel_end_cursor.par() - && sel_start_cursor.pos() > sel_end_cursor.pos()) - sel_start_cursor.pos(sel_start_cursor.pos() - 1); - - sel_end_cursor.par()->BreakParagraphConservative(bview->buffer()->params, sel_end_cursor.pos()); - - sel_end_cursor.par(sel_end_cursor.par()->next()); - sel_end_cursor.pos(0); - - // don't forget to insert a dummy layout paragraph if necessary - if (sel_start_cursor.par()->GetLayout() != sel_end_cursor.par()->layout){ - sel_end_cursor.par()->BreakParagraphConservative(bview->buffer()->params, 0); - sel_end_cursor.par()->layout = LYX_DUMMY_LAYOUT; - sel_end_cursor.par(sel_end_cursor.par()->next_); - } - else - sel_end_cursor.par()->layout = LYX_DUMMY_LAYOUT; - - cursor = sel_end_cursor; - - /* please break behind a space, if there is one. The space should - * be erased too */ - if (sel_start_cursor.pos() > 0 - && sel_start_cursor.par()->IsLineSeparator(sel_start_cursor.pos() - 1)) - sel_start_cursor.pos(sel_start_cursor.pos() - 1); - if (sel_start_cursor.par()->IsLineSeparator(sel_start_cursor.pos())) { - sel_start_cursor.par()->Erase(sel_start_cursor.pos()); - } - - sel_start_cursor.par()->BreakParagraphConservative(bview->buffer()->params, - sel_start_cursor.pos()); - tmppar = sel_start_cursor.par()->next(); - - if (dummy_selection) { - tmppar->Clear(); - if (kind == LyXParagraph::TAB - || kind == LyXParagraph::FIG - || kind == LyXParagraph::WIDE_TAB - || kind == LyXParagraph::WIDE_FIG - || kind == LyXParagraph::ALGORITHM) { - pair lres = - textclasslist.NumberOfLayout(bview->buffer()->params.textclass, - "Caption"); - LyXTextClass::size_type lay; - if (lres.first) { - // layout fount - lay = lres.second; - } else { - // layout not found - lay = 0; // use default layout "Standard" (0) - } - tmppar->SetLayout(bview->buffer()->params, lay); - } - } else { - if (sel_start_cursor.pos() > 0) { - /* the footnote-environment should begin with a standard layout. - * Imagine you insert a footnote within an enumeration, you - * certainly do not want an enumerated footnote! */ - tmppar->Clear(); - } else { - /* this is a exception the user would sometimes expect, I hope */ - sel_start_cursor.par()->Clear(); - } - } - - while (tmppar != sel_end_cursor.par()) { - tmppar->footnoteflag = LyXParagraph::OPEN_FOOTNOTE; - tmppar->footnotekind = kind; - tmppar = tmppar->next(); - } - - RedoParagraphs(bview, sel_start_cursor, sel_end_cursor.par()->next()); - - SetCursor(bview, sel_start_cursor.par()->next(), 0); - - ClearSelection(bview); -} -#endif - - // returns pointer to a specified row Row * LyXText::GetRow(LyXParagraph * par, LyXParagraph::size_type pos, int & y) const { if (!firstrow) return 0; - + Row * tmprow = firstrow; y = 0;