X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftext.C;h=0997ed241e06991a9c2f0843ee07a61b7de2a2ce;hb=664eb7ff45dbb4fabc22ec0b56798031a82335b1;hp=cedf1085b07ad8935c51322597180eb5195ca1af;hpb=b95e8f250dca6264900d8aedf98e8a24411c36d4;p=lyx.git diff --git a/src/text.C b/src/text.C index cedf1085b0..0997ed241e 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,28 @@ #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" +#include "lyxfunc.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 +52,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,7 +78,11 @@ 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; @@ -129,7 +137,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)) { @@ -205,12 +213,21 @@ 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 } @@ -363,7 +380,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; @@ -378,7 +395,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; @@ -402,7 +419,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); @@ -719,7 +737,11 @@ int LyXText::LeftMargin(BufferView * bview, Row const * row) const 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 @@ -836,6 +858,7 @@ int LyXText::LeftMargin(BufferView * bview, Row const * row) const } break; } +#ifndef NO_PEXTRA if ((workWidth(bview) > 0) && (row->par()->params.pextraType() == LyXParagraph::PEXTRA_INDENT)) { if (!row->par()->params.pextraWidthp().empty()) { @@ -851,6 +874,7 @@ int LyXText::LeftMargin(BufferView * bview, Row const * row) const x += lyxfont::width("XXXXXX", font); } } +#endif int align; // wrong type #ifndef NEW_INSETS @@ -981,7 +1005,11 @@ 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 @@ -998,7 +1026,11 @@ 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(); @@ -1016,10 +1048,18 @@ 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()){ @@ -1029,8 +1069,13 @@ 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; @@ -1113,7 +1158,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 @@ -1158,6 +1203,8 @@ int LyXText::Fill(BufferView * bview, Row * row, int paper_width) const } int const fill = paper_width - w - RightMargin(bview->buffer(), row); + if (fill < 0) + return 0; return fill; } @@ -1332,8 +1379,12 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const 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); @@ -1364,7 +1415,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); @@ -1399,10 +1450,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() @@ -1417,7 +1468,7 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const maxasc += bview->buffer()->params.getDefSkip().inPixels(bview); } - /* the paper margins */ + // the paper margins #ifndef NEW_INSETS if (!row_ptr->par()->previous_ && bv_owner) maxasc += LYX_PAPER_MARGIN; @@ -1426,22 +1477,22 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const 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; @@ -1459,7 +1510,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) @@ -1483,8 +1534,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(); @@ -1523,7 +1574,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()); @@ -1532,7 +1583,7 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const } } - /* is it a bottom line? */ + // is it a bottom line? if ( #ifndef NEW_INSETS row_ptr->par()->ParFromPos(RowLast(row_ptr) + 1) == par @@ -1541,7 +1592,7 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const #endif && (!row_ptr->next() || row_ptr->next()->par() != row_ptr->par())) { - /* the paper margins */ + // the paper margins #ifndef NEW_INSETS if (!par->next_ && bv_owner) maxdesc += LYX_PAPER_MARGIN; @@ -1550,22 +1601,30 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const 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 */ + // 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 + 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(); @@ -1595,11 +1654,11 @@ 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); @@ -1629,8 +1688,11 @@ 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)); @@ -1660,11 +1722,15 @@ 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; @@ -1707,8 +1773,12 @@ void LyXText::BreakAgainOneRow(BufferView * bview, Row * row) // 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 */ @@ -1749,29 +1819,33 @@ void LyXText::BreakParagraph(BufferView * bview, char keep_layout) cursor.par()->GetLayout()); // this is only allowed, if the current paragraph is not empty or caption - if ((cursor.par()->Last() <= 0 #ifndef NEW_INSETS - && !cursor.par()->IsDummy() -#endif - ) - && - layout.labeltype!= LABEL_SENSITIVE) - return; + if ((cursor.par()->Last() <= 0 + && !cursor.par()->IsDummy()) + && layout.labeltype!= LABEL_SENSITIVE) + return; SetUndo(bview->buffer(), Undo::INSERT, -#ifndef NEW_INSETS cursor.par()->ParFromPos(cursor.pos())->previous_, - cursor.par()->ParFromPos(cursor.pos())->next_ + cursor.par()->ParFromPos(cursor.pos())->next_); #else + if ((cursor.par()->size() <= 0) + && layout.labeltype!= LABEL_SENSITIVE) + return; + + SetUndo(bview->buffer(), Undo::INSERT, cursor.par()->previous(), - cursor.par()->next() + 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); @@ -1788,10 +1862,18 @@ void LyXText::BreakParagraph(BufferView * bview, char keep_layout) if (layout.labeltype == LABEL_SENSITIVE) { if (!cursor.pos()) // set to standard-layout +#ifndef NEW_INSETS cursor.par()->SetLayout(bview->buffer()->params, 0); +#else + cursor.par()->SetLayout(0); +#endif else // set to standard-layout +#ifndef NEW_INSETS cursor.par()->next()->SetLayout(bview->buffer()->params, 0); +#else + cursor.par()->next()->SetLayout(0); +#endif } /* if the cursor is at the beginning of a row without prior newline, @@ -1821,8 +1903,12 @@ void LyXText::BreakParagraph(BufferView * bview, char keep_layout) cursor.row()->fill(Fill(bview, cursor.row(), workWidth(bview))); 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); @@ -2000,7 +2086,11 @@ 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); @@ -2019,9 +2109,13 @@ void LyXText::InsertChar(BufferView * bview, char c) #endif )) { if (cursor.pos() == 0 ) - bview->owner()->getMiniBuffer()->Set(_("You cannot insert a space at the beginning of a paragraph. Please read the Tutorial.")); + bview->owner()->getLyXFunc() + ->Dispatch(LFUN_MESSAGE, + _("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.")); + bview->owner()->getLyXFunc() + ->Dispatch(LFUN_MESSAGE, + _("You cannot type two spaces this way. Please read the Tutorial.")); charInserted(); return; } @@ -2038,8 +2132,12 @@ void LyXText::InsertChar(BufferView * bview, char c) /* No newline at first position * 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); @@ -2106,8 +2204,12 @@ void LyXText::InsertChar(BufferView * bview, char c) else need_break_row = 0; - // check, wether the last characters font has changed. + // 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); @@ -2168,7 +2270,11 @@ 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 { @@ -2327,7 +2433,11 @@ 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); @@ -2335,7 +2445,11 @@ 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() ) ) { // printf("Current pos1 %d", tmpcursor.pos()) ; @@ -2343,7 +2457,11 @@ void LyXText::CursorRightOneWord(BufferView * bview) const ++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() ) ) { // printf("Current pos2 %d", tmpcursor.pos()) ; @@ -2358,11 +2476,19 @@ 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); @@ -2400,7 +2526,11 @@ void LyXText::CursorLeftOneWord(BufferView * bview) const } 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 && @@ -2424,7 +2554,11 @@ 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); @@ -2442,7 +2576,11 @@ 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) @@ -2472,20 +2610,32 @@ string const LyXText::SelectNextWord(BufferView * bview, } #else if (cursor.pos() || cursor.par()->previous()) { - while (cursor.pos() < cursor.par()->Last() + 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)) - || (cursor.par()->Last() == cursor.pos() +#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 @@ -2505,7 +2655,11 @@ 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 @@ -2539,7 +2693,11 @@ 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 @@ -2558,7 +2716,11 @@ 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; @@ -2579,7 +2741,11 @@ 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; @@ -2598,7 +2764,11 @@ 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 { @@ -2731,7 +2901,11 @@ 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); @@ -2810,8 +2984,14 @@ 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 @@ -2921,8 +3101,14 @@ void LyXText::Backspace(BufferView * bview) } if (cursor.par()->IsLineSeparator(cursor.pos() - 1)) cursor.pos(cursor.pos() - 1); - - if (cursor.pos() < cursor.par()->Last() && !cursor.par()->IsSeparator(cursor.pos())) { + +#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); @@ -2945,7 +3131,11 @@ 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())) { @@ -2970,7 +3160,11 @@ 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; @@ -2996,9 +3190,15 @@ 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; } @@ -3006,14 +3206,22 @@ 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 ;-) */ + * 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; @@ -3057,7 +3265,11 @@ 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); @@ -3078,7 +3290,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 = @@ -3086,11 +3298,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; @@ -3100,6 +3311,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; @@ -3111,7 +3323,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; @@ -3160,7 +3372,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) { @@ -3255,7 +3467,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, @@ -3364,6 +3576,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, LColor::appendixline); } +#ifndef NO_PEXTRA // Draw minipage line bool const minipage = (p->params.pextraType() == LyXParagraph::PEXTRA_MINIPAGE); @@ -3372,7 +3585,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, LYX_PAPER_MARGIN/5, y_offset + row_ptr->height() - 1, LColor::minipageline); - +#endif // Draw depth lines int const depth = p->GetDepth(); for (int i = 1; i <= depth; ++i) { @@ -3410,7 +3623,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, ww - 2, y_offset + row_ptr->height(), LColor::appendixline); } - +#ifndef NO_PEXTRA // Draw minipage line bool const minipage = (firstpar->params.pextraType() == LyXParagraph::PEXTRA_MINIPAGE); @@ -3419,7 +3632,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, LYX_PAPER_MARGIN/5 + box_x, y_offset + row_ptr->height() - 1, LColor::minipageline); - +#endif // Draw depth lines int const depth = firstpar->GetDepth(); if (depth > 0) { @@ -3448,7 +3661,11 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, for (int i = 1; i <= depth; ++i) { int const line_x = (LYX_PAPER_MARGIN / 5) * - (i + minipage) + box_x + x_offset; + (i +#ifndef NO_PEXTRA + + minipage +#endif + ) + 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); @@ -3469,28 +3686,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(), @@ -3512,7 +3731,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); @@ -3530,11 +3749,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 @@ -3548,7 +3767,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)); @@ -3565,7 +3785,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 @@ -3578,8 +3798,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(); @@ -3611,13 +3834,14 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, 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) { @@ -3667,7 +3891,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, } } - /* is it a last row? */ + // is it a last row? #ifndef NEW_INSETS LyXParagraph * par = row_ptr->par()->LastPhysicalPar(); #else @@ -3681,29 +3905,30 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset, #endif && (!row_ptr->next() || row_ptr->next()->par() != row_ptr->par())) { - /* think about the margins */ + // 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, @@ -3712,30 +3937,41 @@ 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 */ - y_bottom -= lyxfont::ascent('x', GetFont(bview->buffer(), - par, par->Last() - 1)); + // draw a bottom line +#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 int const w = (inset_owner ? inset_owner->width(bview, font) : ww); int const xp = static_cast(inset_owner ? x : 0); @@ -3743,10 +3979,17 @@ 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 @@ -3805,7 +4048,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(); @@ -4002,6 +4245,7 @@ void LyXText::InsertFootnoteEnvironment(BufferView * bview, _("Sorry.")); return; } +#ifndef NO_PEXTRA /* no marginpars in minipages */ if (kind == LyXParagraph::MARGIN && cursor.par()->params.pextraType() == LyXParagraph::PEXTRA_MINIPAGE) { @@ -4010,7 +4254,7 @@ void LyXText::InsertFootnoteEnvironment(BufferView * bview, _("Sorry.")); return; } - +#endif /* this doesnt make sense, if there is no selection */ bool dummy_selection = false; if (!selection) { @@ -4135,7 +4379,7 @@ Row * LyXText::GetRow(LyXParagraph * par, { if (!firstrow) return 0; - + Row * tmprow = firstrow; y = 0;