From: Günter Milde Date: Tue, 10 Nov 2015 23:10:06 +0000 (+0100) Subject: Fix 480937a103708a651/lyxgit. See also #9740. X-Git-Tag: 2.2.0alpha1~31 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=9894e0be23dafe3ad195d483ed7a0dd44cabf847;p=features.git Fix 480937a103708a651/lyxgit. See also #9740. Actually, the changed tests were used to prevent overwriting the encoding changed in Buffer::writeLaTeX with a language-default encoding. This is still required for XeTeX with TeX-fonts unless a proper solution is found. Documents with more than one encoding and TeX-fonts fail with LuaTeX, as "luainputenc" can only handle one encoding. --- diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 18568c7543..d1e01043e0 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -1674,8 +1674,9 @@ void Buffer::writeLaTeXSource(otexstream & os, // XeTeX with TeX fonts is only safe with ASCII encoding, // See #9740 and FIXME in BufferParams::encoding() - // FIXME: when only the current paragraph is shown, this seems to be ignored: - // characters encodable in the current encoding are not converted to ASCII-representation. + // FIXME: when only the current paragraph is shown, this is ignored and + // characters encodable in the current encoding are not converted + // to ASCII-representation. if (!params().useNonTeXFonts && (runparams.flavor == OutputParams::XETEX)) runparams.encoding = encodings.fromLyXName("ascii"); diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 6ecc68abd9..c7ec167709 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -2321,7 +2321,7 @@ string BufferParams::bufferFormat() const string format = documentClass().outputFormat(); if (format == "latex") { if (useNonTeXFonts) - return "xetex"; // FIXME: why not "luatex"? + return "xetex"; // actually "xetex or luatex" if (encoding().package() == Encoding::japanese) return "platex"; } @@ -3141,11 +3141,14 @@ string const BufferParams::loadFonts(LaTeXFeatures & features) const Encoding const & BufferParams::encoding() const { - // FIXME: additionally, we must check for runparams().flavor == XeTeX - // or runparams.isFullUnicode() to care for the combination - // of XeTeX and TeX-fonts (see #9740). - // Currently, we reset the encoding in Buffer::makeLaTeXFile - // (for export) and Buffer::writeLaTeXSource (for preview). + // FIXME: For export with XeTeX and TeX fonts, + // this function returns the wrong value. + // The combination of XeTeX and TeX-fonts requires ASCII (see #9740). + // However, the flavor is no buffer parameter but only known once export started. + // Currently, we set runparams.encoding to ASCII in Buffer::makeLaTeXFile + // (for export) and Buffer::writeLaTeXSource (for preview) + // and prevent overwriting it with another encoding in Paragraph::latex + // and at four places in output_latex.cpp. if (useNonTeXFonts) return *(encodings.fromLyXName("utf8-plain")); if (inputenc == "auto" || inputenc == "default") diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index c25912172c..2d3391885d 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -2567,7 +2567,7 @@ void Paragraph::latex(BufferParams const & bparams, if (allowcust && d->endTeXParParams(bparams, os, runparams) && runparams.encoding != prev_encoding) { runparams.encoding = prev_encoding; - if (!bparams.useNonTeXFonts) + if (runparams.flavor != OutputParams::XETEX) // see BufferParams::encoding os << setEncoding(prev_encoding->iconvName()); } diff --git a/src/output_latex.cpp b/src/output_latex.cpp index 6b66ad8c7d..db6b890f14 100644 --- a/src/output_latex.cpp +++ b/src/output_latex.cpp @@ -249,7 +249,7 @@ static void finishEnvironment(otexstream & os, OutputParams const & runparams, state->prev_env_language_ = data.par_language; if (runparams.encoding != data.prev_encoding) { runparams.encoding = data.prev_encoding; - //if (!bparams.useNonTeXFonts) // FIXME just for speedup, would require passing of "buf" as argument + if (runparams.flavor != OutputParams::XETEX) // see BufferParams::encoding os << setEncoding(data.prev_encoding->iconvName()); } } @@ -259,7 +259,7 @@ static void finishEnvironment(otexstream & os, OutputParams const & runparams, state->prev_env_language_ = data.par_language; if (runparams.encoding != data.prev_encoding) { runparams.encoding = data.prev_encoding; - //if (!bparams.useNonTeXFonts) //FIXME just for speedup + if (runparams.flavor != OutputParams::XETEX) // see BufferParams::encoding os << setEncoding(data.prev_encoding->iconvName()); } } @@ -884,7 +884,7 @@ void TeXOnePar(Buffer const & buf, latexArgInsets(par, os, runparams, style.postcommandargs(), "post:"); if (runparams.encoding != prev_encoding) { runparams.encoding = prev_encoding; - if (!bparams.useNonTeXFonts) + if (runparams.flavor != OutputParams::XETEX) // see BufferParams::encoding os << setEncoding(prev_encoding->iconvName()); } } @@ -1049,7 +1049,8 @@ void TeXOnePar(Buffer const & buf, if (runparams.isLastPar && runparams_in.local_font != 0 && runparams_in.encoding != runparams_in.local_font->language()->encoding() && (bparams.inputenc == "auto" || bparams.inputenc == "default") - && !bparams.useNonTeXFonts) { + && runparams.flavor != OutputParams::XETEX // see BufferParams::encoding + ) { runparams_in.encoding = runparams_in.local_font->language()->encoding(); os << setEncoding(runparams_in.encoding->iconvName()); }