]> git.lyx.org Git - lyx.git/blobdiff - src/output_latex.cpp
Cmake export tests: Create concatenated labels in the form 'export:reverted:examples...
[lyx.git] / src / output_latex.cpp
index 314502577fb535a14674f36fa5d0923ad3325bb1..ee6fc313207259b40db544c40f26900fd813a1a2 100644 (file)
@@ -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());
                }
        }
 
@@ -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<bool, int> 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