mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
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:
parent
ad9b89c241
commit
12f082c3ba
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user