]> git.lyx.org Git - lyx.git/blob - src/insets/InsetLayout.h
DocBook: ensure that <info>-related insets in the abstract are not generated in the...
[lyx.git] / src / insets / InsetLayout.h
1 // -*- C++ -*-
2 /**
3  * \file InsetLayout.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Martin Vermeer
8  * \author Richard Heck
9  *
10  * Full author contact details are available in file CREDITS.
11  */
12
13 #ifndef INSET_LAYOUT_H
14 #define INSET_LAYOUT_H
15
16 #include "ColorCode.h"
17 #include "FontInfo.h"
18 #include "Layout.h"
19
20 #include "support/docstring.h"
21
22 #include <set>
23 #include <string>
24
25 namespace lyx {
26
27 class Lexer;
28 class TextClass;
29
30 ///
31 class InsetLayout {
32 public:
33         ///
34         InsetLayout() { labelfont_.setColor(Color_error); }
35         ///
36         enum InsetDecoration {
37                 CLASSIC,
38                 MINIMALISTIC,
39                 CONGLOMERATE,
40                 DEFAULT
41         };
42         ///
43         enum InsetLyXType {
44                 NOLYXTYPE,
45                 CHARSTYLE,
46                 CUSTOM,
47                 END,
48                 STANDARD
49         };
50         ///
51         enum InsetLaTeXType {
52                 NOLATEXTYPE,
53                 COMMAND,
54                 ENVIRONMENT,
55                 ILT_ERROR
56         };
57         ///
58         bool read(Lexer & lexrc, TextClass const & tclass,
59                         bool validating = false);
60         ///
61         docstring name() const { return name_; }
62         ///
63         void setName(docstring const & n) { name_ = n; }
64         ///
65         InsetLyXType lyxtype() const { return lyxtype_; }
66         ///
67         docstring labelstring() const { return labelstring_; }
68         ///
69         docstring menustring() const { return menustring_; }
70         ///
71         bool contentaslabel() const { return contentaslabel_; }
72         ///
73         InsetDecoration decoration() const { return decoration_; }
74         ///
75         InsetLaTeXType latextype() const { return latextype_; }
76         ///
77         std::string latexname() const { return latexname_; }
78         ///
79         std::string latexparam() const { return latexparam_; }
80         ///
81         docstring leftdelim() const { return leftdelim_; }
82         ///
83         docstring rightdelim() const { return rightdelim_; }
84         ///
85         FontInfo font() const { return font_; }
86         ///
87         FontInfo labelfont() const { return labelfont_; }
88         ///
89         ColorCode bgcolor() const { return bgcolor_; }
90         ///
91         Layout::LaTeXArgMap const & latexargs() const { return latexargs_; }
92         ///
93         Layout::LaTeXArgMap const & postcommandargs() const { return postcommandargs_; }
94         /// Returns latexargs() + postcommandargs().
95         /// But note that it returns a *copy*, not a reference, so do not do
96         /// anything like:
97         ///   Layout::LaTeXArgMap::iterator it = args().begin();
98         ///   Layout::LaTeXArgMap::iterator en = args().end();
99         /// Those are iterators for different containers.
100         Layout::LaTeXArgMap args() const;
101         ///
102         int optArgs() const;
103         ///
104         int requiredArgs() const;
105         ///
106         docstring preamble() const { return preamble_; }
107         /// Get language dependent macro definitions needed for this inset
108         docstring const langpreamble() const { return langpreamble_; }
109         /// Get language and babel dependent macro definitions needed for
110         /// this inset
111         docstring const babelpreamble() const { return babelpreamble_; }
112         ///
113         bool fixedwidthpreambleencoding() const { return fixedwidthpreambleencoding_; }
114         ///
115         docstring counter() const { return counter_; }
116         ///
117         docstring refprefix() const { return refprefix_; }
118         /// The tag enclosing all the material in this inset. Default is "span".
119         std::string const & htmltag() const;
120         /// Additional attributes for inclusion with the start tag. Default (if
121         /// a tag is provided) is: class="name".
122         std::string const & htmlattr() const;
123         /// Tag for individual paragraphs in the inset. Default is none.
124         std::string const & htmlinnertag() const { return htmlinnertag_; }
125         /// Attributes for that tag. Default (if a tag is provided) is:
126         /// class="name_inner".
127         std::string const & htmlinnerattr() const;
128         /// A label for this environment, possibly including a reference
129         /// to a counter. E.g., for footnote, it might be:
130         ///    \arabic{footnote}
131         /// No default.
132         /// FIXME Could we get this from the layout?
133         std::string const & htmllabel() const { return htmllabel_; }
134         ///
135         inline std::string htmllabeltag() const { return "span"; }
136         ///
137         std::string htmllabelattr() const
138                 { return "class=\"" + defaultCSSClass() + "_label\""; }
139         /// CSS associated with this inset.
140         docstring htmlstyle() const;
141         /// Additional material for the header.
142         docstring htmlpreamble() const { return htmlpreamble_; }
143         /// Whether this inset represents a "block" of material, i.e., a set
144         /// of paragraphs of its own (true), or should be run into the previous
145         /// paragraph (false). Examples:
146         ///   For branches, this is false.
147         ///   For footnotes, this is true.
148         /// Defaults to true.
149         bool htmlisblock() const { return htmlisblock_; }
150         ///
151         std::string docbooktag() const { return docbooktag_; }
152         ///
153         std::string docbooktagtype() const { return docbooktagtype_; }
154         ///
155         std::string docbookattr() const { return docbookattr_; }
156         ///
157         std::string const & docbookininfo() const;
158         ///
159         bool docbooksection() const { return docbooksection_; }
160         ///
161         std::string docbookwrappertag() const { return docbookwrappertag_; }
162         ///
163         std::string docbookwrappertagtype() const { return docbookwrappertagtype_; }
164         ///
165         std::string docbookwrapperattr() const { return docbookwrapperattr_; }
166         ///
167         std::set<std::string> required() const { return required_; }
168         ///
169         bool isMultiPar() const { return multipar_; }
170         ///
171         bool forcePlainLayout() const { return forceplain_; }
172         ///
173         bool allowParagraphCustomization() const { return custompars_; }
174         ///
175         bool isPassThru() const { return passthru_; }
176         ///
177         docstring passThruChars() const { return passthru_chars_; }
178         ///
179         std::string newlineCmd() const { return newline_cmd_; }
180         ///
181         bool parbreakIsNewline() const { return parbreakisnewline_; }
182         ///
183         bool parbreakIgnored() const { return parbreakignored_; }
184         ///
185         bool isNeedProtect() const { return needprotect_; }
186         ///
187         bool needsCProtect() const { return needcprotect_; }
188         /// Protection of some elements such as \ref and \cite
189         /// in \mbox (needed by commands building on soul or ulem)
190         bool isNeedMBoxProtect() const { return needmboxprotect_; }
191         ///
192         bool isFreeSpacing() const { return freespacing_; }
193         ///
194         bool isKeepEmpty() const { return keepempty_; }
195         ///
196         bool forceLTR() const { return forceltr_; }
197         ///
198         bool forceOwnlines() const { return forceownlines_; }
199         ///
200         bool isInToc() const { return intoc_; }
201         ///
202         bool spellcheck() const { return spellcheck_; }
203         ///
204         bool resetsFont() const { return resetsfont_; }
205         ///
206         bool isDisplay() const { return display_; }
207         ///
208         bool forceLocalFontSwitch() const { return forcelocalfontswitch_; }
209         ///
210         docstring const & obsoleted_by() const { return obsoleted_by_; }
211         ///
212         bool addToToc() const { return add_to_toc_; }
213         ///
214         std::string tocType() const { return toc_type_; }
215         ///
216         bool isTocCaption() const { return is_toc_caption_; }
217         ///
218         bool editExternally () const { return edit_external_; }
219 private:
220         ///
221         void makeDefaultCSS() const;
222         ///
223         std::string defaultCSSClass() const;
224         ///
225         void readArgument(Lexer &);
226         ///
227         docstring name_ = from_ascii("undefined");
228         /**
229                 * This is only used (at present) to decide where to put them on the menus.
230                 * Values are 'charstyle', 'custom' (things that by default look like a
231                 * footnote), 'standard'.
232                 */
233         InsetLyXType lyxtype_ = STANDARD;
234         ///
235         docstring labelstring_ = from_ascii("UNDEFINED");
236         ///
237         docstring menustring_;
238         ///
239         bool contentaslabel_ = false;
240         ///
241         InsetDecoration decoration_ = DEFAULT;
242         ///
243         InsetLaTeXType latextype_ = NOLATEXTYPE;
244         ///
245         std::string latexname_;
246         ///
247         std::string latexparam_;
248         ///
249         docstring leftdelim_;
250         ///
251         docstring rightdelim_;
252         ///
253         FontInfo font_ = inherit_font;
254         ///
255         FontInfo labelfont_ = sane_font;
256         ///
257         ColorCode bgcolor_ = Color_error;
258         ///
259         docstring counter_;
260         ///
261         docstring preamble_;
262         /// Language dependent macro definitions needed for this inset
263         docstring langpreamble_;
264         /// Language and babel dependent macro definitions needed for this inset
265         docstring babelpreamble_;
266         ///
267         bool fixedwidthpreambleencoding_ = false;
268         ///
269         docstring refprefix_;
270         ///
271         mutable std::string htmltag_;
272         ///
273         mutable std::string htmlattr_;
274         ///
275         std::string htmlinnertag_;
276         ///
277         mutable std::string htmlinnerattr_;
278         ///
279         std::string htmllabel_;
280         ///
281         docstring htmlstyle_;
282         /// Cache for default CSS info for this inset.
283         mutable docstring htmldefaultstyle_;
284         /// Cache for default CSS class.
285         mutable std::string defaultcssclass_;
286         /// Whether to force generation of default CSS even if some is given.
287         /// False by default.
288         bool htmlforcecss_ = false;
289         ///
290         docstring htmlpreamble_;
291         ///
292         bool htmlisblock_ = true;
293         ///
294         std::string docbooktag_;
295         ///
296         std::string docbooktagtype_;
297         ///
298         std::string docbookattr_;
299         ///
300         mutable std::string docbookininfo_;
301         ///
302         bool docbooksection_ = false;
303         ///
304         std::string docbookwrappertag_;
305         ///
306         std::string docbookwrappertagtype_;
307         ///
308         std::string docbookwrapperattr_;
309         ///
310         std::set<std::string> required_;
311         ///
312         bool multipar_ = true;
313         ///
314         bool custompars_ = true;
315         ///
316         bool forceplain_ = false;
317         ///
318         bool passthru_ = false;
319         ///
320         docstring passthru_chars_;
321         ///
322         std::string newline_cmd_;
323         ///
324         bool parbreakisnewline_ = false;
325         ///
326         bool parbreakignored_ = false;
327         ///
328         bool freespacing_ = false;
329         ///
330         bool keepempty_ = false;
331         ///
332         bool forceltr_ = false;
333         ///
334         bool forceownlines_ = false;
335         ///
336         bool needprotect_ = false;
337         ///
338         bool needcprotect_ = false;
339         ///
340         bool needmboxprotect_ = false;
341         /// should the contents be written to TOC strings?
342         bool intoc_ = false;
343         /// check spelling of this inset?
344         bool spellcheck_ = true;
345         ///
346         bool resetsfont_ = false;
347         ///
348         bool display_ = true;
349         ///
350         bool forcelocalfontswitch_ = false;
351         /** Name of an insetlayout that has replaced this insetlayout.
352             This is used to rename an insetlayout, while keeping backward
353             compatibility
354         */
355         docstring obsoleted_by_;
356         ///
357         Layout::LaTeXArgMap latexargs_;
358         ///
359         Layout::LaTeXArgMap postcommandargs_;
360         ///
361         bool add_to_toc_ = false;
362         ///
363         std::string toc_type_;
364         ///
365         bool is_toc_caption_ = false;
366         ///
367         bool edit_external_ = false;
368 };
369
370 ///
371 InsetLayout::InsetLyXType translateLyXType(std::string const & str);
372 InsetLayout::InsetDecoration translateDecoration(std::string const & str);
373
374 } // namespace lyx
375
376 #endif