#include <config.h>
-#include "toc.h"
+#include "TocBackend.h"
#include "buffer.h"
#include "bufferparams.h"
#include "funcrequest.h"
#include "LyXAction.h"
#include "paragraph.h"
-#include "cursor.h"
#include "debug.h"
-#include "frontends/LyXView.h"
-
-#include "insets/insetfloat.h"
#include "insets/insetoptarg.h"
-#include "insets/insetwrap.h"
#include "support/convert.h"
-#include <iostream>
-using lyx::docstring;
+namespace lyx {
using std::vector;
-using std::max;
-using std::ostream;
using std::string;
-using std::cout;
-using std::endl;
-namespace lyx {
///////////////////////////////////////////////////////////////////////////
-// TocBackend::Item implementation
+// TocItem implementation
-TocBackend::Item::Item(ParConstIterator const & par_it, int d,
+TocItem::TocItem(ParConstIterator const & par_it, int d,
docstring const & s)
: par_it_(par_it), depth_(d), str_(s)
{
*/
}
-bool const TocBackend::Item::isValid() const
+bool const TocItem::isValid() const
{
return depth_ != -1;
}
-int const TocBackend::Item::id() const
+int const TocItem::id() const
{
return par_it_->id();
}
-int const TocBackend::Item::depth() const
+int const TocItem::depth() const
{
return depth_;
}
-docstring const & TocBackend::Item::str() const
+docstring const & TocItem::str() const
{
return str_;
}
-docstring const TocBackend::Item::asString() const
+docstring const TocItem::asString() const
{
return docstring(4 * depth_, ' ') + str_;
}
-void TocBackend::Item::goTo(LyXView & lv_) const
-{
- string const tmp = convert<string>(id());
- lv_.dispatch(FuncRequest(LFUN_PARAGRAPH_GOTO, tmp));
-}
-
-FuncRequest TocBackend::Item::action() const
+FuncRequest TocItem::action() const
{
return FuncRequest(LFUN_PARAGRAPH_GOTO, convert<string>(id()));
}
///////////////////////////////////////////////////////////////////////////
// TocBackend implementation
-TocBackend::Toc const & TocBackend::toc(std::string const & type)
+Toc const & TocBackend::toc(std::string const & type) const
{
// Is the type already supported?
TocList::const_iterator it = tocs_.find(type);
// the string that goes to the toc (could be the optarg)
docstring tocstring;
- // For each paragraph, traverse its insets and look for
- // FLOAT_CODE or WRAP_CODE
+ // For each paragraph, traverse its insets and let them add
+ // their toc items
InsetList::const_iterator it = pit->insetlist.begin();
InsetList::const_iterator end = pit->insetlist.end();
for (; it != end; ++it) {
+ it->inset->addToToc(tocs_, *buffer_);
switch (it->inset->lyxCode()) {
- case InsetBase::FLOAT_CODE:
- static_cast<InsetFloat*>(it->inset)
- ->addToToc(tocs_, *buffer_);
- break;
- case InsetBase::WRAP_CODE:
- static_cast<InsetWrap*>(it->inset)
- ->addToToc(tocs_, *buffer_);
- break;
case InsetBase::OPTARG_CODE: {
if (!tocstring.empty())
break;
Paragraph const & par = *static_cast<InsetOptArg*>(it->inset)->paragraphs().begin();
if (!pit->getLabelstring().empty())
- // FIXME UNICODE
- tocstring = lyx::from_utf8(
- pit->getLabelstring() + ' ');
+ tocstring = pit->getLabelstring() + ' ';
tocstring += par.asString(*buffer_, false);
break;
}
// insert this into the table of contents
if (tocstring.empty())
tocstring = pit->asString(*buffer_, true);
- Item const item(pit, toclevel - min_toclevel, tocstring);
- tocs_["TOC"].push_back(item);
- //cout << "item inserted str " << item.str()
- // << " id " << item.id() << endl;
+ TocItem const item(pit, toclevel - min_toclevel, tocstring);
+ tocs_["tableofcontents"].push_back(item);
}
}
}
-TocBackend::TocIterator const TocBackend::item(std::string const & type, ParConstIterator const & par_it)
+TocIterator const TocBackend::item(
+ std::string const & type, ParConstIterator const & par_it) const
{
- TocList::iterator toclist_it = tocs_.find(type);
+ TocList::const_iterator toclist_it = tocs_.find(type);
// Is the type supported?
BOOST_ASSERT(toclist_it != tocs_.end());
Toc const & toc_vector = toclist_it->second;
- TocBackend::TocIterator last = toc_vector.begin();
- TocBackend::TocIterator it = toc_vector.end();
+ TocIterator last = toc_vector.begin();
+ TocIterator it = toc_vector.end();
--it;
for (; it != last; --it) {
}
-void TocBackend::asciiTocList(string const & type, lyx::odocstream & os) const
+void TocBackend::asciiTocList(string const & type, odocstream & os) const
{
TocList::const_iterator cit = tocs_.find(type);
if (cit != tocs_.end()) {
- Toc::const_iterator ccit = cit->second.begin();
- Toc::const_iterator end = cit->second.end();
+ TocIterator ccit = cit->second.begin();
+ TocIterator end = cit->second.end();
for (; ccit != end; ++ccit)
os << ccit->asString() << '\n';
}