]> git.lyx.org Git - features.git/commitdiff
Provide option to force a local language switch where a global is not allowed (fixes...
authorJuergen Spitzmueller <spitz@lyx.org>
Wed, 28 Nov 2012 19:55:21 +0000 (20:55 +0100)
committerJuergen Spitzmueller <spitz@lyx.org>
Wed, 28 Nov 2012 19:55:21 +0000 (20:55 +0100)
lib/doc/Customization.lyx
lib/layouts/stdinsets.inc
src/insets/InsetLayout.cpp
src/insets/InsetLayout.h
src/output_latex.cpp

index 693e1e4b108ef20ac6225d6fa3a584f0d555b3bd..4e70704d7bdf88d464bbbb39de9433e2089994e1 100644 (file)
@@ -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" kayvan@sylvan.com
 \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
 
index 57543f25a7fc68ced3ac35a4c70413e086b210d4..322247485cd2eb8f14aa332cf342e1269b119812 100644 (file)
@@ -406,6 +406,7 @@ InsetLayout Argument
          Size                Small
        EndFont
        MultiPar              false
+       ForceLocalFontSwitch  1
 End
 
 InsetLayout Info
index 1d7d1f0ee436ac3f9c41653f1ba557e449d5cb9a..9c9c7f2fce5ce5c726cdd4d252769955e80045f1 100644 (file)
@@ -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;
index 7ae505ae75daf11306bf23ec15cbf3c011386d4b..25e58c9ec7e391f93a4f99a9de7af44005e24ca4 100644 (file)
@@ -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_;
 };
 
index 551a2496bdb33ede5a23644d2e858477dbb61b3c..6785c2749eeb83379922e84fb0032d53a30aaf29 100644 (file)
@@ -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;
                        }
                }
        }