X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FFont.cpp;h=7ec589d7556c59d3b775b5e2e1b18f83294d2f46;hb=21c92c8a129b5f3ff56de33bf2941a25967cffbb;hp=695fb893f9d28f031d393b9b99886b9fa2712a00;hpb=85ac309eed0ec274bc83824d04e86f72a71292bf;p=lyx.git diff --git a/src/Font.cpp b/src/Font.cpp index 695fb893f9..7ec589d755 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -56,18 +56,29 @@ namespace { // // Strings used to write LaTeX files // -char const * LaTeXFamilyNames[NUM_FAMILIES + 2] = +char const * LaTeXFamilyCommandNames[NUM_FAMILIES + 2] = { "textrm", "textsf", "texttt", "error1", "error2", "error3", "error4", "error5", "error6", "error7", "error8", "error9", "error10", "error11", "error12", "error13", "error14" }; -char const * LaTeXSeriesNames[NUM_SERIES + 2] = +char const * LaTeXFamilySwitchNames[NUM_FAMILIES + 2] = +{ "rmfamily", "sffamily", "ttfamily", "error1", "error2", "error3", "error4", + "error5", "error6", "error7", "error8", "error9", "error10", "error11", + "error12", "error13", "error14" }; + +char const * LaTeXSeriesCommandNames[NUM_SERIES + 2] = { "textmd", "textbf", "error4", "error5" }; -char const * LaTeXShapeNames[NUM_SHAPE + 2] = +char const * LaTeXSeriesSwitchNames[NUM_SERIES + 2] = +{ "mdseries", "bfseries", "error4", "error5" }; + +char const * LaTeXShapeCommandNames[NUM_SHAPE + 2] = { "textup", "textit", "textsl", "textsc", "error6", "error7" }; -char const * LaTeXSizeNames[NUM_SIZE + 4] = +char const * LaTeXShapeSwitchNames[NUM_SHAPE + 2] = +{ "upshape", "itshape", "slshape", "scshape", "error6", "error7" }; + +char const * LaTeXSizeSwitchNames[NUM_SIZE + 4] = { "tiny", "scriptsize", "footnotesize", "small", "normalsize", "large", "Large", "LARGE", "huge", "Huge", "error8", "error9", "error10", "error11" }; @@ -141,7 +152,7 @@ docstring const Font::stateText(BufferParams * params, bool const terse) const // Returns size in latex format string const Font::latexSize() const { - return LaTeXSizeNames[bits_.size()]; + return LaTeXSizeSwitchNames[bits_.size()]; } @@ -213,13 +224,12 @@ void Font::lyxWriteChanges(Font const & orgfont, /// Writes the head of the LaTeX needed to impose this font // Returns number of chars written. -int Font::latexWriteStartChanges(odocstream & os, BufferParams const & bparams, +int Font::latexWriteStartChanges(otexstream & os, BufferParams const & bparams, OutputParams const & runparams, Font const & base, - Font const & prev) const + Font const & prev, + bool const & non_inherit_inset) const { - bool env = false; - int count = 0; // polyglossia or babel? @@ -283,7 +293,7 @@ int Font::latexWriteStartChanges(odocstream & os, BufferParams const & bparams, } if (language()->encoding()->package() == Encoding::CJK) { - pair const c = switchEncoding(os, bparams, + pair const c = switchEncoding(os.os(), bparams, runparams, *(language()->encoding())); if (c.first) { open_encoding_ = true; @@ -297,26 +307,51 @@ int Font::latexWriteStartChanges(odocstream & os, BufferParams const & bparams, FontInfo p = bits_; p.reduce(prev.bits_); - if (f.family() != INHERIT_FAMILY) { + if (f.size() != INHERIT_SIZE) { + os << '{'; + ++count; os << '\\' - << LaTeXFamilyNames[f.family()] - << '{'; - count += strlen(LaTeXFamilyNames[f.family()]) + 2; - env = true; //We have opened a new environment + << LaTeXSizeSwitchNames[f.size()] << termcmd; + count += strlen(LaTeXSizeSwitchNames[f.size()]) + 1; + } + if (f.family() != INHERIT_FAMILY) { + if (non_inherit_inset) { + os << '{'; + ++count; + os << '\\' << LaTeXFamilySwitchNames[f.family()] << termcmd; + count += strlen(LaTeXFamilySwitchNames[f.family()]) + 1; + } else { + os << '\\' + << LaTeXFamilyCommandNames[f.family()] + << '{'; + count += strlen(LaTeXFamilyCommandNames[f.family()]) + 2; + } } if (f.series() != INHERIT_SERIES) { - os << '\\' - << LaTeXSeriesNames[f.series()] - << '{'; - count += strlen(LaTeXSeriesNames[f.series()]) + 2; - env = true; //We have opened a new environment + if (non_inherit_inset) { + os << '{'; + ++count; + os << '\\' << LaTeXSeriesSwitchNames[f.series()] << termcmd; + count += strlen(LaTeXSeriesSwitchNames[f.series()]) + 1; + } else { + os << '\\' + << LaTeXSeriesCommandNames[f.series()] + << '{'; + count += strlen(LaTeXSeriesCommandNames[f.series()]) + 2; + } } if (f.shape() != INHERIT_SHAPE) { - os << '\\' - << LaTeXShapeNames[f.shape()] - << '{'; - count += strlen(LaTeXShapeNames[f.shape()]) + 2; - env = true; //We have opened a new environment + if (non_inherit_inset) { + os << '{'; + ++count; + os << '\\' << LaTeXShapeSwitchNames[f.shape()] << termcmd; + count += strlen(LaTeXShapeSwitchNames[f.shape()]) + 1; + } else { + os << '\\' + << LaTeXShapeCommandNames[f.shape()] + << '{'; + count += strlen(LaTeXShapeCommandNames[f.shape()]) + 2; + } } if (f.color() != Color_inherit && f.color() != Color_ignore) { if (f.color() == Color_none && p.color() != Color_none) { @@ -329,7 +364,6 @@ int Font::latexWriteStartChanges(odocstream & os, BufferParams const & bparams, << "}{"; count += lcolor.getLaTeXName(f.color()).length() + 13; } - env = true; //We have opened a new environment } // FIXME: uncomment this when we support background. /* @@ -364,24 +398,11 @@ int Font::latexWriteStartChanges(odocstream & os, BufferParams const & bparams, if (f.emph() == FONT_ON) { os << "\\emph{"; count += 6; - env = true; //We have opened a new environment } // \noun{} is a LyX special macro if (f.noun() == FONT_ON) { os << "\\noun{"; count += 6; - env = true; //We have opened a new environment - } - if (f.size() != INHERIT_SIZE) { - // If we didn't open an environment above, we open one here - if (!env) { - os << '{'; - ++count; - } - os << '\\' - << LaTeXSizeNames[f.size()] - << "{}"; - count += strlen(LaTeXSizeNames[f.size()]) + 3; } // The ulem commands need to be on the deepest nesting level // because ulem puts every nested group or macro in a box, @@ -429,10 +450,10 @@ int Font::latexWriteEndChanges(otexstream & os, BufferParams const & bparams, Font const & base, Font const & next, bool & needPar, - bool const & closeLanguage) const + bool const & closeLanguage, + bool const & non_inherit_inset) const { int count = 0; - bool env = false; // reduce the current font to changes against the base // font (of the layout). We use a temporary for this to @@ -440,39 +461,35 @@ int Font::latexWriteEndChanges(otexstream & os, BufferParams const & bparams, FontInfo f = bits_; f.reduce(base.bits_); - if (f.family() != INHERIT_FAMILY) { + if (f.family() != INHERIT_FAMILY && !non_inherit_inset) { os << '}'; ++count; - env = true; // Size change need not bother about closing env. } - if (f.series() != INHERIT_SERIES) { + if (f.series() != INHERIT_SERIES && !non_inherit_inset) { os << '}'; ++count; - env = true; // Size change need not bother about closing env. } - if (f.shape() != INHERIT_SHAPE) { + if (f.shape() != INHERIT_SHAPE && !non_inherit_inset) { os << '}'; ++count; - env = true; // Size change need not bother about closing env. } if (f.color() != Color_inherit && f.color() != Color_ignore && f.color() != Color_none) { os << '}'; ++count; - env = true; // Size change need not bother about closing env. } if (f.emph() == FONT_ON) { os << '}'; ++count; - env = true; // Size change need not bother about closing env. } if (f.noun() == FONT_ON) { os << '}'; ++count; - env = true; // Size change need not bother about closing env. } if (f.size() != INHERIT_SIZE) { - // We only have to close if only size changed - if (!env) { + // 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;