#ifdef __GNUG__ #pragma implementation #endif #include "math_deliminset.h" #include "math_parser.h" #include "mathed/support.h" #include "support/LOstream.h" MathDelimInset::MathDelimInset(latexkeys const * l, latexkeys const * r) : MathNestInset(1), left_(l), right_(r) {} MathInset * MathDelimInset::clone() const { return new MathDelimInset(*this); } string MathDelimInset::latexName(latexkeys const * l) { //static const string vdelim("(){}[]./|"); string name = l->name; if (name == "(") return name; if (name == "[") return name; if (name == ".") return name; if (name == ")") return name; if (name == "]") return name; if (name == "/") return name; if (name == "|") return name; return "\\" + name + " "; } void MathDelimInset::write(std::ostream & os, bool fragile) const { os << "\\left" << latexName(left_); cell(0).write(os, fragile); os << "\\right" << latexName(right_); } int MathDelimInset::dw() const { int w = height() / 5; if (w > 15) w = 15; if (w < 4) w = 4; return w; } void MathDelimInset::metrics(MathStyles st) const { xcell(0).metrics(st); size_ = st; ascent_ = std::max(xcell(0).ascent(), mathed_char_ascent(LM_TC_VAR, st,'I')); descent_ = xcell(0).descent(); width_ = xcell(0).width() + 2 * dw() + 4; } void MathDelimInset::draw(Painter & pain, int x, int y) const { xo(x); yo(y); int const w = dw(); int const b = y - ascent_ - 2; xcell(0).draw(pain, x + w + 2, y); mathed_draw_deco(pain, x, b, w, height() + 4, left_); mathed_draw_deco(pain, x + width() - w, b, w, height() + 4, right_); }