X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMathScript.h;h=bc048e2f1c2f61ab30c44e5c3a734d8a891127b3;hb=21c92c8a129b5f3ff56de33bf2941a25967cffbb;hp=067241773e70d8a9751e957945abc709c03d8d84;hpb=6c300f72a217722652dc27db9108e1050028979c;p=lyx.git diff --git a/src/mathed/InsetMathScript.h b/src/mathed/InsetMathScript.h index 067241773e..bc048e2f1c 100644 --- a/src/mathed/InsetMathScript.h +++ b/src/mathed/InsetMathScript.h @@ -4,7 +4,7 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author André Pönitz + * \author André Pönitz * * Full author contact details are available in file CREDITS. */ @@ -25,14 +25,16 @@ namespace lyx { class InsetMathScript : public InsetMathNest { public: /// create inset without scripts - InsetMathScript(); + explicit InsetMathScript(Buffer * buf); /// create inset with single script - explicit InsetMathScript(bool up); + explicit InsetMathScript(Buffer * buf, bool up); /// create inset with single script and given nucleus - InsetMathScript(MathAtom const & at, bool up); + InsetMathScript(Buffer * buf, MathAtom const & at, bool up); /// mode_type currentMode() const { return MATH_MODE; } /// + MathClass mathClass() const; + /// void metrics(MetricsInfo & mi, Dimension & dim) const; /// void draw(PainterInfo & pi, int x, int y) const; @@ -41,16 +43,14 @@ public: /// void drawT(TextPainter & pi, int x, int y) const; - /// move cursor left - bool idxLeft(LCursor & cur) const; - /// move cursor right - bool idxRight(LCursor & cur) const; + /// move cursor backwards + bool idxBackward(Cursor & cur) const; + /// move cursor forward + bool idxForward(Cursor & cur) const; /// move cursor up or down - bool idxUpDown(LCursor & cur, bool up) const; - /// Target pos when we enter the inset from the left by pressing "Right" - bool idxFirst(LCursor & cur) const; - /// Target pos when we enter the inset from the right by pressing "Left" - bool idxLast(LCursor & cur) const; + bool idxUpDown(Cursor & cur, bool up) const; + /// The index of the cell entered while moving backward + size_type lastIdx() const { return 0; } /// write LaTeX and Lyx code void write(WriteStream & os) const; @@ -60,8 +60,10 @@ public: void maple(MapleStream &) const; /// write content as something readable by Mathematica void mathematica(MathematicaStream &) const; - /// write content as something resembling MathML - void mathmlize(MathMLStream &) const; + /// write content as MathML + void mathmlize(MathStream &) const; + /// write content as HTML + void htmlize(HtmlStream &) const; /// write content as something readable by Octave void octave(OctaveStream &) const; @@ -70,22 +72,18 @@ public: /// InsetMathScript * asScriptInset(); - /// set limits - void limits(int lim) { limits_ = lim; } - /// get limits - int limits() const { return limits_; } /// returns subscript. Always run 'hasDown' or 'has(false)' before! - MathArray const & down() const; + MathData const & down() const; /// returns subscript. Always run 'hasDown' or 'has(false)' before! - MathArray & down(); + MathData & down(); /// returns superscript. Always run 'hasUp' or 'has(true)' before! - MathArray const & up() const; + MathData const & up() const; /// returns superscript. Always run 'hasUp' or 'has(true)' before! - MathArray & up(); + MathData & up(); /// returns nucleus - MathArray const & nuc() const; + MathData const & nuc() const; /// returns nucleus - MathArray & nuc(); + MathData & nuc(); /// do we have a superscript? bool hasUp() const; /// do we have a subscript? @@ -99,41 +97,50 @@ public: /// make sure a script is accessible void ensure(bool up); /// say that we have scripts - void infoize(std::ostream & os) const; + void infoize(odocstream & os) const; /// say whether we have displayed limits - void infoize2(std::ostream & os) const; -protected: - virtual void doDispatch(LCursor & cur, FuncRequest & cmd); + void infoize2(odocstream & os) const; + /// + InsetCode lyxCode() const { return MATH_SCRIPT_CODE; } + /// + void validate(LaTeXFeatures &features) const; private: - virtual std::auto_ptr doClone() const; + virtual Inset * clone() const; /// returns x offset for main part - int dxx() const; + int dxx(BufferView const & bv) const; /// returns width of nucleus if any - int nwid() const; + int nwid(BufferView const &) const; + /// returns y offset for either superscript or subscript + int dy01(BufferView const &, int asc, int des, int what) const; /// returns y offset for superscript - int dy0() const; + int dy0(BufferView const &) const; /// returns y offset for subscript - int dy1() const; + int dy1(BufferView const &) const; /// returns x offset for superscript - int dx0() const; + int dx0(BufferView const & bv) const; /// returns x offset for subscript - int dx1() const; + int dx1(BufferView const & bv) const; /// returns ascent of nucleus if any - int nasc() const; + int nasc(BufferView const &) const; /// returns descent of nucleus if any - int ndes() const; - /// where do we have to draw the scripts? - bool hasLimits() const; + int ndes(BufferView const &) const; + /// Italic correction: amount of displacement between subscript and + /// superscript in math mode as per Appendix G, rule 18f. A positive value + /// shifts the superscript to the right, and a negative value shifts the + /// subscript to the left. + int nker(BufferView const * bv) const; + /// do we we have to draw the scripts above/below nucleus? + bool hasLimits(FontInfo const &) const; /// clean up empty cells and return true if a cell has been deleted. - bool notifyCursorLeaves(LCursor & cur); + bool notifyCursorLeaves(Cursor const & old, Cursor & cur); /// possible subscript (index 0) and superscript (index 1) bool cell_1_is_up_; - /// 1 - "limits", -1 - "nolimits", 0 - "default" - int limits_; + /// remember whether we are in display mode (used by mathml output) + mutable bool has_limits_ = false; }; - } // namespace lyx + #endif