]> git.lyx.org Git - features.git/blobdiff - src/Paragraph.cpp
#6401 avoid use of lyxCode()
[features.git] / src / Paragraph.cpp
index 8e10eda80b9f89172a87f4bf99cd71e3b2f889ed..2465cc4101e88c425c616bd3152965fa69fa52e6 100644 (file)
@@ -1087,6 +1087,12 @@ void Paragraph::Private::latexInset(BufferParams const & bparams,
                        runparams.local_font = &basefont;
        }
 
+       if (fontswitch_inset && !closeLanguage && fontswitch_inset) {
+               // The directionality has been switched at inset.
+               // Force markup inside.
+               runparams.local_font = &basefont;
+       }
+
        size_t const previous_row_count = os.texrow().rows();
 
        try {
@@ -2609,6 +2615,7 @@ void Paragraph::latex(BufferParams const & bparams,
                }
 
                // Do we need to close the previous font?
+               bool langClosed = false;
                if (open_font &&
                    ((current_font != running_font
                      || current_font.language() != running_font.language())
@@ -2644,6 +2651,7 @@ void Paragraph::latex(BufferParams const & bparams,
                        }
                        running_font = basefont;
                        open_font = false;
+                       langClosed = true;
                }
 
                // if necessary, close language environment before opening CJK
@@ -2660,7 +2668,8 @@ void Paragraph::latex(BufferParams const & bparams,
                }
 
                // Switch file encoding if necessary (and allowed)
-               if (!runparams.pass_thru && !style.pass_thru &&
+               if ((!fontswitch_inset || closeLanguage)
+                   && !runparams.pass_thru && !style.pass_thru &&
                    runparams.encoding->package() != Encoding::none &&
                    current_font.language()->encoding()->package() != Encoding::none) {
                        pair<bool, int> const enc_switch =
@@ -2742,7 +2751,7 @@ void Paragraph::latex(BufferParams const & bparams,
                                }
                        } else {
                                running_font = current_font;
-                               open_font = true;
+                               open_font = !langClosed;
                        }
                }
 
@@ -4535,7 +4544,7 @@ Language * Paragraph::Private::locateSpellRange(
                // hop to end of word
                while (last < to && !owner_->isWordSeparator(last)) {
                        Inset const * inset = owner_->getInset(last);
-                       if (inset && inset->lyxCode() == SPECIALCHAR_CODE) {
+                       if (inset && dynamic_cast<const InsetSpecialChar *>(inset)) {
                                // check for "invisible" letters such as ligature breaks
                                odocstringstream os;
                                inset->toString(os);