mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-29 21:05:12 +00:00
Implement on screen numbering for Subequation module
The module subequation allows to number equations in the "Subfigure" inset to be numbered (1a), (1b), (1c), etc. To implement this on screen, we need to redefine temporarily the "equation" counter to use this different numbering. To this end, implement Counters::copy method that can be used to backup full counter definitions. Fixes bug #12567.
This commit is contained in:
parent
f5c7acb140
commit
1d08af621d
@ -421,6 +421,16 @@ void Counters::reset(docstring const & match)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Counters::copy(docstring const & cnt, docstring const & newcnt)
|
||||||
|
{
|
||||||
|
auto const it = counterList_.find(cnt);
|
||||||
|
if (it == counterList_.end())
|
||||||
|
return false;
|
||||||
|
counterList_[newcnt] = it->second;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Counters::remove(docstring const & cnt)
|
bool Counters::remove(docstring const & cnt)
|
||||||
{
|
{
|
||||||
bool retval = counterList_.erase(cnt);
|
bool retval = counterList_.erase(cnt);
|
||||||
|
@ -162,6 +162,8 @@ public:
|
|||||||
void reset();
|
void reset();
|
||||||
/// Reset counters matched by match string.
|
/// Reset counters matched by match string.
|
||||||
void reset(docstring const & match);
|
void reset(docstring const & match);
|
||||||
|
/// Copy counter \p cnt to \p newcnt.
|
||||||
|
bool copy(docstring const & cnt, docstring const & newcnt);
|
||||||
/// Remove counter \p cnt.
|
/// Remove counter \p cnt.
|
||||||
bool remove(docstring const & cnt);
|
bool remove(docstring const & cnt);
|
||||||
/** returns the expanded string representation of counter \c
|
/** returns the expanded string representation of counter \c
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "ParIterator.h"
|
#include "ParIterator.h"
|
||||||
#include "TextClass.h"
|
#include "TextClass.h"
|
||||||
|
|
||||||
|
#include "support/debug.h"
|
||||||
#include "support/gettext.h"
|
#include "support/gettext.h"
|
||||||
#include "support/lstrings.h"
|
#include "support/lstrings.h"
|
||||||
|
|
||||||
@ -149,11 +150,35 @@ void InsetFlex::updateBuffer(ParIterator const & it, UpdateType utype, bool cons
|
|||||||
docstring custom_label = translateIfPossible(il.labelstring());
|
docstring custom_label = translateIfPossible(il.labelstring());
|
||||||
|
|
||||||
Counters & cnts = bp.documentClass().counters();
|
Counters & cnts = bp.documentClass().counters();
|
||||||
|
|
||||||
|
// Special case for `subequations' module.
|
||||||
|
if (il.latextype() == InsetLaTeXType::ENVIRONMENT &&
|
||||||
|
il.latexname() == "subequations") {
|
||||||
|
docstring equation(from_ascii("equation"));
|
||||||
|
docstring parentequation(from_ascii("parentequation"));
|
||||||
|
if (!deleted)
|
||||||
|
cnts.step(equation, utype);
|
||||||
|
// save a copy of the equation counter definition
|
||||||
|
cnts.copy(equation, parentequation);
|
||||||
|
// redefine the equation counter definition
|
||||||
|
docstring const eqlabel = deleted ? from_ascii("#")
|
||||||
|
: cnts.theCounter(equation, it->getParLanguage(bp)->code());
|
||||||
|
cnts.newCounter(equation, parentequation,
|
||||||
|
eqlabel + from_ascii("\\alph{equation}"),
|
||||||
|
eqlabel + from_ascii("\\alph{equation}"),
|
||||||
|
cnts.guiName(parentequation));
|
||||||
|
InsetCollapsible::updateBuffer(it, utype, deleted);
|
||||||
|
// reset equation counter as it was.
|
||||||
|
cnts.copy(parentequation, equation);
|
||||||
|
cnts.remove(parentequation);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
docstring const & count = il.counter();
|
docstring const & count = il.counter();
|
||||||
bool const have_counter = cnts.hasCounter(count);
|
bool const have_counter = cnts.hasCounter(count);
|
||||||
if (have_counter) {
|
if (have_counter) {
|
||||||
Paragraph const & par = it.paragraph();
|
Paragraph const & par = it.paragraph();
|
||||||
if (!par.isDeleted(it.pos())) {
|
if (!deleted) {
|
||||||
cnts.step(count, utype);
|
cnts.step(count, utype);
|
||||||
custom_label += ' ' +
|
custom_label += ' ' +
|
||||||
cnts.theCounter(count, it.paragraph().getParLanguage(bp)->code());
|
cnts.theCounter(count, it.paragraph().getParLanguage(bp)->code());
|
||||||
|
Loading…
Reference in New Issue
Block a user