#include "LyX.h"
#include "OutputParams.h"
#include "output_xhtml.h"
+#include "Paragraph.h"
#include "ParIterator.h"
#include "sgml.h"
#include "texstream.h"
InsetRef::InsetRef(Buffer * buf, InsetCommandParams const & p)
- : InsetCommand(buf, p), broken_(false)
+ : InsetCommand(buf, p), broken_(false), active_(true)
{}
InsetRef::InsetRef(InsetRef const & ir)
- : InsetCommand(ir), broken_(false)
+ : InsetCommand(ir), broken_(false), active_(true)
{}
void InsetRef::updateBuffer(ParIterator const & it, UpdateType, bool const /*deleted*/)
{
docstring const & ref = getParam("reference");
+
+ // Check if this one is active (i.e., neither deleted with change-tracking
+ // nor in an inset that does not produce output, such as notes or inactive branches)
+ Paragraph const & para = it.paragraph();
+ active_ = !para.isDeleted(it.pos()) && para.inInset().producesOutput();
+ // If not, check whether we are in a deleted/non-outputting inset
+ if (active_) {
+ for (size_type sl = 0 ; sl < it.depth() ; ++sl) {
+ Paragraph const & outer_par = it[sl].paragraph();
+ if (outer_par.isDeleted(it[sl].pos())
+ || !outer_par.inInset().producesOutput()) {
+ active_ = false;
+ break;
+ }
+ }
+ }
+
// register this inset into the buffer reference cache.
buffer().addReference(ref, this, it);
void InsetRef::addToToc(DocIterator const & cpit, bool output_active,
UpdateType, TocBackend & backend) const
{
+ active_ = output_active;
docstring const & label = getParam("reference");
if (buffer().insetLabel(label)) {
broken_ = !buffer().activeLabel(label);
docstring InsetRef::getTOCString() const
{
+ docstring const & label = getParam("reference");
+ if (buffer().insetLabel(label))
+ broken_ = !buffer().activeLabel(label) && active_;
+ else
+ broken_ = active_;
return tooltip_.empty() ? screenLabel() : tooltip_;
}