#include "Language.h"
#include "LyXFunc.h" // only for setMessage()
#include "LyXRC.h"
-#include "paragraph_funcs.h"
#include "Paragraph.h"
#include "ParIterator.h"
#include "Row.h"
return true;
}
-docstring parbreak(Paragraph const & par)
-{
- odocstringstream os;
- os << '\n';
- // only add blank line if we're not in an ERT or Listings inset
- if (par.ownerCode() != ERT_CODE && par.ownerCode() != LISTINGS_CODE)
- os << '\n';
- return os.str();
-}
-
} // namespace anon
fixIfBroken();
FuncRequest cmd = cmd0;
Cursor safe = *this;
+
+ buffer()->undo().beginUndoGroup();
// store some values to be used inside of the handlers
beforeDispatchCursor_ = *this;
// are possible which would change it
beforeDispatchCursor_ = safe.beforeDispatchCursor_;
}
+ buffer()->undo().endUndoGroup();
}
InsetMathUnknown * p = activeMacro();
p->finalize();
MathData selection;
- asArray(p->selection(), selection);
+ // enclose selection in braces (bug #6270)
+ asArray('{' + p->selection() + '}', selection);
docstring const s = p->name();
--pos();
cell().erase(pos());
<< pos() << ' ' << lastpos() << " in idx: " << idx()
<< " in atom: '";
odocstringstream os;
- WriteStream wi(os, false, true, false);
+ WriteStream wi(os, false, true, WriteStream::wsDefault);
inset().asInsetMath()->write(wi);
lyxerr << to_utf8(os.str()) << endl;
pos() = lastpos();
}
+static docstring parbreak(InsetCode code)
+{
+ odocstringstream os;
+ os << '\n';
+ // only add blank line if we're not in an ERT or Listings inset
+ if (code != ERT_CODE && code != LISTINGS_CODE)
+ os << '\n';
+ return os.str();
+}
+
+
docstring Cursor::selectionAsString(bool with_label) const
{
if (!selection())
return docstring();
+ if (inMathed())
+ return cap::grabSelection(*this);
+
int const label = with_label
? AS_STR_LABEL | AS_STR_INSETS : AS_STR_INSETS;
- if (inTexted()) {
- idx_type const startidx = selBegin().idx();
- idx_type const endidx = selEnd().idx();
- if (startidx != endidx) {
- // multicell selection
- InsetTabular * table = inset().asInsetTabular();
- LASSERT(table, return docstring());
- return table->asString(startidx, endidx);
- }
-
- ParagraphList const & pars = text()->paragraphs();
-
- pit_type const startpit = selBegin().pit();
- pit_type const endpit = selEnd().pit();
- size_t const startpos = selBegin().pos();
- size_t const endpos = selEnd().pos();
-
- if (startpit == endpit)
- return pars[startpit].asString(startpos, endpos, label);
-
- // First paragraph in selection
- docstring result = pars[startpit].
- asString(startpos, pars[startpit].size(), label)
- + parbreak(pars[startpit]);
-
- // The paragraphs in between (if any)
- for (pit_type pit = startpit + 1; pit != endpit; ++pit) {
- Paragraph const & par = pars[pit];
- result += par.asString(0, par.size(), label)
- + parbreak(pars[pit]);
- }
+ idx_type const startidx = selBegin().idx();
+ idx_type const endidx = selEnd().idx();
+ if (startidx != endidx) {
+ // multicell selection
+ InsetTabular * table = inset().asInsetTabular();
+ LASSERT(table, return docstring());
+ return table->asString(startidx, endidx);
+ }
+
+ ParagraphList const & pars = text()->paragraphs();
+
+ pit_type const startpit = selBegin().pit();
+ pit_type const endpit = selEnd().pit();
+ size_t const startpos = selBegin().pos();
+ size_t const endpos = selEnd().pos();
+
+ if (startpit == endpit)
+ return pars[startpit].asString(startpos, endpos, label);
- // Last paragraph in selection
- result += pars[endpit].asString(0, endpos, label);
+ // First paragraph in selection
+ docstring result = pars[startpit].
+ asString(startpos, pars[startpit].size(), label)
+ + parbreak(inset().lyxCode());
- return result;
+ // The paragraphs in between (if any)
+ for (pit_type pit = startpit + 1; pit != endpit; ++pit) {
+ Paragraph const & par = pars[pit];
+ result += par.asString(0, par.size(), label)
+ + parbreak(inset().lyxCode());
}
- if (inMathed())
- return cap::grabSelection(*this);
+ // Last paragraph in selection
+ result += pars[endpit].asString(0, endpos, label);
- return docstring();
+ return result;
}
CursorSlice const & sl = innerTextSlice();
Text const & text = *sl.text();
Font font = text.getPar(sl.pit()).getFont(
- bv().buffer().params(), sl.pos(), outerFont(sl.pit(), text.paragraphs()));
+ bv().buffer().params(), sl.pos(), text.outerFont(sl.pit()));
return font.language()->encoding();
}
// get font at the position
Font font = par.getFont(buffer()->params(), pos,
- outerFont(sl.pit(), text.paragraphs()));
+ text.outerFont(sl.pit()));
return font;
}