]> git.lyx.org Git - lyx.git/blobdiff - src/LaTeXFeatures.cpp
Handle change-accept and change-reject in multi-cell selection
[lyx.git] / src / LaTeXFeatures.cpp
index 4abb586f22bc32c37df5489f1353717672e88a6e..88e3ef8eb512f40c2a2d069e98dea70598fdb2ec 100644 (file)
@@ -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
@@ -208,32 +241,71 @@ static docstring const changetracking_dvipost_def = from_ascii(
        "\\dvipost{osstart color push Red}\n"
        "\\dvipost{osend color pop}\n"
        "\\dvipost{cbstart color push Blue}\n"
+       "\\dvipost{cbrule 0pt}\n"
        "\\dvipost{cbend color pop}\n"
-       "\\DeclareRobustCommand{\\lyxadded}[3]{\\changestart#3\\changeend}\n"
-       "\\DeclareRobustCommand{\\lyxdeleted}[3]{%\n"
-       "\\changestart\\overstrikeon#3\\overstrikeoff\\changeend}\n");
+       "\\DeclareRobustCommand{\\lyxadded}[4][]{\\changestart#4\\changeend}\n"
+       "\\DeclareRobustCommand{\\lyxdeleted}[4][]{%\n"
+       "\\changestart\\overstrikeon#4\\overstrikeoff\\changeend}\n");
+
+static docstring const changetracking_dvipost_cb_def = from_ascii(
+       "%% Change tracking with dvipost\n"
+       "\\dvipostlayout\n"
+       "\\dvipost{osstart color push Red}\n"
+       "\\dvipost{osend color pop}\n"
+       "\\dvipost{cbstart color push Blue}\n"
+       "\\dvipost{cbend color pop}\n"
+       "\\DeclareRobustCommand{\\lyxadded}[4][]{\\changestart#4\\changeend}\n"
+       "\\DeclareRobustCommand{\\lyxdeleted}[4][]{%\n"
+       "\\changestart\\overstrikeon#4\\overstrikeoff\\changeend}\n");
 
 static docstring const changetracking_xcolor_ulem_def = from_ascii(
        "%% Change tracking with ulem\n"
-       "\\DeclareRobustCommand{\\lyxadded}[3]{{\\color{lyxadded}{}#3}}\n"
-       "\\DeclareRobustCommand{\\lyxdeleted}[3]{{\\color{lyxdeleted}\\lyxsout{#3}}}\n"
+       "\\DeclareRobustCommand{\\lyxadded}[4][]{{\\color{lyxadded}{}#4}}\n"
+       "\\DeclareRobustCommand{\\lyxdeleted}[4][]{{\\color{lyxdeleted}\\lyxsout{#4}}}\n"
+       "\\DeclareRobustCommand{\\lyxsout}[1]{\\ifx\\\\#1\\else\\sout{#1}\\fi}\n");
+
+static docstring const changetracking_xcolor_ulem_cb_def = from_ascii(
+       "%% Change tracking with ulem and changebars\n"
+       "\\DeclareRobustCommand{\\lyxadded}[4][]{{%\n"
+       "    \\protect\\cbstart\\color{lyxadded}{}#4%\n"
+       "    \\protect\\cbend%\n"
+       "}}\n"
+       "\\DeclareRobustCommand{\\lyxdeleted}[4][]{{%\n"
+       "    \\protect\\cbstart\\color{lyxdeleted}\\lyxsout{#4}%\n"
+       "    \\protect\\cbend%\n"
+       "}}\n"
        "\\DeclareRobustCommand{\\lyxsout}[1]{\\ifx\\\\#1\\else\\sout{#1}\\fi}\n");
 
 static docstring const changetracking_xcolor_ulem_hyperref_def = from_ascii(
-       "%% Change tracking with ulem\n"
-       "\\DeclareRobustCommand{\\lyxadded}[3]{{\\texorpdfstring{\\color{lyxadded}{}}{}#3}}\n"
-       "\\DeclareRobustCommand{\\lyxdeleted}[3]{{\\texorpdfstring{\\color{lyxdeleted}\\lyxsout{#3}}{}}}\n"
+       "%% Change tracking with ulem and hyperref\n"
+       "\\DeclareRobustCommand{\\lyxadded}[4][]{{\\texorpdfstring{\\color{lyxadded}{}}{}#4}}\n"
+       "\\DeclareRobustCommand{\\lyxdeleted}[4][]{{\\texorpdfstring{\\color{lyxdeleted}\\lyxsout{#4}}{}}}\n"
+       "\\DeclareRobustCommand{\\lyxsout}[1]{\\ifx\\\\#1\\else\\sout{#1}\\fi}\n");
+
+static docstring const changetracking_xcolor_ulem_hyperref_cb_def = from_ascii(
+       "%% Change tracking with ulem, hyperref and changebars\n"
+       "\\DeclareRobustCommand{\\lyxadded}[4][]{{%\n"
+       "    \\texorpdfstring{\\protect\\cbstart\\color{lyxadded}{}}{}#4%\n"
+       "    \\texorpdfstring{\\protect\\cbend}{}%\n"
+       "}}\n"
+       "\\DeclareRobustCommand{\\lyxdeleted}[4][]{{%\n"
+       "    \\texorpdfstring{\\protect\\cbstart\\color{lyxdeleted}\\lyxsout{#4}%\n"
+       "    \\protect\\cbend}{}%\n"
+       "}}\n"
        "\\DeclareRobustCommand{\\lyxsout}[1]{\\ifx\\\\#1\\else\\sout{#1}\\fi}\n");
 
