Introduce isNumberChar(char_type) function

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.
This commit is contained in:
Kornel Benko 2022-05-29 12:06:18 +02:00
parent d7662e5586
commit 82af8778f1
3 changed files with 10 additions and 9 deletions

View File

@ -4833,7 +4833,7 @@ static int findAdvReplace(BufferView * bv, FindAndReplaceOptions const & opt, Ma
static bool isWordChar(char_type c) static bool isWordChar(char_type c)
{ {
return isLetterChar(c) || isDigitASCII(c); return isLetterChar(c) || isNumberChar(c);
} }
/// Perform a FindAdv operation. /// Perform a FindAdv operation.
@ -4888,15 +4888,9 @@ bool findAdv(BufferView * bv, FindAndReplaceOptions & opt)
it != it_end; ++it) it != it_end; ++it)
md2.push_back(*it); md2.push_back(*it);
docstring inp = asString(md2); 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++) { for (len = 0; (unsigned) len < inp.size() && len + cur.pos() <= cur.lastpos(); len++) {
char_type c = inp[len]; if (!isWordChar(inp[len]))
if (isLetterChar(c)) break;
continue;
if (isDigitASCII(c))
continue;
break;
} }
// len == 0 means previous char was a word separator // len == 0 means previous char was a word separator
// len == 1 search starts with a word separator // len == 1 search starts with a word separator

View File

@ -189,6 +189,10 @@ bool isDigitASCII(char_type c)
return '0' <= c && c <= '9'; return '0' <= c && c <= '9';
} }
bool isNumberChar(char_type c)
{
return ucs4_to_qchar(c).isNumber();
}
bool isAlnumASCII(char_type c) bool isAlnumASCII(char_type c)
{ {

View File

@ -55,6 +55,9 @@ bool isEuropeanNumberTerminator(char_type c);
/// return whether \p c is a digit in the ASCII range /// return whether \p c is a digit in the ASCII range
bool isDigitASCII(char_type c); 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 /// return whether \p c is alpha or a digit in the ASCII range
bool isAlnumASCII(char_type c); bool isAlnumASCII(char_type c);