From c325dd2bd598a360334a3eb1ea57322baf05a2b6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20P=C3=B6nitz?= Date: Mon, 6 Aug 2001 06:23:09 +0000 Subject: [PATCH] Oooooops git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2423 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/mathed/math_charinset.C | 99 +++++++++++++++++++++++++++++++++++++ src/mathed/math_charinset.h | 42 ++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 src/mathed/math_charinset.C create mode 100644 src/mathed/math_charinset.h diff --git a/src/mathed/math_charinset.C b/src/mathed/math_charinset.C new file mode 100644 index 0000000000..7316603ade --- /dev/null +++ b/src/mathed/math_charinset.C @@ -0,0 +1,99 @@ +#ifdef __GNUG__ +#pragma implementation +#endif + +#include "math_charinset.h" +#include "LColor.h" +#include "Painter.h" +#include "support/LOstream.h" +#include "mathed/support.h" +#include "math_parser.h" +#include "debug.h" + + +MathCharInset::MathCharInset(char c, MathTextCodes t) + : char_(c) +{ + code(t); +} + + +MathInset * MathCharInset::clone() const +{ + return new MathCharInset(*this); +} + + +int MathCharInset::ascent() const +{ + return mathed_char_ascent(code_, size(), char_); +} + + +int MathCharInset::descent() const +{ + return mathed_char_descent(code_, size(), char_); +} + + +int MathCharInset::width() const +{ + return mathed_char_width(code_, size(), char_); +} + + +void MathCharInset::draw(Painter & pain, int x, int y) +{ + xo(x); + yo(y); + drawChar(pain, code_, size_, x, y, char_); +} + + +void MathCharInset::write(std::ostream & os, bool) const +{ + int brace = 0; + + if (MathIsSymbol(code_)) { + latexkeys const * l = lm_get_key_by_id(char_, LM_TK_SYM); + + if (l == 0) + l = lm_get_key_by_id(char_, LM_TK_BIGSYM); + + if (l) { + os << '\\' << l->name << ' '; + } else { + lyxerr << "Could not find the LaTeX name for " + << char_ << " and code_ " << code_ << "!" << std::endl; + } + } else { + if (code_ >= LM_TC_RM && code_ <= LM_TC_TEXTRM) + os << '\\' << math_font_name[code_ - LM_TC_RM] << '{'; + + // Is there a standard logical XOR? + if ((code_ == LM_TC_TEX && char_ != '{' && char_ != '}') || + (code_ == LM_TC_SPECIAL)) + os << '\\'; + else { + if (char_ == '{') + ++brace; + if (char_ == '}') + --brace; + } + if (char_ == '}' && code_ == LM_TC_TEX && brace < 0) + lyxerr <<"Math warning: Unexpected closing brace.\n"; + else + os << char_; + } + + if (code_ >= LM_TC_RM && code_ <= LM_TC_TEXTRM) + os << '}'; +} + + +void MathCharInset::writeNormal(std::ostream & os) const +{ + os << "[sqrt "; + cell(0).writeNormal(os); + os << "] "; +} diff --git a/src/mathed/math_charinset.h b/src/mathed/math_charinset.h new file mode 100644 index 0000000000..718faab5b5 --- /dev/null +++ b/src/mathed/math_charinset.h @@ -0,0 +1,42 @@ +// -*- C++ -*- +#ifndef MATH_CHARINSET_H +#define MATH_CHARINSET_H + +#include "math_inset.h" + +#ifdef __GNUG__ +#pragma interface +#endif + +/** The base character inset. + \author André Pönitz + */ + +class MathCharInset : public MathInset { +public: + /// + MathCharInset(char c, MathTextCodes t); + /// + MathInset * clone() const; + /// + void draw(Painter &, int x, int baseline); + /// + void write(std::ostream &, bool fragile) const; + /// + void writeNormal(std::ostream &) const; + /// + int ascent() const; + /// + int descent() const; + /// + int width() const; + /// identifies Charinsets + bool isCharInset() const { return true; } + /// + char getChar() const { return char_; } + +private: + /// the character + char char_; +}; +#endif -- 2.39.2