commit 4e74dd0d4258177133e5a374264bbc0cec7f9dbb
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.
---
 src/LaTeXFeatures.cpp    |   51 +++++++++++++++++++++++++++++++++++++++++++--
 src/insets/InsetNote.cpp |    2 +
 2 files changed, 50 insertions(+), 3 deletions(-)

diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp
index 251f5bf..cd04b4c 100644
--- a/src/LaTeXFeatures.cpp
+++ b/src/LaTeXFeatures.cpp
@@ -195,6 +195,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
@@ -1019,7 +1052,8 @@ char const * simplefeatures[] = {
        "chessboard",
        "xskak",
        "pict2e",
-       "drs"
+       "drs",
+       "environ"
 };
 
 char const * bibliofeatures[] = {
@@ -1557,8 +1591,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 02f47ba..9f4c5ed 100644
--- a/src/insets/InsetNote.cpp
+++ b/src/insets/InsetNote.cpp
@@ -312,6 +312,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:

Reply via email to