]> git.lyx.org Git - features.git/commitdiff
MathAccentInset rewritten
authorAndré Pönitz <poenitz@gmx.net>
Tue, 10 Jul 2001 13:17:43 +0000 (13:17 +0000)
committerAndré Pönitz <poenitz@gmx.net>
Tue, 10 Jul 2001 13:17:43 +0000 (13:17 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2215 a592a061-630c-0410-9148-cb99ea01b6c8

src/mathed/ChangeLog
src/mathed/formulabase.C
src/mathed/math_accentinset.C
src/mathed/math_accentinset.h
src/mathed/math_cursor.C
src/mathed/math_cursor.h
src/mathed/math_macrotable.C
src/mathed/math_parser.C

index a9b9ed3b6293a93b4417ff8b6fc80e9a1192ce96..7cf5a8f7ba80f9d49544fe88e6fc79bfceb628e6 100644 (file)
@@ -1,4 +1,12 @@
-2001-07-04 André Pönitz  <poenitz@htwm.de>
+
+2001-07-10 André Pönitz  <poenitz@htwm.de>
+       
+       * math_accentinset.[hC]: rewrite
+
+       * math_parser.C:
+               math_cursor.C: subsequent changes
+
+2001-07-10 André Pönitz  <poenitz@htwm.de>
 
        * math_grid.C: <Delete> in the first cell of a completely empty row
          deletes that row, <C-Return> places the cursor in the first of the
index 491845ce825ad72e749fe69510070f258db225de..b048f29c46db02b4a74f440326277d682dc46160 100644 (file)
@@ -39,7 +39,6 @@
 #include "font.h"
 #include "math_arrayinset.h"
 #include "math_spaceinset.h"
-#include "math_deliminset.h"
 #include "support/lyxlib.h"
 #include "mathed/support.h"
 #include "undo_funcs.h"
@@ -78,6 +77,18 @@ void handleFont(BufferView * bv, MathTextCodes t)
        mathcursor->handleFont(t);
 }
 
+void handleAccent(BufferView * bv, int code)
+{
+       bv->lockedInsetStoreUndo(Undo::EDIT);
+       mathcursor->handleAccent(code);
+}
+
+void handleDelim(BufferView * bv, int l, int r)
+{
+       bv->lockedInsetStoreUndo(Undo::EDIT);
+       mathcursor->handleDelim(l, r);
+}
+
 bool openNewInset(BufferView * bv, UpdatableInset * new_inset)
 {
        LyXText * lt = bv->getLyXText();
@@ -92,6 +103,7 @@ bool openNewInset(BufferView * bv, UpdatableInset * new_inset)
        return true;
 }
 
+
 } // namespaces
 
 
@@ -621,16 +633,16 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action,
 
                // --- accented characters ------------------------------
 
-       case LFUN_UMLAUT:     mathcursor->setAccent(LM_ddot); break;
-       case LFUN_CIRCUMFLEX: mathcursor->setAccent(LM_hat); break;
-       case LFUN_GRAVE:      mathcursor->setAccent(LM_grave); break;
-       case LFUN_ACUTE:      mathcursor->setAccent(LM_acute); break;
-       case LFUN_TILDE:      mathcursor->setAccent(LM_tilde); break;
-       case LFUN_MACRON:     mathcursor->setAccent(LM_bar); break;
-       case LFUN_DOT:        mathcursor->setAccent(LM_dot); break;
-       case LFUN_CARON:      mathcursor->setAccent(LM_check); break;
-       case LFUN_BREVE:      mathcursor->setAccent(LM_breve); break;
-       case LFUN_VECTOR:     mathcursor->setAccent(LM_vec); break;
+       case LFUN_UMLAUT:     handleAccent(bv, LM_ddot); break;
+       case LFUN_CIRCUMFLEX: handleAccent(bv, LM_hat); break;
+       case LFUN_GRAVE:      handleAccent(bv, LM_grave); break;
+       case LFUN_ACUTE:      handleAccent(bv, LM_acute); break;
+       case LFUN_TILDE:      handleAccent(bv, LM_tilde); break;
+       case LFUN_MACRON:     handleAccent(bv, LM_bar); break;
+       case LFUN_DOT:        handleAccent(bv, LM_dot); break;
+       case LFUN_CARON:      handleAccent(bv, LM_check); break;
+       case LFUN_BREVE:      handleAccent(bv, LM_breve); break;
+       case LFUN_VECTOR:     handleAccent(bv, LM_vec); break;
 
                // Greek mode
        case LFUN_GREEK:
