#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"
}
-} // end anon namespace
+} // namespace
HullType hullType(docstring const & s)
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)
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
return;
}
- shared_ptr<Toc> 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();
}
if (display())
dim.des += displayMargin();
}
- // Cache the inset dimension.
- setDimCache(mi, dim);
return;
}
}
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;
math_font_max_dim(mi.base.font, asc, des);
dim.asc = max(dim.asc, asc);
dim.des = max(dim.des, des);
- // Cache the inset dimension.
- // FIXME: This will overwrite InsetMathGrid dimension, is that OK?
- setDimCache(mi, dim);
}
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,
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();
endfont += '}';
}
if (lsize != "normalsize" && !prefixIs(lsize, "error"))
- setfont += from_ascii("\\" + lsize + '\n');
+ setfont += from_ascii("\\" + lsize + '\n');
docstring setcnt;
if (forexport && haveNumbers()) {
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 (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_) {
return tmpcur.getStatus(cmd, status) && status.enabled();
}
-}
+} // namespace
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();
}
if (!cur.inMathed())
return;
odocstringstream os;
- cur.info(os);
+ cur.info(os, false);
cur.message(os.str());
/*
// write something to the minibuffer