lyx_mirror/src/mathed/InsetMathSymbol.h
Jean-Marc Lasgouttes 65a6cc1fc3 Cleanup of spacing in mathed
This is a first cleanup step. More complex rules have to be
implemented on top of this.

Use proper spacing \thinmuskip, \medmuskip and \thickmuskip instead of
ad-hoc values.

Rename isRelOp to isMathRel and introduce isMathBin and isMathPunct
(for InsetMathChar and InsetMathSymbol). Update the categories of
characters in InsetMathChar according to LaTeX source (fontmath.ltx).

Set correctly the spacing around mathrel, mathbin and mathpunct
elements. Use \thinmuskip around MathDelim instead of a hardcoded 4.

This is related to bug #8883.
2016-05-29 17:55:55 -04:00

100 lines
2.2 KiB
C++

// -*- C++ -*-
/**
* \file InsetMathSymbol.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author André Pönitz
*
* Full author contact details are available in file CREDITS.
*/
#ifndef MATH_SYMBOLINSET_H
#define MATH_SYMBOLINSET_H
#include "InsetMath.h"
namespace lyx {
class latexkeys;
/** "normal" symbols that don't take limits and don't grow in displayed
* formulae.
*/
class InsetMathSymbol : public InsetMath {
public:
///
explicit InsetMathSymbol(latexkeys const * l);
///
explicit InsetMathSymbol(char const * name);
///
explicit InsetMathSymbol(docstring const & name);
///
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo &, int x, int y) const;
///
int kerning(BufferView const *) const { return kerning_; }
///
mode_type currentMode() const;
///
bool isMathRel() const;
///
bool isMathBin() const;
///
bool isMathPunct() const;
///
bool isOrdAlpha() const;
/// do we take scripts?
bool isScriptable() const;
/// do we take \limits or \nolimits?
bool takesLimits() const;
/// identifies SymbolInset as such
InsetMathSymbol const * asSymbolInset() const { return this; }
/// the LaTeX name of the symbol (without the backslash)
docstring name() const;
/// request "external features"
void validate(LaTeXFeatures & features) const;
///
void normalize(NormalStream &) const;
///
void maple(MapleStream &) const;
///
void maxima(MaximaStream &) const;
///
void mathematica(MathematicaStream &) const;
///
void mathmlize(MathStream &) const;
///
void htmlize(HtmlStream &) const;
/// \param spacing controls whether we print spaces around
/// "operator"-type symbols or just print them raw
void htmlize(HtmlStream &, bool spacing) const;
///
void octave(OctaveStream &) const;
///
void write(WriteStream & os) const;
///
void infoize2(odocstream & os) const;
///
InsetCode lyxCode() const { return MATH_SYMBOL_CODE; }
private:
virtual Inset * clone() const;
///
latexkeys const * sym_;
///
mutable int h_;
/// cached superscript kerning
mutable int kerning_;
///
mutable bool scriptable_;
};
} // namespace lyx
#endif