]> git.lyx.org Git - lyx.git/blob - src/OutputParams.h
5631907760a00660af6582993095efbc4124c4dc
[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                 LATEX,
32                 LUATEX,
33                 PDFLATEX,
34                 XETEX,
35                 XML,
36                 HTML,
37                 TEXT
38         };
39         
40         enum MathFlavor {
41                 NotApplicable,
42                 MathAsMathML,
43                 MathAsHTML,
44                 MathAsImages,
45                 MathAsLaTeX
46         };
47
48         enum TableCell {
49                 NO,
50                 PLAIN,
51                 ALIGNED
52         };
53
54         enum Float {
55                 NONFLOAT,
56                 MAINFLOAT,
57                 SUBFLOAT
58         };
59
60         OutputParams(Encoding const *);
61         ~OutputParams();
62
63         /** The file that we export depends occasionally on what is to
64             compile the file.
65         */
66         FLAVOR flavor;
67         /// is it some flavor of LaTeX?
68         bool isLaTeX() const;
69         /// does this flavour support full unicode?
70         bool isFullUnicode() const;
71         
72         /// Same, but for math output, which only matter is XHTML output.
73         MathFlavor math_flavor;
74         
75         /** Are we to write a 'nice' LaTeX file or not.
76             This esentially seems to mean whether InsetInclude, InsetGraphics
77             and InsetExternal should add the absolute path to any external
78             files or not.
79         */
80         bool nice;
81
82         /** moving_arg == true means that the environment in which the inset
83             is typeset is a moving argument. The inset should take care about
84             fragile commands by preceding the latex with \\protect.
85         */
86         bool moving_arg;
87
88         /** intitle == true means that the environment in which the
89             inset is typeset is part of a title (before a \\maketitle).
90             Footnotes in such environments have moving arguments.
91         */
92         bool intitle;
93
94         /** inulemcmd == true means that the environment in which the
95             inset is typeset is part of a ulem command (\uline, \uuline,
96             \uwave, or \sout). Insets that output latex commands relying
97             on local assignments (such as \cite) should enclose such
98             commands in \mbox{} in order to avoid breakage.
99         */
100         mutable bool inulemcmd;
101
102         /** Whether we are in the process of outputting title information. 
103          */ 
104         mutable bool inTitle; 
105
106         /** Whether we have arleady output \maketitle or whatever.
107          */
108         mutable bool didTitle;
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 inset that is logically deleted.
209          *  A value > 0 indicates a deleted inset.
210          */
211         int inDeletedInset;
212
213         /** The change information of the outermost logically deleted inset.
214          *  changeOfDeletedInset shall only be evaluated if inDeletedInset > 0.
215          */ 
216         Change changeOfDeletedInset;
217
218         /** allow output of only part of the top-level paragraphs
219          *  par_begin: beginning paragraph
220          */
221         mutable pit_type par_begin;
222
223         /** allow output of only part of the top-level paragraphs
224          *  par_end: par_end-1 is the ending paragraph
225          *  if par_begin=par_end, output all paragraphs
226          */
227         mutable pit_type par_end;
228
229         /// is this the last paragraph in the current buffer/inset?
230         bool isLastPar;
231         
232
233         /** whether or not do actual file copying and image conversion
234          *  This mode will be used to preview the source code
235          */
236         bool dryrun;
237         
238         /// Should we output verbatim or escape LaTeX's special chars?
239         bool pass_thru;
240         
241         /// Should we output captions?
242         bool html_disable_captions;
243         
244         /// Are we already in a paragraph?
245         bool html_in_par;
246         
247         /// Does the present context even permit paragraphs?
248         bool html_make_pars;
249         
250         /// Are we generating this material for inclusion in a TOC-like entity?
251         bool for_toc;
252         
253         /// Include all children notwithstanding the use of \includeonly
254         bool includeall;
255 };
256
257
258 } // namespace lyx
259
260 #endif // NOT OUTPUTPARAMS_H