]> git.lyx.org Git - features.git/commitdiff
proper support for \underset
authorAndré Pönitz <poenitz@gmx.net>
Fri, 1 Feb 2002 10:33:06 +0000 (10:33 +0000)
committerAndré Pönitz <poenitz@gmx.net>
Fri, 1 Feb 2002 10:33:06 +0000 (10:33 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3469 a592a061-630c-0410-9148-cb99ea01b6c8

src/mathed/ChangeLog
src/mathed/Makefile.am
src/mathed/math_factory.C
src/mathed/math_hash.C
src/mathed/math_parser.h
src/mathed/math_undersetinset.C [new file with mode: 0644]
src/mathed/math_undersetinset.h [new file with mode: 0644]

index 8f23294ecf927473c488cae5f40b729355510403..487cecde8927e16762160015866ca7a2c4567743 100644 (file)
@@ -1,3 +1,7 @@
+2002-02-01  André Pönitz <poenitz@gmx.net>
+
+       * math_undersetinset.[Ch]: implement direct support for \underset
+
 2002-01-28  Martin Vermeer <martin.vermeer@hut.fi>
 
        * math_support.C: removed the arrays latex_mathstyle[] and
@@ -74,7 +78,6 @@
 
        * math_sizeinset.[Ch]: support for \displaystyle etc
 
-
 2001-12-18  Dekel Tsur  <dekelts@tau.ac.il>
 
        * math_macrotable.C (builtinMacros): Adjust kern values.
index ff6bc1a6e5b0f79e97dc61653110b6384584a9b4..b932fc218250af0c9f6761c13fe6691fbc57932f 100644 (file)
@@ -125,5 +125,7 @@ libmathed_la_SOURCES = \
        math_symbolinset.h \
        math_unknowninset.C \
        math_unknowninset.h \
+       math_undersetinset.C \
+       math_undersetinset.h \
        math_xdata.C \
        math_xdata.h
index a032db44a4034e8921fec149ec7103c079639385..be16ec7499894e54a1c26daaf32d9a06ff43e9e4 100644 (file)
@@ -21,6 +21,7 @@
 #include "math_sqrtinset.h"
 #include "math_stackrelinset.h"
 #include "math_symbolinset.h"
+#include "math_undersetinset.h"
 #include "math_unknowninset.h"
 
 
@@ -41,6 +42,8 @@ MathAtom createMathInset(latexkeys const * l)
                return MathAtom(new MathSymbolInset(l));
        case LM_TK_STACK:
                return MathAtom(new MathStackrelInset);
+       case LM_TK_UNDERSET:
+               return MathAtom(new MathUndersetInset);
        case LM_TK_KERN: 
                return MathAtom(new MathKernInset);
        case LM_TK_BINOM:
index d99375d32ddf1496f1f430ce7656a44ba817754c..503a0ecbee12a5391457bf74014c81d8c887c19a 100644 (file)
@@ -138,6 +138,7 @@ key_type wordlist_array[] =
        {"underbar",  LM_TK_DECORATION, 0},
        {"underbrace",  LM_TK_DECORATION, 0},
        {"underline",  LM_TK_DECORATION, 0},
+       {"underset",  LM_TK_UNDERSET, 0},
        {"vdots",  LM_TK_DOTS, 0},
        {"vec",  LM_TK_DECORATION, 0},
        {"widehat",  LM_TK_DECORATION, 0},
index d641de67f4937bfa8c7357a88c0a97b172ddc556..05a936af8928a552b371bbd10dbd9392d6ede67a 100644 (file)
@@ -110,6 +110,8 @@ enum MathTokenEnum
        ///
        LM_TK_KERN,
        ///
+       LM_TK_UNDERSET,
+       ///
        LM_TK_STACK
 };
 
diff --git a/src/mathed/math_undersetinset.C b/src/mathed/math_undersetinset.C
new file mode 100644 (file)
index 0000000..5e42606
--- /dev/null
@@ -0,0 +1,50 @@
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "math_undersetinset.h"
+#include "math_mathmlstream.h"
+#include "math_support.h"
+
+
+MathUndersetInset::MathUndersetInset()
+{}
+
+
+MathInset * MathUndersetInset::clone() const
+{   
+       return new MathUndersetInset(*this);
+}
+
+
+void MathUndersetInset::metrics(MathMetricsInfo const & mi) const
+{
+       MathMetricsInfo m = mi;
+       smallerStyleFrac(m);
+       xcell(0).metrics(m);
+       xcell(1).metrics(mi);
+       width_   = std::max(xcell(0).width(), xcell(1).width()) + 4; 
+       ascent_  = xcell(1).ascent();
+       descent_ = xcell(1).descent() + xcell(0).height() + 4;
+}
+
+
+void MathUndersetInset::draw(Painter & pain, int x, int y) const
+{
+       int m  = x + width() / 2;
+       int yo = y + xcell(1).descent() + xcell(0).ascent() + 1;
+       xcell(0).draw(pain, m - xcell(0).width() / 2, yo);
+       xcell(1).draw(pain, m - xcell(1).width() / 2, y);
+}
+
+
+void MathUndersetInset::write(WriteStream & os) const
+{
+       os << "\\underset{" << cell(0) << "}{" << cell(1) << '}';
+}
+
+
+void MathUndersetInset::normalize(NormalStream & os) const
+{
+       os << "[underset " << cell(0) << ' ' << cell(1) << ']';
+}
diff --git a/src/mathed/math_undersetinset.h b/src/mathed/math_undersetinset.h
new file mode 100644 (file)
index 0000000..bfb66fe
--- /dev/null
@@ -0,0 +1,31 @@
+// -*- C++ -*-
+#ifndef MATH_UNDERSETINSET_H
+#define MATH_UNDERSETINSET_H
+
+#include "math_fracbase.h"
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+/** Underset objects 
+    \author André Pönitz
+ */
+class MathUndersetInset : public MathFracbaseInset {
+public:
+       ///
+       MathUndersetInset();
+       ///
+       MathInset * clone() const;
+       ///
+       void metrics(MathMetricsInfo const & st) const;
+       ///
+       void draw(Painter &, int x, int y) const;
+
+       ///
+       void write(WriteStream & os) const;
+       ///
+       void normalize(NormalStream &) const;
+};
+
+#endif