#7026 substitute isDigit() by isDigitASCII() and ditch isDigit(); introduce isNumber() and use it in spell checker; change isdigit() to isDigitASCII() otherwise

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@36748 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Stephan Witt 2010-12-06 22:35:15 +00:00
parent 256b236675
commit 430d03811e
9 changed files with 43 additions and 35 deletions

View File

@ -24,6 +24,7 @@
#include "support/lstrings.h"
#include "support/os.h"
#include "support/Systemcall.h"
#include "support/textutils.h"
#include <algorithm>
@ -102,7 +103,7 @@ bool Format::isChildFormat() const
{
if (name_.empty())
return false;
return isdigit(name_[name_.length() - 1]);
return isDigitASCII(name_[name_.length() - 1]);
}

View File

@ -358,6 +358,8 @@ public:
return speller_change_number > speller_state_.currentChangeNumber();
}
bool ignoreWord(docstring const & word) const ;
void setMisspelled(pos_type from, pos_type to, SpellChecker::Result state)
{
pos_type textsize = owner_->size();
@ -2818,7 +2820,7 @@ bool Paragraph::isWordSeparator(pos_type pos) const
char_type const c = d->text_[pos];
// We want to pass the ' and escape chars to the spellchecker
static docstring const quote = from_utf8(lyxrc.spellchecker_esc_chars + '\'');
return (!isLetterChar(c) && !isDigit(c) && !contains(quote, c))
return (!isLetterChar(c) && !isDigitASCII(c) && !contains(quote, c))
|| pos == size();
}
@ -2828,7 +2830,7 @@ bool Paragraph::isChar(pos_type pos) const
if (Inset const * inset = getInset(pos))
return inset->isChar();
char_type const c = d->text_[pos];
return !isLetterChar(c) && !isDigit(c) && !lyx::isSpace(c);
return !isLetterChar(c) && !isDigitASCII(c) && !lyx::isSpace(c);
}
@ -3545,6 +3547,21 @@ bool Paragraph::needsSpellCheck() const
}
bool Paragraph::Private::ignoreWord(docstring const & word) const
{
// Ignore words with digits
// FIXME: make this customizable
// (note that some checkers ignore words with digits by default)
docstring::const_iterator cit = word.begin();
docstring::const_iterator const end = word.end();
for (; cit != end; ++cit) {
if (isNumber((*cit)))
return true;
}
return false;
}
SpellChecker::Result Paragraph::spellCheck(pos_type & from, pos_type & to,
WordLangTuple & wl, docstring_list & suggestions,
bool do_suggestion, bool check_learned) const
@ -3570,10 +3587,7 @@ SpellChecker::Result Paragraph::spellCheck(pos_type & from, pos_type & to,
return result;
if (needsSpellCheck() || check_learned) {
// Ignore words with digits
// FIXME: make this customizable
// (note that some checkers ignore words with digits by default)
if (!hasDigit(word)) {
if (!d->ignoreWord(word)) {
bool const trailing_dot = to < size() && d->text_[to] == '.';
result = speller->check(wl);
if (SpellChecker::misspelled(result) && trailing_dot) {

View File

@ -850,7 +850,7 @@ void Text::insertChar(Cursor & cur, char_type c)
static docstring const number_seperators = from_ascii(".,:");
if (cur.current_font.fontInfo().number() == FONT_ON) {
if (!isDigit(c) && !contains(number_operators, c) &&
if (!isDigitASCII(c) && !contains(number_operators, c) &&
!(contains(number_seperators, c) &&
cur.pos() != 0 &&
cur.pos() != cur.lastpos() &&
@ -858,7 +858,7 @@ void Text::insertChar(Cursor & cur, char_type c)
tm.displayFont(pit, cur.pos() - 1).fontInfo().number() == FONT_ON)
)
number(cur); // Set current_font.number to OFF
} else if (isDigit(c) &&
} else if (isDigitASCII(c) &&
cur.real_current_font.isVisibleRightToLeft()) {
number(cur); // Set current_font.number to ON

View File

@ -555,13 +555,13 @@ namespace {
return false;
// check for field type
if (isDigit(ch)) {
if (isDigitASCII(ch)) {
// read integer value
do {
val += ch;
ifs.get(ch);
} while (ifs && isDigit(ch));
} while (ifs && isDigitASCII(ch));
if (!ifs)
return false;

View File

@ -768,7 +768,7 @@ void InsetListingsParams::addParam(string const & key,
else {
bool has_special_char = false;
for (size_t i = 0; i < value.size(); ++i)
if (!isAlphaASCII(value[i]) && !isDigit(value[i])) {
if (!isAlnumASCII(value[i])) {
has_special_char = true;
break;
}

View File

@ -753,9 +753,9 @@ private:
bool isNumpunct(lyx::char_type const c) const
{
/// Only account for the standard numpunct "C" locale facet.
return c < 0x80 && (c == '-' || c == '+' || isdigit(c)
|| ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F')
|| c == 'x' || c == 'X');
return c == '-' || c == '+'
|| c == 'x' || c == 'X'
|| isHexChar(c);
}
template <typename ValueType>

View File

@ -147,13 +147,13 @@ bool isSpace(char_type c)
}
bool isDigit(char_type c)
bool isNumber(char_type c)
{
if (!is_utf16(c))
// assume that no non-utf16 character is a digit
// assume that no non-utf16 character is a numeral
// c outside the UCS4 range is catched as well
return false;
return ucs4_to_qchar(c).isDigit();
return ucs4_to_qchar(c).isNumber();
}
@ -165,8 +165,7 @@ bool isDigitASCII(char_type c)
bool isAlnumASCII(char_type c)
{
return ('0' <= c && c <= '9')
|| ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z');
return isAlphaASCII(c) || isDigitASCII(c);
}
@ -266,7 +265,7 @@ bool isStrInt(string const & str)
string::const_iterator end = tmpstr.end();
for (; cit != end; ++cit)
if (!isdigit((*cit)))
if (!isDigitASCII(*cit))
return false;
return true;
@ -286,7 +285,7 @@ bool isStrUnsignedInt(string const & str)
string::const_iterator cit = tmpstr.begin();
string::const_iterator end = tmpstr.end();
for (; cit != end; ++cit)
if (!isdigit((*cit)))
if (!isDigitASCII(*cit))
return false;
return true;
@ -310,7 +309,7 @@ bool isStrDbl(string const & str)
++cit;
string::const_iterator end = tmpstr.end();
for (; cit != end; ++cit) {
if (!isdigit(*cit) && *cit != '.')
if (!isDigitASCII(*cit) && *cit != '.')
return false;
if ('.' == (*cit)) {
if (found_dot)
@ -322,19 +321,13 @@ bool isStrDbl(string const & str)
}
bool hasDigit(docstring const & str)
bool hasDigitASCII(docstring const & str)
{
if (str.empty())
return false;
docstring::const_iterator cit = str.begin();
docstring::const_iterator const end = str.end();
for (; cit != end; ++cit) {
if (*cit == ' ')
continue;
if (isdigit((*cit)))
for (; cit != end; ++cit)
if (isDigitASCII(*cit))
return true;
}
return false;
}

View File

@ -45,7 +45,7 @@ bool isStrUnsignedInt(std::string const & str);
bool isStrDbl(std::string const & str);
/// does the string contain a digit?
bool hasDigit(docstring const & str);
bool hasDigitASCII(docstring const & str);
bool isHex(docstring const & str);

View File

@ -41,8 +41,8 @@ bool isPrintableNonspace(char_type c);
/// return true if a unicode char is a space.
bool isSpace(char_type c);
/// return true if a unicode char is a digit.
bool isDigit(char_type c);
/// return true if a unicode char is a numeral.
bool isNumber(char_type c);
/// return whether \p c is a digit in the ASCII range
bool isDigitASCII(char_type c);