]> git.lyx.org Git - lyx.git/commitdiff
Fix encoding inheritance with CJKUtf8 as custom document encoding
authorJuergen Spitzmueller <spitz@lyx.org>
Fri, 7 Feb 2020 15:18:47 +0000 (16:18 +0100)
committerRichard Kimberly Heck <rikiheck@lyx.org>
Fri, 7 Feb 2020 15:47:19 +0000 (10:47 -0500)
Fixes #11579

(cherry picked from commit b2604aa840a8ee1017fb8ac5f5bc740106976727)

src/DocIterator.cpp

index e9b958030025a9f8bca9006877691378eaf2ef73..04a2a1dc7ff3a9da70ea4b38ec21cb68906778cd 100644 (file)
@@ -20,6 +20,7 @@
 #include "Font.h"
 #include "InsetList.h"
 #include "Language.h"
+#include "LaTeXFeatures.h"
 #include "Paragraph.h"
 #include "LyXRC.h"
 #include "Text.h"
@@ -705,13 +706,17 @@ Encoding const * DocIterator::getEncoding() const
        Text const & text = *sl.text();
        Language const * lang =
                text.getPar(sl.pit()).getFont(bp, sl.pos(),
-                                                                                 text.outerFont(sl.pit())).language();
-       // If we have a custom encoding for the buffer, we only switch
-       // encoding for CJK (see output_latex::switchEncoding())
+                                             text.outerFont(sl.pit())).language();
+       // If we have a custom encoding for the buffer, we do not switch encoding ...
        bool const customenc =
                bp.inputenc != "auto" && bp.inputenc != "default";
+       // ... except for non-CJKutf8 CJK (see output_latex::switchEncoding())
+       bool const cjk_non_utf8 =
+                       bp.encoding().name() != "utf8-cjk"
+                       || !LaTeXFeatures::isAvailable("CJKutf8");
        Encoding const * enc =
-               (customenc && lang->encoding()->package() != Encoding::CJK)
+               (customenc
+                && (lang->encoding()->package() != Encoding::CJK || !cjk_non_utf8))
                ? &bp.encoding() : lang->encoding();
 
        // Some insets force specific encodings sometimes (e.g., listings in
@@ -723,7 +728,7 @@ Encoding const * DocIterator::getEncoding() const
                        Text const & otext = *slices_[i].text();
                        Language const * olang =
                                        otext.getPar(slices_[i].pit()).getFont(bp, slices_[i].pos(),
-                                                                                                                  otext.outerFont(slices_[i].pit())).language();
+                                                                              otext.outerFont(slices_[i].pit())).language();
                        Encoding const * oenc = olang->encoding();
                        if (oenc->name() != "inherit")
                                return inset().forcedEncoding(enc, oenc);
@@ -740,11 +745,12 @@ Encoding const * DocIterator::getEncoding() const
                        Text const & otext = *slices_[i].text();
                        Language const * olang =
                                        otext.getPar(slices_[i].pit()).getFont(bp, slices_[i].pos(),
-                                                                                                                  otext.outerFont(slices_[i].pit())).language();
+                                                                              otext.outerFont(slices_[i].pit())).language();
                        // Again, if we have a custom encoding, this is used
                        // instead of the language's.
                        Encoding const * oenc =
-                                       (customenc && olang->encoding()->package() != Encoding::CJK)
+                                       (customenc
+                                        && (olang->encoding()->package() != Encoding::CJK || !cjk_non_utf8))
                                        ? &bp.encoding() : olang->encoding();
                        if (olang->encoding()->name() != "inherit")
                                return oenc;