@@ -735,16 +747,7 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action,
                } else if (vdelim.find(rt[0]) != string::npos)
                                irt = rt[0];
 
-               if (mathcursor->selection) {
-                       MathDelimInset * p = new MathDelimInset(ilt, irt);
-                       MathArray ar;
-                       mathcursor->selArray(ar);
-                       lyxerr << "selarray: " << ar << "\n";
-                       p->cell(0) = ar; 
-                       mathcursor->insert(p);
-               } else {
-                       mathcursor->insert(new MathDelimInset(ilt, irt));
-               }
+               handleDelim(bv, ilt, irt);
                updateLocal(bv);
                break;
        }
@@ -843,16 +846,11 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action,
        default:
                if ((action == -1 || action == LFUN_SELFINSERT) && !arg.empty()) {
                        unsigned char c = arg[0];
-                       lyxerr << "char: '" << c << "'  int: " << int(c) << endl;
+                       //lyxerr << "char: '" << c << "'  int: " << int(c) << endl;
                        //owner_->getIntl()->getTrans().TranslateAndInsert(c, lt);      
-                       lyxerr << "trans: '" << c << "'  int: " << int(c) << endl;
+                       //lyxerr << "trans: '" << c << "'  int: " << int(c) << endl;
                        bv->lockedInsetStoreUndo(Undo::INSERT);
 
-                       if (c == ' ' && mathcursor->getAccent() == LM_hat) {
-                               c = '^';
-                               mathcursor->setAccent(0);
-                       }
-
                        if (c == 0) {      // Dead key, do nothing
                                //lyxerr << "deadkey" << endl;
                                break;
index 32712c9f8724e373bd4fe336b842fa23efe9f47e..3bfb5ca2ffecd7271095a88daf143611b146712d 100644 (file)
@@ -7,60 +7,24 @@
 
 using std::ostream;
 
-MathAccentInset::MathAccentInset(byte cx, MathTextCodes f, int cd)
-       : MathInset(1), c(cx), fn(f), code(cd), inset(0)
+MathAccentInset::MathAccentInset(int f)
+       : MathInset(1), code(f)
 {}
 
 
-MathAccentInset::MathAccentInset(MathInset * ins, int cd)
-       : MathInset(0), c(0), fn(LM_TC_MIN), code(cd), inset(ins)
-{}
-
-
-MathAccentInset::~MathAccentInset()
-{
-       delete inset;
-}
-
-
 MathInset * MathAccentInset::clone() const
 {   
-       MathAccentInset * p;
-       
-       if (inset) 
-               p = new MathAccentInset(inset->clone(), code);
-       else
-               p = new MathAccentInset(c, fn, code);
-       
-       return p;
+       return new MathAccentInset(*this);
 }
 
-
-void MathAccentInset::draw(Painter & pain, int x, int y)
-{
-       int const dw = width() - 2;
-       
-       if (inset) 
-               inset->draw(pain, x, y);
-       else 
-               drawChar(pain, fn, size(), x, y, c);
-       x += (code == LM_not) ? (width() - dw) / 2 : 2;
-       mathed_draw_deco(pain, x, y - dy, dw, dh, code);
-}
-
-
 void MathAccentInset::Metrics(MathStyles st)
 {
-       if (inset) {
-               inset->Metrics(st);
-               ascent_  = inset->ascent();
-               descent_ = inset->descent();
-               width_   = inset->width();
-               dh = ascent_;
-       } else {
-               mathed_char_dim(fn, size(), c, ascent_, descent_, width_);
-               dh = width() / 2 - 1;
-       }
+       xcell(0).Metrics(st);
+       ascent_  = xcell(0).ascent();
+       descent_ = xcell(0).descent();
+       width_   = xcell(0).width();
+       dh = 5;
+
        if (code == LM_not) {
                ascent_  += dh;
                descent_ += dh;
@@ -69,8 +33,14 @@ void MathAccentInset::Metrics(MathStyles st)
                ascent_ += dh + 2;
        
        dy = ascent_;
-//    if (MathIsBinary(fn))
-//     width += 2*mathed_char_width(fn, size, ' ');    
+}
+
+void MathAccentInset::draw(Painter & pain, int x, int y)
+{
+       int const dw = width() - 2;
+       xcell(0).draw(pain, x, y);
+       x += (code == LM_not) ? (width() - dw) / 2 : 2;
+       mathed_draw_deco(pain, x, y - dy, dw, dh, code);
 }
 
 
@@ -78,28 +48,14 @@ void MathAccentInset::Write(ostream & os, bool fragile) const
 {
        latexkeys const * l = lm_get_key_by_id(code, LM_TK_ACCENT);
        os << '\\' << l->name;
-       if (code!= LM_not)
-               os << '{';
-       else
+       if (code == LM_not)
                os << ' ';
+       else
+               os << '{';
        
-       if (inset)
-               inset->Write(os, fragile);
-       else {
-               if (fn>= LM_TC_RM && fn <= LM_TC_TEXTRM)
-                       os << '\\' << math_font_name[fn - LM_TC_RM] << '{';
-               if (MathIsSymbol(fn)) {
-                       latexkeys const * l = lm_get_key_by_id(c, LM_TK_SYM);
-                       if (l)
-                               os << '\\' << l->name << ' ';
-               } else
-                       os << char(c);
-               
-               if (fn>= LM_TC_RM && fn<= LM_TC_TEXTRM)
-                       os << '}';
-       }
+       cell(0).Write(os, fragile);
        
-       if (code!= LM_not)
+       if (code != LM_not)
                os << '}';
 }
 
@@ -109,23 +65,7 @@ void MathAccentInset::WriteNormal(ostream & os) const
        latexkeys const * l = lm_get_key_by_id(code, LM_TK_ACCENT);
        os << "[accent " << l->name << " ";
 
-       if (inset)
-               inset->WriteNormal(os);
-       else {
-               if (fn >= LM_TC_RM && fn <= LM_TC_TEXTRM)
-                       os << "[font " << math_font_name[fn - LM_TC_RM] << "]";
-               if (MathIsSymbol(fn)) {
-                       latexkeys const * l = lm_get_key_by_id(c, LM_TK_SYM);
-                       if (l) 
-                               os << "[symbol " << l->name << "] ";
-               } else
-                       os << "[char " << char(c) << "] ";
-       }
+       cell(0).WriteNormal(os);
 
        os << "] ";
 }
-
-int MathAccentInset::getAccentCode() const
-{
-       return code;
-}
index 0888c1606e525c067cf14a50fa6c1fc9e06c0b3f..e75f69fe0df44d45163b01b376532e2d0e3037f0 100644 (file)
 class MathAccentInset : public MathInset {
 public:
        ///
-       MathAccentInset(byte, MathTextCodes, int);
+       explicit MathAccentInset(int);
        ///
-       MathAccentInset(MathInset *, int);
-       ///
-       ~MathAccentInset();
-       ///
-       MathInset *  clone() const;
+       MathInset * clone() const;
        ///
        void draw(Painter &, int, int);
        ///
@@ -29,17 +25,13 @@ public:
        int getAccentCode() const;
        ///
        bool isAccentInset() const { return true; }
-protected:
-       ///
-       byte c;
-       ///
-       MathTextCodes fn;
+private:
        ///
        int code;
        ///
-       MathInset * inset;
+       int dh;
        ///
-       int dh, dy;
+       int dy;
 };
 
 #endif
index c23a395021d02e15f273cb2f17d2111e61db64e4..558f398accc397edd3e53067220dc1a7b4422807 100644 (file)
@@ -42,6 +42,7 @@
 #include "math_fracinset.h"
 #include "math_decorationinset.h"
 #include "math_dotsinset.h"
+#include "math_deliminset.h"
 #include "math_accentinset.h"
 #include "math_macrotemplate.h"
 #include "math_sqrtinset.h"
@@ -79,7 +80,6 @@ bool IsMacro(short tok, int id)
 MathCursor::MathCursor(InsetFormulaBase * formula)
        : formula_(formula)
 {
-       accent     = 0;
        lastcode   = LM_TC_MIN;
        macro_mode = false;
        first();
@@ -345,10 +345,9 @@ void MathCursor::End()
 }
 
 
-
 void MathCursor::insert(char c, MathTextCodes t)
 {
-       lyxerr << "inserting '" << c << "'\n";
+       //lyxerr << "inserting '" << c << "'\n";
        if (selection)
                SelDel();
 
@@ -366,15 +365,10 @@ void MathCursor::insert(char c, MathTextCodes t)
                }
        }
 
-       if (accent)
-               doAccent(c, t);
-       else {
-               array().insert(cursor_, c, t);
-               array().next(cursor_);
-       }
+       array().insert(cursor_, c, t);
+       array().next(cursor_);
 
        lastcode = t;
-       return;
 }
 
 
