]> git.lyx.org Git - features.git/commitdiff
FindAdv: Enable search for different languages in Korean documents too
authorKornel Benko <kornel@lyx.org>
Sun, 18 Nov 2018 09:37:12 +0000 (10:37 +0100)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Thu, 18 Jun 2020 12:39:51 +0000 (14:39 +0200)
The problem here was that for european languages only the encoding
was visible in latex output. Now also the language is provided.

src/lyxfind.cpp
src/output_latex.cpp

index 44a46f9e0953b44067fd5866a889664fe04667b7..1bea0911821e10313955c06aab593b14ebdf573e 100644 (file)
@@ -1516,24 +1516,42 @@ void LatexInfo::buildEntries(bool isPatternString)
         found._tokenstart = pos - count;
         if (sub.str(1).compare(0, 5, "begin") == 0) {
           size_t pos1 = pos + sub.str(0).length();
-          if (interval.par[pos1] == '[') {
-            pos1 = interval.findclosing(pos1+1, interval.par.length(), '[', ']')+1;
-          }
-          if (interval.par[pos1] == '{') {
-            found._dataEnd = interval.findclosing(pos1+1, interval.par.length()) + 1;
+          if (sub.str(5).compare("cjk") == 0) {
+            pos1 = interval.findclosing(pos1+1, interval.par.length()) + 1;
+            if ((interval.par[pos1] == '{') && (interval.par[pos1+1] == '}'))
+              pos1 += 2;
+            found.keytype = KeyInfo::isMain;
+            found._dataStart = pos1;
+            found._dataEnd = interval.par.length();
+            found.disabled = keys["foreignlanguage"].disabled;
+            found.used = keys["foreignlanguage"].used;
+            found._tokensize = pos1 - found._tokenstart;
+            found.head = interval.par.substr(found._tokenstart, found._tokensize);
           }
           else {
-            found._dataEnd = pos1;
+            if (interval.par[pos1] == '[') {
+              pos1 = interval.findclosing(pos1+1, interval.par.length(), '[', ']')+1;
+            }
+            if (interval.par[pos1] == '{') {
+              found._dataEnd = interval.findclosing(pos1+1, interval.par.length()) + 1;
+            }
+            else {
+              found._dataEnd = pos1;
+            }
+            found._dataStart = found._dataEnd;
+            found._tokensize = count + found._dataEnd - pos;
+            found.parenthesiscount = 0;
+            found.disabled = true;
           }
-          found._dataStart = found._dataEnd;
         }
         else {
+          // Handle "\end{...}"
           found._dataStart = pos + sub.str(0).length();
           found._dataEnd = found._dataStart;
+          found._tokensize = count + found._dataEnd - pos;
+          found.parenthesiscount = 0;
+          found.disabled = true;
         }
-        found._tokensize = count + found._dataEnd - pos;
-        found.parenthesiscount = 0;
-        found.disabled = true;
       }
     }
     else if (found.keytype != KeyInfo::isRegex) {
@@ -1631,7 +1649,7 @@ void LatexInfo::buildKeys(bool isPatternString)
   // No split
   makeKey("backslash|textbackslash|textasciicircum|textasciitilde|ldots", KeyInfo(KeyInfo::isChar, 1, false), isPatternString);
   // Found in fr/UserGuide.lyx
-  makeKey("og|fg|textvisiblespace", KeyInfo(KeyInfo::isChar, 0, false), isPatternString);
+  makeKey("og|fg|textvisiblespace|lyx", KeyInfo(KeyInfo::isChar, 0, false), isPatternString);
 
   // Known macros to remove (including their parameter)
   // No split
index a81eb02ed77c5a204eab25ce3dbac31548dae413..1e99675cee5009c90a9f7f3354185eaff1d34b6a 100644 (file)
@@ -941,7 +941,7 @@ void TeXOnePar(Buffer const & buf,
                                        os << "\\L{";
                        }
                        // With CJK, the CJK tag has to be closed first (see below)
-                       if (runparams.encoding->package() != Encoding::CJK
+                       if ((runparams.encoding->package() != Encoding::CJK || runparams.for_search)
                            && (par_lang != openLanguageName(state) || localswitch)
                            && !par_lang.empty()) {
                                string bc = use_polyglossia ?
@@ -1165,7 +1165,7 @@ void TeXOnePar(Buffer const & buf,
                        os << '\n';
 
                // when the paragraph uses CJK, the language has to be closed earlier
-               if (font.language()->encoding()->package() != Encoding::CJK) {
+               if ((font.language()->encoding()->package() != Encoding::CJK) || runparams_in.for_search) {
                        if (lang_end_command.empty()) {
                                // If this is a child, we should restore the
                                // master language after the last paragraph.