3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author Jean-Marc Lasgouttes
7 * \author Angus Leeming
8 * \author Abdelrazak Younes
10 * Full author contact details are available in file CREDITS.
18 #include "bufferparams.h"
19 #include "funcrequest.h"
21 #include "LyXAction.h"
22 #include "paragraph.h"
23 #include "pariterator.h"
32 void outline(OutlineOp mode, LCursor & cur)
35 Buffer * buf = & cur.buffer();
36 pit_type & pit = cur.pit();
37 ParagraphList & pars = buf->text().paragraphs();
38 ParagraphList::iterator bgn = pars.begin();
39 ParagraphList::iterator s = boost::next(bgn, pit);
40 ParagraphList::iterator p = s;
41 ParagraphList::iterator end = pars.end();
43 LyXTextClass::const_iterator lit =
44 buf->params().getLyXTextClass().begin();
45 LyXTextClass::const_iterator const lend =
46 buf->params().getLyXTextClass().end();
48 int const thistoclevel = s->layout()->toclevel;
54 for (; p != end; ++p) {
55 toclevel = p->layout()->toclevel;
56 if (toclevel != LyXLayout::NOT_IN_TOC
57 && toclevel <= thistoclevel) {
61 ParagraphList::iterator q = s;
66 for (; q != bgn; --q) {
67 toclevel = q->layout()->toclevel;
68 if (toclevel != LyXLayout::NOT_IN_TOC
69 && toclevel <= thistoclevel) {
73 pit_type const newpit = std::distance(pars.begin(), q);
74 pit_type const len = std::distance(s, p);
77 s = boost::next(pars.begin(), pit);
78 ParagraphList::iterator t = boost::next(s, len);
86 for (; p != end; ++p) {
87 toclevel = p->layout()->toclevel;
88 if (toclevel != LyXLayout::NOT_IN_TOC
89 && toclevel <= thistoclevel) {
93 ParagraphList::iterator q = p;
98 for (; q != end; ++q) {
99 toclevel = q->layout()->toclevel;
100 if (toclevel != LyXLayout::NOT_IN_TOC
101 && toclevel <= thistoclevel) {
105 pit_type const newpit = std::distance(pars.begin(), q);
106 pit_type const len = std::distance(s, p);
107 pars.insert(q, s, p);
108 s = boost::next(pars.begin(), pit);
109 ParagraphList::iterator t = boost::next(s, len);
115 for (; lit != lend; ++lit) {
116 if ((*lit)->toclevel == thistoclevel + 1 &&
117 s->layout()->labeltype == (*lit)->labeltype) {
124 for (; lit != lend; ++lit) {
125 if ((*lit)->toclevel == thistoclevel - 1 &&
126 s->layout()->labeltype == (*lit)->labeltype) {