@@ -389,15 +383,8 @@ void MathCursor::insert(MathInset * p)
                        SelDel();
        }
 
-       if (accent && !p->nargs())
-               doAccent(p);
-       else {
-               array().insert(cursor_, p);
-               array().next(cursor_);
-       }
-
-       //if (p->nargs()) 
-       //      push(p, true);
+       array().insert(cursor_, p);
+       array().next(cursor_);
 }
 
 
@@ -670,7 +657,7 @@ in_word_set(s) << " \n";
                                break;
 
                        case LM_TK_ACCENT:
-                               setAccent(l->id);
+                               p = new MathAccentInset(l->id);
                                break;
 
                        case LM_TK_MACRO:
@@ -727,9 +714,6 @@ void MathCursor::MacroModeClose()
                                imacro->SetName(l->name);
                } else {
                        Left();
-                       if (nextInset()->isAccentInset()) 
-                               setAccent(
-                                       static_cast<MathAccentInset*>(nextInset())->getAccentCode());
                        array().erase(cursor_);
                        if (l || MathMacroTable::hasTemplate(imacro->name())) 
                                Interpret(imacro->name());
@@ -753,16 +737,6 @@ void MathCursor::SelCopy()
        }
 }
 
-void MathCursor::selArray(MathArray & ar) const
-{
-       int const p1 = min(cursor_, anchor_);
-       int const p2 = max(cursor_, anchor_);
-       ar = array();
-       ar.erase(p2, ar.size());
-       ar.erase(0, p1);
-}
-
-
 void MathCursor::SelCut()
 {
        seldump("SelCut");
@@ -892,57 +866,6 @@ void MathCursor::SelGetArea(int * xpoint, int * ypoint, int & n)
 }
 
 
