#include "font.h"
#include "debug.h"
-#define FIX_DOUBLE_SPACE 1
//#define USE_OLD_CUT_AND_PASTE 1
using std::copy;
owner_ = bv;
firstrow = 0;
lastrow = 0;
- currentrow = 0;
- currentrow_y = 0;
paperwidth = pw;
- //bparams = &p->params;
buffer = p;
number_of_rows = 0;
refresh_y = 0;
// Default layouttype for copy environment type
copylayouttype = 0;
+
+#if 0
+ // Dump all rowinformation:
+ Row * tmprow = firstrow;
+ lyxerr << "Baseline Paragraph Pos Height Ascent Fill\n";
+ while (tmprow) {
+ lyxerr << tmprow->baseline << '\t'
+ << tmprow->par << '\t'
+ << tmprow->pos << '\t'
+ << tmprow->height << '\t'
+ << tmprow->ascent_of_text << '\t'
+ << tmprow->fill << '\n';
+ tmprow = tmprow->next;
+ }
+ lyxerr.flush();
+#endif
}
row of this row */
long unused_y;
GetRow(row->par, row->pos, unused_y);
- currentrow = currentrow->previous;
- if (currentrow)
- currentrow_y -= currentrow->height;
- else
- currentrow_y = 0;
if (row->next)
row->next->previous = row->previous;
}
}
+LyXParagraph * LyXText::SetLayout(LyXCursor & cur, LyXCursor & sstart_cur,
+ LyXCursor & send_cur,
+ LyXTextClass::size_type layout)
+{
+ LyXParagraph * endpar = send_cur.par->LastPhysicalPar()->Next();
+ LyXParagraph * undoendpar = endpar;
+
+ if (endpar && endpar->GetDepth()) {
+ while (endpar && endpar->GetDepth()) {
+ endpar = endpar->LastPhysicalPar()->Next();
+ undoendpar = endpar;
+ }
+ } else if (endpar) {
+ endpar = endpar->Next(); // because of parindents etc.
+ }
+
+ SetUndo(Undo::EDIT,
+ sstart_cur.par->ParFromPos(sstart_cur.pos)->previous,
+ undoendpar);
+
+ /* ok we have a selection. This is always between sstart_cur
+ * and sel_end cursor */
+ cur = sstart_cur;
+
+ LyXLayout const & lyxlayout =
+ textclasslist.Style(buffer->params.textclass, layout);
+
+ while (cur.par != send_cur.par) {
+ if (cur.par->footnoteflag == sstart_cur.par->footnoteflag) {
+ cur.par->SetLayout(layout);
+ MakeFontEntriesLayoutSpecific(cur.par);
+ LyXParagraph* fppar = cur.par->FirstPhysicalPar();
+ fppar->added_space_top = lyxlayout.fill_top ?
+ VSpace(VSpace::VFILL) : VSpace(VSpace::NONE);
+ fppar->added_space_bottom = lyxlayout.fill_bottom ?
+ VSpace(VSpace::VFILL) : VSpace(VSpace::NONE);
+ if (lyxlayout.margintype == MARGIN_MANUAL)
+ cur.par->SetLabelWidthString(lyxlayout.labelstring());
+ if (lyxlayout.labeltype != LABEL_BIBLIO
+ && fppar->bibkey) {
+ delete fppar->bibkey;
+ fppar->bibkey = 0;
+ }
+ }
+ cur.par = cur.par->Next();
+ }
+ if (cur.par->footnoteflag == sstart_cur.par->footnoteflag) {
+ cur.par->SetLayout(layout);
+ MakeFontEntriesLayoutSpecific(cur.par);
+ LyXParagraph* fppar = cur.par->FirstPhysicalPar();
+ fppar->added_space_top = lyxlayout.fill_top ?
+ VSpace(VSpace::VFILL) : VSpace(VSpace::NONE);
+ fppar->added_space_bottom = lyxlayout.fill_bottom ?
+ VSpace(VSpace::VFILL) : VSpace(VSpace::NONE);
+ if (lyxlayout.margintype == MARGIN_MANUAL)
+ cur.par->SetLabelWidthString(lyxlayout.labelstring());
+ if (lyxlayout.labeltype != LABEL_BIBLIO
+ && fppar->bibkey) {
+ delete fppar->bibkey;
+ fppar->bibkey = 0;
+ }
+ }
+ return endpar;
+}
// set layout over selection and make a total rebreak of those paragraphs
void LyXText::SetLayout(LyXTextClass::size_type layout)
{
- LyXCursor tmpcursor;
+ LyXCursor
+ tmpcursor = cursor; /* store the current cursor */
+#ifdef USE_OLD_SET_LAYOUT
// if there is no selection just set the layout
// of the current paragraph */
if (!selection) {
sel_start_cursor.par->ParFromPos(sel_start_cursor.pos)->previous,
undoendpar);
- tmpcursor = cursor; /* store the current cursor */
-
/* ok we have a selection. This is always between sel_start_cursor
* and sel_end cursor */
cursor = sel_start_cursor;
fppar->bibkey = 0;
}
}
-
+#else
+ // if there is no selection just set the layout
+ // of the current paragraph */
+ if (!selection) {
+ sel_start_cursor = cursor; // dummy selection
+ sel_end_cursor = cursor;
+ }
+ LyXParagraph *
+ endpar = SetLayout(cursor, sel_start_cursor, sel_end_cursor, layout);
+#endif
RedoParagraphs(sel_start_cursor, endpar);
// we have to reset the selection, because the
}
-int LyXText::FullRebreak()
+bool LyXText::FullRebreak()
{
if (need_break_row) {
BreakAgain(need_break_row);
need_break_row = 0;
- return 1;
+ return true;
}
- return 0;
+ return false;
}
/* returns a pointer to the row near the specified y-coordinate
* (relative to the whole text). y is set to the real beginning
-* of this row */
+* of this row */
Row * LyXText::GetRowNearY(long & y) const
{
- Row * tmprow;
- long tmpy;
-
- if (currentrow) {
- tmprow = currentrow;
- tmpy = currentrow_y;
- } else {
- tmprow = firstrow;
- tmpy = 0;
- }
-
- if (tmpy <= y)
- while (tmprow->next && tmpy + tmprow->height <= y) {
- tmpy += tmprow->height;
- tmprow = tmprow->next;
- }
- else
- while (tmprow->previous && tmpy > y) {
- tmprow = tmprow->previous;
- tmpy -= tmprow->height;
- }
+ Row * tmprow = firstrow;
+ long tmpy = 0;
- currentrow = tmprow;
- currentrow_y = tmpy;
+ while (tmprow->next && tmpy + tmprow->height <= y) {
+ tmpy += tmprow->height;
+ tmprow = tmprow->next;
+ }
y = tmpy; // return the real y
return tmprow;
}
-
+
void LyXText::ToggleFree(LyXFont const & font, bool toggleall)
{
}
// Try implicit word selection
+ // If there is a change in the language the implicit word selection
+ // is disabled.
LyXCursor resetCursor = cursor;
- int implicitSelection = SelectWordWhenUnderCursor();
+ bool implicitSelection = (font.language() == ignore_language)
+ ? SelectWordWhenUnderCursor() : false;
// Set font
SetFont(font, toggleall);
}
if (!par->labelstring.empty()) {
- par->labelstring.clear();
+ par->labelstring.erase();
}
if (layout.margintype == MARGIN_MANUAL) {
if (!layout.labelstring().empty())
par->labelstring = layout.labelstring();
else
- par->labelstring.clear();
+ par->labelstring.erase();
} else {
if (!layout.labelstring_appendix().empty())
par->labelstring = layout.labelstring_appendix();
else
- par->labelstring.clear();
+ par->labelstring.erase();
}
#ifdef HAVE_SSTREAM
(Lgb)
*/
-#ifndef FIX_DOUBLE_SPACE
- bool space_wrapped =
- sel_end_cursor.par->IsLineSeparator(sel_end_cursor.pos);
- if (sel_end_cursor.pos > 0
- && sel_end_cursor.par->IsLineSeparator(sel_end_cursor.pos - 1)) {
- // please break before a space at the end
- sel_end_cursor.pos--;
- space_wrapped = true;
- }
- // cut behind a space if there is one
- while (sel_start_cursor.par->Last() > sel_start_cursor.pos
- && sel_start_cursor.par->IsLineSeparator(sel_start_cursor.pos)
- && (sel_start_cursor.par != sel_end_cursor.par
- || sel_start_cursor.pos < sel_end_cursor.pos))
- sel_start_cursor.pos++;
-#endif
// there are two cases: cut only within one paragraph or
// more than one paragraph
}
simple_cut_buffer->InsertFromMinibuffer(simple_cut_buffer->Last());
}
-#ifndef FIX_DOUBLE_SPACE
- // check for double spaces
- if (sel_start_cursor.pos &&
- sel_start_cursor.par->Last() > sel_start_cursor.pos
- && sel_start_cursor.par
- ->IsLineSeparator(sel_start_cursor.pos - 1)
- && sel_start_cursor.par
- ->IsLineSeparator(sel_start_cursor.pos)) {
- sel_start_cursor.par->Erase(sel_start_cursor.pos);
- }
- if (space_wrapped)
- simple_cut_buffer->InsertChar(i - sel_start_cursor.pos,
- ' ');
-#endif
endpar = sel_end_cursor.par->Next();
} else {
// cut more than one paragraph
sel_end_cursor.par
->BreakParagraphConservative(sel_end_cursor.pos);
-#ifndef FIX_DOUBLE_SPACE
- // insert a space at the end if there was one
- if (space_wrapped)
- sel_end_cursor.par
- ->InsertChar(sel_end_cursor.par->Last(), ' ');
-#endif
sel_end_cursor.par = sel_end_cursor.par->Next();
sel_end_cursor.pos = 0;
cursor = sel_end_cursor;
-#ifndef FIX_DOUBLE_SPACE
- // please break behind a space, if there is one.
- // The space should be copied too
- if (sel_start_cursor.par
- ->IsLineSeparator(sel_start_cursor.pos))
- sel_start_cursor.pos++;
-#endif
sel_start_cursor.par
->BreakParagraphConservative(sel_start_cursor.pos);
-#ifndef FIX_DOUBLE_SPACE
- if (!sel_start_cursor.pos
- || sel_start_cursor.par
- ->IsLineSeparator(sel_start_cursor.pos - 1)
- || sel_start_cursor.par
- ->IsNewline(sel_start_cursor.pos - 1)) {
- sel_start_cursor.par->Next()->InsertChar(0, ' ');
- }
-#endif
// store the endparagraph for redoing later
endpar = sel_end_cursor.par->Next(); /* needed because
the sel_end_
||
!sel_start_cursor.par->Next()->Last())
sel_start_cursor.par->ParFromPos(sel_start_cursor.pos)->PasteParagraph();
-
-#ifndef FIX_DOUBLE_SPACE
- // maybe a forgotten blank
- if (sel_start_cursor.pos
- && sel_start_cursor.par
- ->IsLineSeparator(sel_start_cursor.pos)
- && sel_start_cursor.par
- ->IsLineSeparator(sel_start_cursor.pos - 1)) {
- sel_start_cursor.par->Erase(sel_start_cursor.pos);
- }
-#endif
}
// sometimes necessary
DeleteSimpleCutBuffer();
// set the textclass
- simple_cut_buffer_textclass = buffer->params->textclass;
+ simple_cut_buffer_textclass = buffer->params.textclass;
-#ifdef FIX_DOUBLE_SPACE
// copy behind a space if there is one
while (sel_start_cursor.par->Last() > sel_start_cursor.pos
&& sel_start_cursor.par->IsLineSeparator(sel_start_cursor.pos)
&& (sel_start_cursor.par != sel_end_cursor.par
|| sel_start_cursor.pos < sel_end_cursor.pos))
sel_start_cursor.pos++;
-#endif
+
// there are two cases: copy only within one paragraph
// or more than one paragraph
if (sel_start_cursor.par->ParFromPos(sel_start_cursor.pos)
}
/* table stuff -- end */
-#ifdef FIX_DOUBLE_SPACE
// copy behind a space if there is one
while (sel_start_cursor.par->Last() > sel_start_cursor.pos
&& sel_start_cursor.par->IsLineSeparator(sel_start_cursor.pos)
&& (sel_start_cursor.par != sel_end_cursor.par
|| sel_start_cursor.pos < sel_end_cursor.pos))
sel_start_cursor.pos++;
-#endif
CutAndPaste cap;
if (!simple_cut_buffer->next) {
// only within a paragraph
-#ifndef FIX_DOUBLE_SPACE
- // please break behind a space, if there is one
- while (tmpcursor.par->Last() > tmpcursor.pos
- && tmpcursor.par->IsLineSeparator(tmpcursor.pos))
- tmpcursor.pos++;
-#endif
tmppar = simple_cut_buffer->Clone();
/* table stuff -- begin */
bool table_too_small = false;
else
table_too_small = true;
} else {
-#ifdef FIX_DOUBLE_SPACE
// This is an attempt to fix the
// "never insert a space at the
// beginning of a paragraph" problem.
tmpcursor.par->InsertFromMinibuffer(tmpcursor.pos);
tmpcursor.pos++;
}
-#else
- simple_cut_buffer->CutIntoMinibuffer(0);
- simple_cut_buffer->Erase(0);
- tmpcursor.par->InsertFromMinibuffer(tmpcursor.pos);
- tmpcursor.pos++;
-#endif
}
}
} else {
// the beginning of the paragraph the space should
// be removed.
while (simple_cut_buffer->size()) {
-#ifdef FIX_DOUBLE_SPACE
// This is an attempt to fix the
// "never insert a space at the
// beginning of a paragraph" problem.
tmpcursor.par->InsertFromMinibuffer(tmpcursor.pos);
tmpcursor.pos++;
}
-#else
- simple_cut_buffer->CutIntoMinibuffer(0);
- simple_cut_buffer->Erase(0);
- tmpcursor.par->InsertFromMinibuffer(tmpcursor.pos);
- tmpcursor.pos++;
-#endif
}
}
delete simple_cut_buffer;
// make sure there is no class difference
cap.SwitchLayoutsBetweenClasses(simple_cut_buffer_textclass,
- buffer->params->textclass,
+ buffer->params.textclass,
simple_cut_buffer);
// make the simple_cut_buffer exactly the same layout than
while (lastbuffer->Next())
lastbuffer = lastbuffer->Next();
-#ifndef FIX_DOUBLE_SPACE
- // Please break behind a space, if there is one. The space
- // should be copied too.
- if (cursor.par->Last() > cursor.pos
- && cursor.par->IsLineSeparator(cursor.pos))
- cursor.pos++;
-#endif
bool paste_the_end = false;
// open the paragraph for inserting the simple_cut_buffer
paste_the_end = true;
}
-#ifndef FIX_DOUBLE_SPACE
- // be careful with double spaces
- if ((!cursor.par->Last()
- || cursor.par->IsLineSeparator(cursor.pos - 1)
- || cursor.par->IsNewline(cursor.pos - 1))
- && simple_cut_buffer->text.size()
- && simple_cut_buffer->IsLineSeparator(0))
- simple_cut_buffer->Erase(0);
-#endif
// set the end for redoing later
endpar = cursor.par->ParFromPos(cursor.pos)->next->Next();
// maybe some pasting
if (lastbuffer->Next() && paste_the_end) {
if (lastbuffer->Next()->HasSameLayout(lastbuffer)) {
-#ifndef FIX_DOUBLE_SPACE
- // be careful with double spaces
- if ((!lastbuffer->Last()
- || lastbuffer->IsLineSeparator(lastbuffer->Last() - 1)
- || lastbuffer->IsNewline(lastbuffer->Last() - 1))
- && lastbuffer->Next()->Last()
- && lastbuffer->Next()->IsLineSeparator(0))
- lastbuffer->Next()->Erase(0);
-#endif
lastbuffer->ParFromPos(lastbuffer->Last())->PasteParagraph();
} else if (!lastbuffer->Next()->Last()) {
lastbuffer->Next()->MakeSameLayout(lastbuffer);
-#ifndef FIX_DOUBLE_SPACE
- // be careful witth double spaces
- if ((!lastbuffer->Last()
- || lastbuffer->IsLineSeparator(lastbuffer->Last() - 1)
- || lastbuffer->IsNewline(lastbuffer->Last() - 1))
- && lastbuffer->Next()->Last()
- && lastbuffer->Next()->IsLineSeparator(0))
- lastbuffer->Next()->Erase(0);
-#endif
lastbuffer->ParFromPos(lastbuffer->Last())->PasteParagraph();
} else if (!lastbuffer->Last()) {
lastbuffer->MakeSameLayout(lastbuffer->next);
-#ifndef FIX_DOUBLE_SPACE
- // be careful witth double spaces
- if ((!lastbuffer->Last()
- || lastbuffer->IsLineSeparator(lastbuffer->Last() - 1)
- || lastbuffer->IsNewline(lastbuffer->Last() - 1))
- && lastbuffer->Next()->Last()
- && lastbuffer->Next()->IsLineSeparator(0))
- lastbuffer->Next()->Erase(0);
-#endif
lastbuffer->ParFromPos(lastbuffer->Last())->PasteParagraph();
} else
++pos;
}
} else if (str[i] == ' ') {
-#if 1
InsetSpecialChar * new_inset =
new InsetSpecialChar(InsetSpecialChar::PROTECTED_SEPARATOR);
if (par->InsertInsetAllowed(new_inset)) {
} else {
delete new_inset;
}
-#else
- par->InsertChar(pos, LyXParagraph::META_PROTECTED_SEPARATOR);
- par->SetFont(pos, current_font);
-#endif
++pos;
} else if (str[i] == '\t') {
for (a = pos; a < (pos / 8 + 1) * 8 ; ++a) {
-#if 1
InsetSpecialChar * new_inset =
new InsetSpecialChar(InsetSpecialChar::PROTECTED_SEPARATOR);
if (par->InsertInsetAllowed(new_inset)) {
} else {
delete new_inset;
}
-#else
- par->InsertChar(a, LyXParagraph::META_PROTECTED_SEPARATOR);
- par->SetFont(a, current_font);
-#endif
}
pos = a;
} else if (str[i] != 13 &&
break;
} else {
if (!par->size()) { // par is empty
-#if 1
InsetSpecialChar * new_inset =
new InsetSpecialChar(InsetSpecialChar::PROTECTED_SEPARATOR);
if (par->InsertInsetAllowed(new_inset)) {
} else {
delete new_inset;
}
-#else
- par->InsertChar(pos, LyXParagraph::META_PROTECTED_SEPARATOR);
- par->SetFont(pos, current_font);
-#endif
++pos;
}
par->BreakParagraph(pos, flag);
void LyXText::CheckParagraph(LyXParagraph * par,
LyXParagraph::size_type pos)
{
-
- LyXCursor tmpcursor;
+ LyXCursor tmpcursor;
+
/* table stuff -- begin*/
}
+void LyXText::SetCursor(LyXCursor & cur, LyXParagraph * par,
+ LyXParagraph::size_type pos) const
+{
+ // correct the cursor position if impossible
+ if (pos > par->Last()){
+ LyXParagraph * tmppar = par->ParFromPos(pos);
+ pos = par->PositionInParFromPos(pos);
+ par = tmppar;
+ }
+ if (par->IsDummy() && par->previous &&
+ par->previous->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) {
+ while (par->previous &&
+ ((par->previous->IsDummy() &&
+ (par->previous->previous->footnoteflag ==
+ LyXParagraph::CLOSED_FOOTNOTE)) ||
+ (par->previous->footnoteflag ==
+ LyXParagraph::CLOSED_FOOTNOTE))) {
+ par = par->previous ;
+ if (par->IsDummy() &&
+ (par->previous->footnoteflag ==
+ LyXParagraph::CLOSED_FOOTNOTE))
+ pos += par->size() + 1;
+ }
+ if (par->previous) {
+ par = par->previous;
+ }
+ pos += par->size() + 1;
+ }
+
+ cur.par = par;
+ cur.pos = pos;
+
+ /* get the cursor y position in text */
+ long y = 0;
+ Row * row = GetRow(par, pos, y);
+ /* y is now the beginning of the cursor row */
+ y += row->baseline;
+ /* y is now the cursor baseline */
+ cur.y = y;
+
+ /* now get the cursors x position */
+ float x;
+ float fill_separator, fill_hfill, fill_label_hfill;
+ PrepareToPrint(row, x, fill_separator, fill_hfill, fill_label_hfill);
+ LyXParagraph::size_type cursor_vpos;
+ LyXParagraph::size_type last = RowLastPrintable(row);
+
+ if (pos > last + 1) // This shouldn't happen.
+ pos = last+1;
+
+ if (last < row->pos)
+ cursor_vpos = 0;
+ else if ((pos > last) ||
+ ((pos - 1 >= row->pos) &&
+ (row->par->IsSeparator(pos) ||
+ (row->par->table && row->par->IsNewline(pos)))))
+ /// Place cursor after char at (logical) position pos-1
+ cursor_vpos = !(bidi_level(pos-1) % 2)
+ ? log2vis(pos-1) + 1 : log2vis(pos-1);
+ else
+ /// Place cursor before char at (logical) position pos
+ cursor_vpos = !(bidi_level(pos) % 2)
+ ? log2vis(pos) : log2vis(pos) + 1;
+
+ /* table stuff -- begin*/
+ if (row->par->table) {
+ int cell = NumberOfCell(row->par, row->pos);
+ float x_old = x;
+ x += row->par->table->GetBeginningOfTextInCell(cell);
+ for (LyXParagraph::size_type vpos = row->pos;
+ vpos < cursor_vpos; ++vpos) {
+ pos = vis2log(vpos);
+ if (row->par->IsNewline(pos)) {
+ x = x_old + row->par->table->WidthOfColumn(cell);
+ x_old = x;
+ ++cell;
+ x += row->par->table->GetBeginningOfTextInCell(cell);
+ } else {
+ x += SingleWidth(row->par, pos);
+ }
+ }
+ } else {
+ /* table stuff -- end*/
+ LyXParagraph::size_type main_body =
+ BeginningOfMainBody(row->par);
+ if ((main_body > 0) &&
+ ((main_body-1 > last) ||
+ !row->par->IsLineSeparator(main_body-1)))
+ main_body = 0;
+
+ for (LyXParagraph::size_type vpos = row->pos;
+ vpos < cursor_vpos; ++vpos) {
+ pos = vis2log(vpos);
+ if (main_body > 0 && pos == main_body-1) {
+ x += fill_label_hfill +
+ lyxfont::width(textclasslist.Style(
+ buffer->params.textclass,
+ row->par->GetLayout())
+ .labelsep,
+ GetFont(row->par, -2));
+ if (row->par->IsLineSeparator(main_body-1))
+ x -= SingleWidth(row->par,main_body-1);
+ }
+ if (HfillExpansion(row, pos)) {
+ x += SingleWidth(row->par, pos);
+ if (pos >= main_body)
+ x += fill_hfill;
+ else
+ x += fill_label_hfill;
+ } else if (row->par->IsSeparator(pos)) {
+ x += SingleWidth(row->par, pos);
+ if (pos >= main_body)
+ x += fill_separator;
+ } else
+ x += SingleWidth(row->par, pos);
+ }
+ }
+
+ cur.x = int(x);
+ cur.x_fix = cur.x;
+ cur.row = row;
+}
+
+
void LyXText::SetCursorIntern(LyXParagraph * par,
LyXParagraph::size_type pos, bool setfont) const
{
+ SetCursor(cursor, par, pos);
+#warning Remove this when verified working (Jug 20000413)
+#if 0
// correct the cursor position if impossible
if (pos > par->Last()){
LyXParagraph * tmppar = par->ParFromPos(pos);
cursor.par = par;
cursor.pos = pos;
- if (setfont)
- if (cursor.pos &&
- (cursor.pos == cursor.par->Last() || cursor.par->IsSeparator(cursor.pos)
- || (cursor.par->table && cursor.par->IsNewline(cursor.pos))
- )) {
- current_font = cursor.par->GetFontSettings(cursor.pos - 1);
- real_current_font = GetFont(cursor.par, cursor.pos - 1);
- } else {
- current_font = cursor.par->GetFontSettings(cursor.pos);
- real_current_font = GetFont(cursor.par, cursor.pos);
- }
-
/* get the cursor y position in text */
long y = 0;
Row * row = GetRow(par, pos, y);
cursor.x_fix = cursor.x;
cursor.row = row;
+#endif
+ if (setfont) {
+ if (cursor.pos &&
+ (cursor.pos == cursor.par->Last() || cursor.par->IsSeparator(cursor.pos)
+ || (cursor.par->table && cursor.par->IsNewline(cursor.pos))
+ )) {
+ current_font = cursor.par->GetFontSettings(cursor.pos - 1);
+ real_current_font = GetFont(cursor.par, cursor.pos - 1);
+ } else {
+ current_font = cursor.par->GetFontSettings(cursor.pos);
+ real_current_font = GetFont(cursor.par, cursor.pos);
+ }
+ }
}
bool deleted = false;
-#ifdef FIX_DOUBLE_SPACE
/* Ok I'll put some comments here about what is missing.
I have fixed BackSpace (and thus Delete) to not delete
double-spaces automagically. I have also changed Cut,
return;
}
}
-#endif
-#if 1
+
// Do not delete empty paragraphs with keepempty set.
if ((textclasslist.Style(buffer->params.textclass,
old_cursor.par->GetLayout())).keepempty)
}
// correct cursor y
-#if 1
+
SetCursorIntern(cursor.par, cursor.pos);
-#else
- SetCursor(cursor.par, cursor.pos);
-#endif
- /* if (cursor.y > old_cursor.y)
- cursor.y -= old_cursor.row->height; */
-
+
if (sel_cursor.par == old_cursor.par
&& sel_cursor.pos == sel_cursor.pos) {
// correct selection
if (old_cursor.par->ClearParagraph()) {
RedoParagraphs(old_cursor, old_cursor.par->Next());
// correct cursor y
-#if 1
SetCursorIntern(cursor.par, cursor.pos);
-#else
- SetCursor(cursor.par, cursor.pos);
-#endif
sel_cursor = cursor;
}
}
}
-#endif
}
if (undo->kind == Undo::EDIT) {
tmppar2->setContentsFromPar(tmppar);
tmppar->clearContents();
- //tmppar2->text = tmppar->text;
- //tmppar->text.clear();
tmppar2 = tmppar2->next;
}
- if ( currentrow && currentrow->par == tmppar )
- currentrow = currentrow -> previous;
- // Commenting out this might remove the error
- // reported by Purify, but it might also
- // introduce a memory leak. We need to
- // check this (Lgb)
- //delete tmppar;
}
}