From 3e38964adea6ea45b1729dbe0fd8fa98b924f8fb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20P=C3=B6nitz?= Date: Tue, 22 Oct 2002 13:56:40 +0000 Subject: [PATCH] change selection format from 'MathGridInset' to 'string' git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@5469 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/mathed/formulabase.C | 2 +- src/mathed/math_cursor.C | 92 +++++++++++++++------------------------- src/mathed/math_cursor.h | 16 +++---- src/mathed/math_inset.h | 4 ++ 4 files changed, 47 insertions(+), 67 deletions(-) diff --git a/src/mathed/formulabase.C b/src/mathed/formulabase.C index d4869ad8a9..74f74c2864 100644 --- a/src/mathed/formulabase.C +++ b/src/mathed/formulabase.C @@ -721,7 +721,7 @@ Inset::RESULT InsetFormulaBase::localDispatch(FuncRequest const & cmd) // math-insert only handles special math things like "matrix". case LFUN_INSERT_MATH: bv->lockedInsetStoreUndo(Undo::EDIT); - mathcursor->insert(asArray(argument)); + mathcursor->niceInsert(argument); updateLocal(bv, true); break; diff --git a/src/mathed/math_cursor.C b/src/mathed/math_cursor.C index 757462e861..15c6a5f51d 100644 --- a/src/mathed/math_cursor.C +++ b/src/mathed/math_cursor.C @@ -24,9 +24,7 @@ #include "support/lstrings.h" #include "support/LAssert.h" -#include "BufferView.h" #include "debug.h" -#include "LColor.h" #include "frontends/Painter.h" #include "math_cursor.h" #include "formulabase.h" @@ -42,8 +40,6 @@ #include "math_macroarg.h" #include "math_macrotemplate.h" #include "math_mathmlstream.h" -#include "math_parser.h" -#include "math_replace.h" #include "math_scriptinset.h" #include "math_spaceinset.h" #include "math_support.h" @@ -64,7 +60,7 @@ using std::isalpha; // matheds own cut buffer -MathGridInset theCutBuffer = MathGridInset(1, 1); +string theCutBuffer; MathCursor::MathCursor(InsetFormulaBase * formula, bool front) @@ -376,10 +372,20 @@ void MathCursor::insert(MathAtom const & t) } +void MathCursor::niceInsert(string const & t) +{ + MathArray ar = asArray(t); + if (ar.size() == 1) + niceInsert(ar[0]); + else + insert(ar); +} + + void MathCursor::niceInsert(MathAtom const & t) { macroModeClose(); - MathGridInset safe = grabAndEraseSelection(); + string safe = grabAndEraseSelection(); plainInsert(t); // enter the new inset and move the contents of the selection if possible if (t->isActive()) { @@ -400,12 +406,9 @@ void MathCursor::insert(MathArray const & ar) } -void MathCursor::paste(MathGridInset const & data) +void MathCursor::paste(string const & data) { - ostringstream os; - WriteStream wi(os, false, false); - data.write(wi); - dispatch(FuncRequest(LFUN_PASTE, os.str())); + dispatch(FuncRequest(LFUN_PASTE, data)); } @@ -534,7 +537,7 @@ void MathCursor::selCopy() theCutBuffer = grabSelection(); selection_ = false; } else { - theCutBuffer = MathGridInset(1, 1); + theCutBuffer.erase(); } } @@ -595,14 +598,6 @@ void MathCursor::selClearOrDel() } -void MathCursor::selGet(MathArray & ar) -{ - dump("selGet"); - if (selection_) - ar = grabSelection().glue(); -} - - void MathCursor::drawSelection(MathPainterInfo & pi) const { if (!selection_) @@ -617,7 +612,7 @@ void MathCursor::drawSelection(MathPainterInfo & pi) const void MathCursor::handleNest(MathAtom const & a) { MathAtom at = a; - at.nucleus()->cell(0) = grabAndEraseSelection().glue(); + at.nucleus()->cell(0) = asArray(grabAndEraseSelection()); insert(at); pushRight(prevAtom()); } @@ -1096,7 +1091,7 @@ bool MathCursor::script(bool up) } macroModeClose(); - MathGridInset safe = grabAndEraseSelection(); + string safe = grabAndEraseSelection(); if (inNucleus()) { // we are in a nucleus of a script inset, move to _our_ script par()->asScriptInset()->ensure(up); @@ -1251,25 +1246,6 @@ bool MathCursor::interpret(char c) return true; } -/* - if (isalpha(c) && lastcode_ == LM_TC_GREEK) { - insert(c, LM_TC_VAR); - return true; - } - - if (isalpha(c) && lastcode_ == LM_TC_GREEK1) { - insert(c, LM_TC_VAR); - lastcode_ = LM_TC_VAR; - return true; - } - - if (c == '\\') { - insert(c, LM_TC_TEX); - //bv->owner()->message(_("TeX mode")); - return true; - } -*/ - // try auto-correction //if (autocorrect_ && hasPrevAtom() && math_autocorrect(prevAtom(), c)) // return true; @@ -1347,29 +1323,29 @@ void region(MathCursorPos const & i1, MathCursorPos const & i2, } -MathGridInset MathCursor::grabSelection() const +string MathCursor::grabSelection() const { if (!selection_) - return MathGridInset(); + return string(); + MathCursorPos i1; MathCursorPos i2; getSelection(i1, i2); - // shouldn't we assert on i1.par_ == i2.par_? - if (i1.idx_ == i2.idx_) { - MathGridInset data(1, 1); - MathArray::const_iterator it = i1.cell().begin(); - data.cell(0) = MathArray(it + i1.pos_, it + i2.pos_); - return data; - } + row_type r1, r2; col_type c1, c2; region(i1, i2, r1, r2, c1, c2); - MathGridInset data(c2 - c1 + 1, r2 - r1 + 1); - for (row_type row = 0; row < data.nrows(); ++row) - for (col_type col = 0; col < data.ncols(); ++col) { - idx_type i = i1.par_->index(row + r1, col + c1); - data.cell(data.index(row, col)) = i1.par_->cell(i); + + string data; + for (row_type row = r1; row <= r2; ++row) { + if (row > r1) + data += "\\n"; + for (col_type col = c1; col <= c2; ++col) { + if (col > c1) + data += "&"; + data += asString(i1.par_->cell(i1.par_->index(row, col))); } + } return data; } @@ -1394,11 +1370,11 @@ void MathCursor::eraseSelection() } -MathGridInset MathCursor::grabAndEraseSelection() +string MathCursor::grabAndEraseSelection() { if (!selection_) - return MathGridInset(); - MathGridInset res = grabSelection(); + return string(); + string res = grabSelection(); eraseSelection(); selection_ = false; return res; diff --git a/src/mathed/math_cursor.h b/src/mathed/math_cursor.h index 3e2bcf501c..9791bdb2ef 100644 --- a/src/mathed/math_cursor.h +++ b/src/mathed/math_cursor.h @@ -65,7 +65,7 @@ public: /// void insert(MathArray const &); /// - void paste(MathGridInset const & data); + void paste(string const & data); /// void erase(); /// @@ -96,6 +96,8 @@ public: void plainInsert(MathAtom const &); /// void niceInsert(MathAtom const &); + /// + void niceInsert(string const &); /// in pixels from top of screen void setPos(int x, int y); @@ -157,10 +159,8 @@ public: void selClear(); /// clears or deletes selection depending on lyxrc setting void selClearOrDel(); - /// - void selGet(MathArray & ar); - /// - void drawSelection(MathPainterInfo & pain) const; + /// draws light-blue selection background + void drawSelection(MathPainterInfo & pi) const; /// void handleNest(MathAtom const & at); /// remove this as soon as LyXFunc::getStatus is "localized" @@ -265,12 +265,12 @@ private: /// are we in a nucleus of a script inset? bool inNucleus() const; - /// grab grid marked by anchor and current cursor - MathGridInset grabSelection() const; + /// grab selection marked by anchor and current cursor + string grabSelection() const; /// erase the selected part and re-sets the cursor void eraseSelection(); /// guess what - MathGridInset grabAndEraseSelection(); + string grabAndEraseSelection(); /// the name of the macro we are currently inputting string macroName() const; diff --git a/src/mathed/math_inset.h b/src/mathed/math_inset.h index 358a1c564d..0ac7f17bed 100644 --- a/src/mathed/math_inset.h +++ b/src/mathed/math_inset.h @@ -308,8 +308,12 @@ public: std::ostream & operator<<(std::ostream &, MathAtom const &); +// converts single cell to string string asString(MathArray const & ar); +// converts string to single cell MathArray asArray(string const & str); + +// initialize math void initMath(); /// here to ssave a few includes in the insets -- 2.39.2