]> git.lyx.org Git - lyx.git/blob - src/TocBackend.h
9563255c9040db8ea1db3434724551fcd0ea972d
[lyx.git] / src / TocBackend.h
1 // -*- C++ -*-\r
2 /**\r
3  * \file TocBackend.h\r
4  * This file is part of LyX, the document processor.\r
5  * Licence details can be found in the file COPYING.\r
6  *\r
7  * \author Jean-Marc Lasgouttes\r
8  * \author Angus Leeming\r
9  * \author Abdelrazak Younes\r
10  *\r
11  * Full author contact details are available in file CREDITS.\r
12  *\r
13  * TocBackend mainly used in toc.[Ch]\r
14  */\r
15 \r
16 #ifndef TOC_BACKEND_H\r
17 #define TOC_BACKEND_H\r
18 \r
19 #include <map>\r
20 #include <iosfwd>\r
21 #include <vector>\r
22 #include <string>\r
23 \r
24 #include "pariterator.h"\r
25 \r
26 class Buffer;\r
27 class LyXView;\r
28 class Paragraph;\r
29 class FuncRequest;\r
30 class LCursor;\r
31 \r
32 namespace lyx {\r
33 \r
34 ///\r
35 /**\r
36 */\r
37 class TocBackend\r
38 {\r
39 public:\r
40 \r
41         ///\r
42         /**\r
43         */\r
44         class Item\r
45         {\r
46                 friend class TocBackend;\r
47                 friend bool operator==(Item const & a, Item const & b);\r
48 \r
49         public:\r
50                 ///\r
51                 Item(\r
52                         ParConstIterator const & par_it = ParConstIterator(),\r
53                         int d = -1,\r
54                         std::string const & s = std::string());\r
55                 ///\r
56                 ~Item() {}\r
57                 ///\r
58                 bool const isValid() const;\r
59                 ///\r
60                 int const id() const;\r
61                 ///\r
62                 int const depth() const;\r
63                 ///\r
64                 std::string const & str() const;\r
65                 ///\r
66                 std::string const asString() const;\r
67                 /// set cursor in LyXView to this Item\r
68                 void goTo(LyXView & lv_) const;\r
69                 /// the action corresponding to the goTo above\r
70                 FuncRequest action() const;\r
71                 \r
72         protected:\r
73                 /// Current position of item.\r
74                 ParConstIterator par_it_;\r
75 \r
76                 /// nesting depth\r
77                 int depth_;\r
78 \r
79                 /// Full item string\r
80                 std::string str_;\r
81         };\r
82 \r
83         ///\r
84         typedef std::vector<Item> Toc;\r
85         typedef std::vector<Item>::const_iterator TocIterator;\r
86         ///\r
87         typedef std::map<std::string, Toc> TocList;\r
88 \r
89 public:\r
90         ///\r
91         TocBackend(Buffer const * buffer = NULL): buffer_(buffer) {}\r
92         ///\r
93         ~TocBackend() {}\r
94         ///\r
95         void setBuffer(Buffer const * buffer)\r
96         { buffer_ = buffer; }\r
97         ///\r
98         bool addType(std::string const & type);\r
99         ///\r
100         void update();\r
101         ///\r
102         TocList const & tocs()\r
103         { return tocs_; }\r
104         ///\r
105         std::vector<std::string> const & types()\r
106         { return types_; }\r
107         ///\r
108         Toc const & toc(std::string const & type);\r
109         /// Return the first Toc Item before the cursor\r
110         TocIterator const item(std::string const & type, ParConstIterator const &);\r
111 \r
112         void asciiTocList(std::string const & type, std::ostream & os) const;\r
113 \r
114 private:\r
115         /// \r
116         TocList tocs_;\r
117         ///\r
118         std::vector<std::string> types_;\r
119         ///\r
120         Buffer const * buffer_;\r
121 \r
122 }; // TocBackend\r
123 \r
124 inline\r
125 bool operator==(TocBackend::Item const & a, TocBackend::Item const & b)\r
126 {\r
127         return a.id() == b.id() && a.str() == b.str();\r
128         // No need to compare depth.\r
129 }\r
130 \r
131 \r
132 inline\r
133 bool operator!=(TocBackend::Item const & a, TocBackend::Item const & b)\r
134 {\r
135         return !(a == b);\r
136 }\r
137 \r
138 \r
139 } // namespace lyx\r
140 \r
141 #endif // TOC_BACKEND_H\r