From 399324baecf20f23fb8dc8b306677f8502344fac Mon Sep 17 00:00:00 2001 From: Enrico Forestieri Date: Thu, 16 Jul 2009 13:02:50 +0000 Subject: [PATCH] Fix bug #5096: Language switch fails in environments. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_6_X@30628 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/output_latex.cpp | 26 ++++++++++++++++++++++++-- status.16x | 2 ++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/output_latex.cpp b/src/output_latex.cpp index 8f710fa1a3..a6abd25aee 100644 --- a/src/output_latex.cpp +++ b/src/output_latex.cpp @@ -345,11 +345,33 @@ TeXOnePar(Buffer const & buf, // The previous language that was in effect is either the language of // the previous paragraph, if there is one, or else the outer language // if there is no previous paragraph - Language const * const prev_language = + Language const * prev_language = (pit != paragraphs.begin()) ? priorpit->getParLanguage(bparams) : outer_language; - if (par_language->babel() != prev_language->babel() + // When the language is changed at the very start of a LyX environment, + // the language switch in the LaTeX code occurs just before switching to + // the corresponding LaTeX environment. So, when the environment ends, + // we have to restore the language that was in effect. + bool env_lang_switch = false; + if (!priorpit->hasSameLayout(*pit)) { + ParagraphList::const_iterator outpit = priorpit; + while (outpit != paragraphs.begin() + && (outpit->hasSameLayout(*priorpit) + || outpit->getDepth() > priorpit->getDepth())) + outpit = boost::prior(outpit); + ParagraphList::const_iterator const inpit = boost::next(outpit); + Language const * const outenv_language + = outpit->getParLanguage(bparams); + Language const * const inenv_language + = inpit->getParLanguage(bparams); + if (outenv_language->babel() != inenv_language->babel()) + env_lang_switch = true; + if (outenv_language->babel() != par_language->babel()) + prev_language = outenv_language; + } + + if ((par_language->babel() != prev_language->babel() || env_lang_switch) // check if we already put language command in TeXEnvironment() && !(style.isEnvironment() && (pit == paragraphs.begin() || diff --git a/status.16x b/status.16x index 5cd351d8fe..243ff38ea1 100644 --- a/status.16x +++ b/status.16x @@ -129,6 +129,8 @@ What's new - Assure that a longtable caption is in a first header even if the table does not have one. This assures the caption is not repeated after a page break and consequently in the list of tables (bug 6057). + +- Fix language settings after an environment (bug 5096). * USER INTERFACE