fix bug that disabled entering 'special char macros' like \, and \:

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3898 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
André Pönitz 2002-04-04 10:11:13 +00:00
parent ad9b89c241
commit 12f082c3ba
2 changed files with 33 additions and 25 deletions

View 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;

View 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;
}