#include "MathStream.h"
#include "MathSupport.h"
-#include "Bidi.h"
#include "Buffer.h"
#include "BufferParams.h"
#include "BufferView.h"
void InsetMathNest::dump() const
{
odocstringstream oss;
- WriteStream os(oss);
+ TexRow texrow(false);
+ otexrowstream ots(oss,texrow);
+ WriteStream os(ots);
os << "---------------------------------------------\n";
write(os);
os << "\n";
ModeSpecifier specifier(os, currentMode(), lockedMode());
docstring const latex_name = name();
os << '\\' << latex_name;
- for (size_t i = 0; i < nargs(); ++i)
+ for (size_t i = 0; i < nargs(); ++i) {
+ os.pushRowEntry(TexRow::mathEntry(id(),i));
os << '{' << cell(i) << '}';
+ os.popRowEntry();
+ }
if (nargs() == 0)
os.pendingSpace(true);
if (lock_ && !os.latex()) {
void InsetMathNest::latex(otexstream & os, OutputParams const & runparams) const
{
- WriteStream wi(os.os(), runparams.moving_arg, true,
- runparams.dryrun ? WriteStream::wsDryrun : WriteStream::wsDefault,
- runparams.encoding);
+ WriteStream wi(os, runparams.moving_arg, true,
+ runparams.dryrun ? WriteStream::wsDryrun : WriteStream::wsDefault,
+ runparams.encoding);
wi.canBreakLine(os.canBreakLine());
- write(wi);
+ if (runparams.lastid != -1) {
+ wi.pushRowEntry(os.texrow().textEntry(runparams.lastid,
+ runparams.lastpos));
+ write(wi);
+ wi.popRowEntry();
+ } else
+ write(wi);
// Reset parbreak status after a math inset.
os.lastChar(0);
os.canBreakLine(wi.canBreakLine());
-
- int lf = wi.line();
- if (lf > 0 && runparams.lastid != -1) {
- --lf;
- os.texrow().newline();
- os.texrow().start(runparams.lastid, runparams.lastpos);
- }
- os.texrow().newlines(lf);
}
case LFUN_CHAR_BACKWARD:
case LFUN_CHAR_FORWARD:
cur.screenUpdateFlags(Update::Decoration | Update::FitCursor);
+ // fall through
case LFUN_CHAR_RIGHT_SELECT:
case LFUN_CHAR_LEFT_SELECT:
case LFUN_CHAR_BACKWARD_SELECT:
else {
bool right = (act == LFUN_CHAR_RIGHT_SELECT
|| act == LFUN_CHAR_RIGHT);
- if (lyxrc.visual_cursor || !reverseDirectionNeeded(cur))
+ if (lyxrc.visual_cursor || !cur.reverseDirectionNeeded())
forward = right;
else
forward = !right;
case LFUN_DOWN:
case LFUN_UP:
cur.screenUpdateFlags(Update::Decoration | Update::FitCursor);
+ // fall through
case LFUN_DOWN_SELECT:
case LFUN_UP_SELECT: {
// close active macro
case LFUN_PARAGRAPH_UP:
case LFUN_PARAGRAPH_DOWN:
cur.screenUpdateFlags(Update::Decoration | Update::FitCursor);
+ // fall through
case LFUN_PARAGRAPH_UP_SELECT:
case LFUN_PARAGRAPH_DOWN_SELECT:
break;
case LFUN_WORD_BACKWARD:
case LFUN_WORD_LEFT:
cur.screenUpdateFlags(Update::Decoration | Update::FitCursor);
+ // fall through
case LFUN_LINE_BEGIN_SELECT:
case LFUN_WORD_BACKWARD_SELECT:
case LFUN_WORD_LEFT_SELECT:
case LFUN_WORD_RIGHT:
case LFUN_LINE_END:
cur.screenUpdateFlags(Update::Decoration | Update::FitCursor);
+ // fall through
case LFUN_WORD_FORWARD_SELECT:
case LFUN_WORD_RIGHT_SELECT:
case LFUN_LINE_END_SELECT:
case LFUN_FONT_DEFAULT:
handleFont(cur, cmd.argument(), "textnormal");
break;
-
case LFUN_FONT_UNDERLINE:
cur.recordUndo();
cur.handleNest(createInsetMath("underline", cur.buffer()));
break;
+
case LFUN_MATH_MODE: {
#if 1
// ignore math-mode on when already in math mode
if (currentMode() <= Inset::TEXT_MODE)
cur.plainInsert(MathAtom(new InsetMathEnsureMath(buffer_)));
else
- cur.plainInsert(MathAtom(new InsetMathBox(buffer_, from_ascii("mbox"))));
+ cur.plainInsert(createInsetMath("text", buffer_));
cur.posBackward();
cur.pushBackward(*cur.nextInset());
cur.niceInsert(save_selection);
} else if (c == '^' && currentMode() == InsetMath::MATH_MODE) {
cur.backspace();
cur.niceInsert(createInsetMath("mathcircumflex", buf));
- } else if (c == '{') {
- cur.backspace();
- cur.niceInsert(MathAtom(new InsetMathBrace(buf)));
- } else if (c == '%') {
+ } else if (c == '{' || c == '%') {
+ //using the saved selection as argument
+ InsetMathUnknown * p = cur.activeMacro();
+ p->finalize();
+ MathData sel(cur.buffer());
+ asArray(p->selection(), sel);
cur.backspace();
- cur.niceInsert(MathAtom(new InsetMathComment(buf)));
+ if (c == '{')
+ cur.niceInsert(MathAtom(new InsetMathBrace(sel)));
+ else
+ cur.niceInsert(MathAtom(new InsetMathComment(sel)));
} else if (c == '#') {
LASSERT(cur.activeMacro(), return false);
cur.activeMacro()->setName(name + docstring(1, c));
// These should be treated differently when not in text mode:
if (cur.inRegexped()) {
switch (c) {
- case '\\':
- cur.niceInsert(createInsetMath("backslash", buf));
- break;
case '^':
cur.niceInsert(createInsetMath("mathcircumflex", buf));
break;
globals.push_back(from_ascii("\\sqrt"));
globals.push_back(from_ascii("\\root"));
globals.push_back(from_ascii("\\tabular"));
+ globals.push_back(from_ascii("\\sideset"));
globals.push_back(from_ascii("\\stackrel"));
globals.push_back(from_ascii("\\stackrelthree"));
globals.push_back(from_ascii("\\binom"));
globals.push_back(from_ascii("\\mathclap"));
globals.push_back(from_ascii("\\mathllap"));
globals.push_back(from_ascii("\\mathrlap"));
+ globals.push_back(from_ascii("\\ensuremath"));
MathWordList const & words = mathedWordList();
MathWordList::const_iterator it2;
//lyxerr << "Globals completion commands: ";