]> 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 e8ea7585ac4ba1e26c57d0379d3b179acad99cec..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
 *
@@ -40,7 +39,6 @@
 #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"
@@ -62,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())
@@ -113,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
 {}
@@ -217,6 +168,7 @@ void InsetFormulaBase::getCursorPos(BufferView *, int & x, int & y) const
        mathcursor->getPos(x, y);
        x -= par()->xo();
        y -= par()->yo();
+       y -= 3;
 }
 
 
@@ -233,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();
@@ -253,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);
        }
@@ -413,13 +366,19 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action,
                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;
 
@@ -493,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;
@@ -520,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:
@@ -553,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;
        }
@@ -570,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;
        }
@@ -689,11 +646,10 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action,
                break;
 
        default:
-               lyxerr << "Closed by action " << action << endl;
-               result = FINISHED_RIGHT;
+               result = UNDISPATCHED;
        }
 
-       mathcursor->normalize();
+       //mathcursor->normalize();
 
        if (was_macro != mathcursor->inMacroMode()
                                && action >= 0 && action != LFUN_BACKSPACE) 
@@ -727,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
@@ -754,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);
@@ -815,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);
+               }
+       }
+}         
+