]> git.lyx.org Git - features.git/commitdiff
fix bug that disabled entering 'special char macros' like \, and \:
authorAndré Pönitz <poenitz@gmx.net>
Thu, 4 Apr 2002 10:11:13 +0000 (10:11 +0000)
committerAndré Pönitz <poenitz@gmx.net>
Thu, 4 Apr 2002 10:11:13 +0000 (10:11 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3898 a592a061-630c-0410-9148-cb99ea01b6c8

src/mathed/formulabase.C
src/mathed/math_cursor.C

index 3636d9b6c0fbdfdac0d8171ecc758a36889e6697..68d1189bfd6450f8a3750d15512b6ff644bd0b7b 100644 (file)
@@ -155,10 +155,9 @@ string const InsetFormulaBase::editMessage() const
 }
 
 
-void InsetFormulaBase::edit(BufferView * bv, int x, int y, unsigned int
-button)
+void InsetFormulaBase::edit(BufferView * bv, int x, int /*y*/, unsigned int)
 {
-       lyxerr << "edit: " << x  << " " << y << " button: " << button << "\n";
+       //lyxerr << "edit: " << x  << " " << y << " button: " << button << "\n";
        if (!bv->lockInset(this))
                lyxerr[Debug::MATHED] << "Cannot lock inset!!!" << endl;
 
@@ -685,7 +684,7 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action,
        case LFUN_INSET_ERT:
                // interpret this as if a backslash was typed
                bv->lockedInsetStoreUndo(Undo::EDIT);
-               mathcursor->interpret("\\");
+               mathcursor->interpret('\\');
                updateLocal(bv, true);
                break;
 
@@ -694,7 +693,10 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action,
        case LFUN_SELFINSERT:
                if (!arg.empty()) {
                        bv->lockedInsetStoreUndo(Undo::EDIT);
-                       result = mathcursor->interpret(arg) ? DISPATCHED : FINISHED_RIGHT;
+                       if (arg.size() == 1)
+                               result = mathcursor->interpret(arg[0]) ? DISPATCHED : FINISHED_RIGHT;
+                       else
+                               result = mathcursor->interpret(arg) ? DISPATCHED : FINISHED_RIGHT;
                        updateLocal(bv, true);
                }
                break;
index 4280c68ebe48a0c6692f075061489e4a392f50b2..ba00fe0e751543a6a2e3842847b6975737cab3e2 100644 (file)
@@ -1333,9 +1333,6 @@ bool MathCursor::interpret(string const & s)
        if (s.empty())
                return true;
 
-       if (s.size() == 1)
-               return interpret(s[0]);
-
        //lyxerr << "char: '" << s[0] << "'  int: " << int(s[0]) << endl;
        //owner_->getIntl()->getTrans().TranslateAndInsert(s[0], lt);
        //lyxerr << "trans: '" << s[0] << "'  int: " << int(s[0]) << endl;
@@ -1375,9 +1372,11 @@ bool MathCursor::interpret(string const & s)
                return true;
        }
 
-       if (s == "\\over" || s == "\\choose" || s == "\\atop") {
+       string name = s.substr(1);
+
+       if (name == "over" || name == "choose" || name == "atop") {
                MathArray ar = array();
-               MathAtom t(createMathInset(s.substr(1)));
+               MathAtom t(createMathInset(name));
                t->asNestInset()->cell(0).swap(array());
                pos() = 0;
                niceInsert(t);
@@ -1386,7 +1385,7 @@ bool MathCursor::interpret(string const & s)
                return true;
        }
 
-       latexkeys const * l = in_word_set(s.substr(1));
+       latexkeys const * l = in_word_set(name);
        if (l && (l->token == LM_TK_FONT || l->token == LM_TK_OLDFONT)) {
                lastcode_ = static_cast<MathTextCodes>(l->id);
                return true;
@@ -1394,13 +1393,13 @@ bool MathCursor::interpret(string const & s)
 
        // prevent entering of recursive macros
        if (formula()->lyxCode() == Inset::MATHMACRO_CODE
-               && formula()->getInsetName() == s.substr(1))
+               && formula()->getInsetName() == name)
        {
                lyxerr << "can't enter recursive macro\n";
                return true;
        }
 
-       niceInsert(createMathInset(s.substr(1)));
+       niceInsert(createMathInset(name));
        return true;
 }
 
@@ -1434,6 +1433,7 @@ bool MathCursor::script(bool up)
 
 bool MathCursor::interpret(char c)
 {
+       //lyxerr << "interpret 2: '" << c << "'\n";
        if (inMacroArgMode()) {
                --pos();
                plainErase();
@@ -1451,28 +1451,34 @@ bool MathCursor::interpret(char c)
        // handle macroMode
        if (inMacroMode()) {
                string name = macroName();
+               //lyxerr << "interpret name: '" << name << "'\n";
 
-               if (name == "\\" && c == '\\') {
-                       backspace();
-                       interpret("\\backslash");
-                       return true;
-               }
-
+               // extend macro name if possible
                if (isalpha(c)) {
                        insert(c, LM_TC_TEX);
                        return true;
                }
 
-               macroModeClose();
-
-               if (c == '{' || c == '}') {
-                       insert(MathAtom(new MathSpecialCharInset(c)));
+               // leave macro mode if explicitly requested
+               if (c == ' ') {
+                       macroModeClose();
                        return true;
                }
 
-               if (c != ' ')
-                       interpret(c);
+               // handle 'special char' macros
+               if (name == "\\") {
+                       // remove the '\\'
+                       backspace();
+                       if (c == '\\') 
+                               interpret("\\backslash");
+                       else
+                               interpret(string("\\") + c);
+                       return true;
+               }
 
+               // leave macro mode and try again
+               macroModeClose();
+               interpret(c);
                return true;
        }