]> git.lyx.org Git - lyx.git/blob - src/tex2lyx/Preamble.h
ae5886e08e854c7b92fb3b6d38f46c79c7c5e72a
[lyx.git] / src / tex2lyx / Preamble.h
1 /**
2  * \file Preamble.h
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author André Pönitz
7  * \author Uwe Stöhr
8  *
9  * Full author contact details are available in file CREDITS.
10  */
11
12 // {[(
13
14 #ifndef LYX_PREAMBLE_H
15 #define LYX_PREAMBLE_H
16
17 #include "Author.h"
18
19 #include <iosfwd>
20 #include <sstream>
21 #include <string>
22 #include <vector>
23 #include <map>
24 #include <set>
25
26
27 namespace lyx {
28
29 class Parser;
30 class TeX2LyXDocClass;
31
32 class Preamble
33 {
34 public:
35         Preamble();
36
37         ///
38         std::string inputencoding() const { return h_inputencoding; }
39         ///
40         void setInputencoding(std::string const & e) { h_inputencoding = e; }
41         ///
42         std::string notefontcolor() const { return h_notefontcolor; }
43         ///
44         bool refstyle() const { return h_use_refstyle; }
45         ///
46         bool fontCJKSet() const { return h_font_cjk_set; }
47         ///
48         std::string fontCJK() const { return h_font_cjk; }
49         ///
50         void fontCJK(std::string const & f) { h_font_cjk_set = true; h_font_cjk = f; }
51         /// The document language
52         std::string docLanguage() const { return h_language; }
53         /// The language of text which is not explicitly marked
54         std::string defaultLanguage() const  { return default_language; }
55         ///
56         bool usePolyglossia() const;
57         ///
58         std::string use_indices() const { return h_use_indices; }
59         ///
60         std::string polyglossia2lyx(std::string const & language);
61         ///
62         bool indentParagraphs() const;
63         ///
64         bool isPackageUsed(std::string const & package) const;
65         ///
66         std::vector<std::string>
67         getPackageOptions(std::string const & package) const;
68         /// Tell that \p package will be loaded automatically by LyX.
69         /// This has only an effect if \p package is prepared for
70         /// autoloading in parse().
71         void registerAutomaticallyLoadedPackage(std::string const & package);
72         ///
73         void addModule(std::string const & module);
74         ///
75         void suppressDate(bool suppress);
76         ///
77         std::string citeEngine() const { return h_cite_engine; }
78         ///
79         void citeEngine(std::string const & e) { h_cite_engine = e; }
80         ///
81         bool titleLayoutFound() const { return title_layout_found; }
82         ///
83         void titleLayoutFound(bool found) { title_layout_found = found; }
84         /// Register an author named \p name in the author list
85         void registerAuthor(std::string const & name);
86         /// Get author named \p name (must be registered first)
87         Author const & getAuthor(std::string const & name) const;
88
89         /// Parses the LaTeX preamble into internal data
90         void parse(Parser & p, std::string const & forceclass,
91                    TeX2LyXDocClass & tc);
92         /// Writes the LyX file header from internal data
93         bool writeLyXHeader(std::ostream & os, bool subdoc);
94
95         /// known polyglossia language names (including variants)
96         static const char * const polyglossia_languages[];
97         /// the same as polyglossia_languages with .lyx names
98         static const char * const coded_polyglossia_languages[];
99
100 private:
101         ///
102         std::map<std::string, std::vector<std::string> > used_packages;
103         /// Packages that will be loaded automatically by LyX
104         std::set<std::string> auto_packages;
105         ///
106         std::vector<std::string> used_modules;
107
108         /// needed to handle encodings with babel
109         bool one_language;
110         /// the main non-CJK language
111         std::string default_language;
112         /// Was babel called explicitly?
113         bool explicit_babel;
114
115         /// was at least one title layout found?
116         bool title_layout_found;
117
118         std::ostringstream h_preamble;
119         std::string h_backgroundcolor;
120         std::string h_biblio_style;
121         std::string h_bibtex_command;
122         std::string h_boxbgcolor;
123         std::string h_cite_engine;
124         std::string h_cite_engine_type;
125         std::string h_color;
126         std::string h_defskip;
127         std::string h_float_placement;
128         std::string h_fontcolor;
129         std::string h_fontencoding;
130         std::string h_font_math;
131         std::string h_font_roman;
132         std::string h_font_sans;
133         std::string h_font_typewriter;
134         std::string h_font_default_family;
135         bool h_use_non_tex_fonts;
136         std::string h_font_sc;
137         std::string h_font_osf;
138         std::string h_font_sf_scale;
139         std::string h_font_tt_scale;
140         bool h_font_cjk_set;
141         std::string h_font_cjk;
142         std::string h_graphics;
143         std::string h_default_output_format;
144         std::string h_html_be_strict;
145         std::string h_html_css_as_file;
146         std::string h_html_math_output;
147         std::string h_index[99];
148         std::string h_index_command;
149         std::string h_inputencoding;
150         std::string h_justification;
151         std::string h_language;
152         std::string h_language_package;
153         std::string h_listings_params;
154         std::string h_maintain_unincluded_children;
155         std::string h_margins;
156         std::string h_notefontcolor;
157         std::string h_options;
158         std::string h_output_changes;
159         std::string h_output_sync;
160         std::string h_output_sync_macro;
161         std::string h_papercolumns;
162         std::string h_paperfontsize;
163         std::string h_paperorientation;
164         std::string h_paperpagestyle;
165         std::string h_papersides;
166         std::string h_papersize;
167         std::string h_paragraph_indentation;
168         /// necessary to set the separation when \setlength is parsed
169         std::string h_paragraph_separation;
170         std::string h_pdf_title;
171         std::string h_pdf_author;
172         std::string h_pdf_subject;
173         std::string h_pdf_keywords;
174         std::string h_pdf_bookmarks;
175         std::string h_pdf_bookmarksnumbered;
176         std::string h_pdf_bookmarksopen;
177         std::string h_pdf_bookmarksopenlevel;
178         std::string h_pdf_breaklinks;
179         std::string h_pdf_pdfborder;
180         std::string h_pdf_colorlinks;
181         std::string h_pdf_backref;
182         std::string h_pdf_pdfusetitle;
183         std::string h_pdf_pagemode;
184         std::string h_pdf_quoted_options;
185         std::string h_quotes_language;
186         std::string h_secnumdepth;
187         std::string h_shortcut[99];
188         std::string h_spacing;
189         std::string h_suppress_date;
190         std::string h_textclass;
191         std::string h_tocdepth;
192         std::string h_tracking_changes;
193         std::string h_use_bibtopic;
194         std::string h_use_indices;
195         std::string h_use_geometry;
196         std::map<std::string, std::string> h_use_packages;
197         std::string h_use_default_options;
198         std::string h_use_hyperref;
199         bool h_use_refstyle;
200
201         /*!
202          * Add package \p name with options \p options to used_packages.
203          * Remove options from \p options that we don't want to output.
204          */
205         void add_package(std::string const & name,
206                          std::vector<std::string> & options);
207         ///
208         void handle_hyperref(std::vector<std::string> & options);
209         ///
210         void handle_geometry(std::vector<std::string> & options);
211         ///
212         void handle_package(Parser &p, std::string const & name,
213                             std::string const & opts, bool in_lyx_preamble);
214         ///
215         void handle_if(Parser & p, bool in_lyx_preamble);
216
217         AuthorList authors_;
218 };
219
220
221 extern Preamble preamble;
222
223 // }])
224
225
226 } // namespace lyx
227
228 #endif