X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fformulabase.C;h=a9b75d324d85f00ef5a2c82d363cff917e0a0e25;hb=f5f9c46c35735a5a9d3f186ec5509424e2cffce6;hp=4fee6ab5d326dccab266e62525d75668ae13082c;hpb=4310ee27935804c5b0986a57a477a6b2fd5b2f01;p=lyx.git diff --git a/src/mathed/formulabase.C b/src/mathed/formulabase.C index 4fee6ab5d3..a9b75d324d 100644 --- a/src/mathed/formulabase.C +++ b/src/mathed/formulabase.C @@ -1,9 +1,8 @@ /* -* File: formula.C -* Purpose: Implementation of formula inset +* File: formulabase.C +* Purpose: Implementation of common parts of the LyX math insets * Author: Alejandro Aguilar Sierra * Created: January 1996 -* Description: Allows the edition of math paragraphs inside Lyx. * * Copyright: 1996-1998 Alejandro Aguilar Sierra * @@ -33,16 +32,16 @@ #include "gettext.h" #include "LaTeXFeatures.h" #include "debug.h" +#include "support.h" #include "support/lstrings.h" #include "LyXView.h" #include "Painter.h" #include "font.h" #include "math_arrayinset.h" #include "math_spaceinset.h" -#include "math_scopeinset.h" #include "math_macrotable.h" +#include "math_factory.h" #include "support/lyxlib.h" -#include "mathed/support.h" #include "undo_funcs.h" using std::endl; @@ -61,13 +60,6 @@ int sel_x; int sel_y; bool sel_flag; -void mathed_init_fonts(); - -string nicelabel(string const & label) -{ - return "(" + (label.empty() ? "#" : label) + ")"; -} - void handleFont(BufferView * bv, MathTextCodes t) { if (mathcursor->selection()) @@ -79,7 +71,7 @@ void handleFont(BufferView * bv, MathTextCodes t) void handleAccent(BufferView * bv, string const & name) { bv->lockedInsetStoreUndo(Undo::EDIT); - mathcursor->handleAccent(name); + mathcursor->insert(createMathInset(name)); } @@ -112,52 +104,12 @@ MathArrayInset * matrixpar(int & idx) InsetFormulaBase::InsetFormulaBase() { -#ifdef WITH_WARNINGS -#warning This is needed as long the math parser is not re-entrant -#endif + // This is needed as long the math parser is not re-entrant MathMacroTable::builtinMacros(); //lyxerr << "sizeof MathInset: " << sizeof(MathInset) << "\n"; } -void InsetFormulaBase::read(Buffer const *, LyXLex & lex) -{ - read(lex); -} - - -void InsetFormulaBase::write(Buffer const *, ostream & os) const -{ - write(os); -} - - -int InsetFormulaBase::latex(Buffer const *, ostream & os, - bool fragile, bool spacing) const -{ - return latex(os, fragile, spacing); -} - - -int InsetFormulaBase::ascii(Buffer const *, ostream & os, int spacing) const -{ - return ascii(os, spacing); -} - - -int InsetFormulaBase::linuxdoc(Buffer const *, ostream & os) const -{ - return linuxdoc(os); -} - - -int InsetFormulaBase::docBook(Buffer const *, ostream & os) const -{ - return docBook(os); -} - - - // Check if uses AMS macros void InsetFormulaBase::validate(LaTeXFeatures &) const {} @@ -216,6 +168,7 @@ void InsetFormulaBase::getCursorPos(BufferView *, int & x, int & y) const mathcursor->getPos(x, y); x -= par()->xo(); y -= par()->yo(); + y -= 3; } @@ -232,10 +185,11 @@ void InsetFormulaBase::toggleInsetCursor(BufferView * bv) mathcursor->getPos(x, y); //x -= par()->xo(); y -= par()->yo(); + y -= 3; int asc; - int desc; - math_font_max_dim(LM_TC_TEXTRM, LM_ST_TEXT, asc, desc); - bv->showLockedInsetCursor(x, y, asc, desc); + int des; + math_font_max_dim(LM_TC_TEXTRM, LM_ST_TEXT, asc, des); + bv->showLockedInsetCursor(x, y, asc, des); } toggleCursorVisible(); @@ -252,9 +206,9 @@ void InsetFormulaBase::showInsetCursor(BufferView * bv, bool) x -= par()->xo(); y -= par()->yo(); int asc; - int desc; - math_font_max_dim(LM_TC_TEXTRM, LM_ST_TEXT, asc, desc); - bv->fitLockedInsetCursor(x, y, asc, desc); + int des; + math_font_max_dim(LM_TC_TEXTRM, LM_ST_TEXT, asc, des); + bv->fitLockedInsetCursor(x, y, asc, des); } toggleInsetCursor(bv); } @@ -381,7 +335,7 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action, sel = true; // fall through... case LFUN_RIGHT: - result = DISPATCH_RESULT(mathcursor->right(sel)); + result = mathcursor->right(sel) ? DISPATCHED : FINISHED_RIGHT; updateLocal(bv, false); break; @@ -390,7 +344,7 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action, sel = true; // fall through case LFUN_LEFT: - result = DISPATCH_RESULT(mathcursor->left(sel)); + result = mathcursor->left(sel) ? DISPATCHED : FINISHED; updateLocal(bv, false); break; @@ -399,7 +353,7 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action, sel = true; case LFUN_UP: - result = DISPATCH_RESULT(mathcursor->up(sel)); + result = mathcursor->up(sel) ? DISPATCHED : FINISHED_UP; updateLocal(bv, false); break; @@ -408,17 +362,23 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action, sel = true; case LFUN_DOWN: - result = DISPATCH_RESULT(mathcursor->down(sel)); + result = mathcursor->down(sel) ? DISPATCHED : FINISHED_DOWN; updateLocal(bv, false); break; + case LFUN_HOMESEL: + sel = true; + case LFUN_HOME: - mathcursor->home(); + mathcursor->home(sel); updateLocal(bv, false); break; + case LFUN_ENDSEL: + sel = true; + case LFUN_END: - mathcursor->end(); + mathcursor->end(sel); updateLocal(bv, false); break; @@ -492,8 +452,6 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action, mathcursor->selCopy(); break; - case LFUN_HOMESEL: - case LFUN_ENDSEL: case LFUN_WORDRIGHTSEL: case LFUN_WORDLEFTSEL: break; @@ -519,6 +477,7 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action, case LFUN_EMPH: handleFont(bv, LM_TC_CAL); break; case LFUN_ROMAN: handleFont(bv, LM_TC_RM); break; case LFUN_CODE: handleFont(bv, LM_TC_TT); break; + case LFUN_NOUN: handleFont(bv, LM_TC_BB); break; case LFUN_DEFAULT: handleFont(bv, LM_TC_VAR); break; case LFUN_MATH_MODE: @@ -552,11 +511,12 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action, case LFUN_MATH_SPACE: { bv->lockedInsetStoreUndo(Undo::EDIT); - MathSpaceInset * p = mathcursor->prevSpaceInset(); - if (p) - p->incSpace(); - else - mathcursor->insert(new MathSpaceInset(1)); + //MathSpaceInset * p = mathcursor->prevSpaceInset(); + //if (p) + // p->incSpace(); + //else + // mathcursor->insert(new MathSpaceInset(1)); + mathcursor->insert(new MathSpaceInset(1)); updateLocal(bv, true); break; } @@ -569,14 +529,12 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action, string rs; istringstream is(arg.c_str()); is >> ls >> rs; - latexkeys const * l = in_word_set(ls); - latexkeys const * r = in_word_set(rs); - if (!is || !l || !r) { + if (!is) { lyxerr << "can't parse delimeters from '" << arg << "'\n"; break; } bv->lockedInsetStoreUndo(Undo::EDIT); - mathcursor->handleDelim(l, r); + mathcursor->handleDelim(ls, rs); updateLocal(bv, true); break; } @@ -688,11 +646,10 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action, break; default: - lyxerr << "Closed by action " << action << endl; - result = FINISHED; + result = UNDISPATCHED; } - mathcursor->normalize(); + //mathcursor->normalize(); if (was_macro != mathcursor->inMacroMode() && action >= 0 && action != LFUN_BACKSPACE) @@ -726,19 +683,20 @@ void mathDispatchCreation(BufferView * bv, string const & arg, bool display) // sel = ""; //else - string sel = bv->getLyXText()->selectionAsString(bv->buffer()); + string sel = bv->getLyXText()->selectionAsString(bv->buffer(), + false); InsetFormulaBase * f; if (sel.empty()) { - f = new InsetFormula; - if (openNewInset(bv, f)) { - // don't do that also for LFUN_MATH_MODE unless you want end up with - // always changing to mathrm when opening an inlined inset - // -- I really hate "LyXfunc overloading"... - if (display) - f->localDispatch(bv, LFUN_MATH_DISPLAY, string()); - f->localDispatch(bv, LFUN_INSERT_MATH, arg); - } + f = new InsetFormula; + if (openNewInset(bv, f)) { + // don't do that also for LFUN_MATH_MODE unless you want end up with + // always changing to mathrm when opening an inlined inset + // -- I really hate "LyXfunc overloading"... + if (display) + f->localDispatch(bv, LFUN_MATH_DISPLAY, string()); + f->localDispatch(bv, LFUN_INSERT_MATH, arg); + } } else { // create a macro if we see "\\newcommand" somewhere, and an ordinary // formula otherwise @@ -753,6 +711,7 @@ void mathDispatchCreation(BufferView * bv, string const & arg, bool display) bv->owner()->getLyXFunc()->setMessage(N_("Math editor mode")); } + void mathDispatchMathDisplay(BufferView * bv, string const & arg) { mathDispatchCreation(bv, arg, true); @@ -814,3 +773,16 @@ void mathDispatchInsertMath(BufferView * bv, string const & arg) } } + +void mathDispatchGreek(BufferView * bv, string const & arg) +{ + if (bv->available()) { + InsetFormula * f = new InsetFormula; + if (openNewInset(bv, f)) { + bv->theLockingInset()->localDispatch(bv, LFUN_GREEK, string()); + bv->theLockingInset()->localDispatch(bv, LFUN_SELFINSERT, arg); + bv->unlockInset(f); + } + } +} +