From 1555e4c27c6a4ff88f100b312a919fa223b1672a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20P=C3=B6nitz?= Date: Fri, 17 Aug 2001 17:50:00 +0000 Subject: [PATCH] some support for \atop git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2542 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/mathed/math_cursor.C | 2 +- src/mathed/math_factory.C | 2 ++ src/mathed/math_fracinset.C | 29 +++++++++++++++++++++-------- src/mathed/math_fracinset.h | 8 +++++++- src/mathed/math_hash.C | 1 + src/mathed/math_parser.C | 2 +- src/mathed/math_parser.h | 2 ++ 7 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/mathed/math_cursor.C b/src/mathed/math_cursor.C index 935b4b9df0..7cfaa77b20 100644 --- a/src/mathed/math_cursor.C +++ b/src/mathed/math_cursor.C @@ -1188,7 +1188,7 @@ void MathCursor::interpret(string const & s) return; } - if (s == "\\over" || s == "\\choose") { + if (s == "\\over" || s == "\\choose" || s == "\\atop") { MathArray ar = array(); MathInset * p = createMathInset(in_word_set(s.substr(1))); p->cell(0).swap(array()); diff --git a/src/mathed/math_factory.C b/src/mathed/math_factory.C index 9128279744..57ed1e1d97 100644 --- a/src/mathed/math_factory.C +++ b/src/mathed/math_factory.C @@ -39,6 +39,8 @@ MathInset * createMathInset(latexkeys const * l) case LM_TK_OVER: case LM_TK_FRAC: return new MathFracInset; + case LM_TK_ATOP: + return new MathFracInset(true); case LM_TK_NOT: return new MathNotInset; case LM_TK_SQRT: diff --git a/src/mathed/math_fracinset.C b/src/mathed/math_fracinset.C index 6f6853f31e..e4e08935ed 100644 --- a/src/mathed/math_fracinset.C +++ b/src/mathed/math_fracinset.C @@ -8,7 +8,8 @@ #include "support/LOstream.h" -MathFracInset::MathFracInset() +MathFracInset::MathFracInset(bool atop) + : atop_(atop) {} @@ -36,23 +37,35 @@ void MathFracInset::draw(Painter & pain, int x, int y) const int m = x + width() / 2; xcell(0).draw(pain, m - xcell(0).width() / 2, y - xcell(0).descent() - 3 - 5); xcell(1).draw(pain, m - xcell(1).width() / 2, y + xcell(1).ascent() + 3 - 5); - pain.line(x + 2, y - 5, x + width() - 4, y - 5, LColor::mathline); + if (!atop_) + pain.line(x + 2, y - 5, x + width() - 4, y - 5, LColor::mathline); } void MathFracInset::write(std::ostream & os, bool fragile) const { - os << "\\frac{"; - cell(0).write(os, fragile); - os << "}{"; - cell(1).write(os, fragile); - os << '}'; + if (atop_) { + os << "{"; + cell(0).write(os, fragile); + os << "\\atop "; + cell(1).write(os, fragile); + os << '}'; + } else { + os << "\\frac{"; + cell(0).write(os, fragile); + os << "}{"; + cell(1).write(os, fragile); + os << '}'; + } } void MathFracInset::writeNormal(std::ostream & os) const { - os << "[frac "; + if (atop_) + os << "[atop "; + else + os << "[frac "; cell(0).writeNormal(os); os << " "; cell(1).writeNormal(os); diff --git a/src/mathed/math_fracinset.h b/src/mathed/math_fracinset.h index 9e0031c57b..5db6f340c7 100644 --- a/src/mathed/math_fracinset.h +++ b/src/mathed/math_fracinset.h @@ -14,7 +14,7 @@ class MathFracInset : public MathFracbaseInset { public: /// - MathFracInset(); + explicit MathFracInset(bool atop = false); /// MathInset * clone() const; /// @@ -25,6 +25,12 @@ public: void metrics(MathStyles st) const; /// void draw(Painter &, int x, int y) const; +public: + /// + char const name() const; + + /// + const bool atop_; }; #endif diff --git a/src/mathed/math_hash.C b/src/mathed/math_hash.C index fc6262be97..01ce7c409d 100644 --- a/src/mathed/math_hash.C +++ b/src/mathed/math_hash.C @@ -67,6 +67,7 @@ latexkeys wordlist[] = {"arctan", LM_TK_FUNC, 0, LMB_NONE}, {"arg", LM_TK_FUNC, 0, LMB_NONE}, {"asymp", LM_TK_NOGLYPH, 0, LMB_RELATION}, + {"atop", LM_TK_ATOP, 0, LMB_NONE}, {"backslash", LM_TK_SPECIAL, '\\', LMB_NONE}, {"bar", LM_TK_DECORATION, LM_bar, LMB_NONE}, {"begin", LM_TK_BEGIN, 0, LMB_NONE}, diff --git a/src/mathed/math_parser.C b/src/mathed/math_parser.C index 0225ed3ea2..e17c420838 100644 --- a/src/mathed/math_parser.C +++ b/src/mathed/math_parser.C @@ -820,7 +820,7 @@ void Parser::parse_into(MathArray & array, unsigned flags) //curr_label_ = getArg('{', '}'); } - else if (t.cs() == "choose" || t.cs() == "over") { + else if (t.cs() == "choose" || t.cs() == "over" || t.cs() == "atop") { limits = 0; MathInset * p = createMathInset(t.cs()); p->cell(0).swap(array); diff --git a/src/mathed/math_parser.h b/src/mathed/math_parser.h index f55473d282..f1ad6a87b5 100644 --- a/src/mathed/math_parser.h +++ b/src/mathed/math_parser.h @@ -43,6 +43,8 @@ enum MathTokenEnum /// LM_TK_BINOM, /// + LM_TK_ATOP, + /// LM_TK_OVER, /// LM_TK_FRAC,