* \author Angus Leeming
*
* Full author contact details are available in file CREDITS.
+ *
+ * Nice functions and objects to handle TOCs
*/
#ifndef TOC_H
#define TOC_H
-#include "support/std_ostream.h"
-#include "support/std_string.h"
-
-#include <map>
-#include <vector>
+#include "TocBackend.h"
-class Buffer;
-class LyXView;
-class Paragraph;
+class LCursor;
-/** Nice functions and objects to handle TOCs
- */
namespace lyx {
namespace toc {
-///
-struct TocItem {
- TocItem(int par_id, int d, string const & s)
- : id_(par_id), depth(d), str(s) {}
- ///
- string const asString() const;
- /// set cursor in LyXView to this TocItem
- void goTo(LyXView & lv_) const;
- /// the action corresponding to the goTo above
- int action() const;
- /// Paragraph ID containing this item
- int id_;
- /// nesting depth
- int depth;
- ///
- string str;
-};
+typedef TocBackend::Item TocItem;
+typedef TocBackend::Toc::const_iterator TocIterator;
+typedef TocBackend::Toc Toc;
+typedef TocBackend::TocList TocList;
///
-typedef std::vector<TocItem> Toc;
+void updateToc(Buffer const &);
+
///
-typedef std::map<string, Toc> TocList;
+TocList const & getTocList(Buffer const &);
///
-TocList const getTocList(Buffer const &);
+Toc const & getToc(Buffer const & buf, std::string const & type);
///
-std::vector<string> const getTypes(Buffer const &);
+std::vector<std::string> const & getTypes(Buffer const &);
+
+/// Return the first TocItem before the cursor
+TocIterator const getCurrentTocItem(Buffer const &, LCursor const &,
+ std::string const & type);
///
-void asciiTocList(string const &, Buffer const &, std::ostream &);
+void asciiTocList(std::string const &, Buffer const &, std::ostream &);
/** Given the cmdName of the TOC param, returns the type used
by ControlToc::getContents() */
-string const getType(string const & cmdName);
-
-inline
-bool operator==(TocItem const & a, TocItem const & b)
-{
- return a.id_ == b.id_ && a.str == b.str;
- // No need to compare depth.
-}
+std::string const getType(std::string const & cmdName);
+
+/** Returns the guiname from a given @c type
+ The localization of the names will be done in the frontends */
+std::string const getGuiName(std::string const & type, Buffer const &);
+
+/// the type of outline operation
+enum OutlineOp {
+ Up, // Move this header with text down
+ Down, // Move this header with text up
+ In, // Make this header deeper
+ Out // Make this header shallower
+};
-inline
-bool operator!=(TocItem const & a, TocItem const & b)
-{
- return !(a == b);
-}
+void outline(OutlineOp, LCursor &);
} // namespace toc