Uwe Stöhr schrieb:
Attached is the patch revised according to your annotations.
Take this version instead. regards Uwe
Index: preamble.cpp =================================================================== --- preamble.cpp (revision 21941) +++ preamble.cpp (working copy) @@ -3,7 +3,8 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author André Pönitz + * \author André Pönitz + * \author Uwe Stöhr * * Full author contact details are available in file CREDITS. */ @@ -72,7 +73,7 @@ string h_textclass = "article"; string h_options = string(); string h_language = "english"; -string h_inputencoding = "latin1"; +string h_inputencoding = "auto"; string h_fontscheme = "default"; string h_graphics = "default"; string h_paperfontsize = "default"; @@ -100,13 +101,26 @@ if (opts.empty()) return; + // trim spaces around the options because this is valid LaTeX: + // "12pt, bulgarian" + // otherwise the option would be " bulgarian" (with a leading space) + // and thus not be found in the next routines + vector<string>::iterator it; + for (it = opts.begin(); it != opts.end(); ++it) + *it = trim(*it, " "); + + // the last language option is the document language (for babel and LyX) + // the last size option is the document font size + vector<string>::iterator position = opts.begin(); for (; *what; ++what) { - vector<string>::iterator it = find(opts.begin(), opts.end(), *what); + it = find(opts.begin(), opts.end(), *what); if (it != opts.end()) { - //cerr << "### found option '" << *what << "'\n"; - target = *what; + if (it >= position) { + target = *what; + position = it; + } + // remove found options from the list opts.erase(it); - return; } } } @@ -188,7 +202,10 @@ else if (name == "fontenc") ; // ignore this else if (name == "inputenc") { - h_inputencoding = opts; + // only set when there is not more than one inputenc option + // therefore check for the "," character + if (opts.find(",", 0) == string::npos) + h_inputencoding = opts; options.clear(); } else if (name == "makeidx") ; // ignore this @@ -237,14 +254,15 @@ void end_preamble(ostream & os, TextClass const & /*textclass*/) { - os << "#LyX file created by tex2lyx 0.1.2\n" + os << "#LyX file created by tex2lyx " << PACKAGE_VERSION << "\n" << "\\lyxformat 246\n" << "\\begin_document\n" << "\\begin_header\n" - << "\\textclass " << h_textclass << "\n" - << "\\begin_preamble\n" << h_preamble.str() << "\n\\end_preamble\n"; + << "\\textclass " << h_textclass << "\n"; + if (!h_preamble.str().empty()) + os << "\\begin_preamble\n" << h_preamble.str() << "\n\\end_preamble\n"; if (!h_options.empty()) - os << "\\options " << h_options << "\n"; + os << "\\options " << h_options << "\n"; os << "\\language " << h_language << "\n" << "\\inputencoding " << h_inputencoding << "\n" << "\\fontscheme " << h_fontscheme << "\n" Index: text.cpp =================================================================== --- text.cpp (revision 21939) +++ text.cpp (working copy) @@ -5,6 +5,7 @@ * * \author André Pönitz * \author Jean-Marc Lasgouttes + * \author Uwe Stöhr * * Full author contact details are available in file CREDITS. */ @@ -1125,6 +1126,8 @@ Context & context) { LayoutPtr newlayout; + // store the current selectlanguage to be used after \foreignlanguage + string selectlang; // Store the latest bibliographystyle (needed for bibtex inset) string bibliographystyle; bool const use_natbib = used_packages.find("natbib") != used_packages.end(); @@ -2051,6 +2054,27 @@ eat_whitespace(p, os, context, false); } + else if (t.cs() == "selectlanguage") { + context.check_layout(os); + // save the language for the case that a \foreignlanguage is used + selectlang = subst(p.verbatim_item(), "\n", " "); + os << "\\lang " << selectlang << "\n"; + + } + + else if (t.cs() == "foreignlanguage") { + context.check_layout(os); + os << "\n\\lang " << subst(p.verbatim_item(), "\n", " ") << "\n"; + os << subst(p.verbatim_item(), "\n", " "); + // set back to last selectlanguage + os << "\n\\lang " << selectlang << "\n"; + } + + else if (t.cs() == "inputencoding") + // write nothing because this is done by LyX using the "\lang" + // information given by selectlanguage and foreignlanguage + subst(p.verbatim_item(), "\n", " "); + else if (t.cs() == "LyX" || t.cs() == "TeX" || t.cs() == "LaTeX") { context.check_layout(os);