Avoid an implicit character set conversion in cur.insert() in InsertChar

by changing the argument type to lyx::char_type.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15382 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Georg Baum 2006-10-19 18:56:16 +00:00
parent 6559e4b4db
commit 62aedce851
2 changed files with 12 additions and 19 deletions

View File

@ -705,15 +705,9 @@ void InsetMathNest::doDispatch(LCursor & cur, FuncRequest & cmd)
cur.posLeft(); cur.posLeft();
cur.pushLeft(*cur.nextInset()); cur.pushLeft(*cur.nextInset());
} }
// FIXME: Change to } else if (!interpretChar(cur, cmd.argument()[0])) {
// } else if (!interpret(cur, cmd.argument()[0])) { cmd = FuncRequest(LFUN_FINISHED_RIGHT);
// when interpret accepts UCS4 characters cur.undispatched();
} else {
std::string arg0 = lyx::to_utf8(docstring(1, cmd.argument()[0]));
if (!interpretChar(cur, arg0[0])) {
cmd = FuncRequest(LFUN_FINISHED_RIGHT);
cur.undispatched();
}
} }
break; break;
@ -940,8 +934,7 @@ void InsetMathNest::doDispatch(LCursor & cur, FuncRequest & cmd)
case LFUN_MATH_INSERT: { case LFUN_MATH_INSERT: {
recordUndo(cur, Undo::ATOMIC); recordUndo(cur, Undo::ATOMIC);
if (cmd.argument() == "^" || cmd.argument() == "_") { if (cmd.argument() == "^" || cmd.argument() == "_") {
std::string arg0 = lyx::to_utf8(docstring(1, cmd.argument()[0])); interpretChar(cur, cmd.argument()[0]);
interpretChar(cur, arg0[0]);
} else } else
cur.niceInsert(lyx::to_utf8(cmd.argument())); cur.niceInsert(lyx::to_utf8(cmd.argument()));
break; break;
@ -1169,7 +1162,7 @@ void InsetMathNest::lfunMouseRelease(LCursor & cur, FuncRequest & cmd)
} }
bool InsetMathNest::interpretChar(LCursor & cur, char c) bool InsetMathNest::interpretChar(LCursor & cur, lyx::char_type c)
{ {
//lyxerr << "interpret 2: '" << c << "'" << endl; //lyxerr << "interpret 2: '" << c << "'" << endl;
string save_selection; string save_selection;
@ -1192,7 +1185,7 @@ bool InsetMathNest::interpretChar(LCursor & cur, char c)
} }
if (isalpha(c)) { if (isalpha(c)) {
cur.activeMacro()->setName(name + c); cur.activeMacro()->setName(name + lyx::to_ascii(docstring(1, c)));
return true; return true;
} }
@ -1213,16 +1206,16 @@ bool InsetMathNest::interpretChar(LCursor & cur, char c)
cur.niceInsert(MathAtom(new InsetMathComment)); cur.niceInsert(MathAtom(new InsetMathComment));
} else if (c == '#') { } else if (c == '#') {
BOOST_ASSERT(cur.activeMacro()); BOOST_ASSERT(cur.activeMacro());
cur.activeMacro()->setName(name + c); cur.activeMacro()->setName(name + lyx::to_ascii(docstring(1, c)));
} else { } else {
cur.backspace(); cur.backspace();
cur.niceInsert(createInsetMath(string(1, c))); cur.niceInsert(createInsetMath(lyx::to_ascii(docstring(1, c))));
} }
return true; return true;
} }
// One character big delimiters. The others are handled in // One character big delimiters. The others are handled in
// the other interpret() method. // interpretString().
latexkeys const * l = in_word_set(name.substr(1)); latexkeys const * l = in_word_set(name.substr(1));
if (name[0] == '\\' && l && l->inset == "big") { if (name[0] == '\\' && l && l->inset == "big") {
string delim; string delim;
@ -1234,7 +1227,7 @@ bool InsetMathNest::interpretChar(LCursor & cur, char c)
delim = "\\}"; delim = "\\}";
break; break;
default: default:
delim = string(1, c); delim = lyx::to_ascii(docstring(1, c));
break; break;
} }
if (InsetMathBig::isBigInsetDelim(delim)) { if (InsetMathBig::isBigInsetDelim(delim)) {
@ -1329,7 +1322,7 @@ bool InsetMathNest::interpretChar(LCursor & cur, char c)
if (c == '{' || c == '}' || c == '&' || c == '$' || c == '#' || if (c == '{' || c == '}' || c == '&' || c == '$' || c == '#' ||
c == '%' || c == '_' || c == '^') { c == '%' || c == '_' || c == '^') {
cur.niceInsert(createInsetMath(string(1, c))); cur.niceInsert(createInsetMath(lyx::to_ascii(docstring(1, c))));
return true; return true;
} }

View File

@ -110,7 +110,7 @@ protected:
/// interpret \p c and insert the result at the current position of /// interpret \p c and insert the result at the current position of
/// of \p cur. Return whether the cursor should stay in the formula. /// of \p cur. Return whether the cursor should stay in the formula.
bool interpretChar(LCursor & cur, char c); bool interpretChar(LCursor & cur, lyx::char_type c);
/// ///
bool script(LCursor & cur, bool, bool script(LCursor & cur, bool,
std::string const & save_selection = std::string()); std::string const & save_selection = std::string());