]> git.lyx.org Git - lyx.git/blob - src/lyxlayout.h
ws changes only
[lyx.git] / src / lyxlayout.h
1 // -*- C++ -*-
2 /**
3  * \file lyxlayout.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Lars Gullik Bjønnes
8  * \author Jean-Marc Lasgouttes
9  * \author André Pönitz
10  *
11  * Full author contact details are available in file CREDITS.
12  */
13
14 #ifndef LYX_LAYOUT_H
15 #define LYX_LAYOUT_H
16
17 #include "lyxfont.h"
18 #include "layout.h"
19 #include "Spacing.h"
20
21 #include <string>
22
23 class LyXLex;
24 class LyXTextClass;
25
26 ///
27 class LyXLayout {
28 public:
29         ///
30         LyXLayout();
31         ///
32         bool Read(LyXLex &, LyXTextClass const &);
33         ///
34         void readAlign(LyXLex &);
35         ///
36         void readAlignPossible(LyXLex &);
37         ///
38         void readLabelType(LyXLex &);
39         ///
40         void readEndLabelType(LyXLex &);
41         ///
42         void readMargin(LyXLex &);
43         ///
44         void readLatexType(LyXLex &);
45         ///
46         void readSpacing(LyXLex &);
47         ///
48         std::string const & name() const;
49         ///
50         void setName(std::string const & n);
51         ///
52         std::string const & obsoleted_by() const;
53         ///
54         std::string const & depends_on() const;
55         ///
56         std::string const & latexname() const { return latexname_; }
57         ///
58         std::string const & labelstring() const { return labelstring_; }
59         ///
60         std::string const & endlabelstring() const { return endlabelstring_; }
61         ///
62         std::string const & preamble() const { return preamble_; }
63         ///
64         std::string const & latexparam() const { return latexparam_; }
65         ///
66         std::string const & labelstring_appendix() const {
67                 return labelstring_appendix_;
68         }
69         /** Default font for this layout/environment.
70             The main font for this kind of environment. If an attribute has
71             LyXFont::INHERITED_*, it means that the value is specified by
72             the defaultfont for the entire layout. If we are nested, the
73             font is inherited from the font in the environment one level
74             up until the font is resolved. The values LyXFont::IGNORE_*
75             and LyXFont::TOGGLE are illegal here.
76         */
77         LyXFont font;
78
79         /** Default font for labels.
80             Interpretation the same as for font above
81         */
82         LyXFont labelfont;
83
84         /** Resolved version of the font for this layout/environment.
85             This is a resolved version the default font. The font is resolved
86             against the defaultfont of the entire layout.
87         */
88         LyXFont resfont;
89
90         /** Resolved version of the font used for labels.
91             This is a resolved version the label font. The font is resolved
92             against the defaultfont of the entire layout.
93         */
94         LyXFont reslabelfont;
95
96         /// Text that dictates how wide the left margin is on the screen
97         std::string leftmargin;
98         /// Text that dictates how wide the right margin is on the screen
99         std::string rightmargin;
100         /// Text that dictates how much space to leave after a potential label
101         std::string labelsep;
102         /// Text that dictates how much space to leave before a potential label
103         std::string labelindent;
104         /// Text that dictates the width of the indentation of indented pars
105         std::string parindent;
106         ///
107         float parskip;
108         ///
109         float itemsep;
110         ///
111         float topsep;
112         ///
113         float bottomsep;
114         ///
115         float labelbottomsep;
116         ///
117         float parsep;
118         ///
119         Spacing spacing;
120         ///
121         LyXAlignment align;
122         ///
123         LyXAlignment alignpossible;
124         ///
125         LYX_LABEL_TYPES labeltype;
126         ///
127         LYX_END_LABEL_TYPES endlabeltype;
128         ///
129         LYX_MARGIN_TYPE margintype;
130         ///
131         bool fill_top;
132         ///
133         bool fill_bottom;
134         ///
135         bool newline_allowed;
136         ///
137         bool nextnoindent;
138         ///
139         bool free_spacing;
140         ///
141         bool pass_thru;
142         ///
143         bool is_environment;
144         /// show this in toc
145         int toclevel;
146         /// for new environment insets
147         std::string latexheader;
148         /// for new environment insets
149         std::string latexfooter;
150         /// for new environment insets
151         std::string latexparagraph;
152
153         /** true when the fragile commands in the paragraph need to be
154             \protect'ed. */
155         bool needprotect;
156         /// true when empty paragraphs should be kept.
157         bool keepempty;
158         ///
159         bool isParagraph() const {
160                 return latextype == LATEX_PARAGRAPH;
161         }
162         ///
163         bool isCommand() const {
164                 return latextype == LATEX_COMMAND;
165         }
166         ///
167         bool isEnvironment() const {
168                 return (latextype == LATEX_ENVIRONMENT
169                         || latextype == LATEX_BIB_ENVIRONMENT
170                         || latextype == LATEX_ITEM_ENVIRONMENT
171                         || latextype == LATEX_LIST_ENVIRONMENT);
172         }
173         /// Type of LaTeX object
174         LYX_LATEX_TYPES latextype;
175         /// Does this object belong in the title part of the document?
176         bool intitle;
177         /// Does this layout allow for an optional parameter?
178         int optionalargs;
179         /// Which counter to step
180         std::string counter;
181
182 private:
183         /// Name of the layout/paragraph environment
184         std::string name_;
185
186         /** Name of an layout that has replaced this layout.
187             This is used to rename a layout, while keeping backward
188             compatibility
189         */
190         std::string obsoleted_by_;
191
192         /** Name of an layout which preamble must come before this one
193             This is used when the preamble snippet uses macros defined in
194             another preamble
195          */
196         std::string depends_on_;
197
198         /// LaTeX name for environment
199         std::string latexname_;
200         /// Label string. "Abstract", "Reference", "Caption"...
201         std::string labelstring_;
202         ///
203         std::string endlabelstring_;
204         /// Label string inside appendix. "Appendix", ...
205         std::string labelstring_appendix_;
206         /// LaTeX parameter for environment
207         std::string latexparam_;
208         /// Macro definitions needed for this layout
209         std::string preamble_;
210 };
211
212 #endif