Fix missing language option for CJKutf8.tex

This commit is contained in:
Georg Baum 2013-02-17 17:53:04 +01:00
parent 248c6ded33
commit 4061e5bbdb
5 changed files with 35 additions and 4 deletions

View File

@ -442,8 +442,8 @@ string remove_braces(string const & value)
} // anonymous namespace } // anonymous namespace
Preamble::Preamble() : one_language(true), title_layout_found(false), Preamble::Preamble() : one_language(true), explicit_babel(false),
h_font_cjk_set(false) title_layout_found(false), h_font_cjk_set(false)
{ {
//h_backgroundcolor; //h_backgroundcolor;
//h_boxbgcolor; //h_boxbgcolor;
@ -819,9 +819,10 @@ void Preamble::handle_package(Parser &p, string const & name,
h_preamble << "\\usepackage[" << opts << "]{babel}\n"; h_preamble << "\\usepackage[" << opts << "]{babel}\n";
} }
delete_opt(options, known_languages); delete_opt(options, known_languages);
} } else {
else
h_preamble << "\\usepackage{babel}\n"; h_preamble << "\\usepackage{babel}\n";
explicit_babel = true;
}
} }
else if (name == "polyglossia") { else if (name == "polyglossia") {
@ -1884,6 +1885,21 @@ void Preamble::parse(Parser & p, string const & forceclass,
p.pushPosition(); p.pushPosition();
h_language = guessLanguage(p, default_language); h_language = guessLanguage(p, default_language);
p.popPosition(); p.popPosition();
if (explicit_babel && h_language != default_language) {
// We set the document language to a CJK language,
// but babel is explicitly called in the user preamble
// without options. LyX will not add the default
// language to the document options if it is either
// english, or no text is set as default language.
// Therefore we need to add a language option explicitly.
// FIXME: It would be better to remove all babel calls
// from the user preamble, but this is difficult
// without re-introducing bug 7861.
if (h_options.empty())
h_options = lyx2babel(default_language);
else
h_options += ',' + lyx2babel(default_language);
}
} }
} }
@ -1897,6 +1913,15 @@ string babel2lyx(string const & language)
} }
string lyx2babel(string const & language)
{
char const * const * where = is_known(language, known_coded_languages);
if (where)
return known_languages[where - known_coded_languages];
return language;
}
string Preamble::polyglossia2lyx(string const & language) string Preamble::polyglossia2lyx(string const & language)
{ {
char const * const * where = is_known(language, polyglossia_languages); char const * const * where = is_known(language, polyglossia_languages);

View File

@ -105,6 +105,8 @@ private:
bool one_language; bool one_language;
/// the main non-CJK language /// the main non-CJK language
std::string default_language; std::string default_language;
/// Was babel called explicitly?
bool explicit_babel;
/// was at least one title layout found? /// was at least one title layout found?
bool title_layout_found; bool title_layout_found;

View File

@ -13,6 +13,7 @@
\end_preamble \end_preamble
\options english
\use_default_options false \use_default_options false
\maintain_unincluded_children false \maintain_unincluded_children false
\language japanese-cjk \language japanese-cjk

View File

@ -13,6 +13,7 @@
\end_preamble \end_preamble
\options english
\use_default_options false \use_default_options false
\maintain_unincluded_children false \maintain_unincluded_children false
\language chinese-traditional \language chinese-traditional

View File

@ -45,6 +45,8 @@ public:
/// Translate babel language name to LyX language name /// Translate babel language name to LyX language name
extern std::string babel2lyx(std::string const & language); extern std::string babel2lyx(std::string const & language);
/// Translate LyX language name to babel language name
extern std::string lyx2babel(std::string const & language);
/// Translate polyglossia language name to LyX language name /// Translate polyglossia language name to LyX language name
extern std::string polyglossia2lyx(std::string const & language); extern std::string polyglossia2lyx(std::string const & language);
/// Translate basic color name or RGB color in LaTeX syntax to LyX color code /// Translate basic color name or RGB color in LaTeX syntax to LyX color code