The branch, master, has been updated.

- Log -----------------------------------------------------------------

commit a7f8fb8c5fe8f99b30e3d507dc20d455c65a4b27
Author: Juergen Spitzmueller <[email protected]>
Date:   Wed Nov 28 20:55:21 2012 +0100

    Provide option to force a local language switch where a global is not 
allowed (fixes #8033)

diff --git a/lib/doc/Customization.lyx b/lib/doc/Customization.lyx
index 693e1e4..4e70704 100644
--- a/lib/doc/Customization.lyx
+++ b/lib/doc/Customization.lyx
@@ -1,5 +1,5 @@
 #LyX 2.1 created this file. For more info see http://www.lyx.org/
-\lyxformat 446
+\lyxformat 448
 \begin_document
 \begin_header
 \textclass scrbook
@@ -140,6 +140,7 @@ End
 \author -712698321 "Jürgen Spitzmüller" 
 \author -195340706 "Georg Baum" 
 \author 5863208 "ab" 
+\author 155139281 "Jrgen Spitzmller" 
 \author 1082167584 "Kayvan Sylvan" [email protected]
 \author 1414654397 "Richard Heck" 
 \author 2090807402 "usti" 
@@ -15960,6 +15961,81 @@ LabelFont
 \end_inset
 
  later if you want them to be different.
+\change_inserted 155139281 1354130923
+
+\end_layout
+
+\begin_layout Description
+
+\change_inserted 155139281 1354130923
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted 155139281 1354130923
+ForceLocalFontSwitch
+\end_layout
+
+\end_inset
+
+ [
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted 155139281 1354130923
+
+\emph on
+0
+\end_layout
+
+\end_inset
+
+,
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted 155139281 1354130923
+1
+\end_layout
+
+\end_inset
+
+] When using babel, always use a local font switch (
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted 155139281 1354130923
+
+\backslash
+foreignlanguage
+\end_layout
+
+\end_inset
+
+), never a global one (such as 
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted 155139281 1354130923
+
+\backslash
+selectlanguage
+\end_layout
+
+\end_inset
+
+).
+\change_unchanged
+
 \end_layout
 
 \begin_layout Description
@@ -16670,7 +16746,7 @@ string
 \end_inset
 
 ] A string that is put at the beginning of the layout content.
-\change_unchanged
+\change_inserted 155139281 1354130509
 
 \end_layout
 
diff --git a/lib/layouts/stdinsets.inc b/lib/layouts/stdinsets.inc
index 57543f2..3222474 100644
--- a/lib/layouts/stdinsets.inc
+++ b/lib/layouts/stdinsets.inc
@@ -406,6 +406,7 @@ InsetLayout Argument
          Size                Small
        EndFont
        MultiPar              false
+       ForceLocalFontSwitch  1
 End
 
 InsetLayout Info
diff --git a/src/insets/InsetLayout.cpp b/src/insets/InsetLayout.cpp
index 1d7d1f0..9c9c7f2 100644
--- a/src/insets/InsetLayout.cpp
+++ b/src/insets/InsetLayout.cpp
@@ -41,7 +41,7 @@ InsetLayout::InsetLayout() :
        passthru_(false), parbreakisnewline_(false), freespacing_(false), 
        keepempty_(false), forceltr_(false), 
        needprotect_(false), intoc_(false), spellcheck_(true), 
-       resetsfont_(true), display_(true)
+       resetsfont_(true), display_(true), forcelocalfontswitch_(false)
 { 
        labelfont_.setColor(Color_error);
 }
@@ -87,6 +87,7 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass)
                IL_DECORATION,
                IL_DISPLAY,
                IL_FONT,
+               IL_FORCE_LOCAL_FONT_SWITCH,
                IL_FORCELTR,
                IL_FORCEPLAIN,
                IL_FREESPACING,
@@ -135,6 +136,7 @@ bool InsetLayout::read(Lexer & lex, TextClass const & 
tclass)
                { "display", IL_DISPLAY },
                { "end", IL_END },
                { "font", IL_FONT },
+               { "forcelocalfontswitch", IL_FORCE_LOCAL_FONT_SWITCH },
                { "forceltr", IL_FORCELTR },
                { "forceplain", IL_FORCEPLAIN },
                { "freespacing", IL_FREESPACING },
@@ -236,6 +238,9 @@ bool InsetLayout::read(Lexer & lex, TextClass const & 
tclass)
                case IL_LEFTDELIM:
                        lex >> leftdelim_;
                        break;
