]> git.lyx.org Git - features.git/blobdiff - src/Paragraph.cpp
Sanitize CJK support (fix bug 3561, 4349 and 4337):
[features.git] / src / Paragraph.cpp
index b28082f83e4de5e6071756de9e9f389ec78d8f18..42c4bec1ccd3a879f2c560640b5b61c68e58a327 100644 (file)
@@ -67,6 +67,7 @@ namespace lyx {
 using support::contains;
 using support::lowercase;
 using support::prefixIs;
+using support::subst;
 using support::suffixIs;
 using support::rsplit;
 using support::uppercase;
@@ -1962,12 +1963,22 @@ bool Paragraph::latex(Buffer const & buf,
                        open_font = false;
                }
 
+               // close babel's font environment before opening CJK.
+               if (!running_font.language()->babel().empty() &&
+                   font.language()->encoding()->package() == Encoding::CJK) {
+                               string end_tag = subst(lyxrc.language_command_end,
+                                                       "$$lang",
+                                                       running_font.language()->babel());
+                               os << from_ascii(end_tag);
+                               column += end_tag.length();
+               }
+
                // Switch file encoding if necessary (and allowed)
                if (!runparams.verbatim && 
-                   runparams.encoding->package() == Encoding::inputenc &&
-                   font.language()->encoding()->package() == Encoding::inputenc) {
+                   runparams.encoding->package() == Encoding::none &&
+                   font.language()->encoding()->package() == Encoding::none) {
                        std::pair<bool, int> const enc_switch = switchEncoding(os, bparams,
-                                       runparams.moving_arg, *(runparams.encoding),
+                                       runparams, *(runparams.encoding),
                                        *(font.language()->encoding()));
                        if (enc_switch.first) {
                                column += enc_switch.second;