X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTocBackend.h;h=7ad36fec66399b92f23c77b9166915bd24b2fea1;hb=26ba2a65838731ce639a09539f617cb0f0be3b22;hp=1e58ec2f344482c4c7728cafac2069491303ea4b;hpb=597de9bb8d93fe293d2d6fce76bd32bde5198c5d;p=lyx.git diff --git a/src/TocBackend.h b/src/TocBackend.h index 1e58ec2f34..7ad36fec66 100644 --- a/src/TocBackend.h +++ b/src/TocBackend.h @@ -19,12 +19,11 @@ #include "FuncRequest.h" #include "OutputEnums.h" #include "Toc.h" +#include "TocBuilder.h" #include "support/strfwd.h" #include "support/unique_ptr.h" -#include - namespace lyx { @@ -54,85 +53,61 @@ class Buffer; */ class TocItem { - friend class TocBackend; - friend class TocBuilder; - public: /// Default constructor for STL containers. - TocItem() : dit_(0), depth_(0), output_(false) {} + TocItem() : dit_(0), depth_(0), output_(false), missing_(false) {} /// TocItem(DocIterator const & dit, int depth, docstring const & s, bool output_active, - FuncRequest action = FuncRequest(LFUN_UNKNOWN_ACTION) + bool missing = false, + FuncRequest const & action = FuncRequest(LFUN_UNKNOWN_ACTION) ); /// - ~TocItem() {} - /// - int id() const; + DocIterator const & dit() const { return dit_; } /// int depth() const { return depth_; } /// docstring const & str() const { return str_; } /// void str(docstring const & s) { str_ = s; } - /// String for display, e.g. it has a mark if output is inactive - docstring const asString() const; /// - DocIterator const & dit() const { return dit_; } + docstring const & prettyStr() const { return pretty_str_; } + /// + void prettyStr (docstring const & s) { pretty_str_ = s; } /// bool isOutput() const { return output_; } /// - void setAction(FuncRequest a) { action_ = a; } + bool isMissing() const { return missing_; } + /// + void setAction(FuncRequest const & a) { action_ = a; } + /// custom action, or the default one (paragraph-goto) if not customised FuncRequest action() const; + /// + int id() const; + /// String for display, e.g. it has a mark if output is inactive + docstring const asString() const; -protected: +private: /// Current position of item. DocIterator dit_; - -private: /// nesting depth int depth_; /// Full item string docstring str_; + /// Dereferenced name, for labels (e.g. Label 5.2 instead of lem:foobar) + docstring pretty_str_; /// Is this item in a note, inactive branch, etc? bool output_; + /// Is this item missing, e.g. missing label? + bool missing_; /// Custom action FuncRequest action_; }; -/// Caption-enabled TOC builders -class TocBuilder -{ -public: - TocBuilder(std::shared_ptr toc); - /// When entering a float or flex or paragraph (with AddToToc) - void pushItem(DocIterator const & dit, docstring const & s, - bool output_active, bool is_captioned = false); - /// When encountering a float caption - void captionItem(DocIterator const & dit, docstring const & s, - bool output_active); - /// When encountering an argument (with isTocCaption) for flex or paragraph - void argumentItem(docstring const & arg_str); - /// When exiting a float or flex or paragraph - void pop(); -private: - TocBuilder(){} - /// - struct frame { - Toc::size_type pos; - bool is_captioned; - }; - /// - std::shared_ptr const toc_; - /// - std::stack stack_; -}; - - /// Class to build and access the Tocs of a particular buffer. class TocBackend { @@ -149,8 +124,10 @@ public: void setBuffer(Buffer const * buffer) { buffer_ = buffer; } /// void update(bool output_active, UpdateType utype); + /// + void reset(); /// \return true if the item was updated. - bool updateItem(DocIterator const & pit); + bool updateItem(DocIterator const & pit) const; /// TocList const & tocs() const { return tocs_; } /// never null @@ -169,17 +146,23 @@ public: /// void writePlaintextTocList(std::string const & type, odocstringstream & os, size_t max_length) const; - /// + /// Localised name for type docstring outlinerName(std::string const & type) const; + /// Add a new (localised) name if yet unknown + void addName(std::string const & type, docstring const & name); /// Whether a toc type is less important and appears in the "Other lists" /// submenu static bool isOther(std::string const & type); private: + /// + void resetOutlinerNames(); /// TocList tocs_; /// - std::map> builders_; + std::map> builders_; + /// Stores localised outliner names from this buffer and its children + std::map outliner_names_; /// Buffer const * buffer_; }; // TocBackend