commit 24af4ffcb3cb123b5fa2b753f5efa9faefb3b1ed
Author: Juergen Spitzmueller <[email protected]>
Date:   Sun Aug 16 10:47:08 2020 +0200

    Redo "Move some tests upstream, since we'll need it there" properly
---
 src/Paragraph.cpp |   43 +++++++++++++++++++++++++------------------
 1 files changed, 25 insertions(+), 18 deletions(-)

diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp
index 8dbe0be..92fb804 100644
--- a/src/Paragraph.cpp
+++ b/src/Paragraph.cpp
@@ -343,7 +343,9 @@ public:
                                   Layout const & style,
                                   pos_type & i,
                                   unsigned int & column,
-                                  bool const fontswitch_inset);
+                                  bool const fontswitch_inset,
+                                  bool const closeLanguage,
+                                  bool const lang_switched_at_inset);
 
        ///
        void latexSpecialChar(
@@ -959,7 +961,9 @@ void Paragraph::Private::latexInset(BufferParams const & 
bparams,
                                    Layout const & style,
                                    pos_type & i,
                                    unsigned int & column,
-                                   bool const fontswitch_inset)
+                                   bool const fontswitch_inset,
+                                   bool const closeLanguage,
+                                   bool const lang_switched_at_inset)
 {
        Inset * inset = owner_->getInset(i);
        LBUFERR(inset);
@@ -1030,21 +1034,7 @@ void Paragraph::Private::latexInset(BufferParams const & 
bparams,
        }
 
        if (open_font && (!inset->inheritFont() || fontswitch_inset)) {
-               // Some insets cannot be inside a font change command.
-               // However, even such insets *can* be placed in \L or \R
-               // or their equivalents (for RTL language switches),
-               // so we don't close the language in those cases
-               // (= differing isRightToLeft()).
-               // ArabTeX, though, doesn't seem to handle this special 
behavior.
-               bool const inRLSwitch = 
-                               basefont.isRightToLeft() != 
running_font.isRightToLeft()
-                               && basefont.language()->lang() != 
"arabic_arabtex"
-                               && running_font.language()->lang() != 
"arabic_arabtex";
-               // Having said that, PassThru insets must be inside a font 
change command,
-               // as we do not re-open the font inside. So:
-               bool const closeLanguage = !inset->isPassThru() && !inRLSwitch;
                bool lang_closed = false;
-               bool lang_switched_at_inset = false;
                // Close language if needed
                if (closeLanguage) {
                        // We need prev_font here as language changes directly 
at inset
@@ -1060,7 +1050,6 @@ void Paragraph::Private::latexInset(BufferParams const & 
bparams,
                                                                          
needPar, closeLanguage);
                        column += count;
                        lang_closed = count > 0;
-                       lang_switched_at_inset = prev_font.language() != 
running_font.language();
                }
                // Update the running_font, making sure, however,
                // to leave the language as it was.
@@ -2601,6 +2590,23 @@ void Paragraph::latex(BufferParams const & bparams,
                                && getInset(i)->allowMultiPar()
                                && getInset(i)->lyxCode() != ERT_CODE;
 
+               bool closeLanguage = false;
+               bool lang_switched_at_inset = false;
+               if (fontswitch_inset) {
+                       // Some insets cannot be inside a font change command.
+                       // However, even such insets *can* be placed in \L or \R
+                       // or their equivalents (for RTL language switches),
+                       // so we don't close the language in those cases
+                       // (= differing isRightToLeft()).
+                       // ArabTeX, though, doesn't seem to handle this special 
behavior.
+                       closeLanguage = basefont.isRightToLeft() == 
current_font.isRightToLeft()
+                                       || basefont.language()->lang() == 
"arabic_arabtex"
+                                       || current_font.language()->lang() == 
"arabic_arabtex";
+                       // We need to check prev_font as language changes 
directly at inset
+                       // will only be started inside the inset.
+                       lang_switched_at_inset = prev_font.language() != 
current_font.language();
+               }
+
                // Do we need to close the previous font?
                if (open_font &&
                    ((current_font != running_font
@@ -2798,7 +2804,8 @@ void Paragraph::latex(BufferParams const & bparams,
                                Font const save_basefont = basefont;
                                d->latexInset(bparams, os, rp, running_font,
                                                basefont, real_outerfont, 
open_font,
-                                               runningChange, style, i, 
column, fontswitch_inset);
+                                               runningChange, style, i, 
column, fontswitch_inset,
+                                               closeLanguage, 
lang_switched_at_inset);
                                if (fontswitch_inset) {
                                        if (open_font) {
                                                bool needPar = false;
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to