]> git.lyx.org Git - lyx.git/blobdiff - src/Font.cpp
Correct Right Arrow key processing in Modules list
[lyx.git] / src / Font.cpp
index 7ec589d7556c59d3b775b5e2e1b18f83294d2f46..327bc1821befb52e3a0a19c02e4afeb2b797ff51 100644 (file)
@@ -228,7 +228,8 @@ int Font::latexWriteStartChanges(otexstream & os, BufferParams const & bparams,
                                    OutputParams const & runparams,
                                    Font const & base,
                                    Font const & prev,
-                                   bool const & non_inherit_inset) const
+                                   bool const & non_inherit_inset,
+                                   bool const & needs_cprotection) const
 {
        int count = 0;
 
@@ -237,13 +238,20 @@ int Font::latexWriteStartChanges(otexstream & os, BufferParams const & bparams,
            && language()->lang() != base.language()->lang()
            && language() != prev.language()) {
                if (!language()->polyglossia().empty()) {
-                       string tmp = "\\text" + language()->polyglossia();
+                       string tmp;
+                       if (needs_cprotection)
+                               tmp += "\\cprotect";
+                       tmp += "\\text" + language()->polyglossia();
                        if (!language()->polyglossiaOpts().empty()) {
                                tmp += "[" + language()->polyglossiaOpts() + "]";
-                               if (runparams.use_hyperref && runparams.moving_arg)
+                               if (runparams.use_hyperref && runparams.moving_arg) {
                                        // We need to strip the command for
                                        // the pdf string, see #11813
-                                       tmp = "\\texorpdfstring{" + tmp + "}{}";
+                                       string tmpp;
+                                       if (needs_cprotection)
+                                               tmpp = "\\cprotect";
+                                       tmp = tmpp + "\\texorpdfstring{" + tmp + "}{}";
+                               }
                        }
                        tmp += "{";
                        os << from_ascii(tmp);
@@ -256,21 +264,41 @@ int Font::latexWriteStartChanges(otexstream & os, BufferParams const & bparams,
        } else if (language()->babel() != base.language()->babel() &&
            language() != prev.language()) {
                if (language()->lang() == "farsi") {
+                       if (needs_cprotection) {
+                               os << "\\cprotect";
+                               count += 9;
+                       }
                        os << "\\textFR{";
                        count += 8;
                } else if (!isRightToLeft() &&
                            base.language()->lang() == "farsi") {
+                       if (needs_cprotection) {
+                               os << "\\cprotect";
+                               count += 9;
+                       }
                        os << "\\textLR{";
                        count += 8;
                } else if (language()->lang() == "arabic_arabi") {
+                       if (needs_cprotection) {
+                               os << "\\cprotect";
+                               count += 9;
+                       }
                        os << "\\textAR{";
                        count += 8;
                } else if (!isRightToLeft() &&
                                base.language()->lang() == "arabic_arabi") {
+                       if (needs_cprotection) {
+                               os << "\\cprotect";
+                               count += 9;
+                       }
                        os << "\\textLR{";
                        count += 8;
                // currently the remaining RTL languages are arabic_arabtex and hebrew
                } else if (isRightToLeft() != prev.isRightToLeft()) {
+                       if (needs_cprotection) {
+                               os << "\\cprotect";
+                               count += 9;
+                       }
                        if (isRightToLeft()) {
                                os << "\\R{";
                                count += 3;
@@ -321,6 +349,10 @@ int Font::latexWriteStartChanges(otexstream & os, BufferParams const & bparams,
                        os << '\\' << LaTeXFamilySwitchNames[f.family()] << termcmd;
                        count += strlen(LaTeXFamilySwitchNames[f.family()]) + 1;
                } else {
+                       if (needs_cprotection) {
+                               os << "\\cprotect";
+                               count += 9;
+                       }
                        os << '\\'
                           << LaTeXFamilyCommandNames[f.family()]
                           << '{';
@@ -334,6 +366,10 @@ int Font::latexWriteStartChanges(otexstream & os, BufferParams const & bparams,
                        os << '\\' << LaTeXSeriesSwitchNames[f.series()] << termcmd;
                        count += strlen(LaTeXSeriesSwitchNames[f.series()]) + 1;
                } else {
+                       if (needs_cprotection) {
+                               os << "\\cprotect";
+                               count += 9;
+                       }
                        os << '\\'
                           << LaTeXSeriesCommandNames[f.series()]
                           << '{';
@@ -347,6 +383,10 @@ int Font::latexWriteStartChanges(otexstream & os, BufferParams const & bparams,
                        os << '\\' << LaTeXShapeSwitchNames[f.shape()] << termcmd;
                        count += strlen(LaTeXShapeSwitchNames[f.shape()]) + 1;
                } else {
+                       if (needs_cprotection) {
+                               os << "\\cprotect";
+                               count += 9;
+                       }
                        os << '\\'
                           << LaTeXShapeCommandNames[f.shape()]
                           << '{';
@@ -359,6 +399,10 @@ int Font::latexWriteStartChanges(otexstream & os, BufferParams const & bparams,
                        os << '}';
                        ++count;
                } else if (f.color() != Color_none) {
+                       if (needs_cprotection) {
+                               os << "\\cprotect";
+                               count += 9;
+                       }
                        os << "\\textcolor{"
                           << from_ascii(lcolor.getLaTeXName(f.color()))
                           << "}{";
@@ -396,11 +440,19 @@ int Font::latexWriteStartChanges(otexstream & os, BufferParams const & bparams,
                }
        }
        if (f.emph() == FONT_ON) {
+               if (needs_cprotection) {
+                       os << "\\cprotect";
+                       count += 9;
+               }
                os << "\\emph{";
                count += 6;
        }
        // \noun{} is a LyX special macro
        if (f.noun() == FONT_ON) {
+               if (needs_cprotection) {
+                       os << "\\cprotect";
+                       count += 9;
+               }
                os << "\\noun{";
                count += 6;
        }
@@ -408,23 +460,39 @@ int Font::latexWriteStartChanges(otexstream & os, BufferParams const & bparams,
        // because ulem puts every nested group or macro in a box,
        // which prevents linebreaks (#8424, #8733)
        if (f.underbar() == FONT_ON) {
+               if (needs_cprotection) {
+                       os << "\\cprotect";
+                       count += 9;
+               }
                os << "\\uline{";
-               count += 10;
+               count += 7;
                ++runparams.inulemcmd;
        }
        if (f.uuline() == FONT_ON) {
+               if (needs_cprotection) {
+                       os << "\\cprotect";
+                       count += 9;
+               }
                os << "\\uuline{";
-               count += 11;
+               count += 8;
                ++runparams.inulemcmd;
        }
        if (f.strikeout() == FONT_ON) {
+               if (needs_cprotection) {
+                       os << "\\cprotect";
+                       count += 9;
+               }
                os << "\\sout{";
-               count += 9;
+               count += 6;
                ++runparams.inulemcmd;
        }
        if (f.xout() == FONT_ON) {
+               if (needs_cprotection) {
+                       os << "\\cprotect";
+                       count += 9;
+               }
                os << "\\xout{";
-               count += 9;
+               count += 6;
                ++runparams.inulemcmd;
        }
        if (f.uwave() == FONT_ON) {
@@ -434,8 +502,12 @@ int Font::latexWriteStartChanges(otexstream & os, BufferParams const & bparams,
                        os << "\\ULdepth=1000pt";
                        count += 15;
                }
+               if (needs_cprotection) {
+                       os << "\\cprotect";
+                       count += 9;
+               }
                os << "\\uwave{";
-               count += 10;
+               count += 7;
                ++runparams.inulemcmd;
        }
        return count;
@@ -450,8 +522,7 @@ int Font::latexWriteEndChanges(otexstream & os, BufferParams const & bparams,
                                  Font const & base,
                                  Font const & next,
                                  bool & needPar,
-                                 bool const & closeLanguage,
-                                 bool const & non_inherit_inset) const
+                                 bool const & closeLanguage) const
 {
        int count = 0;
 
@@ -461,15 +532,15 @@ int Font::latexWriteEndChanges(otexstream & os, BufferParams const & bparams,
        FontInfo f = bits_;
        f.reduce(base.bits_);
 
-       if (f.family() != INHERIT_FAMILY && !non_inherit_inset) {
+       if (f.family() != INHERIT_FAMILY) {
                os << '}';
                ++count;
        }
-       if (f.series() != INHERIT_SERIES && !non_inherit_inset) {
+       if (f.series() != INHERIT_SERIES) {
                os << '}';
                ++count;
        }
-       if (f.shape() != INHERIT_SHAPE && !non_inherit_inset) {
+       if (f.shape() != INHERIT_SHAPE) {
                os << '}';
                ++count;
        }
@@ -489,15 +560,13 @@ int Font::latexWriteEndChanges(otexstream & os, BufferParams const & bparams,
                // We do not close size group in front of
                // insets with InheritFont() false (as opposed
                // to all other font properties) (#8384)
-               if (!non_inherit_inset) {
-                       if (needPar && !closeLanguage) {
-                               os << "\\par";
-                               count += 4;
-                               needPar = false;
-                       }
-                       os << '}';
-                       ++count;
+               if (needPar && !closeLanguage) {
+                       os << "\\par";
+                       count += 4;
+                       needPar = false;
                }
+               os << '}';
+               ++count;
        }
        if (f.underbar() == FONT_ON) {
                os << '}';