commit 7f58601c0057d4450f567cec4e6f7e057cd3749f
Author: Juergen Spitzmueller <sp...@lyx.org>
Date:   Thu Aug 15 15:15:59 2019 +0200

    Fix greyedout note in RTL (#8647)
    
    More complicated than I wished for, but color handling in RTL is
    particularly tricky.
    
    The three versions are needed due to the differences between [pdf]latex,
    xetex, luatex/luabidi and luatex/babel.
    
    (cherry picked from commit 4e74dd0d4258177133e5a374264bbc0cec7f9dbb)
---
 src/LaTeXFeatures.cpp    |   49 ++++++++++++++++++++++++++++++++++++++++++++-
 src/insets/InsetNote.cpp |    2 +
 status.23x               |    2 +
 3 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp
index bf9cc28..268910a 100644
--- a/src/LaTeXFeatures.cpp
+++ b/src/LaTeXFeatures.cpp
@@ -204,6 +204,39 @@ static docstring const lyxgreyedout_def = from_ascii(
        "  {\\textcolor{note_fontcolor}\\bgroup\\ignorespaces}\n"
        "  {\\ignorespacesafterend\\egroup}\n");
 
+static docstring const lyxgreyedout_rtl_def = from_ascii(
+       "%% The greyedout annotation environment (with RTL support)\n"
+       "\\NewEnviron{lyxgreyedout}{%\n"
+       "\\if@rl%\n"
+       "\\everypar{\\textcolor{note_fontcolor}\\beginL\\ignorespaces}%\n"
+       "\\BODY\\everypar{\\ignorespacesafterend\\endL}\n"
+       "\\else%\n"
+       "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n"
+       "\\BODY\\ignorespacesafterend\\egroup\n"
+       "\\fi}\n");
+
+static docstring const lyxgreyedout_luartl_def = from_ascii(
+       "%% The greyedout annotation environment (with RTL support)\n"
+       "\\NewEnviron{lyxgreyedout}{%\n"
+       "\\if@RTL%\n"
+       "\\everypar{\\color{note_fontcolor}\\pardir TRT \\textdir 
TRT\\ignorespaces}%\n"
+       "\\BODY\\everypar{\\ignorespacesafterend}\n"
+       "\\else%\n"
+       "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n"
+       "\\BODY\\ignorespacesafterend\\egroup\n"
+       "\\fi}\n");
+
+static docstring const lyxgreyedout_luartl_babel_def = from_ascii(
+       "%% The greyedout annotation environment (with RTL support)\n"
+       "\\NewEnviron{lyxgreyedout}{%\n"
+       "\\if@rl%\n"
+       "\\everypar{\\color{note_fontcolor}\\pardir TRT \\textdir 
TRT\\ignorespaces}%\n"
+       "\\BODY\\everypar{\\ignorespacesafterend}\n"
+       "\\else%\n"
+       "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n"
+       "\\BODY\\ignorespacesafterend\\egroup\n"
+       "\\fi}\n");
+
 // We want to omit the file extension for includegraphics, but this does not
 // work when the filename contains other dots.
 // Idea from http://www.tex.ac.uk/cgi-bin/texfaq2html?label=unkgrfextn
@@ -990,6 +1023,7 @@ char const * simplefeatures[] = {
        "forest",
        "varwidth",
        "tablefootnote",
+       "environ"
 };
 
 char const * bibliofeatures[] = {
@@ -1505,8 +1539,19 @@ TexString LaTeXFeatures::getMacros() const
        // greyed-out environment (note inset)
        // the color is specified in the routine
        // getColorOptions() to avoid LaTeX-package clashes
-       if (mustProvide("lyxgreyedout"))
-               macros << lyxgreyedout_def;
+       if (mustProvide("lyxgreyedout")) {
+               // We need different version for RTL (#8647)
+               if (hasRTLLanguage()) {
+                       if (runparams_.flavor == OutputParams::LUATEX)
+                               if (useBabel())
+                                       macros << lyxgreyedout_luartl_babel_def;
+                               else
+                                       macros << lyxgreyedout_luartl_def;
+                       else
+                               macros << lyxgreyedout_rtl_def;
+               } else
+                       macros << lyxgreyedout_def;
+       }
 
        if (mustProvide("lyxdot"))
                macros << lyxdot_def << '\n';
diff --git a/src/insets/InsetNote.cpp b/src/insets/InsetNote.cpp
index ef946db..6283e88 100644
--- a/src/insets/InsetNote.cpp
+++ b/src/insets/InsetNote.cpp
@@ -317,6 +317,8 @@ void InsetNote::validate(LaTeXFeatures & features) const
                        features.useInsetLayout(getLayout());
                break;
        case InsetNoteParams::Greyedout:
+               if (features.hasRTLLanguage())
+                       features.require("environ");
                InsetCollapsible::validate(features);
                break;
        case InsetNoteParams::Note:
diff --git a/status.23x b/status.23x
index cb0e367..0c9cc76 100644
--- a/status.23x
+++ b/status.23x
@@ -94,6 +94,8 @@ What's new
 
 - Fix compilation of Hebrew Article with XeTeX and LuaTeX (bug 10525).
 
+- Fix greyedout note with RTL documents (bug 8647).
+
 
 * USER INTERFACE
 

Reply via email to