X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMathHull.cpp;h=78175f3f70d524f1145829c77afc17dbe2f07e05;hb=3561caa3a171a5984ee7a10b7ea82f7f4b7226e8;hp=807475e63aa771ed8381db02f0bc10d6424ed2f0;hpb=7f6f56f40ab4aab138621361ce90953b5f0ccbe4;p=lyx.git diff --git a/src/mathed/InsetMathHull.cpp b/src/mathed/InsetMathHull.cpp index 807475e63a..78175f3f70 100644 --- a/src/mathed/InsetMathHull.cpp +++ b/src/mathed/InsetMathHull.cpp @@ -35,8 +35,8 @@ #include "LaTeXFeatures.h" #include "LyXRC.h" #include "MacroTable.h" -#include "MathMacro.h" -#include "MathMacroTemplate.h" +#include "InsetMathMacro.h" +#include "InsetMathMacroTemplate.h" #include "MetricsInfo.h" #include "output_xhtml.h" #include "Paragraph.h" @@ -126,14 +126,14 @@ namespace { if (os.strikeoutMath()) { if (os.ulemCmd() == WriteStream::UNDERLINE) os << "\\raisebox{-\\belowdisplayshortskip}{" - "\\lyxmathsout{\\parbox[b]{\\columnwidth}{"; + "\\lyxmathsout{\\parbox[b]{\\linewidth}{"; else - os << "\\lyxmathsout{\\parbox{\\columnwidth}{"; + os << "\\lyxmathsout{\\parbox{\\linewidth}{"; } else if (os.ulemCmd() == WriteStream::UNDERLINE) os << "\\raisebox{-\\belowdisplayshortskip}{" - "\\parbox[b]{\\columnwidth}{"; + "\\parbox[b]{\\linewidth}{"; else if (os.ulemCmd() == WriteStream::STRIKEOUT) - os << "\\parbox{\\columnwidth}{"; + os << "\\parbox{\\linewidth}{"; } @@ -151,7 +151,7 @@ namespace { } -} // end anon namespace +} // namespace HullType hullType(docstring const & s) @@ -280,7 +280,7 @@ void InsetMathHull::setBuffer(Buffer & buffer) namespace { const char * counters_to_save[] = {"section", "chapter"}; unsigned int const numcnts = sizeof(counters_to_save)/sizeof(char *); -} +} // namespace void InsetMathHull::updateBuffer(ParIterator const & it, UpdateType utype) @@ -335,7 +335,7 @@ void InsetMathHull::updateBuffer(ParIterator const & it, UpdateType utype) void InsetMathHull::addToToc(DocIterator const & pit, bool output_active, - UpdateType utype) const + UpdateType utype, TocBackend & backend) const { if (!buffer_) { //FIXME: buffer_ should be set at creation for this inset! Problem is @@ -344,15 +344,42 @@ void InsetMathHull::addToToc(DocIterator const & pit, bool output_active, return; } - shared_ptr toc = buffer().tocBackend().toc("equation"); - + TocBuilder & b = backend.builder("equation"); + // compute first and last item + row_type first = nrows(); + for (row_type row = 0; row != nrows(); ++row) + if (numbered(row)) { + first = row; + break; + } + if (first == nrows()) + // no equation + return; + row_type last = nrows() - 1; + for (; last != 0; --last) + if (numbered(last)) + break; + // add equation numbers + b.pushItem(pit, docstring(), output_active); + if (first != last) + b.argumentItem(bformat(from_ascii("(%1$s-%2$s)"), + numbers_[first], numbers_[last])); for (row_type row = 0; row != nrows(); ++row) { if (!numbered(row)) continue; if (label_[row]) - label_[row]->addToToc(pit, output_active, utype); - toc->push_back(TocItem(pit, 0, nicelabel(row), output_active)); + label_[row]->addToToc(pit, output_active, utype, backend); + docstring label = nicelabel(row); + if (first == last) + // this is the only equation + b.argumentItem(label); + else { + // insert as sub-items + b.pushItem(pit, label, output_active); + b.pop(); + } } + b.pop(); } @@ -531,17 +558,19 @@ void InsetMathHull::metrics(MetricsInfo & mi, Dimension & dim) const } if (numberedType()) { - Changer dummy = mi.base.changeFontSet("mathbf"); + Changer dummy = mi.base.changeFontSet("mathrm"); int l = 0; for (row_type row = 0; row < nrows(); ++row) l = max(l, mathed_string_width(mi.base.font, nicelabel(row))); if (l) - dim.wid += 30 + l; + // Value was hardcoded to 30 pixels + dim.wid += Length(0.3, Length::IN).inPixels(mi.base) + l; } - if (type_ == hullRegexp) - dim.wid += 2; + // reserve some space for marker. + dim.wid += 2; + // make it at least as high as the current font int asc = 0; int des = 0; @@ -616,17 +645,36 @@ void InsetMathHull::draw(PainterInfo & pi, int x, int y) const Changer dummy2 = pi.base.font.changeStyle(display() ? LM_ST_DISPLAY : LM_ST_TEXT); - InsetMathGrid::draw(pi, x + 1, y); + int xmath = x; + BufferParams::MathNumber const math_number = buffer().params().getMathNumber(); + if (numberedType() && math_number == BufferParams::LEFT) { + Changer dummy = pi.base.changeFontSet("mathrm"); + int l = 0; + for (row_type row = 0; row < nrows(); ++row) + l = max(l, mathed_string_width(pi.base.font, nicelabel(row))); + + if (l) + // Value was hardcoded to 30 pixels + xmath += Length(0.3, Length::IN).inPixels(pi.base) + l; + } + + InsetMathGrid::draw(pi, xmath + 1, y); + drawMarkers2(pi, x, y); if (numberedType()) { - int const xx = x + colinfo_.back().offset_ + colinfo_.back().width_ + 20; + Changer dummy = pi.base.changeFontSet("mathrm"); for (row_type row = 0; row < nrows(); ++row) { int const yy = y + rowinfo_[row].offset_; - Changer dummy = pi.base.changeFontSet("mathrm"); docstring const nl = nicelabel(row); - pi.draw(xx, yy, nl); + if (math_number == BufferParams::LEFT) + pi.draw(x, yy, nl); + else { + int l = mathed_string_width(pi.base.font, nl); + pi.draw(x + dim.wid - l, yy, nl); + } } } + // drawing change line if (canPaintChange(*bv)) pi.change_.paintCue(pi, x + 1, y + 1 - dim.asc, @@ -704,8 +752,8 @@ void InsetMathHull::usedMacros(MathData const & md, DocIterator const & pos, MacroNameSet::iterator const end = macros.end(); for (size_t i = 0; i < md.size(); ++i) { - MathMacro const * mi = md[i].nucleus()->asMacro(); - MathMacroTemplate const * mt = md[i].nucleus()->asMacroTemplate(); + InsetMathMacro const * mi = md[i].nucleus()->asMacro(); + InsetMathMacroTemplate const * mt = md[i].nucleus()->asMacroTemplate(); InsetMathScript const * si = md[i].nucleus()->asScriptInset(); InsetMathFracBase const * fi = md[i].nucleus()->asFracBaseInset(); InsetMathGrid const * gi = md[i].nucleus()->asGridInset(); @@ -794,7 +842,7 @@ void InsetMathHull::preparePreview(DocIterator const & pos, endfont += '}'; } if (lsize != "normalsize" && !prefixIs(lsize, "error")) - setfont += from_ascii("\\" + lsize + '\n'); + setfont += from_ascii("\\" + lsize + '\n'); docstring setcnt; if (forexport && haveNumbers()) { @@ -964,12 +1012,31 @@ Inset::DisplayType InsetMathHull::display() const case hullEquation: case hullMultline: case hullGather: - return AlignCenter; + if (buffer().params().is_math_indent) + return AlignLeft; + else + return AlignCenter; } // avoid warning return AlignCenter; } + +int InsetMathHull::indent(BufferView const & bv) const +{ + // FIXME: set this in the textclass. This value is what the article class uses. + static Length default_indent(2.5, Length::EM); + if (display() != Inline && buffer().params().is_math_indent) { + Length const & len = buffer().params().getMathIndent(); + if (len.empty()) + return bv.inPixels(default_indent); + else + return bv.inPixels(len); + } else + return Inset::indent(bv); +} + + bool InsetMathHull::numberedType() const { switch (type_) { @@ -1953,7 +2020,7 @@ bool allowDisplayMath(Cursor const & cur) return tmpcur.getStatus(cmd, status) && status.enabled(); } -} +} // namespace bool InsetMathHull::getStatus(Cursor & cur, FuncRequest const & cmd, @@ -2088,9 +2155,24 @@ bool InsetMathHull::getStatus(Cursor & cur, FuncRequest const & cmd, default: return InsetMathGrid::getStatus(cur, cmd, status); } +} + - // This cannot really happen, but inserted to shut-up gcc - return InsetMathGrid::getStatus(cur, cmd, status); +int InsetMathHull::leftMargin() const +{ + return (getType() == hullSimple) ? 0 : InsetMathGrid::leftMargin(); +} + + +int InsetMathHull::rightMargin() const +{ + return (getType() == hullSimple) ? 0 : InsetMathGrid::rightMargin(); +} + + +int InsetMathHull::border() const +{ + return (getType() == hullSimple) ? 0 : InsetMathGrid::border(); } @@ -2166,7 +2248,7 @@ void InsetMathHull::revealCodes(Cursor & cur) const if (!cur.inMathed()) return; odocstringstream os; - cur.info(os); + cur.info(os, false); cur.message(os.str()); /* // write something to the minibuffer