3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
9 * Full author contact details are available in file CREDITS.
14 #ifndef LYX_PREAMBLE_H
15 #define LYX_PREAMBLE_H
30 class TeX2LyXDocClass;
38 std::string inputencoding() const { return h_inputencoding; }
40 void setInputencoding(std::string const & e) { h_inputencoding = e; }
42 std::string notefontcolor() const { return h_notefontcolor; }
44 bool refstyle() const { return h_use_refstyle; }
46 bool fontCJKSet() const { return h_font_cjk_set; }
48 std::string fontCJK() const { return h_font_cjk; }
50 void fontCJK(std::string const & f) { h_font_cjk_set = true; h_font_cjk = f; }
52 bool minted() const { return h_use_minted; }
53 /// The document language
54 std::string docLanguage() const { return h_language; }
55 /// The language of text which is not explicitly marked
56 std::string defaultLanguage() const { return default_language; }
57 /// The quotation marks style
58 std::string quotesStyle() const { return h_quotes_style; }
60 bool usePolyglossia() const;
62 std::string use_indices() const { return h_use_indices; }
64 std::string polyglossia2lyx(std::string const & language);
66 bool indentParagraphs() const;
68 bool isPackageUsed(std::string const & package) const;
70 bool isPackageAutoLoaded(std::string const & package) const;
72 std::vector<std::string>
73 getPackageOptions(std::string const & package) const;
74 /// Tell that \p package will be loaded automatically by LyX.
75 /// This has only an effect if \p package is prepared for
76 /// autoloading in parse().
77 void registerAutomaticallyLoadedPackage(std::string const & package);
79 void addModule(std::string const & module);
81 void suppressDate(bool suppress);
83 std::string citeEngine() const { return h_cite_engine; }
85 void citeEngine(std::string const & e) { h_cite_engine = e; }
87 std::string multibib() const { return h_multibib; }
89 void multibib(std::string const & s) { h_multibib = s; }
91 bool titleLayoutFound() const { return title_layout_found; }
93 void titleLayoutFound(bool found) { title_layout_found = found; }
94 /// Register an author named \p name in the author list
95 void registerAuthor(std::string const & name, std::string const & initials);
96 /// Get author named \p name (must be registered first)
97 Author const & getAuthor(std::string const & name) const;
98 /// Get number of arguments of special table column type \c or -1
99 /// if no column type \p c exists
100 int getSpecialTableColumnArguments(char c) const;
102 /// Parses the LaTeX preamble into internal data
103 void parse(Parser & p, std::string const & forceclass,
104 TeX2LyXDocClass & tc);
105 /// Parse the encoding from a preamble. *this is unusable afterwards.
106 std::string parseEncoding(Parser & p, std::string const & forceclass);
107 /// Writes the LyX file header from internal data
108 bool writeLyXHeader(std::ostream & os, bool subdoc,
109 std::string const & outfiledir);
111 /// known polyglossia language names (including variants)
112 static const char * const polyglossia_languages[];
113 /// the same as polyglossia_languages with .lyx names
114 static const char * const coded_polyglossia_languages[];
116 std::vector<std::string> biblatex_bibliographies;
118 std::vector<std::string> biblatex_encodings;
120 std::string bibencoding;
122 std::string docencoding;
126 void parse(Parser & p, std::string const & forceclass,
127 bool detectEncoding, TeX2LyXDocClass & tc);
129 std::map<std::string, std::vector<std::string> > used_packages;
130 /// Packages that will be loaded automatically by LyX
131 std::set<std::string> auto_packages;
133 std::vector<std::string> used_modules;
135 /// needed to handle encodings with babel
137 /// the main non-CJK language
138 std::string default_language;
139 /// Was babel called explicitly?
142 /// was at least one title layout found?
143 bool title_layout_found;
145 /// used for the handling of \newindex
148 std::ostringstream h_preamble;
149 std::string h_backgroundcolor;
150 std::string h_multibib;
151 std::string h_biblio_style;
152 std::string h_biblio_options;
153 std::string h_biblatex_bibstyle;
154 std::string h_biblatex_citestyle;
155 std::string h_bibtex_command;
156 std::string h_boxbgcolor;
157 std::string h_cite_engine;
158 std::string h_cite_engine_type;
160 std::string h_defskip;
161 bool h_dynamic_quotes;
162 std::string h_float_placement;
163 std::string h_fontcolor;
164 std::string h_fontencoding;
165 std::string h_font_math[2];
166 std::string h_font_roman[2];
167 std::string h_font_sans[2];
168 std::string h_font_typewriter[2];
169 std::string h_font_roman_opts;
170 std::string h_font_sans_opts;
171 std::string h_font_typewriter_opts;
172 std::string h_font_default_family;
173 bool h_use_non_tex_fonts;
174 std::string h_font_sc;
175 std::string h_font_roman_osf;
176 std::string h_font_sans_osf;
177 std::string h_font_typewriter_osf;
178 std::string h_font_sf_scale[2];
179 std::string h_font_tt_scale[2];
181 std::string h_font_cjk;
182 std::string h_use_microtype;
183 std::string h_use_lineno;
184 std::string h_lineno_options;
185 std::string h_is_mathindent;
186 std::string h_math_numbering_side;
187 std::string h_mathindentation;
188 std::string h_graphics;
189 std::string h_default_output_format;
190 std::string h_html_be_strict;
191 std::string h_html_css_as_file;
192 std::string h_html_math_output;
193 std::string h_index[99];
194 std::string h_index_command;
195 std::string h_inputencoding;
196 std::string h_justification;
197 std::string h_language;
198 std::string h_language_package;
199 std::string h_listings_params;
200 std::string h_maintain_unincluded_children;
201 std::string h_margins;
202 std::string h_notefontcolor;
203 std::string h_options;
204 std::string h_output_changes;
205 std::string h_change_bars;
206 std::string h_output_sync;
207 std::string h_output_sync_macro;
208 std::string h_papercolumns;
209 std::string h_paperfontsize;
210 std::string h_paperorientation;
211 std::string h_paperpagestyle;
212 std::string h_papersides;
213 std::string h_papersize;
214 std::string h_paragraph_indentation;
215 /// necessary to set the separation when \setlength is parsed
216 std::string h_paragraph_separation;
217 std::string h_pdf_title;
218 std::string h_pdf_author;
219 std::string h_pdf_subject;
220 std::string h_pdf_keywords;
221 std::string h_pdf_bookmarks;
222 std::string h_pdf_bookmarksnumbered;
223 std::string h_pdf_bookmarksopen;
224 std::string h_pdf_bookmarksopenlevel;
225 std::string h_pdf_breaklinks;
226 std::string h_pdf_pdfborder;
227 std::string h_pdf_colorlinks;
228 std::string h_pdf_backref;
229 std::string h_pdf_pdfusetitle;
230 std::string h_pdf_pagemode;
231 std::string h_pdf_quoted_options;
232 std::string h_quotes_style;
233 std::string h_secnumdepth;
234 std::string h_shortcut[99];
235 std::string h_spacing;
236 std::string h_suppress_date;
237 std::string h_save_transient_properties;
238 std::string h_textclass;
239 std::string h_tocdepth;
240 std::string h_tracking_changes;
241 std::string h_use_bibtopic;
242 std::string h_use_dash_ligatures;
243 std::string h_use_indices;
244 std::string h_use_geometry;
245 std::map<std::string, std::string> h_use_packages;
246 std::string h_use_default_options;
247 std::string h_use_hyperref;
248 std::vector<std::string> h_includeonlys;
253 * Add package \p name with options \p options to used_packages.
254 * Remove options from \p options that we don't want to output.
256 void add_package(std::string const & name,
257 std::vector<std::string> & options);
259 void handle_hyperref(std::vector<std::string> & options);
261 void handle_geometry(std::vector<std::string> & options);
263 void handle_package(Parser &p, std::string const & name,
264 std::string const & opts, bool in_lyx_preamble,
265 bool detectEncoding);
267 void handle_if(Parser & p, bool in_lyx_preamble);
271 /// special table column types
272 std::map<char, int> special_columns_;
274 std::map<std::string, std::string> extra_package_options_;
278 extern Preamble preamble;