--
Those who desire to give up Freedom in order to gain Security, will not have,
nor do they deserve, either one. (T. Jefferson or B. Franklin or both...)
Index: cursor.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/cursor.C,v
retrieving revision 1.36
diff -u -p -r1.36 cursor.C
--- cursor.C 16 Jan 2004 12:36:22 -0000 1.36
+++ cursor.C 16 Jan 2004 13:09:05 -0000
@@ -26,6 +26,8 @@
#include "insets/insettabular.h"
#include "insets/insettext.h"
+#include "mathed/math_data.h"
+
#include <boost/assert.hpp>
using std::vector;
@@ -227,3 +229,32 @@ BufferView & LCursor::bv() const
{
return *bv_;
}
+
+
+MathAtom const & LCursor::prevAtom() const
+{
+ BOOST_ASSERT(pos() > 0);
+ return cell()[pos() - 1];
+}
+
+
+MathAtom & LCursor::prevAtom()
+{
+ BOOST_ASSERT(pos() > 0);
+ return cell()[pos() - 1];
+}
+
+
+MathAtom const & LCursor::nextAtom() const
+{
+ BOOST_ASSERT(pos() < lastpos());
+ return cell()[pos()];
+}
+
+
+MathAtom & LCursor::nextAtom()
+{
+ BOOST_ASSERT(pos() < lastpos());
+ return cell()[pos()];
+}
+
Index: cursor.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/cursor.h,v
retrieving revision 1.20
diff -u -p -r1.20 cursor.h
--- cursor.h 16 Jan 2004 12:36:22 -0000 1.20
+++ cursor.h 16 Jan 2004 13:09:05 -0000
@@ -19,6 +19,7 @@
class BufferView;
class UpdatableInset;
+class MathAtom;
class DispatchResult;
class FuncRequest;
class LyXText;
@@ -68,10 +69,6 @@ public:
idx_type idx() const { return top().idx(); }
/// return the text-ed cell this cursor is in
idx_type & idx() { return top().idx(); }
- /// return the mathed cell this cursor is in
- MathArray const & cell() const { return top().cell(); }
- /// return the mathed cell this cursor is in
- MathArray & cell() { return top().cell(); }
/// return the paragraph this cursor is in
par_type par() const { return top().par(); }
/// return the paragraph this cursor is in
@@ -93,6 +90,24 @@ public:
/// return the grid row of the current cell
col_type col() const { return top().col(); }
+ //
+ // math-specific part
+ //
+ /// return the mathed cell this cursor is in
+ MathArray const & cell() const { return top().cell(); }
+ /// return the mathed cell this cursor is in
+ MathArray & cell() { return top().cell(); }
+ /// the mathatom left of the cursor
+ MathAtom const & prevAtom() const;
+ /// the mathatom left of the cursor
+ MathAtom & prevAtom();
+ /// the mathatom right of the cursor
+ MathAtom const & nextAtom() const;
+ /// the mathatom right of the cursor
+ MathAtom & nextAtom();
+
+ //
+ // text-specific part
///
UpdatableInset * innerInset() const;
///
@@ -105,6 +120,7 @@ public:
void getPos(int & x, int & y) const;
/// returns cursor dimension
void getDim(int & asc, int & desc) const;
+
/// cache the absolute coordinate from the top inset
void updatePos();
/// sets anchor to cursor position
Index: mathed/math_cursor.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/mathed/math_cursor.C,v
retrieving revision 1.380
diff -u -p -r1.380 math_cursor.C
--- mathed/math_cursor.C 16 Jan 2004 12:36:23 -0000 1.380
+++ mathed/math_cursor.C 16 Jan 2004 13:09:06 -0000
@@ -211,8 +211,8 @@ bool MathCursor::left(LCursor & cur, boo
}
selHandle(cur, sel);
- if (hasPrevAtom(cur) && openable(prevAtom(cur), sel)) {
- pushRight(cur, prevAtom(cur));
+ if (cur.pos() != 0 && openable(cur.prevAtom(), sel)) {
+ pushRight(cur, cur.prevAtom());
return true;
}
@@ -231,8 +231,8 @@ bool MathCursor::right(LCursor & cur, bo
}
selHandle(cur, sel);
- if (hasNextAtom(cur) && openable(nextAtom(cur), sel)) {
- pushLeft(cur, nextAtom(cur));
+ if (cur.pos() != cur.lastpos() && openable(cur.nextAtom(), sel)) {
+ pushLeft(cur, cur.nextAtom());
return true;
}
@@ -401,7 +401,7 @@ void MathCursor::niceInsert(LCursor & cu
// enter the new inset and move the contents of the selection if possible
if (t->isActive()) {
posLeft(cur);
- pushLeft(cur, nextAtom(cur));
+ pushLeft(cur, cur.nextAtom());
paste(cur, safe);
}
}
@@ -449,7 +449,7 @@ bool MathCursor::backspace(LCursor & cur
}
}
- if (hasPrevAtom(cur) && prevAtom(cur)->nargs() > 0) {
+ if (cur.pos() != 0 && cur.prevAtom()->nargs() > 0) {
// let's require two backspaces for 'big stuff' and
// highlight on the first
left(cur, true);
@@ -490,7 +490,7 @@ bool MathCursor::erase(LCursor & cur)
return true;
}
- if (hasNextAtom(cur) && nextAtom(cur)->nargs() > 0)
+ if (cur.pos() != cur.lastpos() && cur.nextAtom()->nargs() > 0)
right(cur, true);
else
plainErase(cur);
@@ -656,7 +656,7 @@ void MathCursor::handleNest(LCursor & cu
MathAtom at = a;
asArray(grabAndEraseSelection(cur), at.nucleus()->cell(c));
insert(cur, at);
- pushRight(cur, prevAtom(cur));
+ pushRight(cur, cur.prevAtom());
}
@@ -700,28 +700,28 @@ void MathCursor::adjust(LCursor & cur, p
bool MathCursor::inMacroMode(LCursor & cur) const
{
- if (!hasPrevAtom(cur))
+ if (!cur.pos() != 0)
return false;
- MathUnknownInset const * p = prevAtom(cur)->asUnknownInset();
+ MathUnknownInset const * p = cur.prevAtom()->asUnknownInset();
return p && !p->final();
}
MathUnknownInset * MathCursor::activeMacro(LCursor & cur)
{
- return inMacroMode(cur) ? prevAtom(cur).nucleus()->asUnknownInset() : 0;
+ return inMacroMode(cur) ? cur.prevAtom().nucleus()->asUnknownInset() : 0;
}
MathUnknownInset const * MathCursor::activeMacro(LCursor & cur) const
{
- return inMacroMode(cur) ? prevAtom(cur)->asUnknownInset() : 0;
+ return inMacroMode(cur) ? cur.prevAtom()->asUnknownInset() : 0;
}
bool MathCursor::inMacroArgMode(LCursor & cur) const
{
- return cur.pos() > 0 && prevAtom(cur)->getChar() == '#';
+ return cur.pos() > 0 && cur.prevAtom()->getChar() == '#';
}
@@ -818,46 +818,6 @@ void MathCursor::normalize(LCursor & cur
}
-bool MathCursor::hasPrevAtom(LCursor & cur) const
-{
- return cur.pos() > 0;
-}
-
-
-bool MathCursor::hasNextAtom(LCursor & cur) const
-{
- return cur.pos() < cur.lastpos();
-}
-
-
-MathAtom const & MathCursor::prevAtom(LCursor & cur) const
-{
- BOOST_ASSERT(cur.pos() > 0);
- return cur.cell()[cur.pos() - 1];
-}
-
-
-MathAtom & MathCursor::prevAtom(LCursor & cur)
-{
- BOOST_ASSERT(cur.pos() > 0);
- return cur.cell()[cur.pos() - 1];
-}
-
-
-MathAtom const & MathCursor::nextAtom(LCursor & cur) const
-{
- BOOST_ASSERT(cur.pos() < cur.lastpos());
- return cur.cell()[cur.pos()];
-}
-
-
-MathAtom & MathCursor::nextAtom(LCursor & cur)
-{
- BOOST_ASSERT(cur.pos() < cur.lastpos());
- return cur.cell()[cur.pos()];
-}
-
-
void MathCursor::idxNext(LCursor & cur)
{
cur.inset()->asMathInset()->idxNext(cur);
@@ -918,11 +878,11 @@ bool MathCursor::goUpDown(LCursor & cur,
// try neigbouring script insets
if (!selection()) {
// try left
- if (hasPrevAtom(cur)) {
- MathScriptInset const * p = prevAtom(cur)->asScriptInset();
+ if (cur.pos() != 0) {
+ MathScriptInset const * p = cur.prevAtom()->asScriptInset();
if (p && p->has(up)) {
--cur.pos();
- push(cur, nextAtom(cur));
+ push(cur, cur.nextAtom());
cur.idx() = up; // the superscript has index 1
cur.pos() = cur.lastpos();
//lyxerr << "updown: handled by scriptinset to the
left" << endl;
@@ -931,10 +891,10 @@ bool MathCursor::goUpDown(LCursor & cur,
}
// try right
- if (hasNextAtom(cur)) {
- MathScriptInset const * p = nextAtom(cur)->asScriptInset();
+ if (cur.pos() != cur.lastpos()) {
+ MathScriptInset const * p = cur.nextAtom()->asScriptInset();
if (p && p->has(up)) {
- push(cur, nextAtom(cur));
+ push(cur, cur.nextAtom());
cur.idx() = up;
cur.pos() = 0;
//lyxerr << "updown: handled by scriptinset to the
right" << endl;
@@ -1090,22 +1050,22 @@ bool MathCursor::script(LCursor & cur, b
cur.inset()->asMathInset()->asScriptInset()->ensure(up);
cur.idx() = up;
cur.pos() = 0;
- } else if (hasPrevAtom(cur) && prevAtom(cur)->asScriptInset()) {
- prevAtom(cur).nucleus()->asScriptInset()->ensure(up);
- pushRight(cur, prevAtom(cur));
+ } else if (cur.pos() != 0 && cur.prevAtom()->asScriptInset()) {
+ cur.prevAtom().nucleus()->asScriptInset()->ensure(up);
+ pushRight(cur, cur.prevAtom());
cur.idx() = up;
cur.pos() = cur.lastpos();
- } else if (hasPrevAtom(cur)) {
+ } else if (cur.pos() != 0) {
--cur.pos();
cur.cell()[cur.pos()]
- = MathAtom(new MathScriptInset(nextAtom(cur), up));
- pushLeft(cur, nextAtom(cur));
+ = MathAtom(new MathScriptInset(cur.nextAtom(), up));
+ pushLeft(cur, cur.nextAtom());
cur.idx() = up;
cur.pos() = 0;
} else {
plainInsert(cur, MathAtom(new MathScriptInset(up)));
- prevAtom(cur).nucleus()->asScriptInset()->ensure(up);
- pushRight(cur, prevAtom(cur));
+ cur.prevAtom().nucleus()->asScriptInset()->ensure(up);
+ pushRight(cur, cur.prevAtom());
cur.idx() = up;
cur.pos() = 0;
}
@@ -1206,12 +1166,12 @@ bool MathCursor::interpret(LCursor & cur
// but suppress direct insertion of two spaces in a row
// the still allows typing '<space>a<space>' and deleting the
'a', but
// it is better than nothing...
- if (!hasPrevAtom(cur) || prevAtom(cur)->getChar() != ' ')
+ if (!cur.pos() != 0 || cur.prevAtom()->getChar() != ' ')
insert(cur, c);
return true;
}
- if (hasPrevAtom(cur) && prevAtom(cur)->asSpaceInset()) {
- prevAtom(cur).nucleus()->asSpaceInset()->incSpace();
+ if (cur.pos() != 0 && cur.prevAtom()->asSpaceInset()) {
+ cur.prevAtom().nucleus()->asSpaceInset()->incSpace();
return true;
}
if (popRight(cur))
@@ -1263,12 +1223,12 @@ void MathCursor::setSelection
void MathCursor::insetToggle(LCursor & cur)
{
- if (hasNextAtom(cur)) {
+ if (cur.pos() != cur.lastpos()) {
// toggle previous inset ...
- nextAtom(cur).nucleus()->lock(!nextAtom(cur)->lock());
- } else if (popLeft(cur) && hasNextAtom(cur)) {
+ cur.nextAtom().nucleus()->lock(!cur.nextAtom()->lock());
+ } else if (popLeft(cur) && cur.pos() != cur.lastpos()) {
// ... or enclosing inset if we are in the last inset position
- nextAtom(cur).nucleus()->lock(!nextAtom(cur)->lock());
+ cur.nextAtom().nucleus()->lock(!cur.nextAtom()->lock());
posRight(cur);
}
}
@@ -1282,8 +1242,8 @@ string MathCursor::info(LCursor & cur) c
cur.cursor_[i].asMathInset()->infoize(os);
os << " ";
}
- if (hasPrevAtom(cur))
- prevAtom(cur)->infoize2(os);
+ if (cur.pos() != 0)
+ cur.prevAtom()->infoize2(os);
os << " ";
return os.str();
}
Index: mathed/math_cursor.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/mathed/math_cursor.h,v
retrieving revision 1.160
diff -u -p -r1.160 math_cursor.h
--- mathed/math_cursor.h 16 Jan 2004 12:36:23 -0000 1.160
+++ mathed/math_cursor.h 16 Jan 2004 13:09:06 -0000
@@ -181,26 +181,11 @@ public:
/// leave current MathInset to the left
bool popRight(LCursor & cur);
- ///
- bool hasPrevAtom(LCursor & cur) const;
- ///
- bool hasNextAtom(LCursor & cur) const;
- ///
- MathAtom const & prevAtom(LCursor & cur) const;
- ///
- MathAtom & prevAtom(LCursor & cur);
- ///
- MathAtom const & nextAtom(LCursor & cur) const;
- ///
- MathAtom & nextAtom(LCursor & cur);
-
/// returns the selection
void getSelection(LCursor & cur, CursorSlice &, CursorSlice &) const;
/// returns the normalized anchor of the selection
CursorSlice normalAnchor(LCursor & cur) const;
- /// how deep are we nested?
- unsigned depth(LCursor & cur) const;
/// describe the situation
std::string info(LCursor & cur) const;
/// dump selection information for debugging