#include "InsetIterator.h"
#include "InsetList.h"
#include "Language.h"
-#include "LyXFunc.h"
+#include "LyX.h"
#include "LyXRC.h"
#include "Text.h"
#include "Paragraph.h"
#include "insets/InsetGraphics.h"
#include "insets/InsetGraphicsParams.h"
#include "insets/InsetInclude.h"
+#include "insets/InsetLabel.h"
#include "insets/InsetTabular.h"
#include "mathed/MathData.h"
#include "mathed/InsetMath.h"
+#include "mathed/InsetMathHull.h"
+#include "mathed/InsetMathRef.h"
#include "mathed/MathSupport.h"
#include "support/debug.h"
}
}
- InsetText in(buffer);
+ InsetText in(cur.buffer());
// Make sure there is no class difference.
in.paragraphs().clear();
// This works without copying any paragraph data because we have
it->setBuffer(const_cast<Buffer &>(buffer));
switch (it->lyxCode()) {
+ case MATH_HULL_CODE: {
+ // check for equation labels and resolve duplicates
+ InsetMathHull & ins = static_cast<InsetMathHull &>(*it);
+ std::vector<InsetLabel *> labels = ins.getLabels();
+ for (size_t i = 0; i != labels.size(); ++i) {
+ if (!labels[i])
+ continue;
+ InsetLabel * lab = labels[i];
+ docstring const oldname = lab->getParam("name");
+ lab->updateCommand(oldname, false);
+ docstring const newname = lab->getParam("name");
+ if (oldname == newname)
+ continue;
+ // adapt the references
+ for (InsetIterator itt = inset_iterator_begin(in);
+ itt != i_end; ++itt) {
+ if (itt->lyxCode() == REF_CODE) {
+ InsetCommand & ref =
+ static_cast<InsetCommand &>(*itt);
+ if (ref.getParam("reference") == oldname)
+ ref.setParam("reference", newname);
+ } else if (itt->lyxCode() == MATH_REF_CODE) {
+ InsetMathHull & mi =
+ static_cast<InsetMathHull &>(*itt);
+ // this is necessary to prevent an uninitialized
+ // buffer when the RefInset is in a MathBox.
+ // FIXME audit setBuffer/updateBuffer calls
+ mi.setBuffer(const_cast<Buffer &>(buffer));
+ if (mi.asRefInset()->getTarget() == oldname)
+ mi.asRefInset()->changeTarget(newname);
+ }
+ }
+ }
+ break;
+ }
+
case LABEL_CODE: {
// check for duplicates
InsetCommand & lab = static_cast<InsetCommand &>(*it);
docstring const oldname = lab.getParam("name");
lab.updateCommand(oldname, false);
docstring const newname = lab.getParam("name");
- if (oldname != newname) {
- // adapt the references
- for (InsetIterator itt = inset_iterator_begin(in); itt != i_end; ++itt) {
- if (itt->lyxCode() == REF_CODE) {
- InsetCommand & ref = dynamic_cast<InsetCommand &>(*itt);
- if (ref.getParam("reference") == oldname)
- ref.setParam("reference", newname);
- }
+ if (oldname == newname)
+ break;
+ // adapt the references
+ for (InsetIterator itt = inset_iterator_begin(in); itt != i_end; ++itt) {
+ if (itt->lyxCode() == REF_CODE) {
+ InsetCommand & ref = static_cast<InsetCommand &>(*itt);
+ if (ref.getParam("reference") == oldname)
+ ref.setParam("reference", newname);
+ } else if (itt->lyxCode() == MATH_REF_CODE) {
+ InsetMathHull & mi =
+ static_cast<InsetMathHull &>(*itt);
+ // this is necessary to prevent an uninitialized
+ // buffer when the RefInset is in a MathBox.
+ // FIXME audit setBuffer/updateBuffer calls
+ mi.setBuffer(const_cast<Buffer &>(buffer));
+ if (mi.asRefInset()->getTarget() == oldname)
+ mi.asRefInset()->changeTarget(newname);
}
}
break;
docstring const oldkey = bib.getParam("key");
bib.updateCommand(oldkey, false);
docstring const newkey = bib.getParam("key");
- if (oldkey != newkey) {
- // adapt the references
- for (InsetIterator itt = inset_iterator_begin(in); itt != i_end; ++itt) {
- if (itt->lyxCode() == CITE_CODE) {
- InsetCommand & ref = dynamic_cast<InsetCommand &>(*itt);
- if (ref.getParam("key") == oldkey)
- ref.setParam("key", newkey);
- }
+ if (oldkey == newkey)
+ break;
+ // adapt the references
+ for (InsetIterator itt = inset_iterator_begin(in);
+ itt != i_end; ++itt) {
+ if (itt->lyxCode() == CITE_CODE) {
+ InsetCommand & ref =
+ static_cast<InsetCommand &>(*itt);
+ if (ref.getParam("key") == oldkey)
+ ref.setParam("key", newkey);
}
}
break;
pit = last_paste;
pos = pars[last_paste].size();
- // FIXME Should we do it here, or should we let updateLabels() do it?
+ // FIXME Should we do it here, or should we let updateBuffer() do it?
// Set paragraph buffers. It's important to do this right away
// before something calls Inset::buffer() and causes a crash.
for (pit_type p = startpit; p <= pit; ++p)
// need a valid cursor. (Lgb)
cur.clearSelection();
- cur.buffer()->updateLabels();
+ cur.buffer()->updateBuffer();
// tell tabular that a recent copy happened
dirtyTabularStack(false);
boost::tie(ppp, endpit) =
pasteSelectionHelper(cur, parlist, docclass, errorList);
- cur.buffer()->updateLabels();
+ cur.buffer()->updateBuffer();
cur.clearSelection();
text->setCursor(cur, ppp.first, ppp.second);
}
return;
// create inset for graphic
- InsetGraphics * inset = new InsetGraphics(*cur.buffer());
+ InsetGraphics * inset = new InsetGraphics(cur.buffer());
InsetGraphicsParams params;
params.filename = support::DocFileName(filename.absFilename());
inset->setParams(params);