X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_arrayinset.C;h=d785b4cede6cb2707d87007380641cd5d78c058f;hb=c649284611c4198c9d70be8a16d153cdf1ec0700;hp=8e49f00026bf3dabfa2debaeca619fa944f7e68f;hpb=7435fca771bf7c8b4ca5d1801162f8c23112f3cf;p=lyx.git diff --git a/src/mathed/math_arrayinset.C b/src/mathed/math_arrayinset.C index 8e49f00026..d785b4cede 100644 --- a/src/mathed/math_arrayinset.C +++ b/src/mathed/math_arrayinset.C @@ -1,46 +1,108 @@ +#include + #ifdef __GNUG__ #pragma implementation #endif #include "math_arrayinset.h" -#include "support/LOstream.h" +#include "math_parser.h" +#include "math_mathmlstream.h" +#include "math_streamstr.h" +#include "Lsstream.h" + +#include + +using std::vector; +using std::istringstream; +using std::getline; +using std::istream_iterator; + + +MathArrayInset::MathArrayInset(string const & name, int m, int n) + : MathGridInset(m, n), name_(name) +{} -MathArrayInset::MathArrayInset(int m, int n) - : MathGridInset(m, n) +MathArrayInset::MathArrayInset(string const & name, int m, int n, + char valign, string const & halign) + : MathGridInset(m, n, valign, halign), name_(name) {} +MathArrayInset::MathArrayInset(string const & name, char valign, + string const & halign) + : MathGridInset(valign, halign), name_(name) +{} + + +MathArrayInset::MathArrayInset(string const & name, string const & str) + : MathGridInset(1, 1), name_(name) +{ + vector< vector > dat; + istringstream is(str.c_str()); + string line; + while (getline(is, line)) { + istringstream ls(line.c_str()); + typedef istream_iterator iter; + vector v = vector(iter(ls), iter()); + if (v.size()) + dat.push_back(v); + } + + for (row_type row = 1; row < dat.size(); ++row) + addRow(0); + for (col_type col = 1; col < dat[0].size(); ++col) + addCol(0); + for (row_type row = 0; row < dat.size(); ++row) + for (col_type col = 0; col < dat[0].size(); ++col) + mathed_parse_cell(cell(index(row, col)), dat[row][col]); +} + + MathInset * MathArrayInset::clone() const { return new MathArrayInset(*this); } -void MathArrayInset::write(std::ostream & os, bool fragile) const +void MathArrayInset::metrics(MathMetricsInfo & mi) const { - if (fragile) + MathMetricsInfo m = mi; + if (m.base.style == LM_ST_DISPLAY) + m.base.style = LM_ST_TEXT; + MathGridInset::metrics(m); +} + + +void MathArrayInset::write(WriteStream & os) const +{ + if (os.fragile()) os << "\\protect"; - os << "\\begin{array}"; + os << "\\begin{" << name_ << "}"; - if (v_align_ == 't' || v_align_ == 'b') + if (v_align_ == 't' || v_align_ == 'b') os << '[' << char(v_align_) << ']'; + os << '{' << halign() << "}\n"; - os << '{'; - for (unsigned int col = 0; col < ncols(); ++col) - os << colinfo_[col].align_; - os << "}\n"; - - MathGridInset::write(os, fragile); + MathGridInset::write(os); - if (fragile) + if (os.fragile()) os << "\\protect"; - os << "\\end{array}\n"; + os << "\\end{" << name_ << "}\n"; } -void MathArrayInset::metrics(MathStyles st) const +void MathArrayInset::normalize(NormalStream & os) const { - MathGridInset::metrics(st == LM_ST_DISPLAY ? LM_ST_TEXT : st); + os << "[" << name_ << " "; + MathGridInset::normalize(os); + os << "]"; } + +void MathArrayInset::maplize(MapleStream & os) const +{ + os << "array("; + MathGridInset::maplize(os); + os << ")"; +}