]> git.lyx.org Git - lyx.git/blob - src/OutputParams.h
Natbib authoryear uses (Ref1; Ref2) by default.
[lyx.git] / src / OutputParams.h
1 // -*- C++ -*-
2 /**
3  * \file OutputParams.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  *  \author Angus Leeming
8  *
9  * Full author contact details are available in file CREDITS.
10  */
11
12 #ifndef OUTPUTPARAMS_H
13 #define OUTPUTPARAMS_H
14
15
16 #include "support/shared_ptr.h"
17 #include "Changes.h"
18
19
20 namespace lyx {
21
22
23 class Encoding;
24 class ExportData;
25 class Font;
26 class Language;
27
28 class OutputParams {
29 public:
30         enum FLAVOR {
31                 DVILUATEX,
32                 LATEX,
33                 LUATEX,
34                 PDFLATEX,
35                 XETEX,
36                 XML,
37                 HTML,
38                 TEXT,
39                 LYX
40         };
41         
42         enum MathFlavor {
43                 NotApplicable,
44                 MathAsMathML,
45                 MathAsHTML,
46                 MathAsImages,
47                 MathAsLaTeX
48         };
49
50         enum TableCell {
51                 NO,
52                 PLAIN,
53                 ALIGNED
54         };
55
56         enum Float {
57                 NONFLOAT,
58                 MAINFLOAT,
59                 SUBFLOAT
60         };
61
62         OutputParams(Encoding const *);
63         ~OutputParams();
64
65         /** The file that we export depends occasionally on what is to
66             compile the file.
67         */
68         FLAVOR flavor;
69         /// is it some flavor of LaTeX?
70         bool isLaTeX() const;
71         /// does this flavour support full unicode?
72         bool isFullUnicode() const;
73         
74         /// Same, but for math output, which only matter is XHTML output.
75         MathFlavor math_flavor;
76         
77         /** Are we to write a 'nice' LaTeX file or not.
78             This esentially seems to mean whether InsetInclude, InsetGraphics
79             and InsetExternal should add the absolute path to any external
80             files or not.
81         */
82         bool nice;
83
84         /** Is this a real child (i.e., compiled as a child)?
85             This depends on wherefrom we export the buffer. Even children
86             that have a master can be compiled standalone.
87         */
88         mutable bool is_child;
89
90         /** moving_arg == true means that the environment in which the inset
91             is typeset is a moving argument. The inset should take care about
92             fragile commands by preceding the latex with \\protect.
93         */
94         bool moving_arg;
95
96         /** intitle == true means that the environment in which the
97             inset is typeset is part of a title (before a \\maketitle).
98             Footnotes in such environments have moving arguments.
99         */
100         bool intitle;
101
102         /** inulemcmd == true means that the environment in which the
103             inset is typeset is part of a ulem command (\uline, \uuline,
104             \uwave, or \sout). Insets that output latex commands relying
105             on local assignments (such as \cite) should enclose such
106             commands in \mbox{} in order to avoid breakage.
107         */
108         mutable bool inulemcmd;
109
110         /** the font at the point where the inset is
111          */
112         Font const * local_font;
113
114         /** Document language babel name
115          */
116         mutable std::string document_language;
117
118         /** The master language. Non-null only for child documents.
119          */
120         mutable Language const * master_language;
121
122         /** Current stream encoding. Only used for LaTeX.
123             This must be set to the document encoding (via the constructor)
124             before output starts. Afterwards it must be kept up to date for
125             each single character (\sa Paragraph::latex).
126             This does also mean that you need to set it back if you use a
127             copy (e.g. in insets): \code
128             int InsetFoo::latex(..., OutputParams const & runparams_in) const
129             {
130                 OutputParams runparams(runparams_in);
131                 runparams.inComment = true;
132                 ...
133                 InsetBla::latex(..., runparams);
134                 ...
135                 runparams_in.encoding = runparams.encoding;
136             }
137             \endcode
138          */
139         mutable Encoding const * encoding;
140
141         /** free_spacing == true means that the inset is in a free-spacing
142             paragraph.
143         */
144         bool free_spacing;
145
146         /** This var is set by the return value from BufferParams::writeLaTeX
147         */
148         bool use_babel;
149
150         /** Do we use polyglossia (instead of babel)?
151         */
152         bool use_polyglossia;
153
154         /** Are we generating multiple indices?
155         */
156         bool use_indices;
157
158         /** Are we using japanese (pLaTeX)?
159         */
160         bool use_japanese;
161
162         /** Customized bibtex_command
163         */
164         mutable std::string bibtex_command;
165
166         /** Customized index_command
167         */
168         mutable std::string index_command;
169
170         /** Line length to use with plaintext or LaTeX export.
171         */
172         size_type linelen;
173
174         /** The depth of the current paragraph, set for plaintext
175          *  export and used by InsetTabular
176          */
177         int depth;
178
179         /** Export data filled in by the latex(), docbook() etc methods.
180             This is a hack: Make it possible to add stuff to constant
181             OutputParams instances.
182         */
183         shared_ptr<ExportData> exportdata;
184
185         /** Whether we are inside a comment inset. Insets that are including
186          *  external files like InsetGraphics, InsetInclude and InsetExternal
187          *  may only write the usual output and must not attempt to do
188          *  something with the included files (e.g. copying, converting)
189          *  if this flag is true, since they may not exist.
190          */
191         bool inComment;
192
193         /** Whether we are in a table cell.
194          *  For newline, it matters whether its content is aligned or not.
195          */
196         TableCell inTableCell;
197
198         /** Whether we are inside a float or subfloat.
199          *  Needed for subfloat detection on the command line.
200          */
201         Float inFloat;
202
203         /** Whether we are inside an index inset.
204          *  ERT needs to know this, due to the active chars.
205          */
206         bool inIndexEntry;
207
208         /** Whether we are inside an IPA inset.
209          *  Needed for proper IPA output.
210          */
211         bool inIPA;
212
213         /** Whether we are inside an inset that is logically deleted.
214          *  A value > 0 indicates a deleted inset.
215          */
216         int inDeletedInset;
217
218         /** The change information of the outermost logically deleted inset.
219          *  changeOfDeletedInset shall only be evaluated if inDeletedInset > 0.
220          */ 
221         Change changeOfDeletedInset;
222
223         /** allow output of only part of the top-level paragraphs
224          *  par_begin: beginning paragraph
225          */
226         mutable pit_type par_begin;
227
228         /** allow output of only part of the top-level paragraphs
229          *  par_end: par_end-1 is the ending paragraph
230          *  if par_begin=par_end, output all paragraphs
231          */
232         mutable pit_type par_end;
233
234         /// Id of the last paragraph before an inset
235         mutable int lastid;
236
237         /// Last position in the last paragraph before an inset
238         mutable int lastpos;
239
240         /// is this the last paragraph in the current buffer/inset?
241         bool isLastPar;
242         
243
244         /** whether or not do actual file copying and image conversion
245          *  This mode will be used to preview the source code
246          */
247         bool dryrun;
248         
249         /// Should we output verbatim or escape LaTeX's special chars?
250         bool pass_thru;
251         
252         /// Should we output captions?
253         bool html_disable_captions;
254         
255         /// Are we already in a paragraph?
256         bool html_in_par;
257         
258         /// Does the present context even permit paragraphs?
259         bool html_make_pars;
260         
261         /// Are we generating this material for inclusion in a TOC-like entity?
262         bool for_toc;
263         
264         /// Are we generating this material for inclusion in a tooltip?
265         bool for_tooltip;
266
267         /// Are we generating this material for use by advanced search?
268         bool for_search;
269
270         /// Include all children notwithstanding the use of \includeonly
271         bool includeall;
272
273         /// Explicit output folder, if any is desired
274         std::string export_folder;
275 };
276
277
278 } // namespace lyx
279
280 #endif // NOT OUTPUTPARAMS_H