X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftoc.C;h=f9080e0143187bc4f0109cf78f2cf9e27e385a7a;hb=69bee02a8901793b34ac5ca6d07e93910cef4005;hp=5627acb83c25d08972da387f318769ed483ea952;hpb=5bd7f9d67b0928af4e379764dfd7a536f502f670;p=lyx.git diff --git a/src/toc.C b/src/toc.C index 5627acb83c..f9080e0143 100644 --- a/src/toc.C +++ b/src/toc.C @@ -1,41 +1,39 @@ -// -*- C++ -*- -/* This file is part of - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright 2002 The LyX Team. +/** + * \file toc.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * ====================================================== + * \author Jean-Marc Lasgouttes + * \author Angus Leeming * - * \file toc.C - * \author Angus Leeming - * \author Jean-Marc Lasgouttes + * Full author contact details are available in file CREDITS. */ #include -#ifdef __GNUG__ -#pragma implementation -#endif - -#include "support/lstrings.h" #include "toc.h" + #include "buffer.h" -#include "frontends/LyXView.h" -#include "lyxfunc.h" +#include "bufferparams.h" +#include "funcrequest.h" +#include "iterators.h" #include "LyXAction.h" #include "paragraph.h" + +#include "frontends/LyXView.h" + #include "insets/insetfloat.h" -#include "debug.h" +#include "insets/insetwrap.h" + +#include "support/tostr.h" using std::vector; using std::max; -using std::endl; using std::ostream; +using std::string; -namespace toc -{ +namespace lyx { +namespace toc { string const TocItem::asString() const { @@ -45,15 +43,14 @@ string const TocItem::asString() const void TocItem::goTo(LyXView & lv_) const { - string const tmp = tostr(par->id()); - lv_.getLyXFunc()->dispatch(FuncRequest(LFUN_GOTO_PARAGRAPH, tmp)); + string const tmp = tostr(id_); + lv_.dispatch(FuncRequest(LFUN_GOTO_PARAGRAPH, tmp)); } -int TocItem::action() const +FuncRequest TocItem::action() const { - return lyxaction.getPseudoAction(LFUN_GOTO_PARAGRAPH, - tostr(par->id())); + return FuncRequest(LFUN_GOTO_PARAGRAPH, tostr(id_)); } @@ -67,49 +64,45 @@ string const getType(string const & cmdName) } -TocList const getTocList(Buffer const * buf) +TocList const getTocList(Buffer const & buf) { TocList toclist; - if (!buf) - return toclist; - Paragraph * par = &*(buf->paragraphs.begin()); - - LyXTextClass const & textclass = buf->params.getLyXTextClass(); - - while (par) { -#ifdef WITH_WARNINGS -#warning bogus type (Lgb) -#endif - char const labeltype = par->layout()->labeltype; - - if (labeltype >= LABEL_COUNTER_CHAPTER - && labeltype <= LABEL_COUNTER_CHAPTER + buf->params.tocdepth) { - // insert this into the table of contents - const int depth = max(0, labeltype - textclass.maxcounter()); - TocItem const item(par, depth, - par->asString(buf, true)); + + BufferParams const & bufparams = buf.params(); + + ParConstIterator pit = buf.par_iterator_begin(); + ParConstIterator end = buf.par_iterator_end(); + for (; pit != end; ++pit) { + + int const toclevel = pit->layout()->toclevel; + if (toclevel > 0 && toclevel <= bufparams.tocdepth) { + // insert this into the table of contents + TocItem const item(pit->id(), toclevel - 1, pit->asString(buf, true)); toclist["TOC"].push_back(item); } // For each paragraph, traverse its insets and look for - // FLOAT_CODE - InsetList::iterator it = par->insetlist.begin(); - InsetList::iterator end = par->insetlist.end(); + // FLOAT_CODE or WRAP_CODE + InsetList::const_iterator it = pit->insetlist.begin(); + InsetList::const_iterator end = pit->insetlist.end(); for (; it != end; ++it) { - if (it.getInset()->lyxCode() == Inset::FLOAT_CODE) { + if (it->inset->lyxCode() == InsetOld::FLOAT_CODE) { InsetFloat * il = - static_cast(it.getInset()); + static_cast(it->inset); + il->addToToc(toclist, buf); + } else if (it->inset->lyxCode() == InsetOld::WRAP_CODE) { + InsetWrap * il = + static_cast(it->inset); + il->addToToc(toclist, buf); } } - - par = par->next(); } return toclist; } -vector const getTypes(Buffer const * buffer) +vector const getTypes(Buffer const & buffer) { vector types; @@ -126,7 +119,7 @@ vector const getTypes(Buffer const * buffer) } -void asciiTocList(string const & type, Buffer const * buffer, ostream & os) +void asciiTocList(string const & type, Buffer const & buffer, ostream & os) { TocList const toc_list = getTocList(buffer); TocList::const_iterator cit = toc_list.find(type); @@ -140,3 +133,4 @@ void asciiTocList(string const & type, Buffer const * buffer, ostream & os) } // namespace toc +} // namespace lyx