]> git.lyx.org Git - lyx.git/blobdiff - src/Layout.cpp
Fix bug #6367: Screen jumps around when using undo/redo
[lyx.git] / src / Layout.cpp
index 904911b1e15e10a79a06155b6da42ec42afacfd7..a57a28e813a317f2aa0ca9a5d178124379ac7ab5 100644 (file)
@@ -862,8 +862,7 @@ void Layout::readSpacing(Lexer & lex)
 namespace {
 
 docstring const i18npreamble(Language const * lang, Encoding const & enc,
-                            docstring const & templ, bool const polyglossia,
-                            bool const unicode)
+                            docstring const & templ, bool const polyglossia)
 {
        if (templ.empty())
                return templ;
@@ -890,10 +889,18 @@ docstring const i18npreamble(Language const * lang, Encoding const & enc,
        smatch sub;
        while (regex_search(preamble, sub, reg)) {
                string const key = sub.str(1);
-               string translated = to_utf8(lang->translateLayout(key));
-               if (!unicode && langenc != bufenc)
-                       translated = "\\inputencoding{" + texenc + "}"
-                               + s1 + langenc + s2 + translated
+               docstring const name = lang->translateLayout(key);
+               // Check whether name can be encoded in the buffer encoding
+               bool encodable = true;
+               for (size_t i = 0; i < name.size(); ++i) {
+                       if (enc.latexChar(name[i], true)[0] != name[i]) {
+                               encodable = false;
+                               break;
+                       }
+               }
+               string const translated = encodable ? to_utf8(name)
+                       : "\\inputencoding{" + texenc + "}"
+                               + s1 + langenc + s2 + to_utf8(name)
                                + s1 + bufenc + s2;
                preamble = subst(preamble, sub.str(), translated);
        }
@@ -905,18 +912,16 @@ docstring const i18npreamble(Language const * lang, Encoding const & enc,
 
 
 docstring const Layout::langpreamble(Language const * lang,
-                       Encoding const & enc, bool const polyglossia,
-                       bool const unicode) const
+                       Encoding const & enc, bool const polyglossia) const
 {
-       return i18npreamble(lang, enc, langpreamble_, polyglossia, unicode);
+       return i18npreamble(lang, enc, langpreamble_, polyglossia);
 }
 
 
 docstring const Layout::babelpreamble(Language const * lang,
-                       Encoding const & enc, bool const polyglossia,
-                       bool const unicode) const
+                       Encoding const & enc, bool const polyglossia) const
 {
-       return i18npreamble(lang, enc, babelpreamble_, polyglossia, unicode);
+       return i18npreamble(lang, enc, babelpreamble_, polyglossia);
 }