X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTocBackend.h;h=0671f046f039f8a5fbec4e688b7ff07a08f5ed20;hb=ddda1369247a562684a4ec59f320f16b7938a6d6;hp=d5dfae426427cd8388ace89740d245e8db3aeb46;hpb=3c9b62a69d894b5ea020c18d0bec676dc00fe378;p=lyx.git diff --git a/src/TocBackend.h b/src/TocBackend.h index d5dfae4264..0671f046f0 100644 --- a/src/TocBackend.h +++ b/src/TocBackend.h @@ -18,14 +18,12 @@ #include "DocIterator.h" #include "FuncRequest.h" #include "OutputEnums.h" +#include "Toc.h" -#include "support/shared_ptr.h" #include "support/strfwd.h" +#include "support/unique_ptr.h" -#include -#include #include -#include namespace lyx { @@ -67,7 +65,6 @@ enum TocType { */ class TocItem { - friend class Toc; friend class TocBackend; friend class TocBuilder; @@ -76,12 +73,11 @@ public: TocItem() : dit_(0), depth_(0), output_(false) {} /// TocItem(DocIterator const & dit, - int depth, - docstring const & s, - bool output_active, - docstring const & t = docstring(), - FuncRequest action = FuncRequest(LFUN_UNKNOWN_ACTION) - ); + int depth, + docstring const & s, + bool output_active, + docstring const & t = docstring(), + FuncRequest action = FuncRequest(LFUN_UNKNOWN_ACTION)); /// ~TocItem() {} /// @@ -123,33 +119,17 @@ private: }; -/// -class Toc : public std::vector -{ -public: - typedef std::vector::const_iterator const_iterator; - typedef std::vector::iterator iterator; - const_iterator item(DocIterator const & dit) const; - /// Look for a TocItem given its depth and string. - /// \return The first matching item. - /// \retval end() if no item was found. - iterator item(int depth, docstring const & str); -}; - -typedef Toc::const_iterator TocIterator; - - /// Caption-enabled TOC builders class TocBuilder { public: - TocBuilder(shared_ptr const toc); + TocBuilder(std::shared_ptr const toc); /// When entering a float void pushItem(DocIterator const & dit, docstring const & s, - bool output_active, bool is_captioned = false); + bool output_active, bool is_captioned = false); /// When encountering a caption void captionItem(DocIterator const & dit, docstring const & s, - bool output_active); + bool output_active); /// When exiting a float void pop(); private: @@ -160,43 +140,22 @@ private: bool is_captioned; }; /// - shared_ptr const toc_; + std::shared_ptr const toc_; /// std::stack stack_; }; -/// The ToC list. -/// A class and no typedef because we want to forward declare it. -class TocList : public std::map > -{ -private: - // this can create null pointers - using std::map >::operator[]; -}; - - -/// -class TocBuilderStore -{ -public: - TocBuilderStore() {}; - /// - shared_ptr get(std::string const & type, shared_ptr toc); - /// - void clear() { map_.clear(); }; -private: - typedef std::map > map_t; - map_t map_; -}; - - -/// -/** -*/ +/// Class to build and access the Tocs of a particular buffer. class TocBackend { public: + static Toc::const_iterator findItem(Toc const & toc, + DocIterator const & dit); + /// Look for a TocItem given its depth and string. + /// \return The first matching item. + /// \retval end() if no item was found. + static Toc::iterator findItem(Toc & toc, int depth, docstring const & str); /// TocBackend(Buffer const * buffer) : buffer_(buffer) {} /// @@ -208,15 +167,17 @@ public: /// TocList const & tocs() const { return tocs_; } /// never null - shared_ptr toc(std::string const & type) const; - shared_ptr toc(std::string const & type); - /// nevel null - shared_ptr builder(std::string const & type); - /// Return the first Toc Item before the cursor - TocIterator item( - std::string const & type, ///< Type of Toc. - DocIterator const & dit ///< The cursor location in the document. - ) const; + std::shared_ptr toc(std::string const & type) const; + /// never null + std::shared_ptr toc(std::string const & type); + /// \return the current TocBuilder for the Toc of type \param type, or + /// creates one if it does not already exist. + TocBuilder & builder(std::string const & type); + /// \return the first Toc Item before the cursor. + /// \param type: Type of Toc. + /// \param dit: The cursor location in the document. + Toc::const_iterator + item(std::string const & type, DocIterator const & dit) const; /// void writePlaintextTocList(std::string const & type, @@ -228,7 +189,7 @@ private: /// TocList tocs_; /// - TocBuilderStore builders_; + std::map> builders_; /// Buffer const * buffer_; }; // TocBackend