kakoune/src/unicode.hh
Maxime Coste 28ebe776c0 Refactor select_arguments and slightly change behaviour for non-inner
non inner argument contains the argument, preceeding whitespaces,
and eventual ending comma, except for first arguments (that
contains the whitespaces after the comma), and last argument (that
contains the comma before it).
2015-07-01 23:47:22 +01:00

69 lines
1.2 KiB
C++

#ifndef unicode_hh_INCLUDED
#define unicode_hh_INCLUDED
#include <wctype.h>
namespace Kakoune
{
using Codepoint = char32_t;
inline bool is_eol(Codepoint c)
{
return c == '\n';
}
inline bool is_horizontal_blank(Codepoint c)
{
return c == ' ' or c == '\t';
}
inline bool is_blank(Codepoint c)
{
return c == ' ' or c == '\t' or c == '\n';
}
enum WordType { Word, WORD };
template<WordType word_type = Word>
inline bool is_word(Codepoint c)
{
return c == '_' or iswalnum(c);
}
template<>
inline bool is_word<WORD>(Codepoint c)
{
return not is_horizontal_blank(c) and not is_eol(c);
}
inline bool is_punctuation(Codepoint c)
{
return not (is_word(c) or is_horizontal_blank(c) or is_eol(c));
}
enum class CharCategories
{
Blank,
EndOfLine,
Word,
Punctuation,
};
template<WordType word_type = Word>
inline CharCategories categorize(Codepoint c)
{
if (is_word(c))
return CharCategories::Word;
if (is_eol(c))
return CharCategories::EndOfLine;
if (is_horizontal_blank(c))
return CharCategories::Blank;
return word_type == WORD ? CharCategories::Word
: CharCategories::Punctuation;
}
}
#endif // unicode_hh_INCLUDED