mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 18:08:10 +00:00
f96b99dcb3
These are now properties of insets that can be operators : InsetMathSymbols, InsetMathDecoration (for over/underbrace) and InsetMathMacro (for its contents). Each of these has a limit_ member that allows to remember a limit forcing and a member defaultLimits() that indicates what to do in the absence of such forcing. Moreover the write() method calls writeLimits(). This allows to simplify the definitions of integrals in lib/symbols by defining the integrals as macros of their "op" version, as it is done in the style files. Also, many hardcoded assumptions can now be removed. The handling of LFUN_MATH_LIMITS is now done in InsetNest, which tries successively to apply the limit change to (1) the character after cursor, (2) the character before cursor and (3) the character at the end of the inset (useful for script insets?) The new code allows to define \newcommand\int{\intop\limits} but not \newcommand\makelimits#1{#1\limits} It is also possible to type explicitly \limits or \nolimits to modify a symbol.
81 lines
1.8 KiB
C++
81 lines
1.8 KiB
C++
// -*- C++ -*-
|
|
/**
|
|
* \file InsetMathDecoration.h
|
|
* This file is part of LyX, the document processor.
|
|
* Licence details can be found in the file COPYING.
|
|
*
|
|
* \author Alejandro Aguilar Sierra
|
|
* \author André Pönitz
|
|
*
|
|
* Full author contact details are available in file CREDITS.
|
|
*/
|
|
|
|
#ifndef MATH_DECORATIONINSET_H
|
|
#define MATH_DECORATIONINSET_H
|
|
|
|
#include "InsetMathNest.h"
|
|
|
|
|
|
namespace lyx {
|
|
|
|
class latexkeys;
|
|
|
|
/// Decorations and accents over (below) a math object
|
|
class InsetMathDecoration : public InsetMathNest {
|
|
public:
|
|
///
|
|
explicit InsetMathDecoration(Buffer * buf, latexkeys const * key);
|
|
///
|
|
mode_type currentMode() const;
|
|
///
|
|
void draw(PainterInfo &, int x, int y) const;
|
|
///
|
|
void write(WriteStream & os) const;
|
|
///
|
|
void metrics(MetricsInfo & mi, Dimension & dim) const;
|
|
///
|
|
void normalize(NormalStream & os) const;
|
|
///
|
|
void infoize(odocstream & os) const;
|
|
///
|
|
MathClass mathClass() const;
|
|
/// The default limits value
|
|
Limits defaultLimits() const { return allowsLimitsChange() ? LIMITS : NO_LIMITS; }
|
|
/// whether the inset has limit-like sub/superscript
|
|
Limits limits() const { return limits_; }
|
|
/// sets types of sub/superscripts
|
|
void limits(Limits lim) { limits_ = lim; }
|
|
///
|
|
void validate(LaTeXFeatures & features) const;
|
|
///
|
|
InsetCode lyxCode() const { return MATH_DECORATION_CODE; }
|
|
///
|
|
void mathmlize(MathStream &) const;
|
|
///
|
|
void htmlize(HtmlStream &) const;
|
|
private:
|
|
virtual Inset * clone() const;
|
|
///
|
|
bool upper() const;
|
|
///
|
|
bool protect() const;
|
|
/// is it a wide decoration?
|
|
bool wide() const;
|
|
|
|
///
|
|
latexkeys const * key_;
|
|
///
|
|
Limits limits_ = AUTO_LIMITS;
|
|
// FIXME: this should depend on BufferView
|
|
/// height cache of deco
|
|
mutable int dh_ = 0;
|
|
/// vertical offset cache of deco
|
|
mutable int dy_ = 0;
|
|
/// width for non-wide deco
|
|
mutable int dw_ = 0;
|
|
};
|
|
|
|
} // namespace lyx
|
|
|
|
#endif
|