mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-27 06:19:36 +00:00
mathed102.diff
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2229 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
487f6eb3b4
commit
4a40b711f2
@ -22,8 +22,6 @@ libmathed_la_SOURCES = \
|
|||||||
macro_support.h \
|
macro_support.h \
|
||||||
math_arrayinset.C \
|
math_arrayinset.C \
|
||||||
math_arrayinset.h \
|
math_arrayinset.h \
|
||||||
math_accentinset.C \
|
|
||||||
math_accentinset.h \
|
|
||||||
math_bigopinset.C \
|
math_bigopinset.C \
|
||||||
math_bigopinset.h \
|
math_bigopinset.h \
|
||||||
math_cursor.C \
|
math_cursor.C \
|
||||||
|
@ -77,10 +77,10 @@ void handleFont(BufferView * bv, MathTextCodes t)
|
|||||||
mathcursor->handleFont(t);
|
mathcursor->handleFont(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleAccent(BufferView * bv, int code)
|
void handleAccent(BufferView * bv, string const & name, int code)
|
||||||
{
|
{
|
||||||
bv->lockedInsetStoreUndo(Undo::EDIT);
|
bv->lockedInsetStoreUndo(Undo::EDIT);
|
||||||
mathcursor->handleAccent(code);
|
mathcursor->handleAccent(name, code);
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleDelim(BufferView * bv, int l, int r)
|
void handleDelim(BufferView * bv, int l, int r)
|
||||||
@ -636,16 +636,16 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action,
|
|||||||
|
|
||||||
// --- accented characters ------------------------------
|
// --- accented characters ------------------------------
|
||||||
|
|
||||||
case LFUN_UMLAUT: handleAccent(bv, LM_ddot); break;
|
case LFUN_UMLAUT: handleAccent(bv, "ddot", LM_ddot); break;
|
||||||
case LFUN_CIRCUMFLEX: handleAccent(bv, LM_hat); break;
|
case LFUN_CIRCUMFLEX: handleAccent(bv, "hat", LM_hat); break;
|
||||||
case LFUN_GRAVE: handleAccent(bv, LM_grave); break;
|
case LFUN_GRAVE: handleAccent(bv, "grave", LM_grave); break;
|
||||||
case LFUN_ACUTE: handleAccent(bv, LM_acute); break;
|
case LFUN_ACUTE: handleAccent(bv, "acute", LM_acute); break;
|
||||||
case LFUN_TILDE: handleAccent(bv, LM_tilde); break;
|
case LFUN_TILDE: handleAccent(bv, "tilde", LM_tilde); break;
|
||||||
case LFUN_MACRON: handleAccent(bv, LM_bar); break;
|
case LFUN_MACRON: handleAccent(bv, "bar", LM_bar); break;
|
||||||
case LFUN_DOT: handleAccent(bv, LM_dot); break;
|
case LFUN_DOT: handleAccent(bv, "dot", LM_dot); break;
|
||||||
case LFUN_CARON: handleAccent(bv, LM_check); break;
|
case LFUN_CARON: handleAccent(bv, "check", LM_check); break;
|
||||||
case LFUN_BREVE: handleAccent(bv, LM_breve); break;
|
case LFUN_BREVE: handleAccent(bv, "breve", LM_breve); break;
|
||||||
case LFUN_VECTOR: handleAccent(bv, LM_vec); break;
|
case LFUN_VECTOR: handleAccent(bv, "vec", LM_vec); break;
|
||||||
|
|
||||||
// Greek mode
|
// Greek mode
|
||||||
case LFUN_GREEK:
|
case LFUN_GREEK:
|
||||||
@ -724,7 +724,7 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action,
|
|||||||
int ilt = '(';
|
int ilt = '(';
|
||||||
int irt = '.';
|
int irt = '.';
|
||||||
static const string vdelim("(){}[]./|");
|
static const string vdelim("(){}[]./|");
|
||||||
lyxerr << "formulabase::LFUN_MATH_DELIM, arg: '" << arg << "'\n";
|
//lyxerr << "formulabase::LFUN_MATH_DELIM, arg: '" << arg << "'\n";
|
||||||
|
|
||||||
if (arg.empty())
|
if (arg.empty())
|
||||||
break;
|
break;
|
||||||
@ -733,8 +733,8 @@ InsetFormulaBase::localDispatch(BufferView * bv, kb_action action,
|
|||||||
string lt;
|
string lt;
|
||||||
string rt;
|
string rt;
|
||||||
is >> lt >> rt;
|
is >> lt >> rt;
|
||||||
lyxerr << "formulabase::LFUN_MATH_DELIM, lt: '" << lt << "'\n";
|
//lyxerr << "formulabase::LFUN_MATH_DELIM, lt: '" << lt << "'\n";
|
||||||
lyxerr << "formulabase::LFUN_MATH_DELIM, rt: '" << rt << "'\n";
|
//lyxerr << "formulabase::LFUN_MATH_DELIM, rt: '" << rt << "'\n";
|
||||||
|
|
||||||
if (lt.size() > 1) {
|
if (lt.size() > 1) {
|
||||||
latexkeys const * l = in_word_set(lt);
|
latexkeys const * l = in_word_set(lt);
|
||||||
|
@ -1,69 +0,0 @@
|
|||||||
#include <config.h>
|
|
||||||
|
|
||||||
#include "math_accentinset.h"
|
|
||||||
#include "mathed/support.h"
|
|
||||||
#include "math_parser.h"
|
|
||||||
#include "support/LOstream.h"
|
|
||||||
|
|
||||||
using std::ostream;
|
|
||||||
|
|
||||||
MathAccentInset::MathAccentInset(int f)
|
|
||||||
: MathInset(1), code(f)
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
MathInset * MathAccentInset::clone() const
|
|
||||||
{
|
|
||||||
return new MathAccentInset(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MathAccentInset::Metrics(MathStyles st, int, int)
|
|
||||||
{
|
|
||||||
xcell(0).Metrics(st);
|
|
||||||
ascent_ = xcell(0).ascent();
|
|
||||||
descent_ = xcell(0).descent();
|
|
||||||
width_ = xcell(0).width();
|
|
||||||
dh = 5;
|
|
||||||
|
|
||||||
if (code == LM_not) {
|
|
||||||
ascent_ += dh;
|
|
||||||
descent_ += dh;
|
|
||||||
dh = height();
|
|
||||||
} else
|
|
||||||
ascent_ += dh + 2;
|
|
||||||
|
|
||||||
dy = ascent_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MathAccentInset::draw(Painter & pain, int x, int y)
|
|
||||||
{
|
|
||||||
xcell(0).draw(pain, x, y);
|
|
||||||
mathed_draw_deco(pain, x, y - dy, width(), dh, code);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MathAccentInset::Write(ostream & os, bool fragile) const
|
|
||||||
{
|
|
||||||
latexkeys const * l = lm_get_key_by_id(code, LM_TK_ACCENT);
|
|
||||||
os << '\\' << l->name;
|
|
||||||
if (code == LM_not)
|
|
||||||
os << ' ';
|
|
||||||
else
|
|
||||||
os << '{';
|
|
||||||
|
|
||||||
cell(0).Write(os, fragile);
|
|
||||||
|
|
||||||
if (code != LM_not)
|
|
||||||
os << '}';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MathAccentInset::WriteNormal(ostream & os) const
|
|
||||||
{
|
|
||||||
latexkeys const * l = lm_get_key_by_id(code, LM_TK_ACCENT);
|
|
||||||
os << "[accent " << l->name << " ";
|
|
||||||
|
|
||||||
cell(0).WriteNormal(os);
|
|
||||||
|
|
||||||
os << "] ";
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
// -*- C++ -*-
|
|
||||||
#ifndef MATH_ACCENTINSET_H
|
|
||||||
#define MATH_ACCENTINSET_H
|
|
||||||
|
|
||||||
#include "math_inset.h"
|
|
||||||
#include "mathed/support.h"
|
|
||||||
#include "math_defs.h"
|
|
||||||
|
|
||||||
/// Accents
|
|
||||||
class MathAccentInset : public MathInset {
|
|
||||||
public:
|
|
||||||
///
|
|
||||||
explicit MathAccentInset(int);
|
|
||||||
///
|
|
||||||
MathInset * clone() const;
|
|
||||||
///
|
|
||||||
void draw(Painter &, int, int);
|
|
||||||
///
|
|
||||||
void Write(std::ostream &, bool fragile) const;
|
|
||||||
///
|
|
||||||
void WriteNormal(std::ostream &) const;
|
|
||||||
///
|
|
||||||
void Metrics(MathStyles st, int asc = 0, int des = 0);
|
|
||||||
///
|
|
||||||
int getAccentCode() const;
|
|
||||||
///
|
|
||||||
bool isAccentInset() const { return true; }
|
|
||||||
private:
|
|
||||||
///
|
|
||||||
int code;
|
|
||||||
///
|
|
||||||
int dh;
|
|
||||||
///
|
|
||||||
int dy;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -43,7 +43,6 @@
|
|||||||
#include "math_decorationinset.h"
|
#include "math_decorationinset.h"
|
||||||
#include "math_dotsinset.h"
|
#include "math_dotsinset.h"
|
||||||
#include "math_deliminset.h"
|
#include "math_deliminset.h"
|
||||||
#include "math_accentinset.h"
|
|
||||||
#include "math_macrotemplate.h"
|
#include "math_macrotemplate.h"
|
||||||
#include "math_sqrtinset.h"
|
#include "math_sqrtinset.h"
|
||||||
#include "math_scriptinset.h"
|
#include "math_scriptinset.h"
|
||||||
@ -66,12 +65,11 @@ bool IsMacro(short tok, int id)
|
|||||||
return tok != LM_TK_STACK &&
|
return tok != LM_TK_STACK &&
|
||||||
tok != LM_TK_FRAC &&
|
tok != LM_TK_FRAC &&
|
||||||
tok != LM_TK_SQRT &&
|
tok != LM_TK_SQRT &&
|
||||||
tok != LM_TK_WIDE &&
|
tok != LM_TK_DECORATION &&
|
||||||
tok != LM_TK_SPACE &&
|
tok != LM_TK_SPACE &&
|
||||||
tok != LM_TK_DOTS &&
|
tok != LM_TK_DOTS &&
|
||||||
tok != LM_TK_FUNCLIM &&
|
tok != LM_TK_FUNCLIM &&
|
||||||
tok != LM_TK_BIGSYM &&
|
tok != LM_TK_BIGSYM &&
|
||||||
tok != LM_TK_ACCENT &&
|
|
||||||
!(tok == LM_TK_SYM && id < 255);
|
!(tok == LM_TK_SYM && id < 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -638,8 +636,8 @@ in_word_set(s) << " \n";
|
|||||||
p = new MathSqrtInset;
|
p = new MathSqrtInset;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LM_TK_WIDE:
|
case LM_TK_DECORATION:
|
||||||
p = new MathDecorationInset(l->id);
|
p = new MathDecorationInset(l->name, l->id);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LM_TK_FUNCLIM:
|
case LM_TK_FUNCLIM:
|
||||||
@ -654,10 +652,6 @@ in_word_set(s) << " \n";
|
|||||||
p = new MathDotsInset(l->name, l->id);
|
p = new MathDotsInset(l->name, l->id);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LM_TK_ACCENT:
|
|
||||||
p = new MathAccentInset(l->id);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LM_TK_MACRO:
|
case LM_TK_MACRO:
|
||||||
p = new MathMacro(MathMacroTable::provideTemplate(s));
|
p = new MathMacro(MathMacroTable::provideTemplate(s));
|
||||||
break;
|
break;
|
||||||
@ -884,14 +878,15 @@ void MathCursor::handleFont(MathTextCodes t)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MathCursor::handleAccent(int code)
|
void MathCursor::handleAccent(string const & name, int code)
|
||||||
{
|
{
|
||||||
MathAccentInset * p = new MathAccentInset(code);
|
MathDecorationInset * p = new MathDecorationInset(name, code);
|
||||||
if (selection) {
|
if (selection) {
|
||||||
SelCut();
|
SelCut();
|
||||||
p->cell(0) = selarray;
|
p->cell(0) = selarray;
|
||||||
}
|
}
|
||||||
insert(p);
|
insert(p);
|
||||||
|
push(p, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MathCursor::handleDelim(int l, int r)
|
void MathCursor::handleDelim(int l, int r)
|
||||||
@ -902,6 +897,7 @@ void MathCursor::handleDelim(int l, int r)
|
|||||||
p->cell(0) = selarray;
|
p->cell(0) = selarray;
|
||||||
}
|
}
|
||||||
insert(p);
|
insert(p);
|
||||||
|
push(p, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ public:
|
|||||||
///
|
///
|
||||||
void handleFont(MathTextCodes t);
|
void handleFont(MathTextCodes t);
|
||||||
///
|
///
|
||||||
void handleAccent(int code);
|
void handleAccent(string const & name, int code);
|
||||||
///
|
///
|
||||||
void handleDelim(int l, int r);
|
void handleDelim(int l, int r);
|
||||||
/// Splits cells and shifts right part to the next cell
|
/// Splits cells and shifts right part to the next cell
|
||||||
|
@ -14,8 +14,8 @@
|
|||||||
using std::ostream;
|
using std::ostream;
|
||||||
|
|
||||||
|
|
||||||
MathDecorationInset::MathDecorationInset(int d)
|
MathDecorationInset::MathDecorationInset(string const & name, int d)
|
||||||
: MathInset(1), deco_(d)
|
: MathInset(1, name), deco_(d)
|
||||||
{
|
{
|
||||||
upper_ = deco_ != LM_underline && deco_ != LM_underbrace;
|
upper_ = deco_ != LM_underline && deco_ != LM_underbrace;
|
||||||
}
|
}
|
||||||
@ -45,6 +45,13 @@ void MathDecorationInset::Metrics(MathStyles st, int, int)
|
|||||||
dy_ = descent_ + 1;
|
dy_ = descent_ + 1;
|
||||||
descent_ += dh_ + 2;
|
descent_ += dh_ + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (deco_ == LM_not) {
|
||||||
|
ascent_ += dh_;
|
||||||
|
descent_ += dh_;
|
||||||
|
dh_ = height();
|
||||||
|
dy_ = - ascent_;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MathDecorationInset::draw(Painter & pain, int x, int y)
|
void MathDecorationInset::draw(Painter & pain, int x, int y)
|
||||||
@ -58,14 +65,28 @@ void MathDecorationInset::draw(Painter & pain, int x, int y)
|
|||||||
|
|
||||||
void MathDecorationInset::Write(ostream & os, bool fragile) const
|
void MathDecorationInset::Write(ostream & os, bool fragile) const
|
||||||
{
|
{
|
||||||
latexkeys const * l = lm_get_key_by_id(deco_, LM_TK_WIDE);
|
|
||||||
if (fragile &&
|
if (fragile &&
|
||||||
(compare(l->name, "overbrace") == 0 ||
|
(name_ == "overbrace" ||
|
||||||
compare(l->name, "underbrace") == 0 ||
|
name_ == "underbrace" ||
|
||||||
compare(l->name, "overleftarrow") == 0 ||
|
name_ == "overleftarrow" ||
|
||||||
compare(l->name, "overrightarrow") == 0))
|
name_ == "overrightarrow"))
|
||||||
os << "\\protect";
|
os << "\\protect";
|
||||||
os << '\\' << l->name << '{';
|
os << '\\' << name_;
|
||||||
|
|
||||||
|
if (deco_ == LM_not)
|
||||||
|
os << ' ';
|
||||||
|
else
|
||||||
|
os << '{';
|
||||||
|
|
||||||
cell(0).Write(os, fragile);
|
cell(0).Write(os, fragile);
|
||||||
os << '}';
|
|
||||||
|
if (deco_ != LM_not)
|
||||||
|
os << '}';
|
||||||
|
}
|
||||||
|
|
||||||
|
void MathDecorationInset::WriteNormal(ostream & os) const
|
||||||
|
{
|
||||||
|
os << "[" << name_ << " ";
|
||||||
|
cell(0).WriteNormal(os);
|
||||||
|
os << "] ";
|
||||||
}
|
}
|
||||||
|
@ -8,13 +8,13 @@
|
|||||||
#pragma interface
|
#pragma interface
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** Decorations over (below) a math object
|
/** Decorations and accents over (below) a math object
|
||||||
\author Alejandro Aguilar Sierra
|
\author Alejandro Aguilar Sierra
|
||||||
*/
|
*/
|
||||||
class MathDecorationInset : public MathInset {
|
class MathDecorationInset : public MathInset {
|
||||||
public:
|
public:
|
||||||
///
|
///
|
||||||
explicit MathDecorationInset(int);
|
MathDecorationInset(string const & name, int);
|
||||||
///
|
///
|
||||||
MathInset * clone() const;
|
MathInset * clone() const;
|
||||||
///
|
///
|
||||||
@ -23,6 +23,8 @@ public:
|
|||||||
void Write(std::ostream &, bool fragile) const;
|
void Write(std::ostream &, bool fragile) const;
|
||||||
///
|
///
|
||||||
void Metrics(MathStyles st, int asc = 0, int des = 0);
|
void Metrics(MathStyles st, int asc = 0, int des = 0);
|
||||||
|
///
|
||||||
|
void WriteNormal(ostream & os) const;
|
||||||
private:
|
private:
|
||||||
///
|
///
|
||||||
int deco_;
|
int deco_;
|
||||||
|
@ -43,7 +43,7 @@ latexkeys const wordlist[] =
|
|||||||
{"approx", LM_TK_SYM, LM_approx},
|
{"approx", LM_TK_SYM, LM_approx},
|
||||||
{"triangleleft", LM_TK_SYM, LM_triangleleft},
|
{"triangleleft", LM_TK_SYM, LM_triangleleft},
|
||||||
{"triangleright", LM_TK_SYM, LM_triangleright},
|
{"triangleright", LM_TK_SYM, LM_triangleright},
|
||||||
{"tilde", LM_TK_ACCENT, LM_tilde},
|
{"tilde", LM_TK_DECORATION, LM_tilde},
|
||||||
{"lambda", LM_TK_SYM, LM_lambda},
|
{"lambda", LM_TK_SYM, LM_lambda},
|
||||||
{"emptyset", LM_TK_MACRO, LM_emptyset},
|
{"emptyset", LM_TK_MACRO, LM_emptyset},
|
||||||
{"triangle", LM_TK_SYM, LM_triangle},
|
{"triangle", LM_TK_SYM, LM_triangle},
|
||||||
@ -62,10 +62,10 @@ latexkeys const wordlist[] =
|
|||||||
{"swarrow", LM_TK_SYM, LM_swarrow},
|
{"swarrow", LM_TK_SYM, LM_swarrow},
|
||||||
{"top", LM_TK_SYM, LM_top},
|
{"top", LM_TK_SYM, LM_top},
|
||||||
{"Rightarrow", LM_TK_SYM, LM_Rightarrow},
|
{"Rightarrow", LM_TK_SYM, LM_Rightarrow},
|
||||||
{"underline", LM_TK_WIDE, LM_underline},
|
{"underline", LM_TK_DECORATION, LM_underline},
|
||||||
{"underbrace", LM_TK_WIDE, LM_underbrace},
|
{"underbrace", LM_TK_DECORATION, LM_underbrace},
|
||||||
{"eta", LM_TK_SYM, LM_eta},
|
{"eta", LM_TK_SYM, LM_eta},
|
||||||
{"acute", LM_TK_ACCENT, LM_acute},
|
{"acute", LM_TK_DECORATION, LM_acute},
|
||||||
{"angle", LM_TK_SYM, LM_angle},
|
{"angle", LM_TK_SYM, LM_angle},
|
||||||
{"exp", LM_TK_FUNC, 0},
|
{"exp", LM_TK_FUNC, 0},
|
||||||
{"leftarrow", LM_TK_SYM, LM_leftarrow},
|
{"leftarrow", LM_TK_SYM, LM_leftarrow},
|
||||||
@ -80,14 +80,14 @@ latexkeys const wordlist[] =
|
|||||||
{"Psi", LM_TK_SYM, LM_Psi},
|
{"Psi", LM_TK_SYM, LM_Psi},
|
||||||
{"longleftrightarrow", LM_TK_SYM, LM_longleftrightarrow},
|
{"longleftrightarrow", LM_TK_SYM, LM_longleftrightarrow},
|
||||||
{"alpha", LM_TK_SYM, LM_alpha},
|
{"alpha", LM_TK_SYM, LM_alpha},
|
||||||
{"widehat", LM_TK_WIDE, LM_widehat},
|
{"widehat", LM_TK_DECORATION, LM_widehat},
|
||||||
{"sin", LM_TK_FUNC, 0},
|
{"sin", LM_TK_FUNC, 0},
|
||||||
{"asymp", LM_TK_SYM, LM_asymp},
|
{"asymp", LM_TK_SYM, LM_asymp},
|
||||||
{"nolimits", LM_TK_LIMIT, 0 },
|
{"nolimits", LM_TK_LIMIT, 0 },
|
||||||
{"perp", LM_TK_MACRO, LM_perp},
|
{"perp", LM_TK_MACRO, LM_perp},
|
||||||
{"wedge", LM_TK_SYM, LM_wedge},
|
{"wedge", LM_TK_SYM, LM_wedge},
|
||||||
{"ln", LM_TK_FUNC, 0},
|
{"ln", LM_TK_FUNC, 0},
|
||||||
{"widetilde", LM_TK_WIDE, LM_widetilde},
|
{"widetilde", LM_TK_DECORATION, LM_widetilde},
|
||||||
{"Omega", LM_TK_SYM, LM_Omega},
|
{"Omega", LM_TK_SYM, LM_Omega},
|
||||||
{"natural", LM_TK_SYM, LM_natural},
|
{"natural", LM_TK_SYM, LM_natural},
|
||||||
{"iota", LM_TK_SYM, LM_iota},
|
{"iota", LM_TK_SYM, LM_iota},
|
||||||
@ -100,7 +100,7 @@ latexkeys const wordlist[] =
|
|||||||
{"star", LM_TK_SYM, LM_star},
|
{"star", LM_TK_SYM, LM_star},
|
||||||
{"leftharpoondown", LM_TK_SYM, LM_leftharpoondown},
|
{"leftharpoondown", LM_TK_SYM, LM_leftharpoondown},
|
||||||
{"wp", LM_TK_SYM, LM_wp},
|
{"wp", LM_TK_SYM, LM_wp},
|
||||||
{"not", LM_TK_ACCENT, LM_not},
|
{"not", LM_TK_DECORATION, LM_not},
|
||||||
{"tan", LM_TK_FUNC, 0},
|
{"tan", LM_TK_FUNC, 0},
|
||||||
{"Theta", LM_TK_SYM, LM_Theta},
|
{"Theta", LM_TK_SYM, LM_Theta},
|
||||||
{"rceil", LM_TK_SYM, LM_rceil},
|
{"rceil", LM_TK_SYM, LM_rceil},
|
||||||
@ -125,7 +125,7 @@ latexkeys const wordlist[] =
|
|||||||
{"arcsin", LM_TK_FUNC, 0},
|
{"arcsin", LM_TK_FUNC, 0},
|
||||||
{"arctan", LM_TK_FUNC, 0},
|
{"arctan", LM_TK_FUNC, 0},
|
||||||
{"flat", LM_TK_SYM, LM_flat},
|
{"flat", LM_TK_SYM, LM_flat},
|
||||||
{"check", LM_TK_ACCENT, LM_check},
|
{"check", LM_TK_DECORATION, LM_check},
|
||||||
{"rangle", LM_TK_SYM, LM_rangle},
|
{"rangle", LM_TK_SYM, LM_rangle},
|
||||||
{"cot", LM_TK_FUNC, 0},
|
{"cot", LM_TK_FUNC, 0},
|
||||||
{"cdot", LM_TK_SYM, LM_cdot},
|
{"cdot", LM_TK_SYM, LM_cdot},
|
||||||
@ -177,15 +177,15 @@ latexkeys const wordlist[] =
|
|||||||
{"mp", LM_TK_SYM, LM_mp},
|
{"mp", LM_TK_SYM, LM_mp},
|
||||||
{"pm", LM_TK_SYM, LM_pm},
|
{"pm", LM_TK_SYM, LM_pm},
|
||||||
{"nonumber", LM_TK_NONUM, 0},
|
{"nonumber", LM_TK_NONUM, 0},
|
||||||
{"breve", LM_TK_ACCENT, LM_breve},
|
{"breve", LM_TK_DECORATION, LM_breve},
|
||||||
{"bigvee", LM_TK_BIGSYM, LM_vee},
|
{"bigvee", LM_TK_BIGSYM, LM_vee},
|
||||||
{"bowtie", LM_TK_SYM, LM_bowtie},
|
{"bowtie", LM_TK_SYM, LM_bowtie},
|
||||||
{"bigwedge", LM_TK_BIGSYM, LM_wedge},
|
{"bigwedge", LM_TK_BIGSYM, LM_wedge},
|
||||||
{"frown", LM_TK_SYM, LM_frown},
|
{"frown", LM_TK_SYM, LM_frown},
|
||||||
{"rightharpoondown", LM_TK_SYM, LM_rightharpoondown},
|
{"rightharpoondown", LM_TK_SYM, LM_rightharpoondown},
|
||||||
{"det", LM_TK_FUNCLIM, 0},
|
{"det", LM_TK_FUNCLIM, 0},
|
||||||
{"dot", LM_TK_ACCENT, LM_dot},
|
{"dot", LM_TK_DECORATION, LM_dot},
|
||||||
{"ddot", LM_TK_ACCENT, LM_ddot},
|
{"ddot", LM_TK_DECORATION, LM_ddot},
|
||||||
{"lg", LM_TK_FUNC, 0},
|
{"lg", LM_TK_FUNC, 0},
|
||||||
{"log", LM_TK_FUNC, 0},
|
{"log", LM_TK_FUNC, 0},
|
||||||
{"oplus", LM_TK_SYM, LM_oplus},
|
{"oplus", LM_TK_SYM, LM_oplus},
|
||||||
@ -195,7 +195,7 @@ latexkeys const wordlist[] =
|
|||||||
{"diamondsuit", LM_TK_SYM, LM_diamondsuit},
|
{"diamondsuit", LM_TK_SYM, LM_diamondsuit},
|
||||||
{"rfloor", LM_TK_SYM, LM_rfloor},
|
{"rfloor", LM_TK_SYM, LM_rfloor},
|
||||||
{"end", LM_TK_END, 0},
|
{"end", LM_TK_END, 0},
|
||||||
{"hat", LM_TK_ACCENT, LM_hat},
|
{"hat", LM_TK_DECORATION, LM_hat},
|
||||||
{"tanh", LM_TK_FUNC, 0},
|
{"tanh", LM_TK_FUNC, 0},
|
||||||
{"vdots", LM_TK_DOTS, LM_vdots},
|
{"vdots", LM_TK_DOTS, LM_vdots},
|
||||||
{"bigcap", LM_TK_BIGSYM, LM_cap},
|
{"bigcap", LM_TK_BIGSYM, LM_cap},
|
||||||
@ -209,7 +209,7 @@ latexkeys const wordlist[] =
|
|||||||
{"delta", LM_TK_SYM, LM_delta},
|
{"delta", LM_TK_SYM, LM_delta},
|
||||||
{"odot", LM_TK_SYM, LM_odot},
|
{"odot", LM_TK_SYM, LM_odot},
|
||||||
{"oint", LM_TK_BIGSYM, LM_oint},
|
{"oint", LM_TK_BIGSYM, LM_oint},
|
||||||
{"grave", LM_TK_ACCENT, LM_grave},
|
{"grave", LM_TK_DECORATION, LM_grave},
|
||||||
{"pmod", LM_TK_PMOD, 0},
|
{"pmod", LM_TK_PMOD, 0},
|
||||||
{"prod", LM_TK_BIGSYM, LM_prod},
|
{"prod", LM_TK_BIGSYM, LM_prod},
|
||||||
{"frac", LM_TK_FRAC, 0},
|
{"frac", LM_TK_FRAC, 0},
|
||||||
@ -217,9 +217,9 @@ latexkeys const wordlist[] =
|
|||||||
{"circ", LM_TK_SYM, LM_circ},
|
{"circ", LM_TK_SYM, LM_circ},
|
||||||
{"aleph", LM_TK_SYM, LM_aleph},
|
{"aleph", LM_TK_SYM, LM_aleph},
|
||||||
{"min", LM_TK_FUNCLIM, 0},
|
{"min", LM_TK_FUNCLIM, 0},
|
||||||
{"overline", LM_TK_WIDE, LM_overline},
|
{"overline", LM_TK_DECORATION, LM_overline},
|
||||||
{"arg", LM_TK_FUNC, 0},
|
{"arg", LM_TK_FUNC, 0},
|
||||||
{"overbrace", LM_TK_WIDE, LM_overbrace},
|
{"overbrace", LM_TK_DECORATION, LM_overbrace},
|
||||||
{"amalg", LM_TK_SYM, LM_amalg},
|
{"amalg", LM_TK_SYM, LM_amalg},
|
||||||
{"gamma", LM_TK_SYM, LM_gamma},
|
{"gamma", LM_TK_SYM, LM_gamma},
|
||||||
{"vee", LM_TK_SYM, LM_vee},
|
{"vee", LM_TK_SYM, LM_vee},
|
||||||
@ -238,12 +238,12 @@ latexkeys const wordlist[] =
|
|||||||
{"bigtriangledown", LM_TK_SYM, LM_bigtriangledown},
|
{"bigtriangledown", LM_TK_SYM, LM_bigtriangledown},
|
||||||
{"mathbf", LM_TK_FONT, LM_TC_BF},
|
{"mathbf", LM_TK_FONT, LM_TC_BF},
|
||||||
{"mathsf", LM_TK_FONT, LM_TC_SF},
|
{"mathsf", LM_TK_FONT, LM_TC_SF},
|
||||||
{"bar", LM_TK_ACCENT, LM_bar},
|
{"bar", LM_TK_DECORATION, LM_bar},
|
||||||
{"varpi", LM_TK_SYM, LM_varpi},
|
{"varpi", LM_TK_SYM, LM_varpi},
|
||||||
{"varphi", LM_TK_SYM, LM_varphi},
|
{"varphi", LM_TK_SYM, LM_varphi},
|
||||||
{"newcommand", LM_TK_NEWCOMMAND, 0 },
|
{"newcommand", LM_TK_NEWCOMMAND, 0 },
|
||||||
{"overleftarrow", LM_TK_WIDE, LM_overleftarrow},
|
{"overleftarrow", LM_TK_DECORATION, LM_overleftarrow},
|
||||||
{"overrightarrow", LM_TK_WIDE, LM_overightarrow},
|
{"overrightarrow", LM_TK_DECORATION, LM_overightarrow},
|
||||||
{"Leftarrow", LM_TK_SYM, LM_Leftarrow},
|
{"Leftarrow", LM_TK_SYM, LM_Leftarrow},
|
||||||
{"Longleftarrow", LM_TK_SYM, LM_Longleftarrow},
|
{"Longleftarrow", LM_TK_SYM, LM_Longleftarrow},
|
||||||
{"Leftrightarrow", LM_TK_SYM, LM_Leftrightarrow},
|
{"Leftrightarrow", LM_TK_SYM, LM_Leftrightarrow},
|
||||||
@ -261,7 +261,7 @@ latexkeys const wordlist[] =
|
|||||||
{"coth", LM_TK_FUNC, 0},
|
{"coth", LM_TK_FUNC, 0},
|
||||||
{"rho", LM_TK_SYM, LM_rho},
|
{"rho", LM_TK_SYM, LM_rho},
|
||||||
{"cong", LM_TK_SYM, LM_cong},
|
{"cong", LM_TK_SYM, LM_cong},
|
||||||
{"vec", LM_TK_ACCENT, LM_vec},
|
{"vec", LM_TK_DECORATION, LM_vec},
|
||||||
{"dim", LM_TK_FUNC, 0},
|
{"dim", LM_TK_FUNC, 0},
|
||||||
{"mid", LM_TK_SYM, LM_mid},
|
{"mid", LM_TK_SYM, LM_mid},
|
||||||
{"hom", LM_TK_FUNC, 0},
|
{"hom", LM_TK_FUNC, 0},
|
||||||
|
@ -171,8 +171,6 @@ public:
|
|||||||
bool covers(int x, int y) const;
|
bool covers(int x, int y) const;
|
||||||
/// Identifies ScriptInsets
|
/// Identifies ScriptInsets
|
||||||
virtual bool isUpDownInset() const { return false; }
|
virtual bool isUpDownInset() const { return false; }
|
||||||
/// Identifies AccentInsets
|
|
||||||
virtual bool isAccentInset() const { return false; }
|
|
||||||
/// Identifies BigopInsets
|
/// Identifies BigopInsets
|
||||||
virtual bool isBigopInset() const { return false; }
|
virtual bool isBigopInset() const { return false; }
|
||||||
///
|
///
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
#include "math_macrotemplate.h"
|
#include "math_macrotemplate.h"
|
||||||
#include "math_parser.h"
|
#include "math_parser.h"
|
||||||
#include "array.h"
|
#include "array.h"
|
||||||
#include "math_accentinset.h"
|
#include "math_decorationinset.h"
|
||||||
#include "math_deliminset.h"
|
#include "math_deliminset.h"
|
||||||
#include "math_fracinset.h"
|
#include "math_fracinset.h"
|
||||||
#include "math_inset.h"
|
#include "math_inset.h"
|
||||||
@ -94,7 +94,7 @@ void MathMacroTable::builtinMacros()
|
|||||||
// This macro doesn't have arguments
|
// This macro doesn't have arguments
|
||||||
{
|
{
|
||||||
MathMacroTemplate * t = new MathMacroTemplate("notin", 0);
|
MathMacroTemplate * t = new MathMacroTemplate("notin", 0);
|
||||||
MathAccentInset * p = new MathAccentInset(LM_not);
|
MathDecorationInset * p = new MathDecorationInset("not", LM_not);
|
||||||
p->cell(0).push_back(LM_in, LM_TC_BOPS);
|
p->cell(0).push_back(LM_in, LM_TC_BOPS);
|
||||||
t->push_back(p);
|
t->push_back(p);
|
||||||
insertTemplate(t);
|
insertTemplate(t);
|
||||||
@ -113,7 +113,7 @@ void MathMacroTable::builtinMacros()
|
|||||||
|
|
||||||
{
|
{
|
||||||
MathMacroTemplate * t = new MathMacroTemplate("emptyset", 0);
|
MathMacroTemplate * t = new MathMacroTemplate("emptyset", 0);
|
||||||
MathAccentInset * p = new MathAccentInset(LM_not);
|
MathDecorationInset * p = new MathDecorationInset("not", LM_not);
|
||||||
p->cell(0).push_back('O', LM_TC_VAR);
|
p->cell(0).push_back('O', LM_TC_VAR);
|
||||||
t->push_back(p);
|
t->push_back(p);
|
||||||
insertTemplate(t);
|
insertTemplate(t);
|
||||||
|
@ -35,7 +35,6 @@
|
|||||||
#include "math_arrayinset.h"
|
#include "math_arrayinset.h"
|
||||||
#include "math_sqrtinset.h"
|
#include "math_sqrtinset.h"
|
||||||
#include "math_matrixinset.h"
|
#include "math_matrixinset.h"
|
||||||
#include "math_accentinset.h"
|
|
||||||
#include "math_bigopinset.h"
|
#include "math_bigopinset.h"
|
||||||
#include "math_funcinset.h"
|
#include "math_funcinset.h"
|
||||||
#include "math_spaceinset.h"
|
#include "math_spaceinset.h"
|
||||||
@ -94,23 +93,18 @@ const unsigned char LM_TK_CLOSE = '}';
|
|||||||
|
|
||||||
enum {
|
enum {
|
||||||
FLAG_BRACE = 1 << 0, // A { needed //}
|
FLAG_BRACE = 1 << 0, // A { needed //}
|
||||||
FLAG_BRACE_OPT = 1 << 2, // Optional { //}
|
|
||||||
FLAG_BRACE_LAST = 1 << 3, // // { Last } ends the parsing process
|
FLAG_BRACE_LAST = 1 << 3, // // { Last } ends the parsing process
|
||||||
FLAG_BRACK_ARG = 1 << 4, // Optional [ //]
|
|
||||||
FLAG_RIGHT = 1 << 5, // Next right ends the parsing process
|
FLAG_RIGHT = 1 << 5, // Next right ends the parsing process
|
||||||
FLAG_END = 1 << 6, // Next end ends the parsing process
|
FLAG_END = 1 << 6, // Next end ends the parsing process
|
||||||
FLAG_BRACE_FONT = 1 << 7, // // { Next } closes a font
|
FLAG_BRACE_FONT = 1 << 7, // // { Next } closes a font
|
||||||
FLAG_BRACK_END = 1 << 9, // // [ Next ] ends the parsing process
|
FLAG_BRACK_END = 1 << 9, // // [ Next ] ends the parsing process
|
||||||
FLAG_AMPERSAND = 1 << 10, // Next & ends the parsing process
|
FLAG_AMPERSAND = 1 << 10, // Next & ends the parsing process
|
||||||
FLAG_NEWLINE = 1 << 11, // Next \\ ends the parsing process
|
FLAG_NEWLINE = 1 << 11, // Next \\ ends the parsing process
|
||||||
|
FLAG_ITEM = 1 << 12, // read a (possibly braced token)
|
||||||
// Read a (possibly braced token)
|
FLAG_LEAVE = 1 << 13, // marker for leaving the
|
||||||
FLAG_ITEM = FLAG_BRACE_OPT | FLAG_BRACE_LAST
|
FLAG_OPTARG = 1 << 14 // reads an argument in []
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
union {
|
union {
|
||||||
///
|
///
|
||||||
@ -157,11 +151,12 @@ int const latex_mathenv_num = sizeof(latex_mathenv)/sizeof(latex_mathenv[0]);
|
|||||||
|
|
||||||
void mathPrintError(string const & msg)
|
void mathPrintError(string const & msg)
|
||||||
{
|
{
|
||||||
lyxerr[Debug::MATHED] << "Line ~" << yylineno << ": Math parse error: " << msg << endl;
|
//lyxerr[Debug::MATHED] << "Line ~" << yylineno << ": Math parse error: " << msg << endl;
|
||||||
|
lyxerr << "Line ~" << yylineno << ": Math parse error: " << msg << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void LexInitCodes()
|
void lexInit()
|
||||||
{
|
{
|
||||||
for (int i = 0; i <= 255; ++i) {
|
for (int i = 0; i <= 255; ++i) {
|
||||||
if (isdigit(i))
|
if (isdigit(i))
|
||||||
@ -196,39 +191,43 @@ void LexInitCodes()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
unsigned char LexGetArg(unsigned char lf, bool accept_spaces = false)
|
string lexArg(unsigned char lf, bool accept_spaces = false)
|
||||||
{
|
{
|
||||||
|
string result;
|
||||||
|
unsigned char c = 0;
|
||||||
while (yyis->good()) {
|
while (yyis->good()) {
|
||||||
unsigned char c = getuchar(yyis);
|
c = getuchar(yyis);
|
||||||
if (c > ' ') {
|
if (!isspace(c))
|
||||||
if (!lf)
|
|
||||||
lf = c;
|
|
||||||
else if (c != lf) {
|
|
||||||
lyxerr[Debug::MATHED] << "Math parse error: unexpected '" << c << "'" << endl;
|
|
||||||
return '\0';
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (c != lf) {
|
||||||
|
yyis->putback(c);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned char rg = 0;
|
unsigned char rg = 0;
|
||||||
if (lf == '{') rg = '}';
|
if (lf == '{') rg = '}';
|
||||||
if (lf == '[') rg = ']';
|
if (lf == '[') rg = ']';
|
||||||
if (lf == '(') rg = ')';
|
if (lf == '(') rg = ')';
|
||||||
if (!rg) {
|
if (!rg) {
|
||||||
lyxerr[Debug::MATHED] << "Math parse error: unknown bracket '" << lf << "'" << endl;
|
lyxerr[Debug::MATHED] << "Math parse error: unknown bracket '"
|
||||||
return '\0';
|
<< lf << "'" << endl;
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
yytext.erase();
|
|
||||||
int bcnt = 1;
|
int depth = 1;
|
||||||
do {
|
do {
|
||||||
unsigned char c = getuchar(yyis);
|
unsigned char c = getuchar(yyis);
|
||||||
if (c == lf) ++bcnt;
|
if (c == lf)
|
||||||
if (c == rg) --bcnt;
|
++depth;
|
||||||
if ((c > ' ' || (c == ' ' && accept_spaces)) && bcnt > 0)
|
if (c == rg)
|
||||||
yytext += c;
|
--depth;
|
||||||
} while (bcnt > 0 && yyis->good());
|
if ((!isspace(c) || (c == ' ' && accept_spaces)) && depth > 0)
|
||||||
|
result += c;
|
||||||
|
} while (depth > 0 && yyis->good());
|
||||||
|
|
||||||
return rg;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -237,7 +236,7 @@ int yylex()
|
|||||||
static bool init_done = false;
|
static bool init_done = false;
|
||||||
|
|
||||||
if (!init_done) {
|
if (!init_done) {
|
||||||
LexInitCodes();
|
lexInit();
|
||||||
init_done = true;
|
init_done = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,15 +316,15 @@ int yylex()
|
|||||||
}
|
}
|
||||||
if (yyis->good())
|
if (yyis->good())
|
||||||
yyis->putback(c);
|
yyis->putback(c);
|
||||||
lyxerr[Debug::MATHED] << "reading: text '" << yytext << "'\n";
|
//lyxerr[Debug::MATHED] << "reading: text '" << yytext << "'\n";
|
||||||
latexkeys const * l = in_word_set(yytext);
|
latexkeys const * l = in_word_set(yytext);
|
||||||
if (!l)
|
if (!l)
|
||||||
return LM_TK_UNDEF;
|
return LM_TK_UNDEF;
|
||||||
|
|
||||||
if (l->token == LM_TK_BEGIN || l->token == LM_TK_END) {
|
if (l->token == LM_TK_BEGIN || l->token == LM_TK_END) {
|
||||||
LexGetArg('{');
|
string name = lexArg('{');
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (i < latex_mathenv_num && yytext != latex_mathenv[i].name)
|
while (i < latex_mathenv_num && name != latex_mathenv[i].name)
|
||||||
++i;
|
++i;
|
||||||
yylval.i = i;
|
yylval.i = i;
|
||||||
} else if (l->token == LM_TK_SPACE)
|
} else if (l->token == LM_TK_SPACE)
|
||||||
@ -412,36 +411,30 @@ MathInset * mathed_parse()
|
|||||||
|
|
||||||
switch (t) {
|
switch (t) {
|
||||||
case LM_TK_NEWCOMMAND: {
|
case LM_TK_NEWCOMMAND: {
|
||||||
LexGetArg('{');
|
string name = lexArg('{').substr(1);
|
||||||
string name = yytext.substr(1);
|
string arg = lexArg('[');
|
||||||
|
int narg = arg.empty() ? 0 : atoi(arg.c_str());
|
||||||
int na = 0;
|
p = new MathMacroTemplate(name, narg);
|
||||||
unsigned char const c = yyis->peek();
|
|
||||||
if (c == '[') {
|
|
||||||
LexGetArg('[');
|
|
||||||
na = atoi(yytext.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
p = new MathMacroTemplate(name, na);
|
|
||||||
mathed_parse(p->cell(0), FLAG_BRACE | FLAG_BRACE_LAST);
|
mathed_parse(p->cell(0), FLAG_BRACE | FLAG_BRACE_LAST);
|
||||||
lyxerr[Debug::MATHED] << "LM_TK_NEWCOMMAND: name: " << name << " na: " << na << "\n";
|
//lyxerr[Debug::MATHED] << "LM_TK_NEWCOMMAND: name: "
|
||||||
|
// << name << " nargs: " << narg << "\n";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case LM_TK_BEGIN: {
|
case LM_TK_BEGIN: {
|
||||||
int i = yylval.i;
|
int i = yylval.i;
|
||||||
lyxerr[Debug::MATHED] << "reading math environment " << i << " "
|
//lyxerr[Debug::MATHED] << "reading math environment " << i << " "
|
||||||
<< latex_mathenv[i].name << "\n";
|
// << latex_mathenv[i].name << "\n";
|
||||||
|
|
||||||
MathInsetTypes typ = latex_mathenv[i].typ;
|
MathInsetTypes typ = latex_mathenv[i].typ;
|
||||||
p = new MathMatrixInset(typ);
|
p = new MathMatrixInset(typ);
|
||||||
|
MathMatrixInset * m = static_cast<MathMatrixInset *>(p);
|
||||||
switch (typ) {
|
switch (typ) {
|
||||||
|
|
||||||
case LM_OT_SIMPLE: {
|
case LM_OT_SIMPLE: {
|
||||||
curr_num = latex_mathenv[i].numbered;
|
curr_num = latex_mathenv[i].numbered;
|
||||||
curr_label = string();
|
curr_label = string();
|
||||||
mathed_parse(p->cell(0), 0);
|
mathed_parse(m->cell(0), 0);
|
||||||
MathMatrixInset * m = static_cast<MathMatrixInset *>(p);
|
|
||||||
m->numbered(0, curr_num);
|
m->numbered(0, curr_num);
|
||||||
m->label(0, curr_label);
|
m->label(0, curr_label);
|
||||||
break;
|
break;
|
||||||
@ -450,24 +443,26 @@ MathInset * mathed_parse()
|
|||||||
case LM_OT_EQUATION: {
|
case LM_OT_EQUATION: {
|
||||||
curr_num = latex_mathenv[i].numbered;
|
curr_num = latex_mathenv[i].numbered;
|
||||||
curr_label = string();
|
curr_label = string();
|
||||||
mathed_parse(p->cell(0), FLAG_END);
|
mathed_parse(m->cell(0), FLAG_END);
|
||||||
MathMatrixInset * m = static_cast<MathMatrixInset *>(p);
|
|
||||||
m->numbered(0, curr_num);
|
m->numbered(0, curr_num);
|
||||||
m->label(0, curr_label);
|
m->label(0, curr_label);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case LM_OT_EQNARRAY: {
|
case LM_OT_EQNARRAY: {
|
||||||
mathed_parse_lines(p, 3, latex_mathenv[i].numbered, true);
|
mathed_parse_lines(m, 3, latex_mathenv[i].numbered, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case LM_OT_ALIGN: {
|
||||||
|
m->halign(lexArg('{'));
|
||||||
|
mathed_parse_lines(m, 2, latex_mathenv[i].numbered, true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case LM_OT_ALIGNAT: {
|
case LM_OT_ALIGNAT: {
|
||||||
LexGetArg('{');
|
m->halign(lexArg('{'));
|
||||||
//int c = atoi(yytext.c_str());
|
mathed_parse_lines(m, 2, latex_mathenv[i].numbered, true);
|
||||||
lyxerr[Debug::MATHED] << "LM_OT_ALIGNAT: not implemented\n";
|
|
||||||
mathed_parse_lines(p, 2, latex_mathenv[i].numbered, true);
|
|
||||||
lyxerr[Debug::MATHED] << "LM_OT_ALIGNAT: par: " << *p << "\n";
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -488,9 +483,6 @@ MathInset * mathed_parse()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
void handle_frac(MathArray & array, string const & name)
|
void handle_frac(MathArray & array, string const & name)
|
||||||
{
|
{
|
||||||
MathFracInset * p = new MathFracInset(name);
|
MathFracInset * p = new MathFracInset(name);
|
||||||
@ -502,7 +494,7 @@ void handle_frac(MathArray & array, string const & name)
|
|||||||
|
|
||||||
void mathed_parse(MathArray & array, unsigned flags)
|
void mathed_parse(MathArray & array, unsigned flags)
|
||||||
{
|
{
|
||||||
int t = yylex();
|
int t = yylex();
|
||||||
bool panic = false;
|
bool panic = false;
|
||||||
static int plevel = -1;
|
static int plevel = -1;
|
||||||
yyvarcode = LM_TC_VAR;
|
yyvarcode = LM_TC_VAR;
|
||||||
@ -511,19 +503,32 @@ void mathed_parse(MathArray & array, unsigned flags)
|
|||||||
|
|
||||||
++plevel;
|
++plevel;
|
||||||
while (t) {
|
while (t) {
|
||||||
//lyxerr << "t: " << t << " flags: " << flags;
|
//lyxerr << "t: " << t << " flags: " << flags << " i: " << yylval.i << " "
|
||||||
|
// << " plevel: " << plevel << " ";
|
||||||
//array.dump(lyxerr);
|
//array.dump(lyxerr);
|
||||||
//lyxerr << "\n";
|
//lyxerr << "\n";
|
||||||
|
|
||||||
if ((flags & FLAG_BRACE) && t != LM_TK_OPEN) {
|
if (flags & FLAG_ITEM) {
|
||||||
if (!(flags & FLAG_BRACK_ARG) || t != '[') {
|
flags &= ~FLAG_ITEM;
|
||||||
mathPrintError(
|
if (t == LM_TK_OPEN) {
|
||||||
"Expected {. Maybe you forgot to enclose an argument in {}");
|
// skip the brace and regard everything to the next matching
|
||||||
panic = true;
|
// closing brace
|
||||||
break;
|
t = yylex();
|
||||||
|
++brace;
|
||||||
|
flags |= FLAG_BRACE_LAST;
|
||||||
|
} else {
|
||||||
|
// regard only this single token
|
||||||
|
flags |= FLAG_LEAVE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((flags & FLAG_BRACE) && t != LM_TK_OPEN) {
|
||||||
|
mathPrintError(
|
||||||
|
"Expected {. Maybe you forgot to enclose an argument in {}");
|
||||||
|
panic = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
switch (t) {
|
switch (t) {
|
||||||
|
|
||||||
case LM_TK_ALPHA:
|
case LM_TK_ALPHA:
|
||||||
@ -544,11 +549,6 @@ void mathed_parse(MathArray & array, unsigned flags)
|
|||||||
|
|
||||||
case LM_TK_OPEN:
|
case LM_TK_OPEN:
|
||||||
++brace;
|
++brace;
|
||||||
if (flags & FLAG_BRACE_OPT) {
|
|
||||||
flags &= ~FLAG_BRACE_OPT;
|
|
||||||
flags |= FLAG_BRACE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flags & FLAG_BRACE)
|
if (flags & FLAG_BRACE)
|
||||||
flags &= ~FLAG_BRACE;
|
flags &= ~FLAG_BRACE;
|
||||||
else
|
else
|
||||||
@ -567,32 +567,21 @@ void mathed_parse(MathArray & array, unsigned flags)
|
|||||||
flags &= ~FLAG_BRACE_FONT;
|
flags &= ~FLAG_BRACE_FONT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (brace == 0 && (flags & FLAG_BRACE_LAST)) {
|
if (brace == 0 && (flags & FLAG_BRACE_LAST))
|
||||||
--plevel;
|
flags |= FLAG_LEAVE;
|
||||||
return;
|
else
|
||||||
}
|
array.push_back('}', LM_TC_TEX);
|
||||||
array.push_back('}', LM_TC_TEX);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '[':
|
case '[':
|
||||||
if (flags & FLAG_BRACK_ARG) {
|
array.push_back('[', LM_TC_CONST);
|
||||||
flags &= ~FLAG_BRACK_ARG;
|
|
||||||
unsigned char const rg = LexGetArg('[');
|
|
||||||
if (rg != ']') {
|
|
||||||
mathPrintError("Expected ']'");
|
|
||||||
panic = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
array.push_back('[', LM_TC_CONST);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ']':
|
case ']':
|
||||||
if (flags & FLAG_BRACK_END) {
|
if (flags & FLAG_BRACK_END)
|
||||||
--plevel;
|
flags |= FLAG_LEAVE;
|
||||||
return;
|
else
|
||||||
}
|
array.push_back(']', LM_TC_CONST);
|
||||||
array.push_back(']', LM_TC_CONST);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '^':
|
case '^':
|
||||||
@ -673,7 +662,7 @@ void mathed_parse(MathArray & array, unsigned flags)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case LM_TK_SQRT:
|
case LM_TK_SQRT:
|
||||||
{
|
{
|
||||||
unsigned char c = getuchar(yyis);
|
unsigned char c = getuchar(yyis);
|
||||||
if (c == '[') {
|
if (c == '[') {
|
||||||
array.push_back(new MathRootInset);
|
array.push_back(new MathRootInset);
|
||||||
@ -735,18 +724,11 @@ void mathed_parse(MathArray & array, unsigned flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
case LM_TK_WIDE:
|
case LM_TK_DECORATION:
|
||||||
{
|
{
|
||||||
MathDecorationInset * p = new MathDecorationInset(yylval.l->id);
|
MathDecorationInset * p
|
||||||
mathed_parse(p->cell(0), FLAG_BRACE | FLAG_BRACE_LAST);
|
= new MathDecorationInset(yylval.l->name, yylval.l->id);
|
||||||
array.push_back(p);
|
mathed_parse(p->cell(0), FLAG_ITEM);
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case LM_TK_ACCENT:
|
|
||||||
{
|
|
||||||
MathAccentInset * p = new MathAccentInset(yylval.l->id);
|
|
||||||
mathed_parse(p->cell(0), FLAG_BRACE | FLAG_BRACE_LAST);
|
|
||||||
array.push_back(p);
|
array.push_back(p);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -757,10 +739,7 @@ void mathed_parse(MathArray & array, unsigned flags)
|
|||||||
|
|
||||||
case LM_TK_PMOD:
|
case LM_TK_PMOD:
|
||||||
case LM_TK_FUNC:
|
case LM_TK_FUNC:
|
||||||
//if (accent)
|
array.push_back(new MathFuncInset(yylval.l->name));
|
||||||
// array.push_back(t, LM_TC_CONST);
|
|
||||||
//else
|
|
||||||
array.push_back(new MathFuncInset(yylval.l->name));
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LM_TK_FUNCLIM:
|
case LM_TK_FUNCLIM:
|
||||||
@ -788,22 +767,17 @@ void mathed_parse(MathArray & array, unsigned flags)
|
|||||||
MathInsetTypes typ = latex_mathenv[i].typ;
|
MathInsetTypes typ = latex_mathenv[i].typ;
|
||||||
|
|
||||||
if (typ == LM_OT_MATRIX) {
|
if (typ == LM_OT_MATRIX) {
|
||||||
string valign = "\0";
|
string valign = lexArg('[') + 'c';
|
||||||
unsigned char rg = LexGetArg(0);
|
string halign = lexArg('{');
|
||||||
if (rg == ']') {
|
//lyxerr << "valign: '" << valign << "'\n";
|
||||||
valign = yytext;
|
//lyxerr << "halign: '" << halign << "'\n";
|
||||||
rg = LexGetArg('{');
|
MathArrayInset * m = new MathArrayInset(halign.size(), 1);
|
||||||
}
|
m->valign(valign[0]);
|
||||||
|
m->halign(halign);
|
||||||
|
|
||||||
string halign = yytext;
|
mathed_parse_lines(m, halign.size(), latex_mathenv[i].numbered, false);
|
||||||
MathArrayInset * mm = new MathArrayInset(halign.size(), 1);
|
array.push_back(m);
|
||||||
valign += 'c';
|
//lyxerr << "read matrix " << *m << "\n";
|
||||||
mm->valign(valign[0]);
|
|
||||||
mm->halign(halign);
|
|
||||||
|
|
||||||
mathed_parse_lines(mm, halign.size(), latex_mathenv[i].numbered, false);
|
|
||||||
array.push_back(mm);
|
|
||||||
//lyxerr << "read matrix " << *mm << "\n";
|
|
||||||
break;
|
break;
|
||||||
} else
|
} else
|
||||||
lyxerr[Debug::MATHED] << "unknow math inset " << typ << "\n";
|
lyxerr[Debug::MATHED] << "unknow math inset " << typ << "\n";
|
||||||
@ -815,19 +789,8 @@ void mathed_parse(MathArray & array, unsigned flags)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case LM_TK_LABEL:
|
case LM_TK_LABEL:
|
||||||
{
|
curr_label = lexArg('{', true);
|
||||||
unsigned char const rg = LexGetArg('\0', true);
|
|
||||||
if (rg != '}') {
|
|
||||||
mathPrintError("Expected '{'");
|
|
||||||
// debug info
|
|
||||||
lyxerr[Debug::MATHED] << "[" << yytext << "]" << endl;
|
|
||||||
panic = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//lyxerr << " setting label to " << yytext << "\n";
|
|
||||||
curr_label = yytext;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
mathPrintError("Unrecognized token");
|
mathPrintError("Unrecognized token");
|
||||||
@ -835,7 +798,12 @@ void mathed_parse(MathArray & array, unsigned flags)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
} // end of big switch
|
} // end of big switch
|
||||||
|
|
||||||
|
if (flags & FLAG_LEAVE) {
|
||||||
|
flags &= ~FLAG_LEAVE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (panic) {
|
if (panic) {
|
||||||
lyxerr << " Math Panic, expect problems!" << endl;
|
lyxerr << " Math Panic, expect problems!" << endl;
|
||||||
// Search for the end command.
|
// Search for the end command.
|
||||||
@ -844,11 +812,7 @@ void mathed_parse(MathArray & array, unsigned flags)
|
|||||||
} while (t != LM_TK_END && t);
|
} while (t != LM_TK_END && t);
|
||||||
} else
|
} else
|
||||||
t = yylex();
|
t = yylex();
|
||||||
|
|
||||||
if (flags & FLAG_BRACE_OPT) {
|
|
||||||
flags &= ~FLAG_BRACE_OPT;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
--plevel;
|
--plevel;
|
||||||
}
|
}
|
||||||
|
@ -63,9 +63,7 @@ enum MathTokenEnum
|
|||||||
///
|
///
|
||||||
LM_TK_RIGHT,
|
LM_TK_RIGHT,
|
||||||
///
|
///
|
||||||
LM_TK_ACCENT,
|
LM_TK_DECORATION,
|
||||||
///
|
|
||||||
LM_TK_WIDE,
|
|
||||||
///
|
///
|
||||||
LM_TK_FUNC,
|
LM_TK_FUNC,
|
||||||
///
|
///
|
||||||
|
@ -159,7 +159,7 @@ void MathUpDownInset::Metrics(MathStyles st, int asc, int des)
|
|||||||
// we assume that asc, des, wid are the metrics of the item in front
|
// we assume that asc, des, wid are the metrics of the item in front
|
||||||
// of this MathScriptInset
|
// of this MathScriptInset
|
||||||
width_ = std::max(xcell(0).width(), xcell(1).width());
|
width_ = std::max(xcell(0).width(), xcell(1).width());
|
||||||
ascent_ = up() ? xcell(0).height() + 9 : 0;
|
ascent_ = up() ? xcell(0).height() + asc : 0;
|
||||||
descent_ = down() ? xcell(1).height() : 0;
|
descent_ = down() ? xcell(1).height() : 0;
|
||||||
dy0_ = - asc - xcell(0).descent();
|
dy0_ = - asc - xcell(0).descent();
|
||||||
dy1_ = des + xcell(1).ascent();
|
dy1_ = des + xcell(1).ascent();
|
||||||
|
Loading…
Reference in New Issue
Block a user