]> git.lyx.org Git - features.git/commitdiff
Align \textgreek and \textcyr with font encoding, part II
authorJuergen Spitzmueller <spitz@lyx.org>
Fri, 20 Apr 2018 18:00:01 +0000 (20:00 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Fri, 20 Apr 2018 18:00:01 +0000 (20:00 +0200)
Also embrace encodable chars to those macros if we don't have a font
encoding that can handle the glyphs.

Fixes the remaining part of #9637

src/Buffer.cpp
src/Paragraph.cpp

index 61f2bfc762111096a7bcd1a15c606fc9c929a014..97ecd4df41d52466872176e49c5f66ee4e6b6558 100644 (file)
@@ -1781,6 +1781,9 @@ Buffer::ExportStatus Buffer::writeLaTeXSource(otexstream & os,
        //        (or not reached) and characters encodable in the current
        //        encoding are not converted to ASCII-representation.
 
+       // Some macros rely on font encoding
+       runparams.main_fontenc = params().main_font_encoding();
+
        // If we are compiling a file standalone, even if this is the
        // child of some other buffer, let's cut the link here, so the
        // file is really independent and no concurring settings from
index b623f05aa4ac6c5c205880ec24d8daa09f3c6515..d8edbe10adc0018ac03645c0a48cdad39f644b5e 100644 (file)
@@ -1372,16 +1372,20 @@ void Paragraph::Private::latexSpecialChar(otexstream & os,
                        }
                }
                string fontenc;
-               if (running_font.language()->lang() == runparams.document_language)
+               if (running_font.language()->lang() == bparams.language->lang())
                        fontenc = runparams.main_fontenc;
                else
                        fontenc = running_font.language()->fontenc();
-               if (Encodings::isKnownScriptChar(c, script)
-                   && prefixIs(latex.first, from_ascii("\\" + script)))
-                       column += writeScriptChars(runparams, os, latex.first,
-                                                  running_change, encoding,
-                                                  fontenc, i) - 1;
-               else if (latex.second
+               // "Script chars" need to embraced in \textcyr and \textgreek notwithstanding
+               // whether they are encodable or not (it only depends on the font encoding)
+               if (!runparams.isFullUnicode() && Encodings::isKnownScriptChar(c, script)) {
+                       docstring const wrapper = from_ascii("\\" + script + "{");
+                       docstring ltx = latex.first;
+                       if (!prefixIs(ltx, wrapper))
+                               ltx = wrapper + latex.first + from_ascii("}");
+                       column += writeScriptChars(runparams, os, ltx, running_change,
+                                                  encoding, fontenc, i) - 1;
+               } else if (latex.second
                         && ((!prefixIs(nextlatex, '\\')
                               && !prefixIs(nextlatex, '{')
                               && !prefixIs(nextlatex, '}'))