]> git.lyx.org Git - lyx.git/blobdiff - src/tex2lyx/preamble.cpp
tex2lyx: support for subfloats
[lyx.git] / src / tex2lyx / preamble.cpp
index 4114d6df3287003495ea53b4ae9012dfe156a9f7..e31a2a8252a497558d131848cbe6287568849fda 100644 (file)
@@ -169,6 +169,12 @@ const char * const known_if_commands[] = {"if", "ifarydshln", "ifbraket",
 "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};
@@ -548,7 +554,7 @@ void handle_package(Parser &p, string const & name, string const & opts,
                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) {
@@ -565,9 +571,11 @@ void handle_package(Parser &p, string const & name, string const & opts,
 
        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();
        }
 
@@ -640,6 +648,15 @@ void handle_package(Parser &p, string const & name, string const & opts,
                ; // 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 (name == "subfig")
+               ; // ignore this
+
        else if (is_known(name, known_languages))
                h_language = name;
 
@@ -911,8 +928,43 @@ void parse_preamble(Parser & p, ostream & os,
                        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") {
@@ -1231,6 +1283,13 @@ void parse_preamble(Parser & p, ostream & os,
                        } else if (arg1 == "definecolor" && arg2 == "\\usepackage{color}"
                                && arg3.empty()) {
                                ifundefined_color_set = true;
+                       // test for case
+                       //\@ifundefined{showcaptionsetup}{}{%
+                       // \PassOptionsToPackage{caption=false}{subfig}}
+                       // that LyX uses for subfloats
+                       } else if (arg1 == "showcaptionsetup" && arg2.empty()
+                               && arg3 == "%\n \\PassOptionsToPackage{caption=false}{subfig}") {
+                               ; // do nothing
                        } else if (!in_lyx_preamble) {
                                h_preamble << t.asInput()
                                           << '{' << arg1 << '}'
@@ -1282,6 +1341,16 @@ string babel2lyx(string const & language)
        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;
+}
+
 // }])