mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
Make math autocorrrect work with more than 2 chars
This commit is contained in:
parent
506324ef9d
commit
144e7d7159
@ -1868,7 +1868,7 @@ bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
|
|||||||
|
|
||||||
// try auto-correction
|
// try auto-correction
|
||||||
if (lyxrc.autocorrection_math && cur.autocorrect() && cur.pos() != 0
|
if (lyxrc.autocorrection_math && cur.autocorrect() && cur.pos() != 0
|
||||||
&& math_autocorrect(cur.prevAtom(), c))
|
&& math_autocorrect(cur, c))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// no special circumstances, so insert the character without any fuss
|
// no special circumstances, so insert the character without any fuss
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
|
#include "Cursor.h"
|
||||||
#include "MathAutoCorrect.h"
|
#include "MathAutoCorrect.h"
|
||||||
#include "MathData.h"
|
#include "MathData.h"
|
||||||
#include "InsetMath.h"
|
#include "InsetMath.h"
|
||||||
@ -38,18 +39,18 @@ public:
|
|||||||
/// \brief Correction
|
/// \brief Correction
|
||||||
Correction() : from2_(0) {}
|
Correction() : from2_(0) {}
|
||||||
///
|
///
|
||||||
bool correct(MathAtom & at, char_type c) const;
|
bool correct(Cursor & cur, char_type c) const;
|
||||||
///
|
///
|
||||||
bool read(idocstream & is);
|
bool read(idocstream & is);
|
||||||
///
|
///
|
||||||
void write(odocstream & os) const;
|
void write(odocstream & os) const;
|
||||||
private:
|
private:
|
||||||
///
|
///
|
||||||
MathAtom from1_;
|
MathData from1_;
|
||||||
///
|
///
|
||||||
char_type from2_;
|
char_type from2_;
|
||||||
///
|
///
|
||||||
MathAtom to_;
|
MathData to_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -64,26 +65,35 @@ bool Correction::read(idocstream & is)
|
|||||||
MathData ar1, ar3;
|
MathData ar1, ar3;
|
||||||
mathed_parse_cell(ar1, s1);
|
mathed_parse_cell(ar1, s1);
|
||||||
mathed_parse_cell(ar3, s3);
|
mathed_parse_cell(ar3, s3);
|
||||||
if (ar1.size() != 1 || ar3.size() != 1)
|
from1_ = ar1;
|
||||||
return false;
|
|
||||||
from1_ = ar1.front();
|
|
||||||
from2_ = s2[0];
|
from2_ = s2[0];
|
||||||
to_ = ar3.front();
|
to_ = ar3;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Correction::correct(MathAtom & at, char_type c) const
|
bool Correction::correct(Cursor & cur, char_type c) const
|
||||||
{
|
{
|
||||||
//LYXERR(Debug::MATHED,
|
//LYXERR(Debug::MATHED,
|
||||||
// "trying to correct ar: " << at << " from: '" << from1_ << '\'');
|
// "trying to correct ar: " << at << " from: '" << from1_ << '\'');
|
||||||
if (from2_ != c)
|
if (from2_ != c)
|
||||||
return false;
|
return false;
|
||||||
if (asString(at) != asString(from1_))
|
pos_type n = from1_.size();
|
||||||
|
if (cur.pos() < pos_type(from1_.size())) // not enough to match
|
||||||
return false;
|
return false;
|
||||||
LYXERR(Debug::MATHED, "match found! subst in " << at
|
pos_type start = cur.pos() - from1_.size();
|
||||||
|
|
||||||
|
for (pos_type i = 0; i < n; i++)
|
||||||
|
if (asString(cur.cell()[start + i]) != asString(from1_[i]))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
LYXERR(Debug::MATHED, "match found! subst in " << cur.cell()
|
||||||
<< " from: '" << from1_ << "' to '" << to_ << '\'');
|
<< " from: '" << from1_ << "' to '" << to_ << '\'');
|
||||||
at = to_;
|
|
||||||
|
cur.cell().erase(cur.pos() - n, cur.pos());
|
||||||
|
cur.pos() -= n;
|
||||||
|
|
||||||
|
cur.insert(to_);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,17 +131,17 @@ public:
|
|||||||
///
|
///
|
||||||
void insert(const Correction & corr) { data_.push_back(corr); }
|
void insert(const Correction & corr) { data_.push_back(corr); }
|
||||||
///
|
///
|
||||||
bool correct(MathAtom & at, char_type c) const;
|
bool correct(Cursor & cur, char_type c) const;
|
||||||
private:
|
private:
|
||||||
///
|
///
|
||||||
vector<Correction> data_;
|
vector<Correction> data_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
bool Corrections::correct(MathAtom & at, char_type c) const
|
bool Corrections::correct(Cursor & cur, char_type c) const
|
||||||
{
|
{
|
||||||
for (const_iterator it = data_.begin(); it != data_.end(); ++it)
|
for (const_iterator it = data_.begin(); it != data_.end(); ++it)
|
||||||
if (it->correct(at, c))
|
if (it->correct(cur, c))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -172,7 +182,7 @@ void initAutoCorrect()
|
|||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
|
||||||
bool math_autocorrect(MathAtom & at, char_type c)
|
bool math_autocorrect(Cursor & cur, char_type c)
|
||||||
{
|
{
|
||||||
static bool initialized = false;
|
static bool initialized = false;
|
||||||
|
|
||||||
@ -181,8 +191,6 @@ bool math_autocorrect(MathAtom & at, char_type c)
|
|||||||
initialized = true;
|
initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return theCorrections.correct(at, c);
|
return theCorrections.correct(cur, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // namespace lyx
|
} // namespace lyx
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
|
|
||||||
namespace lyx {
|
namespace lyx {
|
||||||
|
|
||||||
class MathAtom;
|
class Cursor;
|
||||||
|
|
||||||
// make "corrections" according to file lib/autocorrect
|
// make "corrections" according to file lib/autocorrect
|
||||||
bool math_autocorrect(MathAtom & at, char_type c);
|
bool math_autocorrect(Cursor & cur, char_type c);
|
||||||
|
|
||||||
} // namespace lyx
|
} // namespace lyx
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user