]> git.lyx.org Git - lyx.git/blobdiff - src/tex2lyx/preamble.C
* src/LyXAction.C: mark goto-clear-bookmark as working without buffer
[lyx.git] / src / tex2lyx / preamble.C
index c9b4011e194cbc14eb81eef4b5d18e5b8463ead6..acb066814aeda319778ae5ee5000b572f1158ad8 100644 (file)
@@ -18,6 +18,7 @@
 #include "lyxtextclass.h"
 #include "lyxlex.h"
 #include "support/filetools.h"
+#include "support/lstrings.h"
 
 #include <algorithm>
 #include <iostream>
@@ -26,6 +27,9 @@
 #include <vector>
 #include <map>
 
+
+namespace lyx {
+
 using std::istringstream;
 using std::ostream;
 using std::ostringstream;
@@ -34,7 +38,8 @@ using std::vector;
 using std::cerr;
 using std::endl;
 
-using lyx::support::LibFileSearch;
+using support::FileName;
+using support::libFileSearch;
 
 // special columntypes
 extern std::map<char, int> special_columns;
@@ -45,8 +50,9 @@ namespace {
 
 const char * const known_languages[] = { "austrian", "babel", "bahasa",
 "basque", "breton", "british", "bulgarian", "catalan", "croatian", "czech",
-"danish", "dutch", "english", "esperanto", "estonian", "finnish", "francais",
-"frenchb", "galician", "german", "germanb", "greek", "hebcal", "hebfont",
+"danish", "dutch", "english", "esperanto", "estonian", "finnish",
+"francais", "french", "frenchb", "frenchle", "frenchpro",
+"galician", "german", "germanb", "greek", "hebcal", "hebfont",
 "hebrew", "hebrew_newcode", "hebrew_oldcode", "hebrew_p", "hyphen",
 "icelandic", "irish", "italian", "latin", "lgrcmr", "lgrcmro", "lgrcmss",
 "lgrcmtt", "lgrenc", "lgrlcmss", "lgrlcmtt", "lheclas", "lhecmr",
@@ -56,6 +62,8 @@ const char * const known_languages[] = { "austrian", "babel", "bahasa",
 "russianb", "samin", "scottish", "serbian", "slovak", "slovene", "spanish",
 "swedish", "turkish", "ukraineb", "usorbian", "welsh", 0};
 
+const char * const known_french_languages[] = {"french", "frenchb", "francais",
+                                              "frenchle", "frenchpro", 0};
 char const * const known_fontsizes[] = { "10pt", "11pt", "12pt", 0 };
 
 // some ugly stuff
@@ -69,7 +77,6 @@ string h_graphics                = "default";
 string h_paperfontsize           = "default";
 string h_spacing                 = "single";
 string h_papersize               = "default";
-string h_paperpackage            = "none";
 string h_use_geometry            = "false";
 string h_use_amsmath             = "0";
 string h_cite_engine             = "basic";
@@ -80,11 +87,11 @@ string h_tocdepth                = "3";
 string h_paragraph_separation    = "indent";
 string h_defskip                 = "medskip";
 string h_quotes_language         = "english";
-string h_quotes_times            = "2";
 string h_papercolumns            = "1";
 string h_papersides              = string();
 string h_paperpagestyle          = "default";
 string h_tracking_changes        = "false";
+string h_output_changes          = "false";
 
 
 void handle_opt(vector<string> & opts, char const * const * what, string & target)
@@ -167,10 +174,7 @@ void handle_package(string const & name, string const & opts)
        add_package(name, options);
 
        //cerr << "handle_package: '" << name << "'\n";
-       if (name == "a4wide") {
-               h_papersize = "a4paper";
-               h_paperpackage = "widemarginsa4";
-       } else if (name == "ae")
+       if (name == "ae")
                h_fontscheme = "ae";
        else if (name == "aecompl")
                h_fontscheme = "ae";
@@ -189,9 +193,17 @@ void handle_package(string const & name, string const & opts)
                ; // ignore this
        else if (name == "verbatim")
                ; // ignore this
+       else if (name == "graphicx")
+               ; // ignore this
        else if (is_known(name, known_languages)) {
-               h_language = name;
-               h_quotes_language = name;
+               if (is_known(name, known_french_languages)) {
+                       h_language = "french";
+                       h_quotes_language = "french";
+               } else {
+                       h_language = name;
+                       h_quotes_language = name;
+               }
+
        } else if (name == "natbib") {
                h_cite_engine = "natbib_authoryear";
                vector<string>::iterator it =
@@ -225,7 +237,7 @@ void handle_package(string const & name, string const & opts)
 void end_preamble(ostream & os, LyXTextClass const & /*textclass*/)
 {
        os << "#LyX file created by  tex2lyx 0.1.2\n"
-          << "\\lyxformat 237\n"
+          << "\\lyxformat 245\n"
           << "\\begin_document\n"
           << "\\begin_header\n"
           << "\\textclass " << h_textclass << "\n"
@@ -239,7 +251,6 @@ void end_preamble(ostream & os, LyXTextClass const & /*textclass*/)
           << "\\paperfontsize " << h_paperfontsize << "\n"
           << "\\spacing " << h_spacing << "\n"
           << "\\papersize " << h_papersize << "\n"
-          << "\\paperpackage " << h_paperpackage << "\n"
           << "\\use_geometry " << h_use_geometry << "\n"
           << "\\use_amsmath " << h_use_amsmath << "\n"
           << "\\cite_engine " << h_cite_engine << "\n"
@@ -250,11 +261,11 @@ void end_preamble(ostream & os, LyXTextClass const & /*textclass*/)
           << "\\paragraph_separation " << h_paragraph_separation << "\n"
           << "\\defskip " << h_defskip << "\n"
           << "\\quotes_language " << h_quotes_language << "\n"
-          << "\\quotes_times " << h_quotes_times << "\n"
           << "\\papercolumns " << h_papercolumns << "\n"
           << "\\papersides " << h_papersides << "\n"
           << "\\paperpagestyle " << h_paperpagestyle << "\n"
           << "\\tracking_changes " << h_tracking_changes << "\n"
+          << "\\output_changes " << h_output_changes << "\n"
           << "\\end_header\n\n"
           << "\\begin_body\n";
        // clear preamble for subdocuments
@@ -329,7 +340,8 @@ LyXTextClass const parse_preamble(Parser & p, ostream & os, string const & force
                                star = true;
                        }
                        string const name = p.verbatim_item();
-                       string const opts = p.getOpt();
+                       string const opt1 = p.getOpt();
+                       string const opt2 = p.getFullOpt();
                        string const body = p.verbatim_item();
                        // only non-lyxspecific stuff
                        if (   name != "\\noun"
@@ -345,8 +357,12 @@ LyXTextClass const parse_preamble(Parser & p, ostream & os, string const & force
                                ss << '\\' << t.cs();
                                if (star)
                                        ss << '*';
-                               ss << '{' << name << '}' << opts << '{' << body << "}";
+                               ss << '{' << name << '}' << opt1 << opt2
+                                  << '{' << body << "}";
                                h_preamble << ss.str();
+
+                               // Add the command to the known commands
+                               add_known_command(name, opt1, !opt2.empty());
 /*
                                ostream & out = in_preamble ? h_preamble : os;
                                out << "\\" << t.cs() << "{" << name << "}"
@@ -359,7 +375,13 @@ LyXTextClass const parse_preamble(Parser & p, ostream & os, string const & force
                        vector<string> opts;
                        split(p.getArg('[', ']'), opts, ',');
                        handle_opt(opts, known_languages, h_language);
+                       if (is_known(h_language, known_french_languages))
+                               h_language = "french";
                        handle_opt(opts, known_fontsizes, h_paperfontsize);
+                       // delete "pt" at the end
+                       string::size_type i = h_paperfontsize.find("pt");
+                       if (i != string::npos)
+                               h_paperfontsize.erase(i);
                        h_quotes_language = h_language;
                        h_options = join(opts, ",");
                        h_textclass = p.getArg('{', '}');
@@ -388,8 +410,9 @@ LyXTextClass const parse_preamble(Parser & p, ostream & os, string const & force
                        ss << p.getOpt();
                        ss << '{' << p.verbatim_item() << '}';
                        ss << '{' << p.verbatim_item() << '}';
-                       if (name != "lyxcode" && name != "lyxlist"
-                                       && name != "lyxrightadress" && name != "lyxaddress")
+                       if (name != "lyxcode" && name != "lyxlist" &&
+                           name != "lyxrightadress" &&
+                           name != "lyxaddress" && name != "lyxgreyedout")
                                h_preamble << ss.str();
                }
 
@@ -397,7 +420,8 @@ LyXTextClass const parse_preamble(Parser & p, ostream & os, string const & force
                        string name = p.get_token().cs();
                        while (p.next_token().cat() != catBegin)
                                name += p.get_token().asString();
-                       h_preamble << "\\def\\" << name << '{' << p.verbatim_item() << "}";
+                       h_preamble << "\\def\\" << name << '{'
+                                  << p.verbatim_item() << "}";
                }
 
                else if (t.cs() == "newcolumntype") {
@@ -454,7 +478,7 @@ LyXTextClass const parse_preamble(Parser & p, ostream & os, string const & force
                        add_package("jurabib", jurabibsetup);
                        if (!jurabibsetup.empty()) {
                                h_preamble << "\\jurabibsetup{"
-                                          << join(jurabibsetup, ",") << '}';
+                                          << join(jurabibsetup, ",") << '}';
                        }
                }
 
@@ -464,16 +488,17 @@ LyXTextClass const parse_preamble(Parser & p, ostream & os, string const & force
        p.skip_spaces();
 
        // Force textclass if the user wanted it
-       if (!forceclass.empty()) {
+       if (!forceclass.empty())
                h_textclass = forceclass;
-       }
-       string layoutfilename = LibFileSearch("layouts", h_textclass, "layout");
+       if (noweb_mode && !lyx::support::prefixIs(h_textclass, "literate-"))
+               h_textclass.insert(0, "literate-");
+       FileName layoutfilename = libFileSearch("layouts", h_textclass, "layout");
        if (layoutfilename.empty()) {
                cerr << "Error: Could not find layout file for textclass \"" << h_textclass << "\"." << endl;
                exit(1);
        }
        LyXTextClass textclass;
-       textclass.Read(layoutfilename);
+       textclass.read(layoutfilename);
        if (h_papersides.empty()) {
                ostringstream ss;
                ss << textclass.sides();
@@ -484,3 +509,6 @@ LyXTextClass const parse_preamble(Parser & p, ostream & os, string const & force
 }
 
 // }])
+
+
+} // namespace lyx