]> git.lyx.org Git - features.git/commitdiff
Fix bug #5096: Language switch fails in environments.
authorEnrico Forestieri <forenr@lyx.org>
Thu, 16 Jul 2009 12:50:44 +0000 (12:50 +0000)
committerEnrico Forestieri <forenr@lyx.org>
Thu, 16 Jul 2009 12:50:44 +0000 (12:50 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@30627 a592a061-630c-0410-9148-cb99ea01b6c8

src/output_latex.cpp

index 4736530e8322d8e806d1663d67833a0d97940321..de11bc9b9652da0a74413566f8bca7ca6d403cf6 100644 (file)
@@ -339,11 +339,33 @@ ParagraphList::const_iterator 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() ||