void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
{
- lyxerr[Debug::ACTION] << "LyXText::dispatch: cmd: " << cmd << endl;
+ LYXERR(Debug::ACTION) << "LyXText::dispatch: cmd: " << cmd << endl;
// FIXME: We use the update flag to indicates wether a singlePar or a
// full screen update is needed. We reset it here but shall we restore it
std::swap(pars_[pit], pars_[pit + 1]);
ParIterator begin(cur);
+ // begin.pos() (== cur.pos()) may point beyond the end of the
+ // paragraph referenced by begin. This would cause a crash
+ // in updateLabels()
+ begin.pos() = 0;
++cur.pit();
ParIterator end = boost::next(ParIterator(cur));
updateLabels(cur.buffer(), begin, end);
finishUndo();
std::swap(pars_[pit], pars_[pit - 1]);
- ParIterator end = boost::next(ParIterator(cur));
+ ParIterator end = ParIterator(cur);
+ // end.pos() (== cur.pos()) may point beyond the end of the
+ // paragraph referenced by end. This would cause a crash
+ // in boost::next()
+ end.pos() = 0;
+ end = boost::next(end);
--cur.pit();
ParIterator begin(cur);
updateLabels(cur.buffer(), begin, end);
case LFUN_BREAK_LINE: {
// Not allowed by LaTeX (labels or empty par)
if (cur.pos() > cur.paragraph().beginOfBody()) {
+ // this avoids a double undo
+ // FIXME: should not be needed, ideally
if (!cur.selection())
recordUndo(cur);
cap::replaceSelection(cur);
case LFUN_LAYOUT: {
string layout = to_ascii(cmd.argument());
- lyxerr[Debug::INFO] << "LFUN_LAYOUT: (arg) " << layout << endl;
+ LYXERR(Debug::INFO) << "LFUN_LAYOUT: (arg) " << layout << endl;
// Derive layout number from given argument (string)
// and current buffer's textclass (number)
}
case LFUN_QUOTE_INSERT: {
- cap::replaceSelection(cur);
Paragraph & par = cur.paragraph();
pos_type pos = cur.pos();
- char_type c;
- if (pos == 0)
- c = ' ';
- else if (cur.prevInset() && cur.prevInset()->isSpace())
- c = ' ';
- else
- c = par.getChar(pos - 1);
-
- LyXLayout_ptr const & style = par.layout();
-
BufferParams const & bufparams = bv->buffer()->params();
+ LyXLayout_ptr const & style = par.layout();
if (!style->pass_thru
&& par.getFontSettings(bufparams, pos).language()->lang() != "hebrew") {
+ // this avoids a double undo
+ // FIXME: should not be needed, ideally
+ if (!cur.selection())
+ recordUndo(cur);
+ cap::replaceSelection(cur);
+ pos = cur.pos();
+ char_type c;
+ if (pos == 0)
+ c = ' ';
+ else if (cur.prevInset() && cur.prevInset()->isSpace())
+ c = ' ';
+ else
+ c = par.getChar(pos - 1);
string arg = to_utf8(cmd.argument());
if (arg == "single")
cur.insert(new InsetQuotes(c,
docstring::const_iterator cit = cmd.argument().begin();
docstring::const_iterator end = cmd.argument().end();
for (; cit != end; ++cit)
-#if 0
bv->getIntl().getTransManager().
- translateAndInsert(*cit, this);
-#else
- insertChar(bv->cursor(), *cit);
-#endif
+ translateAndInsert(*cit, this, cur);
cur.resetAnchor();
moveCursor(cur, false);
InsetBase * inset = createInset(&cur.bv(), cmd);
if (!inset)
break;
-
recordUndo(cur);
cur.clearSelection();
insertInset(cur, inset);
}
case LFUN_FINISHED_LEFT:
- lyxerr[Debug::DEBUG] << "handle LFUN_FINISHED_LEFT:\n" << cur << endl;
+ LYXERR(Debug::DEBUG) << "handle LFUN_FINISHED_LEFT:\n" << cur << endl;
break;
case LFUN_FINISHED_RIGHT:
- lyxerr[Debug::DEBUG] << "handle LFUN_FINISHED_RIGHT:\n" << cur << endl;
+ LYXERR(Debug::DEBUG) << "handle LFUN_FINISHED_RIGHT:\n" << cur << endl;
++cur.pos();
break;
case LFUN_FINISHED_UP:
- lyxerr[Debug::DEBUG] << "handle LFUN_FINISHED_UP:\n" << cur << endl;
+ LYXERR(Debug::DEBUG) << "handle LFUN_FINISHED_UP:\n" << cur << endl;
cursorUp(cur);
break;
case LFUN_FINISHED_DOWN:
- lyxerr[Debug::DEBUG] << "handle LFUN_FINISHED_DOWN:\n" << cur << endl;
+ LYXERR(Debug::DEBUG) << "handle LFUN_FINISHED_DOWN:\n" << cur << endl;
cursorDown(cur);
break;
break;
default:
- lyxerr[Debug::ACTION]
+ LYXERR(Debug::ACTION)
<< BOOST_CURRENT_FUNCTION
<< ": Command " << cmd
<< " not DISPATCHED by LyXText" << endl;
case LFUN_CLEARDOUBLEPAGE_INSERT:
case LFUN_MATH_DISPLAY:
case LFUN_MATH_IMPORT_SELECTION:
+ case LFUN_MATH_INSERT:
case LFUN_MATH_MODE:
case LFUN_MATH_MACRO:
case LFUN_MATH_MATRIX: