]> git.lyx.org Git - features.git/commitdiff
Introduce isNumberChar(char_type) function
authorKornel Benko <kornel@lyx.org>
Sun, 29 May 2022 10:06:18 +0000 (12:06 +0200)
committerKornel Benko <kornel@lyx.org>
Sun, 29 May 2022 10:16:53 +0000 (12:16 +0200)
In FindAdv we use Qt to interpret regular expressions.
Regex uses for instance '\w', '\d' etc.
'\d' finds not just '0-9' but also e.g. '߂' (Nko Digit Two: U+07c2)
'\w' includes also such numbers.

ATM, only FindAdv uses this function.

src/lyxfind.cpp
src/support/lstrings.cpp
src/support/textutils.h

index 025b2bc39909d7338065166520a9ecb0c73badfa..594e2aa5c212fd63f2b3cc0acaa6d9a91f993905 100644 (file)
@@ -4833,7 +4833,7 @@ static int findAdvReplace(BufferView * bv, FindAndReplaceOptions const & opt, Ma
 
 static bool isWordChar(char_type c)
 {
-       return isLetterChar(c) || isDigitASCII(c);
+       return isLetterChar(c) || isNumberChar(c);
 }
 
 /// Perform a FindAdv operation.
@@ -4888,15 +4888,9 @@ bool findAdv(BufferView * bv, FindAndReplaceOptions & opt)
                                                    it != it_end; ++it)
                                                        md2.push_back(*it);
                                                docstring inp = asString(md2);
-                                               LYXERR0("Got \"" << inp << "\"");
-                                               char_type prev = inp[0];
                                                for (len = 0; (unsigned) len < inp.size() && len + cur.pos() <= cur.lastpos(); len++) {
-                                                       char_type c = inp[len];
-                                                       if (isLetterChar(c))
-                                                               continue;
-                                                       if (isDigitASCII(c))
-                                                               continue;
-                                                       break;
+                                                       if (!isWordChar(inp[len]))
+                                                               break;
                                                }
                                                // len == 0 means previous char was a word separator
                                                // len == 1       search starts with a word separator
index b9c23f5601bbb4ae5eec71774a95d09507ae7db5..6a8e90ebbc32824c59e1d13cd2b230e1047749c7 100644 (file)
@@ -189,6 +189,10 @@ bool isDigitASCII(char_type c)
        return '0' <= c && c <= '9';
 }
 
+bool isNumberChar(char_type c)
+{
+       return ucs4_to_qchar(c).isNumber();
+}
 
 bool isAlnumASCII(char_type c)
 {
index 3c29c9223cbb6dd2ef0c63b0445849c0bee9ad2c..64498fab7078bc3feb1dcd5f3dae21edd9c7ac09 100644 (file)
@@ -55,6 +55,9 @@ bool isEuropeanNumberTerminator(char_type c);
 /// return whether \p c is a digit in the ASCII range
 bool isDigitASCII(char_type c);
 
+/// return whether \p c is a digit (not just 0-9)
+bool isNumberChar(char_type c);
+
 /// return whether \p c is alpha or a digit in the ASCII range
 bool isAlnumASCII(char_type c);