X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_parinset.C;h=ae43ae750f15dc9641ea2f0641e91bcca957c7d3;hb=a7bfe9d7f1c112e4d502aaa9e7262f1866d723f7;hp=1a0e01b25dd4cc1cbd0ad11881747762ef445bc7;hpb=04a2d2ddb034ebc2eaff92997d078eee5d5805fe;p=lyx.git diff --git a/src/mathed/math_parinset.C b/src/mathed/math_parinset.C index 1a0e01b25d..ae43ae750f 100644 --- a/src/mathed/math_parinset.C +++ b/src/mathed/math_parinset.C @@ -1,5 +1,9 @@ #include +#ifdef __GNUG__ +#pragma implementation +#endif + #include "math_parinset.h" #include "math_iter.h" #include "array.h" @@ -35,11 +39,6 @@ MathParInset::MathParInset(short st, string const & nm, short ot) } -MathParInset::~MathParInset() -{ -} - - MathedInset * MathParInset::Clone() { return new MathParInset(*this); @@ -72,81 +71,85 @@ MathParInset::draw(Painter & pain, int x, int y) bool limits = false; xo_ = x; - yo_ = y; + yo_ = y; + MathedXIter data(this); if (array.empty()) { - MathedXIter data(this); + //MathedXIter data(this); data.GetPos(x, y); - pain.rectangle(x, y - df_asc, df_width, df_asc, LColor::mathline); + pain.rectangle(x, y - df_asc, df_width, df_asc, + LColor::mathline); return; - } - MathedXIter data(this); + } + //MathedXIter data(this); data.GoBegin(); while (data.OK()) { data.GetPos(x, y); - byte cx = data.GetChar(); + byte const cx = data.GetChar(); if (cx >= ' ') { - string s = data.GetString(); + string const s = data.GetString(); drawStr(pain, data.fcode(), size(), x, y, s); mathed_char_height(LM_TC_CONST, size(), 'y', asc, des); limits = false; - } - else { - if (cx == 0) - break; - if (MathIsInset(cx)) { - int yy = y; - MathedInset * p = data.GetInset(); - if (cx == LM_TC_UP) { - if (limits) { - x -= (xp>p->Width()) ? p->Width()+(xp-p->Width())/2: xp; - yy -= (asc + p->Descent()+4); - } - else - yy -= (p->Descent()>asc) ? p->Descent()+4: asc; - } - else if (cx == LM_TC_DOWN) { - if (limits) { - x -= (xp>p->Width()) ? p->Width()+(xp-p->Width())/2: xp; - yy += des + p->Ascent() + 2; - } else - yy += des + p->Ascent()/2; - } - else { - asc = p->Ascent(); - des = p->Descent(); - } - p->draw(pain, x, yy); - if (cx!= LM_TC_UP && cx!= LM_TC_DOWN) { - limits = p->GetLimits(); - if (limits) - xp = p->Width(); - } - data.Next(); + } else if (cx == 0) { + break; + } else if (MathIsInset(cx)) { + int yy = y; + MathedInset * p = data.GetInset(); + if (cx == LM_TC_UP) { + if (limits) { + x -= (xp > p->Width()) ? + p->Width() + (xp - p->Width()) / 2 : xp; + yy -= (asc + p->Descent() + 4); + } else + yy -= (p->Descent() > asc) ? + p->Descent() + 4 : asc; + } else if (cx == LM_TC_DOWN) { + if (limits) { + x -= (xp > p->Width()) ? + p->Width() + (xp - p->Width()) / 2 : xp; + yy += des + p->Ascent() + 2; + } else + yy += des + p->Ascent() / 2; + } else { + asc = p->Ascent(); + des = p->Descent(); } - else if (cx == LM_TC_TAB) { - if (cxp == cx || cxp == LM_TC_CR || data.IsFirst()) { - pain.rectangle(x, y - df_asc, df_width, df_asc, LColor::mathline); - } - data.Next(); - limits = false; + p->draw(pain, x, yy); + if (cx != LM_TC_UP && cx != LM_TC_DOWN) { + limits = p->GetLimits(); + if (limits) + xp = p->Width(); } - else if (cx == LM_TC_CR) { - if (cxp == LM_TC_TAB || cxp == LM_TC_CR || data.IsFirst()) { - pain.rectangle(x, y - df_asc, df_width, df_asc, LColor::mathline); - } - data.Next(); - limits = false; + data.Next(); + } else if (cx == LM_TC_TAB) { + if (cxp == cx + || cxp == LM_TC_CR || data.IsFirst()) { + pain.rectangle(x, y - df_asc, + df_width, df_asc, + LColor::mathline); } - else { - lyxerr << "GMathed Error: Unrecognized code[" << cx << "]" << endl; - break; + data.Next(); + limits = false; + } else if (cx == LM_TC_CR) { + if (cxp == LM_TC_TAB + || cxp == LM_TC_CR || data.IsFirst()) { + pain.rectangle(x, y - df_asc, + df_width, df_asc, + LColor::mathline); } + data.Next(); + limits = false; + } else { + lyxerr << "GMathed Error: Unrecognized code[" << cx << "]" << endl; + break; } + cxp = cx; } if (cxp == LM_TC_TAB || cxp == LM_TC_CR) { data.GetPos(x, y); - pain.rectangle(x, y - df_asc, df_width, df_asc, LColor::mathline); + pain.rectangle(x, y - df_asc, df_width, df_asc, + LColor::mathline); } } @@ -175,73 +178,72 @@ MathParInset::Metrics() while (data.OK()) { cx = data.GetChar(); if (cx >= ' ') { - string s = data.GetString(); + string const s = data.GetString(); mathed_string_height(data.fcode(), size(), s, asc, des); if (asc > ascent) ascent = asc; if (des > descent) descent = des; limits = false; mathed_char_height(LM_TC_CONST, size(), 'y', asc, des); - } else - if (MathIsInset(cx)) { - MathedInset * p = data.GetInset(); - p->SetStyle(size()); - p->Metrics(); - if (cx == LM_TC_UP) { - asc += (limits) ? p->Height() + 4: p->Ascent() + - ((p->Descent()>asc) ? p->Descent() - asc + 4: 0); - } else - if (cx == LM_TC_DOWN) { - des += ((limits) ? p->Height() + 4: p->Height() - p->Ascent() / 2); - } else { - asc = p->Ascent(); - des = p->Descent(); - } - if (asc > ascent) ascent = asc; - if (des > descent) descent = des; - if (cx!= LM_TC_UP && cx!= LM_TC_DOWN) - limits = p->GetLimits(); - data.Next(); - } else - if (cx == LM_TC_TAB) { - int x, y; - data.GetIncPos(x, y); - if (data.IsFirst() || cxp == LM_TC_TAB || cxp == LM_TC_CR) { - if (ascentSetStyle(size()); + p->Metrics(); + if (cx == LM_TC_UP) { + asc += (limits) ? p->Height() + 4: p->Ascent() + + ((p->Descent()>asc) ? p->Descent() - asc + 4: 0); + } else if (cx == LM_TC_DOWN) { + des += (limits ? p->Height() + 4 : p->Height() - p->Ascent() / 2); + } else { + asc = p->Ascent(); + des = p->Descent(); + } + if (asc > ascent) ascent = asc; + if (des > descent) descent = des; + if (cx!= LM_TC_UP && cx!= LM_TC_DOWN) + limits = p->GetLimits(); + data.Next(); + } else if (cx == LM_TC_TAB) { + int x; + int y; + data.GetIncPos(x, y); + if (data.IsFirst() || cxp == LM_TC_TAB || cxp == LM_TC_CR) { + if (ascent < df_asc) ascent = df_asc; + tb = x; + } + data.setTab(x - tb, tab); + tb = x; + ++tab; + limits = false; + data.Next(); + } else if (cx == LM_TC_CR) { + if (tb > 0) { + int x; + int y; + data.GetIncPos(x, y); + if (data.IsFirst() || cxp == LM_TC_TAB || cxp == LM_TC_CR) { + if (ascent < df_asc) ascent = df_asc; tb = x; - ++tab; - limits = false; - data.Next(); - } else - if (cx == LM_TC_CR) { - if (tb > 0) { - int x, y; - data.GetIncPos(x, y); - if (data.IsFirst() || cxp == LM_TC_TAB || cxp == LM_TC_CR) { - if (ascent