-static docstring const changetracking_tikz_math_sout_def = from_ascii(
-       "%% Strike out display math with tikz\n"
+static docstring const changetracking_tikz_object_sout_def = from_ascii(
+       "%% Strike out display math and text objects with tikz\n"
        "\\usepackage{tikz}\n"
        "\\usetikzlibrary{calc}\n"
-       "\\newcommand{\\lyxmathsout}[1]{%\n"
-       "  \\tikz[baseline=(math.base)]{\n"
-       "    \\node[inner sep=0pt,outer sep=0pt](math){#1};\n"
-       "    \\draw($(math.south west)+(2em,.5em)$)--($(math.north east)-(2em,.5em)$);\n"
+       "\\newcommand{\\lyxobjectsout}[1]{%\n"
+       "  \\bgroup%\n"
+       "  \\color{lyxdeleted}%\n"
+       "  \\tikz[baseline=(obj.base)]{\n"
+       "    \\node[inner sep=0pt,outer sep=0pt](obj){#1};\n"
+       "    \\draw($(obj.south west)+(2em,.5em)$)--($(obj.north east)-(2em,.5em)$);\n"
        "  }\n"
+       "  \\egroup%\n"
        "}\n");
 
 static docstring const changetracking_none_def = from_ascii(
@@ -736,8 +808,14 @@ void LaTeXFeatures::useFloat(string const & name, bool subfloat)
        // use the "H" modifier. This includes modified table and
        // figure floats. (Lgb)
        Floating const & fl = params_.documentClass().floats().getType(name);
-       if (!fl.floattype().empty() && fl.usesFloatPkg()) {
-               require("float");
+       if (!fl.floattype().empty()) {
+               if (fl.usesFloatPkg())
+                       require("float");
+               if (!fl.requires().empty()) {
+                       vector<string> reqs = getVectorFromString(fl.requires());
+                       for (auto const req : reqs)
+                               require(req);
+               }
        }
 }
 
@@ -879,6 +957,20 @@ set<string> LaTeXFeatures::getPolyglossiaLanguages() const
 }
 
 
+string LaTeXFeatures::getActiveChars() const
+{
+       string res;
+       // first the main language
+       res += params_.language->activeChars();
+       // now the secondary languages
+       LanguageList::const_iterator const begin = UsedLanguages_.begin();
+       for (LanguageList::const_iterator cit = begin;
+            cit != UsedLanguages_.end(); ++cit)
+               res += ((*cit)->activeChars());
+       return res;
+}
+
+
 set<string> LaTeXFeatures::getEncodingSet(string const & doc_encoding) const
 {
        // This does only find encodings of languages supported by babel, but
@@ -936,7 +1028,6 @@ char const * simplefeatures[] = {
        "verbatim",
        "cprotect",
        "longtable",
-       "rotating",
        "latexsym",
        "pifont",
        // subfig is handled in BufferParams.cpp
@@ -948,7 +1039,6 @@ char const * simplefeatures[] = {
          the `float' package. See the caption package documentation
          for explanation.*/
        "float",
-       "rotfloat",
        "wrapfig",
        "booktabs",
        "dvipost",
@@ -972,6 +1062,7 @@ char const * simplefeatures[] = {
        "csquotes",
        "enumitem",
        "endnotes",
+       "enotez",
        "hhline",
        "ifthen",
        // listings is handled in BufferParams.cpp
@@ -1000,7 +1091,8 @@ char const * simplefeatures[] = {
        "chessboard",
        "xskak",
        "pict2e",
-       "drs"
+       "drs",
+       "environ"
 };
 
 char const * bibliofeatures[] = {
@@ -1123,6 +1215,10 @@ string const LaTeXFeatures::getPackages() const
        // The rest of these packages are somewhat more complicated
        // than those above.
 
+       if (mustProvide("changebar") && !mustProvide("ct-dvipost")) {
+               packages << "\\usepackage{changebar}\n";
+       }
+
        if (mustProvide("footnote")) {
                if (isRequired("hyperref"))
                        packages << "\\usepackage{footnotehyper}\n";
@@ -1223,6 +1319,13 @@ string const LaTeXFeatures::getPackages() const
                                 << "]{graphicx}\n";
        }
 
+       // These must be loaded after graphicx, since they try
+       // to load graphicx without options
+       if (mustProvide("rotating"))
+               packages << "\\usepackage{rotating}\n";
+       if (mustProvide("rotfloat"))
+               packages << "\\usepackage{rotfloat}\n";
+
        // lyxskak.sty --- newer chess support based on skak.sty
        if (mustProvide("chess"))
                packages << "\\usepackage[ps,mover]{lyxskak}\n";
@@ -1531,8 +1634,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';
@@ -1544,8 +1658,12 @@ TexString LaTeXFeatures::getMacros() const
                macros << lyxref_def << '\n';
 
        // change tracking
-       if (mustProvide("ct-dvipost"))
-               macros << changetracking_dvipost_def;
+       if (mustProvide("ct-dvipost")) {
+               if (isRequired("changebar"))
+                       macros << changetracking_dvipost_cb_def;
+               else
+                       macros << changetracking_dvipost_def;
+       }
 
        if (mustProvide("ct-xcolor-ulem")) {
                streamsize const prec = macros.os().precision(2);
@@ -1560,14 +1678,21 @@ TexString LaTeXFeatures::getMacros() const
 
                macros.os().precision(prec);
 
-               if (isRequired("hyperref"))
-                       macros << changetracking_xcolor_ulem_hyperref_def;
-               else
-                       macros << changetracking_xcolor_ulem_def;
+               if (isRequired("changebar")) {
+                       if (isRequired("hyperref"))
+                               macros << changetracking_xcolor_ulem_hyperref_cb_def;
+                       else
+                               macros << changetracking_xcolor_ulem_cb_def;
+               } else {
+                       if (isRequired("hyperref"))
+                               macros << changetracking_xcolor_ulem_hyperref_def;
+                       else
+                               macros << changetracking_xcolor_ulem_def;
+               }
        }
 
-       if (mustProvide("ct-tikz-math-sout"))
-                       macros << changetracking_tikz_math_sout_def;
+       if (mustProvide("ct-tikz-object-sout"))
+               macros << changetracking_tikz_object_sout_def;
 
        if (mustProvide("ct-none"))
                macros << changetracking_none_def;