X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Foutput_latex.cpp;h=5d385e5e09929b54bed248091641bd30007a3b67;hb=fb90076e9065018ee0ef9e16bae2a5d9dcc9436d;hp=314502577fb535a14674f36fa5d0923ad3325bb1;hpb=1eaa2366bfb9c0809b5e4c5a86eef2033f341b25;p=lyx.git diff --git a/src/output_latex.cpp b/src/output_latex.cpp index 314502577f..5d385e5e09 100644 --- a/src/output_latex.cpp +++ b/src/output_latex.cpp @@ -235,6 +235,7 @@ static void finishEnvironment(otexstream & os, OutputParams const & runparams, TeXEnvironmentData const & data) { OutputState * state = getOutputState(); + // BufferParams const & bparams = buf.params(); // FIXME: for speedup shortcut below, would require passing of "buf" as argument if (state->open_encoding_ == CJK && data.cjk_nested) { // We need to close the encoding even if it does not change // to do correct environment nesting @@ -248,8 +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 (!runparams.isFullUnicode()) // FIXME: test for UseTeXFonts - os << setEncoding(data.prev_encoding->iconvName()); + os << setEncoding(data.prev_encoding->iconvName()); } } @@ -258,8 +258,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 (!runparams.isFullUnicode()) // FIXME: test for UseTeXFonts - os << setEncoding(data.prev_encoding->iconvName()); + os << setEncoding(data.prev_encoding->iconvName()); } } @@ -471,9 +470,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; @@ -481,7 +480,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) @@ -771,6 +770,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, @@ -883,8 +883,7 @@ void TeXOnePar(Buffer const & buf, latexArgInsets(par, os, runparams, style.postcommandargs(), "post:"); if (runparams.encoding != prev_encoding) { runparams.encoding = prev_encoding; - if (!runparams.isFullUnicode()) // FIXME: test for UseTeXFonts - os << setEncoding(prev_encoding->iconvName()); + os << setEncoding(prev_encoding->iconvName()); } } @@ -1042,13 +1041,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") - && (!runparams.isFullUnicode())) { // FIXME: test for UseTeXFonts + && !runparams.isFullUnicode() + ) { runparams_in.encoding = runparams_in.local_font->language()->encoding(); os << setEncoding(runparams_in.encoding->iconvName()); } @@ -1286,6 +1286,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