summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2016-05-11 09:49:45 +0100
committerMaxime Coste <frrrwww@gmail.com>2016-05-11 09:49:45 +0100
commit84f62e6ff2e1ac37e412ddf7c06d3ceb985e2ee3 (patch)
treef9f8ceb992f094ce3e64a110f56ae7ad2d62225c
parent6b1bd84e8e2bc84101bd2370c655223ef0a13d1d (diff)
Use C++ locale based functions instead of the libc ones
-rw-r--r--src/highlighters.cc2
-rw-r--r--src/ranked_match.cc7
-rw-r--r--src/unicode.hh7
3 files changed, 10 insertions, 6 deletions
diff --git a/src/highlighters.cc b/src/highlighters.cc
index 52db836d..bcab234e 100644
--- a/src/highlighters.cc
+++ b/src/highlighters.cc
@@ -884,7 +884,7 @@ void expand_unprintable(const Context& context, HighlightFlags flags, DisplayBuf
{
auto coord = it.coord();
Codepoint cp = utf8::read_codepoint<utf8::InvalidPolicy::Pass>(it, end);
- if (cp != '\n' and not iswprint(cp))
+ if (cp != '\n' and not std::isprint((wchar_t)cp, std::locale{}))
{
if (coord != atom_it->begin())
atom_it = ++line.split(atom_it, coord);
diff --git a/src/ranked_match.cc b/src/ranked_match.cc
index 89eb2c85..6aa89e52 100644
--- a/src/ranked_match.cc
+++ b/src/ranked_match.cc
@@ -34,6 +34,7 @@ using Utf8It = utf8::iterator<const char*>;
static int count_word_boundaries_match(StringView candidate, StringView query)
{
+ std::locale locale;
int count = 0;
Utf8It query_it{query.begin(), query};
Codepoint prev = 0;
@@ -41,8 +42,10 @@ static int count_word_boundaries_match(StringView candidate, StringView query)
{
const Codepoint c = *it;
const bool is_word_boundary = prev == 0 or
- (!iswalnum(prev) and iswalnum(c)) or
- (islower(prev) and isupper(c));
+ (!std::isalnum((wchar_t)prev, locale) and
+ std::isalnum((wchar_t)c, locale)) or
+ (std::islower((wchar_t)prev, locale) and
+ std::isupper((wchar_t)c, locale));
prev = c;
if (not is_word_boundary)
diff --git a/src/unicode.hh b/src/unicode.hh
index 9b65e265..83c63fa1 100644
--- a/src/unicode.hh
+++ b/src/unicode.hh
@@ -2,6 +2,7 @@
#define unicode_hh_INCLUDED
#include <wctype.h>
+#include <locale>
namespace Kakoune
{
@@ -28,7 +29,7 @@ enum WordType { Word, WORD };
template<WordType word_type = Word>
inline bool is_word(Codepoint c)
{
- return c == '_' or iswalnum(c);
+ return c == '_' or std::isalnum((wchar_t)c, std::locale{});
}
template<>
@@ -67,8 +68,8 @@ inline CharCategories categorize(Codepoint c)
return CharCategories::Punctuation;
}
-inline Codepoint to_lower(Codepoint cp) { return towlower((wchar_t)cp); }
-inline Codepoint to_upper(Codepoint cp) { return towupper((wchar_t)cp); }
+inline Codepoint to_lower(Codepoint cp) { return std::tolower((wchar_t)cp, std::locale{}); }
+inline Codepoint to_upper(Codepoint cp) { return std::toupper((wchar_t)cp, std::locale{}); }
inline char to_lower(char c) { return c >= 'A' and c <= 'Z' ? c - 'A' + 'a' : c; }
inline char to_upper(char c) { return c >= 'a' and c <= 'z' ? c - 'a' + 'A' : c; }