From 4925a78eb2539649960056c104249d693b7b6e00 Mon Sep 17 00:00:00 2001 From: Dekel Tsur Date: Sat, 3 Nov 2001 17:15:43 +0000 Subject: [PATCH] Correct placement of the \selectlanguage commands. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2962 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/ChangeLog | 5 +++ src/lyxrc.C | 1 - src/paragraph.C | 82 +++++++++++++++++++++++++++++++++++++++---------- 3 files changed, 70 insertions(+), 18 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 586d6cd26b..326a166865 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2001-11-03 Dekel Tsur + + * paragraph.C (TeXOnePar): Correct placement of \selectlanguage + commands. + 2001-10-31 Jean-Marc Lasgouttes * gettext.C (locale_init): set LC_NUMERIC to "C" even if nls is diff --git a/src/lyxrc.C b/src/lyxrc.C index f0d70852e3..d8b811cfd2 100644 --- a/src/lyxrc.C +++ b/src/lyxrc.C @@ -243,7 +243,6 @@ void LyXRC::setDefaults() { language_use_babel = true; language_package = "\\usepackage{babel}"; language_command_begin = "\\selectlanguage{$$lang}"; - language_command_end = "\\selectlanguage{$$lang}"; language_command_local = "\\foreignlanguage{$$lang}{"; default_language = "english"; // diff --git a/src/paragraph.C b/src/paragraph.C index 36d87fbc28..fbdeb4f36d 100644 --- a/src/paragraph.C +++ b/src/paragraph.C @@ -1281,14 +1281,30 @@ Paragraph * Paragraph::TeXOnePar(Buffer const * buf, Language const * language = getParLanguage(bparams); Language const * doc_language = bparams.language; - Language const * previous_language = previous_ - ? previous_->getParLanguage(bparams) : doc_language; - if (language->babel() != doc_language->babel() && - language->babel() != previous_language->babel()) { - os << subst(lyxrc.language_command_begin, "$$lang", - language->babel()) - << endl; - texrow.newline(); + Language const * previous_language = previous() + ? previous()->getParLanguage(bparams) : doc_language; + + if (language->babel() != previous_language->babel() + // check if we already put language command in TeXEnvironment() + && !(textclasslist.Style(bparams.textclass, layout).isEnvironment() + && (!previous() || previous()->layout != layout || + previous()->params().depth() != params().depth()))) { + + if (!lyxrc.language_command_end.empty() && + previous_language->babel() != doc_language->babel()) { + os << subst(lyxrc.language_command_end, "$$lang", + previous_language->babel()) + << endl; + texrow.newline(); + } + + if (lyxrc.language_command_end.empty() || + language->babel() != doc_language->babel()) { + os << subst(lyxrc.language_command_begin, "$$lang", + language->babel()) + << endl; + texrow.newline(); + } } if (bparams.inputenc == "auto" && @@ -1345,15 +1361,6 @@ Paragraph * Paragraph::TeXOnePar(Buffer const * buf, } else if (is_command) os << "}"; - if (language->babel() != doc_language->babel() && - (!next_ || - next_->getParLanguage(bparams)->babel() != language->babel())) - { - os << endl - << subst(lyxrc.language_command_end, "$$lang", - doc_language->babel()); - } - switch (style.latextype) { case LATEX_ITEM_ENVIRONMENT: case LATEX_LIST_ENVIRONMENT: @@ -1411,6 +1418,24 @@ Paragraph * Paragraph::TeXOnePar(Buffer const * buf, if (next_) { os << '\n'; texrow.newline(); + } else { + // Since \selectlanguage write the language to the aux file, + // we need to reset the language at the end of footnote or + // float. + + if (language->babel() != doc_language->babel()) { + if (lyxrc.language_command_end.empty()) + os << subst(lyxrc.language_command_begin, + "$$lang", + doc_language->babel()) + << endl; + else + os << subst(lyxrc.language_command_end, + "$$lang", + language->babel()) + << endl; + texrow.newline(); + } } lyxerr[Debug::LATEX] << "TeXOnePar...done " << next_ << endl; @@ -1734,6 +1759,29 @@ Paragraph * Paragraph::TeXEnvironment(Buffer const * buf, textclasslist.Style(bparams.textclass, layout); + Language const * language = getParLanguage(bparams); + Language const * doc_language = bparams.language; + Language const * previous_language = previous_ + ? previous_->getParLanguage(bparams) : doc_language; + if (language->babel() != previous_language->babel()) { + + if (!lyxrc.language_command_end.empty() && + previous_language->babel() != doc_language->babel()) { + os << subst(lyxrc.language_command_end, "$$lang", + previous_language->babel()) + << endl; + texrow.newline(); + } + + if (lyxrc.language_command_end.empty() || + language->babel() != doc_language->babel()) { + os << subst(lyxrc.language_command_begin, "$$lang", + language->babel()) + << endl; + texrow.newline(); + } + } + if (style.isEnvironment()){ if (style.latextype == LATEX_LIST_ENVIRONMENT) { os << "\\begin{" << style.latexname() << "}{"