X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTocBackend.h;h=20c87294a67647ac727de58f37aae80144806a02;hb=52eb91c94fb70d58dceef430659c8781de2eccda;hp=dcaae493765a0987916a5b239987e65afe751f28;hpb=8c0bd3a77b521f356a406ffef056e518869f19bc;p=lyx.git diff --git a/src/TocBackend.h b/src/TocBackend.h index dcaae49376..20c87294a6 100644 --- a/src/TocBackend.h +++ b/src/TocBackend.h @@ -1,145 +1,141 @@ -// -*- C++ -*- -/** - * \file TocBackend.h - * 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 - * \author Abdelrazak Younes - * - * Full author contact details are available in file CREDITS. - * - * TocBackend mainly used in toc.[Ch] - */ - -#ifndef TOC_BACKEND_H -#define TOC_BACKEND_H - -#include -#include -#include -#include - -#include "pariterator.h" - -class Buffer; -class LyXView; -class Paragraph; -class FuncRequest; -class LCursor; - -namespace lyx { - -/// -/** -*/ -class TocBackend -{ -public: - - /// - /** - */ - class Item - { - friend class TocBackend; - friend bool operator==(Item const & a, Item const & b); - - public: - /// - Item( - ParConstIterator const & par_it = ParConstIterator(), - int d = -1, - std::string const & s = std::string()); - /// - ~Item() {} - /// - bool const isValid() const; - /// - int const id() const; - /// - int const depth() const; - /// - std::string const & str() const; - /// - std::string const asString() const; - /// set cursor in LyXView to this Item - void goTo(LyXView & lv_) const; - /// the action corresponding to the goTo above - FuncRequest action() const; - - protected: - /// Current position of item. - ParConstIterator par_it_; - - /// nesting depth - int depth_; - - /// Full item string - std::string str_; - }; - - /// - typedef std::vector Toc; - typedef std::vector::const_iterator TocIterator; - /// - typedef std::map TocList; - -public: - /// - TocBackend(Buffer const * buffer = NULL): buffer_(buffer) {} - /// - ~TocBackend() {} - /// - void setBuffer(Buffer const * buffer) - { buffer_ = buffer; } - /// - bool addType(std::string const & type); - /// - void update(); - /// - TocList const & tocs() - { return tocs_; } - /// - std::vector const & types() - { return types_; } - /// - Toc const & toc(std::string const & type); - /// Return the first Toc Item before the cursor - TocIterator const item(std::string const & type, ParConstIterator const &); - - void asciiTocList(std::string const & type, std::ostream & os) const; - -private: - /// - TocList tocs_; - /// - std::vector types_; - /// - Item const invalid_item_; - /// - Toc const empty_toc_; - /// - Buffer const * buffer_; - -}; // TocBackend - -inline -bool operator==(TocBackend::Item const & a, TocBackend::Item const & b) -{ - return a.id() == b.id() && a.str() == b.str(); - // No need to compare depth. -} - - -inline -bool operator!=(TocBackend::Item const & a, TocBackend::Item const & b) -{ - return !(a == b); -} - - -} // namespace lyx - -#endif // TOC_BACKEND_H +// -*- C++ -*- +/** + * \file TocBackend.h + * 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 + * \author Abdelrazak Younes + * + * Full author contact details are available in file CREDITS. + * + * TocBackend mainly used in toc.[Ch] + */ + +#ifndef TOC_BACKEND_H +#define TOC_BACKEND_H + +#include +#include +#include + +#include "pariterator.h" + +#include "support/docstream.h" + + +namespace lyx { + +class Buffer; +class Paragraph; +class FuncRequest; +class LCursor; + +/// +/** +*/ +class TocItem +{ + friend class TocBackend; + +public: + /// + TocItem(ParConstIterator const & par_it = ParConstIterator(), + int d = -1, + docstring const & s = docstring()); + /// + ~TocItem() {} + /// + bool const isValid() const; + /// + int const id() const; + /// + int const depth() const; + /// + docstring const & str() const; + /// + docstring const asString() const; + + /// the action corresponding to the goTo above + FuncRequest action() const; + +protected: + /// Current position of item. + ParConstIterator par_it_; + + /// nesting depth + int depth_; + + /// Full item string + docstring str_; +}; + + +/// +typedef std::vector Toc; +typedef Toc::const_iterator TocIterator; +/// The ToC list. +/// A class and no typedef because we want to forward declare it. +class TocList : public std::map +{ +}; + + +/// +/** +*/ +class TocBackend +{ +public: + /// + TocBackend(Buffer const * buffer = NULL): buffer_(buffer) {} + /// + ~TocBackend() {} + /// + void setBuffer(Buffer const * buffer) + { buffer_ = buffer; } + /// + bool addType(std::string const & type); + /// + void update(); + /// + TocList const & tocs() const + { return tocs_; } + /// + std::vector const & types() const + { return types_; } + /// + Toc const & toc(std::string const & type) const; + /// Return the first Toc Item before the cursor + TocIterator const item(std::string const & type, ParConstIterator const &) const; + + void writePlaintextTocList(std::string const & type, odocstream & os) const; + +private: + /// + TocList tocs_; + /// + std::vector types_; + /// + Buffer const * buffer_; + +}; // TocBackend + +inline +bool operator==(TocItem const & a, TocItem const & b) +{ + return a.id() == b.id() && a.str() == b.str() && a.depth() == b.depth(); +} + + +inline +bool operator!=(TocItem const & a, TocItem const & b) +{ + return !(a == b); +} + + +} // namespace lyx + +#endif // TOC_BACKEND_H