Assign equation numbers in updateBuffer instead of

addToToc so that they can be used in updateToc to
assign label cross-refs
This commit is contained in:
Alexander Dunlap 2023-08-24 21:14:53 -04:00 committed by Richard Kimberly Heck
parent 89a479f60d
commit ca3004fc67
2 changed files with 30 additions and 5 deletions

View File

@ -32,6 +32,8 @@ public:
///
docstring const & formattedCounter() const { return formatted_counter_; }
///
void setCounterValue(docstring cv) { counter_value_ = cv; }
///
void setPrettyCounter(docstring pc) { pretty_counter_ = pc; }
///
void setFormattedCounter(docstring fc) { formatted_counter_ = fc; }

View File

@ -274,6 +274,32 @@ void InsetMathHull::updateBuffer(ParIterator const & it, UpdateType utype, bool
if (label_[i])
label_[i]->updateBuffer(it, utype, deleted);
}
// set up equation numbers
// 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()) {
row_type last = nrows() - 1;
for (; last != 0; --last)
if (numbered(last))
break;
for (row_type row = 0; row != nrows(); ++row) {
if (!numbered(row))
continue;
if (label_[row]) {
label_[row]->setCounterValue(numbers_[row]);
label_[row]->setPrettyCounter("(" + numbers_[row] + ")");
label_[row]->setFormattedCounter("(" + numbers_[row] + ")");
}
}
}
// pass down
InsetMathGrid::updateBuffer(it, utype, deleted);
}
@ -305,7 +331,6 @@ void InsetMathHull::addToToc(DocIterator const & pit, bool output_active,
break;
TocBuilder & b = backend.builder("equation");
// add equation numbers
b.pushItem(pit, docstring(), output_active);
if (first != last)
b.argumentItem(bformat(from_ascii("(%1$s-%2$s)"),
@ -321,8 +346,6 @@ void InsetMathHull::addToToc(DocIterator const & pit, bool output_active,
if (!numbered(row))
continue;
if (label_[row]) {
label_[row]->setPrettyCounter(_("Equation") + " " + numbers_[row]);
label_[row]->setFormattedCounter(_("Equation") + " " + numbers_[row]);
label_[row]->addToToc(pit, output_active, utype, backend);
}
docstring label = nicelabel(row);