const char * const known_swedish_quotes_languages[] = {"finnish",
"swedish", 0};
+/// known language packages from the times before babel
+const char * const known_old_language_packages[] = {"french", "frenchle",
+"frenchpro", "german", "ngerman", "pmfrench", 0};
+
char const * const known_fontsizes[] = { "10pt", "11pt", "12pt", 0 };
-const char * const known_roman_fonts[] = { "ae", "bookman", "charter",
-"cmr", "fourier", "lmodern", "mathpazo", "mathptmx", "newcent", 0};
+const char * const known_roman_fonts[] = { "ae", "beraserif", "bookman",
+"ccfonts", "chancery", "charter", "cmr", "fourier", "lmodern", "mathpazo",
+"mathptmx", "newcent", "utopia", 0};
const char * const known_sans_fonts[] = { "avant", "berasans", "cmbr", "cmss",
"helvet", "lmss", 0};
"ifcancel", "ifcolortbl", "ifeurosym", "ifmarginnote", "ifmmode", "ifpdf",
"ifsidecap", "ifupgreek", 0};
+const char * const known_basic_colors[] = {"blue", "black", "cyan", "green",
+"magenta", "red", "white", "yellow", 0};
+
+const char * const known_basic_color_codes[] = {"#0000ff", "#000000", "#00ffff", "#00ff00",
+"#ff00ff", "#ff0000", "#ffffff", "#ffff00", 0};
+
/// conditional commands with three arguments like \@ifundefined{}{}{}
const char * const known_if_3arg_commands[] = {"@ifundefined", "IfFileExists",
0};
string h_use_default_options = "false";
string h_options;
string h_language = "english";
-string h_language_package = "default";
-string h_fontencoding = "global";
+string h_language_package = "none";
+string h_fontencoding = "default";
string h_font_roman = "default";
string h_font_sans = "default";
string h_font_typewriter = "default";
// typewriter fonts
if (is_known(name, known_typewriter_fonts)) {
- h_font_typewriter = name;
- if (!opts.empty()) {
- scale = opts;
- h_font_tt_scale = scale_as_percentage(scale);
+ // fourier can be set as roman font _only_
+ // fourier as typewriter is handled in handling of \ttdefault
+ if (name != "fourier") {
+ h_font_typewriter = name;
+ if (!opts.empty()) {
+ scale = opts;
+ h_font_tt_scale = scale_as_percentage(scale);
+ }
}
}
if (name == "eco")
h_font_osf = "true";
+ // after the detection and handling of special cases, we can remove the
+ // fonts, otherwise they would appear in the preamble, see bug #7856
+ if (is_known(name, known_roman_fonts) || is_known(name, known_sans_fonts)
+ || is_known(name, known_typewriter_fonts))
+ ;
+
else if (name == "amsmath" || name == "amssymb")
h_use_amsmath = "2";
h_use_undertilde = "2";
else if (name == "babel") {
+ h_language_package = "default";
// we have to do nothing if babel is loaded without any options, otherwise
// we would pollute the preamble with this call in every roundtrip
- if (!opts.empty()) {
+ if (!opts.empty()) {
// check if more than one option was used - used later for inputenc
// in case inputenc is parsed before babel, set the encoding to auto
if (options.begin() != options.end() - 1) {
else if (name == "fontenc") {
h_fontencoding = getStringFromVector(options, ",");
- // as of version LyX 2.0 "T1" is equal to the setting "global"
- if (h_fontencoding == "T1")
+ /* We could do the following for better round trip support,
+ * but this makes the document less portable, so I skip it:
+ if (h_fontencoding == lyxrc.fontenc)
h_fontencoding = "global";
+ */
options.clear();
}
options.clear();
}
+ else if (is_known(name, known_old_language_packages)) {
+ // known language packages from the times before babel
+ // if they are found and not also babel, they will be used as
+ // cutom language package
+ h_language_package = "\\usepackage{" + name + "}";
+ }
+
else if (name == "makeidx")
; // ignore this
; // Ignore this, the geometry settings are made by the \geometry
// command. This command is handled below.
+ else if (name == "rotfloat")
+ ; // ignore this
+
+ else if (name == "wrapfig")
+ ; // ignore this
+
else if (is_known(name, known_languages))
h_language = name;
h_paperpagestyle = p.verbatim_item();
else if (t.cs() == "date") {
- if (p.verbatim_item().empty())
+ string argument = p.getArg('{', '}');
+ if (argument.empty())
h_suppress_date = "true";
+ else
+ h_preamble << t.asInput() << '{' << argument << '}';
+ }
+
+ else if (t.cs() == "color") {
+ string argument = p.getArg('{', '}');
+ // check the case that a standard color is used
+ if (is_known(argument, known_basic_colors))
+ h_fontcolor = color2code(argument);
+ // check the case that LyX's document_fontcolor is defined
+ // but not used for \color
+ if (argument != "document_fontcolor"
+ && !is_known(argument, known_basic_colors)) {
+ h_preamble << t.asInput() << '{' << argument << '}';
+ // the color might already be set because \definecolor
+ // is parsed before this
+ h_fontcolor = "";
+ }
+ }
+
+ else if (t.cs() == "pagecolor") {
+ string argument = p.getArg('{', '}');
+ // check the case that a standard color is used
+ if (is_known(argument, known_basic_colors))
+ h_backgroundcolor = color2code(argument);
+ // check the case that LyX's page_backgroundcolor is defined
+ // but not used for \pagecolor
+ if (argument != "page_backgroundcolor"
+ && !is_known(argument, known_basic_colors)) {
+ h_preamble << t.asInput() << '{' << argument << '}';
+ // the color might already be set because \definecolor
+ // is parsed before this
+ h_backgroundcolor = "";
+ }
}
else if (t.cs() == "makeatletter") {
return language;
}
+
+/// translates a color name to a LyX color code
+string color2code(string const & name)
+{
+ char const * const * where = is_known(name, known_basic_colors);
+ if (where)
+ return known_basic_color_codes[where - known_basic_colors];
+ return name;
+}
+
// }])