]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/formulabase.C
Use dummy Buffer * parameters to make Jean-Marc's compiler happy
[lyx.git] / src / mathed / formulabase.C
index 4fee6ab5d326dccab266e62525d75668ae13082c..a9b75d324d85f00ef5a2c82d363cff917e0a0e25 100644 (file)
@@ -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 <asierra@servidor.unam.mx>
 *  Created:     January 1996
-*  Description: Allows the edition of math paragraphs inside Lyx.
 *
 *  Copyright: 1996-1998 Alejandro Aguilar Sierra
 *
 #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);
+               }
+       }
+}         
+