X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Foutput_latex.cpp;h=370b7a0842e75d010b10d11e9c9358e9831e165b;hb=0c7bd9a57f2a308bb9659200eda3b7e45f8d5d3c;hp=6b66ad8c7d68bdf7b66cc5677d786fa75c186d4f;hpb=480937a103708a6510ae24c2ee91cd1459d67104;p=lyx.git diff --git a/src/output_latex.cpp b/src/output_latex.cpp index 6b66ad8c7d..370b7a0842 100644 --- a/src/output_latex.cpp +++ b/src/output_latex.cpp @@ -23,6 +23,7 @@ #include "OutputParams.h" #include "Paragraph.h" #include "ParagraphParameters.h" +#include "texstream.h" #include "TextClass.h" #include "insets/InsetBibitem.h" @@ -249,8 +250,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 - os << setEncoding(data.prev_encoding->iconvName()); + os << setEncoding(data.prev_encoding->iconvName()); } } @@ -259,8 +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 - os << setEncoding(data.prev_encoding->iconvName()); + os << setEncoding(data.prev_encoding->iconvName()); } } @@ -472,9 +471,9 @@ void latexArgInsets(ParagraphList const & pars, ParagraphList::const_iterator pi // get the first paragraph in sequence with this layout and depth pit_type offset = 0; while (true) { - if (prev(pit, offset) == pars.begin()) + if (lyx::prev(pit, offset) == pars.begin()) break; - ParagraphList::const_iterator priorpit = prev(pit, offset + 1); + ParagraphList::const_iterator priorpit = lyx::prev(pit, offset + 1); if (priorpit->layout() == current_layout && priorpit->params().depth() == current_depth) ++offset; @@ -482,7 +481,7 @@ void latexArgInsets(ParagraphList const & pars, ParagraphList::const_iterator pi break; } - ParagraphList::const_iterator spit = prev(pit, offset); + ParagraphList::const_iterator spit = lyx::prev(pit, offset); for (; spit != pars.end(); ++spit) { if (spit->layout() != current_layout || spit->params().depth() < current_depth) @@ -772,6 +771,7 @@ void TeXOnePar(Buffer const & buf, // encoding, since this only affects the position of the outputted // \inputencoding command; the encoding switch will occur when necessary if (bparams.inputenc == "auto" + && !runparams.isFullUnicode() // Xe/LuaTeX use one document-wide encoding (see also switchEncoding()) && runparams.encoding->package() != Encoding::none) { // Look ahead for future encoding changes. // We try to output them at the beginning of the paragraph, @@ -884,8 +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) - os << setEncoding(prev_encoding->iconvName()); + os << setEncoding(prev_encoding->iconvName()); } } @@ -1043,13 +1042,14 @@ void TeXOnePar(Buffer const & buf, } // If this is the last paragraph, and a local_font was set upon entering - // the inset, and we're using "auto" or "default" encoding, the encoding + // the inset, and we're using "auto" or "default" encoding, and not + // compiling with XeTeX or LuaTeX, the encoding // should be set back to that local_font's encoding. - // However, do not change the encoding when non-TeX fonts are used. 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.isFullUnicode() + ) { runparams_in.encoding = runparams_in.local_font->language()->encoding(); os << setEncoding(runparams_in.encoding->iconvName()); } @@ -1287,6 +1287,13 @@ pair switchEncoding(odocstream & os, BufferParams const & bparams, OutputParams const & runparams, Encoding const & newEnc, bool force) { + // XeTeX/LuaTeX use only one encoding per document: + // * with useNonTeXFonts: "utf8plain", + // * with XeTeX and TeX fonts: "ascii" (inputenc fails), + // * with LuaTeX and TeX fonts: only one encoding accepted by luainputenc. + if (runparams.isFullUnicode()) + return make_pair(false, 0); + Encoding const & oldEnc = *runparams.encoding; bool moving_arg = runparams.moving_arg; // If we switch from/to CJK, we need to switch anyway, despite custom inputenc