commit 4010ccafbd95fed56892038c2d3e1a8a9eae8832
Author: Juergen Spitzmueller <sp...@lyx.org>
Date:   Sat Apr 21 12:55:11 2018 +0200

    Factor out test for script wrapper in given font enc
---
 src/Encoding.cpp  |   14 ++++++++++++++
 src/Encoding.h    |    3 +++
 src/Paragraph.cpp |    8 ++------
 3 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/src/Encoding.cpp b/src/Encoding.cpp
index b9cad8d..9966e71 100644
--- a/src/Encoding.cpp
+++ b/src/Encoding.cpp
@@ -599,6 +599,20 @@ bool Encodings::isKnownScriptChar(char_type const c, 
string & preamble)
 }
 
 
+bool Encodings::needsScriptWrapper(string const & script, string const & 
fontenc)
+{
+       if (script == "textgreek")
+               return (fontenc != "LGR");
+       if (script == "textcyr") {
+               return (fontenc != "T2A" && fontenc != "T2B"
+                       && fontenc != "T2C" && fontenc != "X2");
+       }
+       if (script == "textbaltic")
+               return (fontenc != "L7x");
+       return false;
+}
+
+
 bool Encodings::isMathAlpha(char_type c)
 {
        return mathalpha.count(c);
diff --git a/src/Encoding.h b/src/Encoding.h
index 7400127..ed1ec47 100644
--- a/src/Encoding.h
+++ b/src/Encoding.h
@@ -280,6 +280,9 @@ public:
         * \p c is a known character matching the preamble entry.
         */
        static bool isKnownScriptChar(char_type const c, std::string & 
preamble);
+       /// Do we need to wrap scripts into \text<script> macros?
+       static bool needsScriptWrapper(std::string const & script,
+                                      std::string const & fontenc);
        /**
         * Do we have to display in italics this character when in mathmode?
         * This is true if the "mathalpha" flag is set. We use this for
diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp
index 452ce14..14c9c9e 100644
--- a/src/Paragraph.cpp
+++ b/src/Paragraph.cpp
@@ -920,9 +920,7 @@ int Paragraph::Private::latexSurrogatePair(otexstream & os, 
char_type c,
                length -= pos;
                latex2 = latex2.substr(pos, length);
                // We only need the script macro with non-native font encodings
-               if ((script == "textgreek" && fontenc != "LGR")
-                   || (script == "textcyr" && fontenc != "T2A" && fontenc != 
"T2B"
-                       && fontenc != "T2C" && fontenc != "X2")) {
+               if (Encodings::needsScriptWrapper(script, fontenc)) {
                        scriptmacro = from_ascii("\\" + script + "{");
                        cb = from_ascii("}");
                }
@@ -1013,9 +1011,7 @@ int Paragraph::Private::writeScriptChars(OutputParams 
const & runparams,
        int pos = 0;
        int length = brace2;
        bool closing_brace = true;
-       if ((script == "textgreek" && fontenc == "LGR")
-           ||(script == "textcyr" && (fontenc == "T2A" || fontenc == "T2B"
-                                      || fontenc == "T2C" || fontenc == 
"X2"))) {
+       if (!Encodings::needsScriptWrapper(script, fontenc)) {
                // Correct font encoding is being used, so we can avoid 
\text[greek|cyr].
                pos = brace1 + 1;
                length -= pos;

Reply via email to