diff --git a/src/mathed/Makefile.am b/src/mathed/Makefile.am index 7022a48748..dd26fecdac 100644 --- a/src/mathed/Makefile.am +++ b/src/mathed/Makefile.am @@ -68,6 +68,8 @@ libmathed_la_SOURCES = \ math_parser.h \ math_rootinset.C \ math_rootinset.h \ + math_scopeinset.C \ + math_scopeinset.h \ math_scriptinset.C \ math_scriptinset.h \ math_sizeinset.C \ diff --git a/src/mathed/math_hash.C b/src/mathed/math_hash.C index 3987f3153e..064d1b7872 100644 --- a/src/mathed/math_hash.C +++ b/src/mathed/math_hash.C @@ -3,18 +3,20 @@ #include "math_parser.h" #include + +bool operator<(const latexkeys & a, const latexkeys & b) +{ + return string(a.name) < string(b.name); +} + namespace { // This lists needs to remain sorted all the time! latexkeys wordlist[] = { - //{"displaystyle", LM_TK_STY, LM_ST_DISPLAY, LMB_NONE}, //{"oint", LM_TK_BIGSYM, LM_oint, LMB_NONE}, //{"pmod", LM_TK_SYM, 0, LMB_NONE}, - //{"scriptscriptstyle", LM_TK_STY, LM_ST_SCRIPTSCRIPT, LMB_NONE}, - //{"scriptstyle", LM_TK_STY, LM_ST_SCRIPT, LMB_NONE}, - //{"textstyle", LM_TK_STY, LM_ST_TEXT, LMB_NONE}, {"!", LM_TK_SPACE, 0, LMB_NONE}, {"#", LM_TK_SPECIAL, '#', LMB_NONE}, {"$", LM_TK_SPECIAL, '$', LMB_NONE}, @@ -51,7 +53,7 @@ latexkeys wordlist[] = {"Vert", LM_TK_NOGLYPH, LM_Vert, LMB_NONE}, {"Xi", LM_TK_SYM, LM_Xi, LMB_NONE}, {"[", LM_TK_BEGIN, LM_OT_EQUATION, LMB_NONE}, - {"\\", LM_TK_NEWLINE, static_cast(-1), LMB_NONE}, + {"\\", LM_TK_NEWLINE, static_cast(-1), LMB_NONE}, // -1 needed in mathed_parse_lines! {"]", LM_TK_END, LM_OT_EQUATION, LMB_NONE}, {"_", LM_TK_SPECIAL, '_', LMB_NONE}, {"acute", LM_TK_DECORATION, LM_acute, LMB_NONE}, @@ -112,6 +114,7 @@ latexkeys wordlist[] = {"diamond", LM_TK_SYM, LM_diamond, LMB_OPERATOR}, {"diamondsuit", LM_TK_SYM, LM_diamondsuit, LMB_NONE}, {"dim", LM_TK_FUNC, 0, LMB_NONE}, + //{"displaystyle", LM_TK_STY, LM_ST_DISPLAY, LMB_NONE}, {"div", LM_TK_SYM, LM_div, LMB_OPERATOR}, {"dot", LM_TK_DECORATION, LM_dot, LMB_NONE}, {"doteq", LM_TK_NOGLYPH, 0, LMB_RELATION}, @@ -233,6 +236,8 @@ latexkeys wordlist[] = {"rightharpoondown", LM_TK_NOGLYPH, 0, LMB_NONE}, {"rightharpoonup", LM_TK_NOGLYPH, 0, LMB_NONE}, {"rightleftharpoons", LM_TK_NOGLYPH, 0, LMB_NONE}, + //{"scriptscriptstyle", LM_TK_STY, LM_ST_SCRIPTSCRIPT, LMB_NONE}, + //{"scriptstyle", LM_TK_STY, LM_ST_SCRIPT, LMB_NONE}, {"searrow", LM_TK_NOGLYPH, 0, LMB_NONE}, {"sec", LM_TK_FUNC, 0, LMB_NONE}, {"setminus", LM_TK_NOGLYPH, 0, LMB_OPERATOR}, @@ -265,6 +270,7 @@ latexkeys wordlist[] = {"tanh", LM_TK_FUNC, 0, LMB_NONE}, {"tau", LM_TK_SYM, LM_tau, LMB_NONE}, {"textrm", LM_TK_FONT, LM_TC_TEXTRM, LMB_NONE}, + //{"textstyle", LM_TK_STY, LM_ST_TEXT, LMB_NONE}, {"theta", LM_TK_SYM, LM_theta, LMB_NONE}, {"tilde", LM_TK_DECORATION, LM_tilde, LMB_NONE}, {"times", LM_TK_SYM, LM_times, LMB_OPERATOR}, @@ -297,16 +303,9 @@ latexkeys wordlist[] = {"{", LM_TK_SPECIAL, '{', LMB_NONE}, {"|", LM_TK_UNDEF, '|', LMB_NONE}, {"}", LM_TK_SPECIAL, '}', LMB_NONE} -// -1 needed in mathed_parse_lines! }; -bool operator<(const latexkeys & a, const latexkeys & b) -{ - return string(a.name) < string(b.name); -} - - // the "Initializer": Its default constructor is executed on loading and // sorts the list. Not exactly needed as long as the list is kept sorted // but who knows... diff --git a/src/mathed/math_scopeinset.C b/src/mathed/math_scopeinset.C new file mode 100644 index 0000000000..f85cbbc1e6 --- /dev/null +++ b/src/mathed/math_scopeinset.C @@ -0,0 +1,54 @@ +#ifdef __GNUG__ +#pragma implementation +#endif + +#include "math_scopeinset.h" +#include "LColor.h" +#include "Painter.h" +#include "support/LOstream.h" + + +MathScopeInset::MathScopeInset() + : MathNestInset(1) +{} + + +MathInset * MathScopeInset::clone() const +{ + return new MathScopeInset(*this); +} + + +void MathScopeInset::metrics(MathStyles st) const +{ + xcell(0).metrics(st); + size_ = st; + ascent_ = xcell(0).ascent() + 2; + descent_ = xcell(0).descent() + 2; + width_ = xcell(0).width() + 4; +} + + +void MathScopeInset::draw(Painter & pain, int x, int y) const +{ + xo(x); + yo(y); + xcell(0).draw(pain, x + 2, y); + pain.rectangle(x, y - ascent_, width_, height(), LColor::mathline); +} + + +void MathScopeInset::write(std::ostream & os, bool fragile) const +{ + os << '{'; + cell(0).write(os, fragile); + os << '}'; +} + + +void MathScopeInset::writeNormal(std::ostream & os) const +{ + os << "[scope "; + cell(0).writeNormal(os); + os << "] "; +} diff --git a/src/mathed/math_scopeinset.h b/src/mathed/math_scopeinset.h new file mode 100644 index 0000000000..13cfdf6c10 --- /dev/null +++ b/src/mathed/math_scopeinset.h @@ -0,0 +1,29 @@ +// -*- C++ -*- +#ifndef MATH_SCOPEINSET_H +#define MATH_SCOPEINSET_H + +#include "math_nestinset.h" + +#ifdef __GNUG__ +#pragma interface +#endif + +/** An inset for new scopes (i.e. {....} blocks in LaTeX) + \author André Pönitz + */ +class MathScopeInset : public MathNestInset { +public: + /// + MathScopeInset(); + /// + MathInset * clone() const; + /// + void draw(Painter &, int x, int y) const; + /// + void write(std::ostream &, bool fragile) const; + /// + void writeNormal(std::ostream &) const; + /// + void metrics(MathStyles st) const; +}; +#endif