mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-27 14:29:21 +00:00
enable direct input of #1...#9; some whitespace changes
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3332 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
df3128954a
commit
08ae48d886
@ -508,6 +508,7 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action,
|
||||
case LFUN_CARON: handleAccent(bv, "check"); break;
|
||||
case LFUN_BREVE: handleAccent(bv, "breve"); break;
|
||||
case LFUN_VECTOR: handleAccent(bv, "vec"); break;
|
||||
case LFUN_UNDERBAR: handleAccent(bv, "underbar"); break;
|
||||
|
||||
// Math fonts
|
||||
case LFUN_GREEK_TOGGLE: handleFont(bv, LM_TC_GREEK); break;
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "math_factory.h"
|
||||
#include "math_hullinset.h"
|
||||
#include "math_iterator.h"
|
||||
#include "math_macroarg.h"
|
||||
#include "math_mathmlstream.h"
|
||||
#include "math_parser.h"
|
||||
#include "math_replace.h"
|
||||
@ -86,7 +87,7 @@ struct Selection
|
||||
{
|
||||
MathCursorPos i1;
|
||||
MathCursorPos i2;
|
||||
cursor.getSelection(i1, i2);
|
||||
cursor.getSelection(i1, i2);
|
||||
// shouldn'tt we assert on i1.par_ == i2.par_?
|
||||
if (i1.idx_ == i2.idx_) {
|
||||
data_ = MathGridInset(1, 1);
|
||||
@ -94,9 +95,9 @@ struct Selection
|
||||
} else {
|
||||
row_type r1, r2;
|
||||
col_type c1, c2;
|
||||
region(i1, i2, r1, r2, c1, c2);
|
||||
region(i1, i2, r1, r2, c1, c2);
|
||||
data_ = MathGridInset(c2 - c1 + 1, r2 - r1 + 1);
|
||||
for (row_type row = 0; row < data_.nrows(); ++row)
|
||||
for (row_type row = 0; row < data_.nrows(); ++row)
|
||||
for (col_type col = 0; col < data_.ncols(); ++col) {
|
||||
idx_type i = i1.par_->index(row + r1, col + c1);
|
||||
data_.cell(data_.index(row, col)) = i1.par_->cell(i);
|
||||
@ -108,15 +109,15 @@ struct Selection
|
||||
{
|
||||
MathCursorPos i1;
|
||||
MathCursorPos i2;
|
||||
cursor.getSelection(i1, i2);
|
||||
cursor.getSelection(i1, i2);
|
||||
if (i1.idx_ == i2.idx_)
|
||||
i1.cell().erase(i1.pos_, i2.pos_);
|
||||
else {
|
||||
MathInset * p = i1.par_;
|
||||
row_type r1, r2;
|
||||
col_type c1, c2;
|
||||
region(i1, i2, r1, r2, c1, c2);
|
||||
for (row_type row = r1; row <= r2; ++row)
|
||||
region(i1, i2, r1, r2, c1, c2);
|
||||
for (row_type row = r1; row <= r2; ++row)
|
||||
for (col_type col = c1; col <= c2; ++col)
|
||||
p->cell(p->index(row, col)).erase();
|
||||
}
|
||||
@ -134,7 +135,7 @@ struct Selection
|
||||
MathGridInset * p = cursor.enclosingGrid(idx);
|
||||
col_type const numcols = min(data_.ncols(), p->ncols() - p->col(idx));
|
||||
row_type const numrows = min(data_.nrows(), p->nrows() - p->row(idx));
|
||||
for (row_type row = 0; row < numrows; ++row)
|
||||
for (row_type row = 0; row < numrows; ++row)
|
||||
for (col_type col = 0; col < numcols; ++col) {
|
||||
idx_type i = p->index(row + p->row(idx), col + p->col(idx));
|
||||
p->cell(i).push_back(data_.cell(data_.index(row, col)));
|
||||
@ -248,8 +249,8 @@ UpdatableInset * MathCursor::asHyperActiveInset() const
|
||||
|
||||
bool MathCursor::isInside(MathInset const * p) const
|
||||
{
|
||||
for (unsigned i = 0; i < Cursor_.size(); ++i)
|
||||
if (Cursor_[i].par_ == p)
|
||||
for (unsigned i = 0; i < Cursor_.size(); ++i)
|
||||
if (Cursor_[i].par_ == p)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
@ -312,7 +313,7 @@ bool MathCursor::left(bool sel)
|
||||
}
|
||||
pushRight(prevAtom());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return posLeft() || idxLeft() || popLeft() || selection_;
|
||||
}
|
||||
@ -397,7 +398,7 @@ void MathCursor::home(bool sel)
|
||||
selHandle(sel);
|
||||
macroModeClose();
|
||||
lastcode_ = LM_TC_MIN;
|
||||
if (!par()->idxHome(idx(), pos()))
|
||||
if (!par()->idxHome(idx(), pos()))
|
||||
popLeft();
|
||||
dump("home 2");
|
||||
}
|
||||
@ -450,7 +451,7 @@ void MathCursor::insert(MathAtom const & t)
|
||||
}
|
||||
|
||||
|
||||
void MathCursor::niceInsert(MathAtom const & t)
|
||||
void MathCursor::niceInsert(MathAtom const & t)
|
||||
{
|
||||
selCut();
|
||||
insert(t); // inserting invalidates the pointer!
|
||||
@ -488,7 +489,7 @@ void MathCursor::backspace()
|
||||
if (pos() == 0) {
|
||||
pullArg(false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (selection_) {
|
||||
selDel();
|
||||
@ -498,7 +499,7 @@ void MathCursor::backspace()
|
||||
MathScriptInset * p = prevAtom()->asScriptInset();
|
||||
if (p) {
|
||||
p->removeScript(p->hasUp());
|
||||
// Don't delete if there is anything left
|
||||
// Don't delete if there is anything left
|
||||
if (p->hasUp() || p->hasDown())
|
||||
return;
|
||||
}
|
||||
@ -534,7 +535,7 @@ void MathCursor::erase()
|
||||
MathScriptInset * p = nextAtom()->asScriptInset();
|
||||
if (p) {
|
||||
p->removeScript(p->hasUp());
|
||||
// Don't delete if there is anything left
|
||||
// Don't delete if there is anything left
|
||||
if (p->hasUp() || p->hasDown())
|
||||
return;
|
||||
}
|
||||
@ -619,7 +620,7 @@ void MathCursor::macroModeClose()
|
||||
|
||||
MathInset::difference_type MathCursor::macroNamePos() const
|
||||
{
|
||||
for (MathInset::difference_type i = pos() - 1; i >= 0; --i) {
|
||||
for (MathInset::difference_type i = pos() - 1; i >= 0; --i) {
|
||||
MathAtom & p = array().at(i);
|
||||
if (p->code() == LM_TC_TEX && p->getChar() == '\\')
|
||||
return i;
|
||||
@ -631,8 +632,8 @@ MathInset::difference_type MathCursor::macroNamePos() const
|
||||
string MathCursor::macroName() const
|
||||
{
|
||||
string s;
|
||||
MathInset::difference_type i = macroNamePos();
|
||||
for ( ; i >= 0 && i < int(pos()); ++i)
|
||||
MathInset::difference_type i = macroNamePos();
|
||||
for ( ; i >= 0 && i < int(pos()); ++i)
|
||||
s += array().at(i)->getChar();
|
||||
return s;
|
||||
}
|
||||
@ -771,13 +772,13 @@ void MathCursor::handleFont(MathTextCodes t)
|
||||
if (selection_) {
|
||||
MathCursorPos i1;
|
||||
MathCursorPos i2;
|
||||
getSelection(i1, i2);
|
||||
getSelection(i1, i2);
|
||||
if (i1.idx_ == i2.idx_) {
|
||||
MathArray & ar = i1.cell();
|
||||
for (MathInset::pos_type pos = i1.pos_; pos != i2.pos_; ++pos)
|
||||
ar.at(pos)->handleFont(t);
|
||||
}
|
||||
} else
|
||||
} else
|
||||
lastcode_ = (lastcode_ == t) ? LM_TC_VAR : t;
|
||||
}
|
||||
|
||||
@ -851,6 +852,12 @@ bool MathCursor::inMacroMode() const
|
||||
}
|
||||
|
||||
|
||||
bool MathCursor::inMacroArgMode() const
|
||||
{
|
||||
return pos() > 0 && prevAtom()->getChar() == '#';
|
||||
}
|
||||
|
||||
|
||||
bool MathCursor::selection() const
|
||||
{
|
||||
return selection_;
|
||||
@ -891,7 +898,7 @@ void MathCursor::pullArg(bool goright)
|
||||
if (popLeft()) {
|
||||
plainErase();
|
||||
array().insert(pos(), a);
|
||||
if (goright)
|
||||
if (goright)
|
||||
pos() += a.size();
|
||||
}
|
||||
}
|
||||
@ -903,7 +910,7 @@ void MathCursor::normalize()
|
||||
{
|
||||
MathIterator it = ibegin(formula()->par().nucleus());
|
||||
MathIterator et = iend(formula()->par().nucleus());
|
||||
for ( ; it != et; ++it)
|
||||
for ( ; it != et; ++it)
|
||||
if (it.par()->asBoxInset())
|
||||
it.par()->asBoxInset()->rebreak();
|
||||
}
|
||||
@ -1031,7 +1038,7 @@ void MathCursor::idxPrev()
|
||||
|
||||
void MathCursor::splitCell()
|
||||
{
|
||||
if (idx() + 1 == par()->nargs())
|
||||
if (idx() + 1 == par()->nargs())
|
||||
return;
|
||||
MathArray ar = array();
|
||||
ar.erase(0, pos());
|
||||
@ -1217,7 +1224,7 @@ bool MathCursor::interpret(string const & s)
|
||||
return interpret(s[0]);
|
||||
|
||||
//lyxerr << "char: '" << s[0] << "' int: " << int(s[0]) << endl;
|
||||
//owner_->getIntl()->getTrans().TranslateAndInsert(s[0], lt);
|
||||
//owner_->getIntl()->getTrans().TranslateAndInsert(s[0], lt);
|
||||
//lyxerr << "trans: '" << s[0] << "' int: " << int(s[0]) << endl;
|
||||
|
||||
if (s.size() >= 5 && s.substr(0, 5) == "cases") {
|
||||
@ -1306,30 +1313,28 @@ bool MathCursor::script(bool up)
|
||||
|
||||
bool MathCursor::interpret(char c)
|
||||
{
|
||||
|
||||
// Removed super/subscript handling from here to ::script -MV
|
||||
if (inMacroArgMode()) {
|
||||
--pos();
|
||||
plainErase();
|
||||
if ('1' <= c && c <= '9')
|
||||
insert(MathAtom(new MathMacroArgument(c - '0')));
|
||||
else {
|
||||
insert(MathAtom(new MathSpecialCharInset('#')));
|
||||
interpret(c); // try again
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// handle macroMode
|
||||
if (inMacroMode()) {
|
||||
string name = macroName();
|
||||
|
||||
if (name == "\\" && c == '#') {
|
||||
insert(c, LM_TC_TEX);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (name == "\\" && c == '\\') {
|
||||
backspace();
|
||||
interpret("\\backslash");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (name == "\\#" && '1' <= c && c <= '9') {
|
||||
insert(c, LM_TC_TEX);
|
||||
macroModeClose();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (isalpha(c)) {
|
||||
insert(c, LM_TC_TEX);
|
||||
return true;
|
||||
@ -1373,6 +1378,11 @@ bool MathCursor::interpret(char c)
|
||||
return pos() != size();
|
||||
}
|
||||
|
||||
if (c == '#') {
|
||||
insert(c, LM_TC_TEX);
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
if (strchr("{}", c)) {
|
||||
insert(c, LM_TC_TEX);
|
||||
@ -1389,8 +1399,8 @@ bool MathCursor::interpret(char c)
|
||||
return true;
|
||||
}
|
||||
|
||||
if (strchr("#$%", c)) {
|
||||
insert(MathAtom(new MathSpecialCharInset(c)));
|
||||
if (strchr("$%", c)) {
|
||||
insert(MathAtom(new MathSpecialCharInset(c)));
|
||||
lastcode_ = LM_TC_VAR;
|
||||
return true;
|
||||
}
|
||||
@ -1409,7 +1419,7 @@ bool MathCursor::interpret(char c)
|
||||
if (c == '\\') {
|
||||
insert(c, LM_TC_TEX);
|
||||
//bv->owner()->message(_("TeX mode"));
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
// no special circumstances, so insert the character without any fuss
|
||||
@ -1449,7 +1459,7 @@ void MathCursor::stripFromLastEqualSign()
|
||||
|
||||
// delete everything behind this position
|
||||
ar.erase(et - ar.begin(), ar.size());
|
||||
pos() = ar.size();
|
||||
pos() = ar.size();
|
||||
}
|
||||
|
||||
|
||||
|
@ -124,8 +124,10 @@ public:
|
||||
bool toggleLimits();
|
||||
/// interpret name a name of a macro
|
||||
void macroModeClose();
|
||||
///
|
||||
/// are we currently typing the name of a macro?
|
||||
bool inMacroMode() const;
|
||||
/// are we currently typing '#1' or '#2' or...?
|
||||
bool inMacroArgMode() const;
|
||||
|
||||
// Local selection methods
|
||||
///
|
||||
|
@ -24,7 +24,10 @@ MathInset * MathDecorationInset::clone() const
|
||||
|
||||
bool MathDecorationInset::upper() const
|
||||
{
|
||||
return name_ != "underline" && name_ != "underbrace";
|
||||
return
|
||||
name_ != "underbar" &&
|
||||
name_ != "underline" &&
|
||||
name_ != "underbrace";
|
||||
}
|
||||
|
||||
|
||||
|
@ -135,6 +135,7 @@ key_type wordlist_array[] =
|
||||
{"textstyle", LM_TK_STY, LM_ST_TEXT},
|
||||
{"tilde", LM_TK_DECORATION, 0},
|
||||
{"tt", LM_TK_OLDFONT, LM_TC_TT},
|
||||
{"underbar", LM_TK_DECORATION, 0},
|
||||
{"underbrace", LM_TK_DECORATION, 0},
|
||||
{"underline", LM_TK_DECORATION, 0},
|
||||
{"vdots", LM_TK_DOTS, 0},
|
||||
|
@ -70,8 +70,9 @@ void MathMacroArgument::normalize(NormalStream & os) const
|
||||
void MathMacroArgument::substitute(MathMacro const & m)
|
||||
{
|
||||
cell(0) = m.cell(number_ - 1);
|
||||
for (MathArray::iterator it = cell(0).begin(); it != cell(0).end(); ++it)
|
||||
it->nucleus()->handleFont(code_);
|
||||
if (code_ != LM_TC_MIN)
|
||||
for (MathArray::iterator it = cell(0).begin(); it != cell(0).end(); ++it)
|
||||
it->nucleus()->handleFont(code_);
|
||||
expanded_ = true;
|
||||
}
|
||||
|
||||
|
@ -455,6 +455,7 @@ named_deco_struct deco_table[] = {
|
||||
// Decorations
|
||||
{"widehat", angle, 3 },
|
||||
{"widetilde", tilde, 0 },
|
||||
{"underbar", hline, 0 },
|
||||
{"underline", hline, 0 },
|
||||
{"overline", hline, 0 },
|
||||
{"underbrace", brace, 1 },
|
||||
|
Loading…
Reference in New Issue
Block a user