-void MathCursor::setAccent(int ac)
-{
-       if (ac > 0 && accent < 8)
-               nestaccent[accent++] = ac;
-       else
-               accent = 0;  // consumed!
-}
-
-
-int MathCursor::getAccent() const
-{
-       return accent > 0 ? nestaccent[accent - 1] : 0;
-}
-
-
-void MathCursor::doAccent(char c, MathTextCodes t)
-{
-       MathInset * ac = 0;
-
-       for (int i = accent - 1; i >= 0; --i) {
-               if (i == accent - 1)
-                       ac = new MathAccentInset(c, t, nestaccent[i]);
-               else
-                       ac = new MathAccentInset(ac, nestaccent[i]);
-       }
-       
-       if (ac)
-               insert(ac);
-
-       accent = 0;  // consumed!
-}
-
-
-void MathCursor::doAccent(MathInset * p)
-{
-       MathInset * ac = 0;
-
-       for (int i = accent - 1; i >= 0; --i) {
-               if (i == accent - 1)
-                       ac = new MathAccentInset(p, nestaccent[i]);
-               else
-                       ac = new MathAccentInset(ac, nestaccent[i]);
-       }
-
-       if (ac)
-               insert(ac);
-
-       accent = 0;  // consumed!
-}
-
-
 void MathCursor::handleFont(MathTextCodes t)
 {
        if (selection)  {
@@ -963,6 +886,27 @@ void MathCursor::handleFont(MathTextCodes t)
 }
 
 
+void MathCursor::handleAccent(int code)
+{
+       MathAccentInset * p = new MathAccentInset(code);
+       if (selection) {
+               SelCut();
+               p->cell(0) = selarray;
+       }
+       insert(p);
+}
+
+void MathCursor::handleDelim(int l, int r)
+{
+       MathDelimInset * p = new MathDelimInset(l, r);
+       if (selection) {
+               SelCut();
+               p->cell(0) = selarray;
+       }
+       insert(p);
+}
+
+
 void MathCursor::GetPos(int & x, int & y)
 {
        x = xarray().xo() + xarray().pos2x(cursor_);
index 92184db894b0cb598f7ddb4fc1e5d04fbba23cdc..3f316d96b72486b73af99883229c26ae0e101a9c 100644 (file)
@@ -80,10 +80,6 @@ public:
        void SetSize(MathStyles);
        ///
        bool toggleLimits();
-       /// Set accent: if argument = 0 it's considered consumed 
-       void setAccent(int ac = 0);
-       /// Returns last accent
-       int getAccent() const;
        ///
        // Macro mode methods
        void MacroModeOpen();
@@ -117,6 +113,10 @@ public:
        void setLastCode(MathTextCodes t);
        ///
        void handleFont(MathTextCodes t);
+       ///
+       void handleAccent(int code);
+       ///
+       void handleDelim(int l, int r);
        /// Splits cells and shifts right part to the next cell
        void splitCell();
        /// Splits line and insert new row of cell 
@@ -138,8 +138,6 @@ public:
        ///
        MathTextCodes prevCode() const;
        ///
-       void selArray(MathArray &) const;
-       ///
        char valign() const;
        ///
        char halign() const;
@@ -166,14 +164,6 @@ public:
        ///
        InsetFormulaBase * const formula_;
        ///
-       void doAccent(char c, MathTextCodes t);
-       ///
-       void doAccent(MathInset * p);
-       ///
-       int accent;
-       ///
-       int nestaccent[8];
-       ///
        MathTextCodes lastcode;
 
        ///
index 4eec3606649aacad005d7e1d91f5e9f9a557d6d4..4f3368fa07fdf23a658a86c3932a4da122f9b7ec 100644 (file)
@@ -94,7 +94,9 @@ void MathMacroTable::builtinMacros()
        // This macro doesn't have arguments
        {
                MathMacroTemplate * t = new MathMacroTemplate("notin", 0);
-               t->push_back(new MathAccentInset(LM_in, LM_TC_BOPS, LM_not));
+               MathAccentInset * p = new MathAccentInset(LM_not);
+               p->cell(0).push_back(LM_in, LM_TC_BOPS);
+               t->push_back(p);
                insertTemplate(t);
        }
 
@@ -111,7 +113,9 @@ void MathMacroTable::builtinMacros()
 
        {
                MathMacroTemplate * t = new MathMacroTemplate("emptyset", 0);
-               t->push_back(new MathAccentInset('0', LM_TC_RM, LM_not));
+               MathAccentInset * p = new MathAccentInset(LM_not);
+               p->cell(0).push_back('0', LM_TC_VAR);
+               t->push_back(p);
                insertTemplate(t);
        }
 
index 20e4c73276354d261aaefa07801ae2b4aa372b5c..a00cbb681bb6980e97806f2fa68380261614fc89 100644 (file)
@@ -227,9 +227,12 @@ unsigned char LexGetArg(unsigned char lf, bool accept_spaces = false)
 
 int yylex()
 {
-       static int init_done;
+       static bool init_done = false;
        
-       if (!init_done) LexInitCodes();
+       if (!init_done) {
+               LexInitCodes();
+               init_done = true;
+       }
        
        while (yyis->good()) {
                unsigned char c = getuchar(yyis);
@@ -330,68 +333,6 @@ int yylex()
 }
 
 
-// Accent hacks only for 0.12. Stolen from Cursor.
-int accent = 0;
-int nestaccent[8];
-
-void setAccent(int ac)
-{
-       if (ac > 0 && accent < 8)
-               nestaccent[accent++] = ac;
-       else
-         accent = 0;  // consumed!
-}
-
-
-MathInset * doAccent(unsigned char c, MathTextCodes t)
-{
-       MathInset * ac = 0;
-       
-       for (int i = accent - 1; i >= 0; --i) {
-               if (i == accent - 1)
-                 ac = new MathAccentInset(c, t, nestaccent[i]);
-               else 
-                 ac = new MathAccentInset(ac, nestaccent[i]);
-       }
-       accent = 0;  // consumed!
-       
-       return ac;
-}
-
-
-MathInset * doAccent(MathInset * p)
-{
-       MathInset * ac = 0;
-       
-       for (int i = accent - 1; i >= 0; --i) {
-               if (i == accent - 1)
-                 ac = new MathAccentInset(p, nestaccent[i]);
-               else 
-                 ac = new MathAccentInset(ac, nestaccent[i]);
-       }
-       accent = 0;  // consumed!
-       
-       return ac;
-}
-
-
-void do_insert(MathArray & dat, MathInset * m)
-{
-       if (accent) 
-               dat.push_back(doAccent(m));
-       else
-               dat.push_back(m);
-}
-
-void do_insert(MathArray & dat, unsigned char ch, MathTextCodes fcode)
-{
-       if (accent) 
-               dat.push_back(doAccent(ch, fcode));
-       else
-               dat.push_back(ch, fcode);
-}
-
-
 void handle_frac(MathArray & dat, string const & name)
 {
        MathFracInset * p = new MathFracInset(name);
@@ -548,8 +489,6 @@ void mathed_parse(MathArray & array, unsigned flags)
        yyvarcode = LM_TC_VAR;
        
        int brace = 0;
-       int acc_brace = 0;
-       int acc_braces[8];
 
        ++plevel;
        while (t) {
@@ -569,7 +508,7 @@ void mathed_parse(MathArray & array, unsigned flags)
                switch (t) {
                        
                case LM_TK_ALPHA:
-                       do_insert(array, yylval.i, yyvarcode);
+                       array.push_back(yylval.i, yyvarcode);
                        break;
 
                case LM_TK_ARGUMENT:
@@ -581,15 +520,11 @@ void mathed_parse(MathArray & array, unsigned flags)
                        break;
 
                case LM_TK_STR:
-                       do_insert(array, yylval.i, LM_TC_CONST);
+                       array.push_back(yylval.i, LM_TC_CONST);
                        break;
 
                case LM_TK_OPEN:
                        ++brace;
-                       if (accent && tprev == LM_TK_ACCENT) {
-                               acc_braces[acc_brace++] = brace;
-                               break;
-                       }
                        if (flags & FLAG_BRACE_OPT) {
                                flags &= ~FLAG_BRACE_OPT;
                                flags |= FLAG_BRACE;
@@ -608,10 +543,6 @@ void mathed_parse(MathArray & array, unsigned flags)
                                panic = true;
                                break;
                        }
-                       if (acc_brace && brace == acc_braces[acc_brace - 1] - 1) {
-                               --acc_brace;
-                               break;
-                       }
                        if (flags & FLAG_BRACE_FONT) {
                                yyvarcode = LM_TC_VAR;
                                flags &= ~FLAG_BRACE_FONT;
@@ -704,13 +635,13 @@ void mathed_parse(MathArray & array, unsigned flags)
                case LM_TK_SYM:
                        if (yylval.l->id < 256) {
                                MathTextCodes tc = MathIsBOPS(yylval.l->id) ? LM_TC_BOPS: LM_TC_SYMB;
-                               do_insert(array, yylval.l->id, tc);
+                               array.push_back(yylval.l->id, tc);
                        } else 
-                               do_insert(array, new MathFuncInset(yylval.l->name));
+                               array.push_back(new MathFuncInset(yylval.l->name));
                        break;
 
                case LM_TK_BOP:
-                       do_insert(array, yylval.i, LM_TC_BOP);
+                       array.push_back(yylval.i, LM_TC_BOP);
                        break;
 
                case LM_TK_SPACE:
@@ -801,15 +732,19 @@ void mathed_parse(MathArray & array, unsigned flags)
 
                case LM_TK_WIDE:
                {  
-                       MathDecorationInset * sq = new MathDecorationInset(yylval.l->id);
-                       mathed_parse(sq->cell(0), FLAG_BRACE | FLAG_BRACE_LAST);
-                       array.push_back(sq);
+                       MathDecorationInset * p = new MathDecorationInset(yylval.l->id);
+                       mathed_parse(p->cell(0), FLAG_BRACE | FLAG_BRACE_LAST);
+                       array.push_back(p);
                        break;
                }
                
                case LM_TK_ACCENT:
-                       setAccent(yylval.l->id);
+               {
+                       MathAccentInset * p = new MathAccentInset(yylval.l->id);
+                       mathed_parse(p->cell(0), FLAG_BRACE | FLAG_BRACE_LAST);
+                       array.push_back(p);
                        break;
+               }
                        
                case LM_TK_NONUM:
                        curr_num = false;
@@ -817,9 +752,9 @@ void mathed_parse(MathArray & array, unsigned flags)
                
                case LM_TK_PMOD:
                case LM_TK_FUNC:
-                       if (accent) 
-                               array.push_back(t, LM_TC_CONST);
-                       else 
+                       //if (accent) 
+                       //      array.push_back(t, LM_TC_CONST);
+                       //else 
                                array.push_back(new MathFuncInset(yylval.l->name));
                        break;
                
@@ -832,10 +767,10 @@ void mathed_parse(MathArray & array, unsigned flags)
                                MathMacro * m = MathMacroTable::cloneTemplate(yytext);
                                for (int i = 0; i < m->nargs(); ++i) 
                                        mathed_parse(m->cell(i), FLAG_BRACE_OPT | FLAG_BRACE_LAST);
-                               do_insert(array, m);
+                               array.push_back(m);
                                m->Metrics(LM_ST_TEXT);
                        } else
-                               do_insert(array, new MathFuncInset(yytext, LM_OT_UNDEF));
+                               array.push_back(new MathFuncInset(yytext, LM_OT_UNDEF));
                        break;
                
                case LM_TK_END:
@@ -862,7 +797,7 @@ void mathed_parse(MathArray & array, unsigned flags)
                                mm->halign(halign);
 
                                mathed_parse_lines(mm, halign.size(), latex_mathenv[i].numbered, false);
-                               do_insert(array, mm);
+                               array.push_back(mm);
                                //lyxerr << "read matrix " << *mm << "\n";      
                                break;
                        } else 
@@ -871,7 +806,7 @@ void mathed_parse(MathArray & array, unsigned flags)
                }
        
                case LM_TK_MACRO:
-                       do_insert(array, MathMacroTable::cloneTemplate(yylval.l->name));
+                       array.push_back(MathMacroTable::cloneTemplate(yylval.l->name));
                        break;
                
                case LM_TK_LABEL:
@@ -944,5 +879,3 @@ MathInset * mathed_parse(LyXLex & lex)
 
        return p;
 }
-
-