#include <cctype>
#include <algorithm>
+#include "lyxtext.h"
#include "layout.h"
#include "lyxparagraph.h"
-#include "lyxtext.h"
#include "support/textutils.h"
#include "insets/insetbib.h"
#include "insets/insettext.h"
#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 &);
int LyXText::workWidth(BufferView * bview) const
{
if (inset_owner) {
- return inset_owner->textWidth(bview->painter());
+ return inset_owner->textWidth(bview);
}
return bview->workWidth();
}
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;
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)) {
// 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
}
}
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;
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;
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);
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
}
break;
}
+#ifndef NO_PEXTRA
if ((workWidth(bview) > 0) &&
(row->par()->params.pextraType() == LyXParagraph::PEXTRA_INDENT)) {
if (!row->par()->params.pextraWidthp().empty()) {
x += lyxfont::width("XXXXXX", font);
}
}
+#endif
int align; // wrong type
#ifndef NEW_INSETS
== 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
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();
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()){
}
} 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;
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
}
int const fill = paper_width - w - RightMargin(bview->buffer(), row);
+ if (fill < 0)
+ return 0;
return fill;
}
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);
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);
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()
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;
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;
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)
+ 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();
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());
}
}
- /* is it a bottom line? */
+ // is it a bottom line?
if (
#ifndef NEW_INSETS
row_ptr->par()->ParFromPos(RowLast(row_ptr) + 1) == par
#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;
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();
}
}
- /* 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);
// 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));
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;
// 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 */
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);
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,
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);
* 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);
#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;
}
/* 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);
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);
}
// 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 {
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);
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()) ;
++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()) ;
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);
} 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 &&
// 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);
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)
}
#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
// 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
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
/* -------> 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;
/* -------> 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;
/* -------> 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 {
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);
// 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
}
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);
}
// 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())) {
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;
//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;
}
// 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;
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);
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 =
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;
return;
}
+ float x;
float fill_separator;
float fill_hfill;
float fill_label_hfill;
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;
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) {
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,
LColor::appendixline);
}
+#ifndef NO_PEXTRA
// Draw minipage line
bool const minipage =
(p->params.pextraType() == LyXParagraph::PEXTRA_MINIPAGE);
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) {
ww - 2, y_offset + row_ptr->height(),
LColor::appendixline);
}
-
+#ifndef NO_PEXTRA
// Draw minipage line
bool const minipage =
(firstpar->params.pextraType() == LyXParagraph::PEXTRA_MINIPAGE);
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) {
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);
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(),
}
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);
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
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));
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
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();
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) {
}
}
- /* is it a last row? */
+ // is it a last row?
#ifndef NEW_INSETS
LyXParagraph * par = row_ptr->par()->LastPhysicalPar();
#else
#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,
}
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<int>(inset_owner ? x : 0);
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
}
}
- /* draw the text in the pixmap */
+ // draw the text in the pixmap
vpos = row_ptr->pos();
_("Sorry."));
return;
}
+#ifndef NO_PEXTRA
/* no marginpars in minipages */
if (kind == LyXParagraph::MARGIN
&& cursor.par()->params.pextraType() == LyXParagraph::PEXTRA_MINIPAGE) {
_("Sorry."));
return;
}
-
+#endif
/* this doesnt make sense, if there is no selection */
bool dummy_selection = false;
if (!selection) {
{
if (!firstrow)
return 0;
-
+
Row * tmprow = firstrow;
y = 0;