]> git.lyx.org Git - lyx.git/blobdiff - src/Layout.cpp
Fix a copy-paste error introduced in b754fb02
[lyx.git] / src / Layout.cpp
index 0faa29e847c972542f0118058fa2dc01219df59c..bd4c08bee42fa9884d9f08f0f6a472e22d5e59d7 100644 (file)
@@ -880,8 +880,8 @@ docstring const i18npreamble(Language const * lang, Encoding const & enc,
        string const texenc = lang->encoding()->latexName();
        string const bufenc = enc.iconvName();
        // First and second character of plane 15 (Private Use Area)
-       char const s1[5] = {0xf3, 0xb0, 0x80, 0x80, 0x00}; // U+F0000
-       char const s2[5] = {0xf3, 0xb0, 0x80, 0x81, 0x00}; // U+F0001
+       string const s1 = "\xf3\xb0\x80\x80"; // U+F0000
+       string const s2 = "\xf3\xb0\x80\x81"; // U+F0001
        // FIXME UNICODE
        // lyx::regex is not unicode-safe.
        // Should use QRegExp or (boost::u32regex, but that requires ICU)
@@ -889,11 +889,19 @@ 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 (langenc != bufenc)
-                       translated = "\\inputencoding{" + texenc + "}"
-                               + string(s1) + langenc + string(s2) + translated
-                               + string(s1) + bufenc + string(s2);
+               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.encodable(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);
        }
 #endif