+               case IL_FORCE_LOCAL_FONT_SWITCH:
+                       lex >> forcelocalfontswitch_;
+                       break;
                case IL_RIGHTDELIM:
                        lex >> rightdelim_;
                        break;
diff --git a/src/insets/InsetLayout.h b/src/insets/InsetLayout.h
index 7ae505a..25e58c9 100644
--- a/src/insets/InsetLayout.h
+++ b/src/insets/InsetLayout.h
@@ -162,6 +162,8 @@ public:
        bool resetsFont() const { return resetsfont_; }
        ///
        bool isDisplay() const { return display_; }
+       ///
+       bool forcelocalfontswitch() const { return forcelocalfontswitch_; }
 private:
        ///
        void makeDefaultCSS() const;
@@ -263,6 +265,8 @@ private:
        ///
        bool display_;
        ///
+       bool forcelocalfontswitch_;
+       ///
        Layout::LaTeXArgMap latexargs_;
 };
 
diff --git a/src/output_latex.cpp b/src/output_latex.cpp
index 551a249..6785c27 100644
--- a/src/output_latex.cpp
+++ b/src/output_latex.cpp
@@ -551,10 +551,21 @@ void TeXOnePar(Buffer const & buf,
                getPolyglossiaEnvName(doc_language) : doc_language->babel();
        string const outer_lang = use_polyglossia ?
                getPolyglossiaEnvName(outer_language) : outer_language->babel();
-       string const lang_begin_command = use_polyglossia ?
+       string lang_begin_command = use_polyglossia ?
                "\\begin{$$lang}" : lyxrc.language_command_begin;
-       string const lang_end_command = use_polyglossia ?
+       string lang_end_command = use_polyglossia ?
                "\\end{$$lang}" : lyxrc.language_command_end;
+       // the '%' is necessary to prevent unwanted whitespace
+       string lang_command_termination = "%\n";
+
+       // In some insets (such as Arguments), we cannot use \selectlanguage
+       bool const localswitch = !use_polyglossia
+               && text.inset().getLayout().forcelocalfontswitch();
+       if (localswitch) {
+               lang_begin_command = lyxrc.language_command_local;
+               lang_end_command = "}";
+               lang_command_termination.clear();
+       }
 
        if (par_lang != prev_lang
                // check if we already put language command in TeXEnvironment()
@@ -570,8 +581,7 @@ void TeXOnePar(Buffer const & buf,
                        os << from_ascii(subst(lang_end_command,
                                "$$lang",
                                prev_lang))
-                          // the '%' is necessary to prevent unwanted 
whitespace
-                          << "%\n";
+                          << lang_command_termination;
                }
 
                // We need to open a new language if we couldn't close the 
previous
@@ -629,8 +639,7 @@ void TeXOnePar(Buffer const & buf,
                                                os << "["
                                                  << 
from_ascii(par_language->polyglossiaOpts())
                                                  << "]";
-                                  // the '%' is necessary to prevent unwanted 
whitespace
-                               os << "%\n";
+                               os << lang_command_termination;
                        }
                }
        }
@@ -686,8 +695,7 @@ void TeXOnePar(Buffer const & buf,
                                                lang_begin_command,
                                                "$$lang",
                                                par_lang))
-                                       // the '%' is necessary to prevent 
unwanted whitespace
-                                       << "%\n";
+                                       << lang_command_termination;
                                }
                                runparams.encoding = encoding;
                        }
@@ -830,16 +838,16 @@ void TeXOnePar(Buffer const & buf,
                                                lang_begin_command,
                                                "$$lang",
                                                current_lang));
-                                       pending_newline = true;
-                                       unskip_newline = true;
+                                       pending_newline = !localswitch;
+                                       unskip_newline = !localswitch;
                                }
                        } else if (!par_lang.empty()) {
                                os << from_ascii(subst(
                                        lang_end_command,
                                        "$$lang",
                                        par_lang));
-                               pending_newline = true;
-                               unskip_newline = true;
+                               pending_newline = !localswitch;
+                               unskip_newline = !localswitch;
                        }
                }
        }

-----------------------------------------------------------------------

Summary of changes:
 lib/doc/Customization.lyx  |   80 ++++++++++++++++++++++++++++++++++++++++++-
 lib/layouts/stdinsets.inc  |    1 +
 src/insets/InsetLayout.cpp |    7 +++-
 src/insets/InsetLayout.h   |    4 ++
 src/output_latex.cpp       |   32 +++++++++++------
 5 files changed, 109 insertions(+), 15 deletions(-)


hooks/post-receive
-- 
The LyX Source Repository

Reply via email to