InsetRef::addTocToc(): add an entry for the referenced label if not already present. Next step is to rebuild the Toc in InsetLabel::addTocToc() for this case.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23286 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Abdelrazak Younes 2008-02-27 17:02:17 +00:00
parent 9b9080c0e9
commit e14a0ad50f

View File

@ -160,18 +160,24 @@ void InsetRef::addToToc(Buffer const & buf,
{ {
docstring const & label = getParam("reference"); docstring const & label = getParam("reference");
Toc & toc = buf.tocBackend().toc("label"); Toc & toc = buf.tocBackend().toc("label");
Toc::const_iterator it = toc.begin(); Toc::iterator it = toc.begin();
Toc::const_iterator end = toc.end(); Toc::iterator end = toc.end();
for (; it != end; ++it) { for (; it != end; ++it) {
if (it->str() == label) if (it->str() == label)
break; break;
} }
if (it == end)
//FIXME: this is an orphan, is this really possible?
return;
docstring const reflabel = getScreenLabel(buf); docstring const reflabel = getScreenLabel(buf);
if (it == end) {
// This label has not been parsed yet so we just add it temporarily.
// InsetLabel::addTocToc() will fix that later.
toc.push_back(TocItem(cpit, 0, label));
toc.push_back(TocItem(cpit, 1, reflabel));
return;
}
// The Toc item for this label already exists so let's add
// this inset to this node.
++it; ++it;
while (it->str() == reflabel && it != end) while (it->str() == reflabel && it != end)
++it; ++it;