--- /dev/null
+#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 << "] ";
+}
--- /dev/null
+// -*- 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