2011-10-30 12:47:45 +00:00
|
|
|
/**
|
|
|
|
* \file Preamble.h
|
|
|
|
* This file is part of LyX, the document processor.
|
|
|
|
* Licence details can be found in the file COPYING.
|
|
|
|
*
|
|
|
|
* \author André Pönitz
|
|
|
|
* \author Uwe Stöhr
|
|
|
|
*
|
|
|
|
* Full author contact details are available in file CREDITS.
|
|
|
|
*/
|
|
|
|
|
|
|
|
// {[(
|
|
|
|
|
2011-11-10 20:16:22 +00:00
|
|
|
#ifndef LYX_PREAMBLE_H
|
|
|
|
#define LYX_PREAMBLE_H
|
|
|
|
|
2011-11-06 17:03:59 +00:00
|
|
|
#include "Author.h"
|
2011-10-30 12:47:45 +00:00
|
|
|
|
|
|
|
#include <iosfwd>
|
|
|
|
#include <sstream>
|
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
#include <map>
|
2011-10-30 18:12:49 +00:00
|
|
|
#include <set>
|
2011-10-30 12:47:45 +00:00
|
|
|
|
|
|
|
|
|
|
|
namespace lyx {
|
|
|
|
|
|
|
|
class Parser;
|
|
|
|
class TeX2LyXDocClass;
|
|
|
|
|
|
|
|
class Preamble
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
Preamble();
|
|
|
|
|
|
|
|
///
|
|
|
|
std::string inputencoding() const { return h_inputencoding; }
|
|
|
|
///
|
2011-10-30 18:12:49 +00:00
|
|
|
std::string notefontcolor() const { return h_notefontcolor; }
|
2012-12-30 10:58:21 +00:00
|
|
|
///
|
2013-02-04 00:41:56 +00:00
|
|
|
std::string refstyle() const { return h_use_refstyle; }
|
|
|
|
///
|
2012-12-30 10:58:21 +00:00
|
|
|
bool fontCJKSet() const { return h_font_cjk_set; }
|
|
|
|
///
|
|
|
|
std::string fontCJK() const { return h_font_cjk; }
|
|
|
|
///
|
|
|
|
void fontCJK(std::string const & f) { h_font_cjk_set = true; h_font_cjk = f; }
|
2012-10-06 07:38:14 +00:00
|
|
|
/// The document language
|
|
|
|
std::string docLanguage() const { return h_language; }
|
|
|
|
/// The language of text which is not explicitly marked
|
|
|
|
std::string defaultLanguage() const { return default_language; }
|
2012-06-27 20:48:22 +00:00
|
|
|
///
|
2011-11-29 20:09:40 +00:00
|
|
|
std::string use_indices() const { return h_use_indices; }
|
|
|
|
///
|
2012-06-30 23:47:39 +00:00
|
|
|
std::string polyglossia2lyx(std::string const & language);
|
|
|
|
///
|
2011-10-30 12:47:45 +00:00
|
|
|
bool indentParagraphs() const;
|
|
|
|
///
|
|
|
|
bool isPackageUsed(std::string const & package) const;
|
|
|
|
///
|
|
|
|
std::vector<std::string>
|
|
|
|
getPackageOptions(std::string const & package) const;
|
2011-10-30 18:12:49 +00:00
|
|
|
/// Tell that \p package will be loaded automatically by LyX.
|
|
|
|
/// This has only an effect if \p package is prepared for
|
|
|
|
/// autoloading in parse().
|
|
|
|
void registerAutomaticallyLoadedPackage(std::string const & package);
|
2011-10-30 12:47:45 +00:00
|
|
|
///
|
2011-10-30 13:44:00 +00:00
|
|
|
void addModule(std::string const & module);
|
2011-10-30 12:47:45 +00:00
|
|
|
///
|
2011-10-30 13:21:06 +00:00
|
|
|
void suppressDate(bool suppress);
|
2012-04-19 18:46:08 +00:00
|
|
|
///
|
2012-12-28 13:29:46 +00:00
|
|
|
std::string citeEngine() const { return h_cite_engine; }
|
|
|
|
///
|
|
|
|
void citeEngine(std::string const & e) { h_cite_engine = e; }
|
|
|
|
///
|
2012-04-19 18:46:08 +00:00
|
|
|
bool titleLayoutFound() const { return title_layout_found; }
|
|
|
|
///
|
|
|
|
void titleLayoutFound(bool found) { title_layout_found = found; }
|
2011-11-06 17:03:59 +00:00
|
|
|
/// Register an author named \p name in the author list
|
|
|
|
void registerAuthor(std::string const & name);
|
|
|
|
/// Get author named \p name (must be registered first)
|
|
|
|
Author const & getAuthor(std::string const & name) const;
|
2011-10-30 13:21:06 +00:00
|
|
|
|
|
|
|
/// Parses the LaTeX preamble into internal data
|
|
|
|
void parse(Parser & p, std::string const & forceclass,
|
|
|
|
TeX2LyXDocClass & tc);
|
|
|
|
/// Writes the LyX file header from internal data
|
2011-12-04 15:35:59 +00:00
|
|
|
bool writeLyXHeader(std::ostream & os, bool subdoc);
|
2011-10-30 12:47:45 +00:00
|
|
|
|
2012-06-30 23:47:39 +00:00
|
|
|
/// known polyglossia language names (including variants)
|
|
|
|
static const char * const polyglossia_languages[];
|
|
|
|
/// the same as polyglossia_languages with .lyx names
|
|
|
|
static const char * const coded_polyglossia_languages[];
|
|
|
|
|
2011-10-30 12:47:45 +00:00
|
|
|
private:
|
|
|
|
///
|
|
|
|
std::map<std::string, std::vector<std::string> > used_packages;
|
2011-10-30 18:12:49 +00:00
|
|
|
/// Packages that will be loaded automatically by LyX
|
|
|
|
std::set<std::string> auto_packages;
|
2011-10-30 13:44:00 +00:00
|
|
|
///
|
|
|
|
std::vector<std::string> used_modules;
|
2011-10-30 12:47:45 +00:00
|
|
|
|
|
|
|
/// needed to handle encodings with babel
|
|
|
|
bool one_language;
|
2012-10-06 07:38:14 +00:00
|
|
|
/// the main non-CJK language
|
|
|
|
std::string default_language;
|
2011-10-30 12:47:45 +00:00
|
|
|
|
2012-04-19 18:46:08 +00:00
|
|
|
/// was at least one title layout found?
|
|
|
|
bool title_layout_found;
|
|
|
|
|
2011-10-30 12:47:45 +00:00
|
|
|
std::ostringstream h_preamble;
|
|
|
|
std::string h_backgroundcolor;
|
2011-12-14 01:11:18 +00:00
|
|
|
std::string h_biblio_style;
|
2012-06-24 13:29:32 +00:00
|
|
|
std::string h_bibtex_command;
|
2011-10-30 12:47:45 +00:00
|
|
|
std::string h_boxbgcolor;
|
|
|
|
std::string h_cite_engine;
|
2012-01-09 13:16:41 +00:00
|
|
|
std::string h_cite_engine_type;
|
2012-06-24 13:29:32 +00:00
|
|
|
std::string h_color;
|
2011-10-30 12:47:45 +00:00
|
|
|
std::string h_defskip;
|
|
|
|
std::string h_float_placement;
|
|
|
|
std::string h_fontcolor;
|
|
|
|
std::string h_fontencoding;
|
2012-10-05 22:29:16 +00:00
|
|
|
std::string h_font_math;
|
2011-10-30 12:47:45 +00:00
|
|
|
std::string h_font_roman;
|
|
|
|
std::string h_font_sans;
|
|
|
|
std::string h_font_typewriter;
|
|
|
|
std::string h_font_default_family;
|
2012-02-16 10:40:02 +00:00
|
|
|
std::string h_use_non_tex_fonts;
|
2011-10-30 12:47:45 +00:00
|
|
|
std::string h_font_sc;
|
|
|
|
std::string h_font_osf;
|
|
|
|
std::string h_font_sf_scale;
|
|
|
|
std::string h_font_tt_scale;
|
2012-12-30 10:58:21 +00:00
|
|
|
bool h_font_cjk_set;
|
|
|
|
std::string h_font_cjk;
|
2011-10-30 12:47:45 +00:00
|
|
|
std::string h_graphics;
|
2012-06-08 00:37:36 +00:00
|
|
|
std::string h_default_output_format;
|
2011-10-30 12:47:45 +00:00
|
|
|
std::string h_html_be_strict;
|
|
|
|
std::string h_html_css_as_file;
|
|
|
|
std::string h_html_math_output;
|
2013-02-17 05:18:42 +00:00
|
|
|
std::string h_index[99];
|
2012-06-24 13:29:32 +00:00
|
|
|
std::string h_index_command;
|
2011-10-30 12:47:45 +00:00
|
|
|
std::string h_inputencoding;
|
2011-12-07 22:46:15 +00:00
|
|
|
std::string h_justification;
|
2012-06-27 20:48:22 +00:00
|
|
|
std::string h_language;
|
2011-10-30 12:47:45 +00:00
|
|
|
std::string h_language_package;
|
|
|
|
std::string h_listings_params;
|
2012-06-24 13:29:32 +00:00
|
|
|
std::string h_maintain_unincluded_children;
|
2011-10-30 12:47:45 +00:00
|
|
|
std::string h_margins;
|
|
|
|
std::string h_notefontcolor;
|
|
|
|
std::string h_options;
|
|
|
|
std::string h_output_changes;
|
2012-06-24 13:29:32 +00:00
|
|
|
std::string h_output_sync;
|
2012-06-24 14:59:21 +00:00
|
|
|
std::string h_output_sync_macro;
|
2011-10-30 12:47:45 +00:00
|
|
|
std::string h_papercolumns;
|
|
|
|
std::string h_paperfontsize;
|
|
|
|
std::string h_paperorientation;
|
|
|
|
std::string h_paperpagestyle;
|
|
|
|
std::string h_papersides;
|
|
|
|
std::string h_papersize;
|
|
|
|
std::string h_paragraph_indentation;
|
|
|
|
/// necessary to set the separation when \setlength is parsed
|
|
|
|
std::string h_paragraph_separation;
|
|
|
|
std::string h_pdf_title;
|
|
|
|
std::string h_pdf_author;
|
|
|
|
std::string h_pdf_subject;
|
|
|
|
std::string h_pdf_keywords;
|
|
|
|
std::string h_pdf_bookmarks;
|
|
|
|
std::string h_pdf_bookmarksnumbered;
|
|
|
|
std::string h_pdf_bookmarksopen;
|
|
|
|
std::string h_pdf_bookmarksopenlevel;
|
|
|
|
std::string h_pdf_breaklinks;
|
|
|
|
std::string h_pdf_pdfborder;
|
|
|
|
std::string h_pdf_colorlinks;
|
|
|
|
std::string h_pdf_backref;
|
|
|
|
std::string h_pdf_pdfusetitle;
|
|
|
|
std::string h_pdf_pagemode;
|
|
|
|
std::string h_pdf_quoted_options;
|
|
|
|
std::string h_quotes_language;
|
|
|
|
std::string h_secnumdepth;
|
2013-02-17 05:18:42 +00:00
|
|
|
std::string h_shortcut[99];
|
2011-10-30 12:47:45 +00:00
|
|
|
std::string h_spacing;
|
|
|
|
std::string h_suppress_date;
|
|
|
|
std::string h_textclass;
|
|
|
|
std::string h_tocdepth;
|
|
|
|
std::string h_tracking_changes;
|
|
|
|
std::string h_use_bibtopic;
|
2011-11-29 20:09:40 +00:00
|
|
|
std::string h_use_indices;
|
2011-10-30 12:47:45 +00:00
|
|
|
std::string h_use_geometry;
|
2012-01-05 20:53:48 +00:00
|
|
|
std::map<std::string, std::string> h_use_packages;
|
2011-10-30 12:47:45 +00:00
|
|
|
std::string h_use_default_options;
|
|
|
|
std::string h_use_hyperref;
|
|
|
|
std::string h_use_refstyle;
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* Add package \p name with options \p options to used_packages.
|
|
|
|
* Remove options from \p options that we don't want to output.
|
|
|
|
*/
|
|
|
|
void add_package(std::string const & name,
|
|
|
|
std::vector<std::string> & options);
|
|
|
|
///
|
|
|
|
void handle_hyperref(std::vector<std::string> & options);
|
|
|
|
///
|
2011-11-13 12:23:27 +00:00
|
|
|
void handle_geometry(std::vector<std::string> & options);
|
|
|
|
///
|
2011-10-30 12:47:45 +00:00
|
|
|
void handle_package(Parser &p, std::string const & name,
|
|
|
|
std::string const & opts, bool in_lyx_preamble);
|
|
|
|
///
|
|
|
|
void handle_if(Parser & p, bool in_lyx_preamble);
|
2011-11-06 17:03:59 +00:00
|
|
|
|
|
|
|
AuthorList authors_;
|
2011-10-30 12:47:45 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
extern Preamble preamble;
|
|
|
|
|
|
|
|
// }])
|
|
|
|
|
|
|
|
|
|
|
|
} // namespace lyx
|
2011-11-10 20:16:22 +00:00
|
|
|
|
|
|
|
#endif
|