add a unicode.hh header for Codepoint related functions, s/utf8::Codepoint/Codepoint/
This commit is contained in:
parent
e1d4215159
commit
7a8366da2b
|
@ -3,6 +3,7 @@
|
||||||
#include "context.hh"
|
#include "context.hh"
|
||||||
#include "editor.hh"
|
#include "editor.hh"
|
||||||
#include "register_manager.hh"
|
#include "register_manager.hh"
|
||||||
|
#include "utf8.hh"
|
||||||
|
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
|
||||||
|
@ -393,7 +394,7 @@ private:
|
||||||
int m_current_completion = -1;
|
int m_current_completion = -1;
|
||||||
};
|
};
|
||||||
|
|
||||||
String codepoint_to_str(utf8::Codepoint cp)
|
String codepoint_to_str(Codepoint cp)
|
||||||
{
|
{
|
||||||
std::string str;
|
std::string str;
|
||||||
auto it = back_inserter(str);
|
auto it = back_inserter(str);
|
||||||
|
|
|
@ -16,7 +16,7 @@ Key canonicalize_ifn(Key key)
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::unordered_map<String, utf8::Codepoint> keynamemap = {
|
static std::unordered_map<String, Codepoint> keynamemap = {
|
||||||
{ "ret", '\r' },
|
{ "ret", '\r' },
|
||||||
{ "space", ' ' },
|
{ "space", ' ' },
|
||||||
{ "esc", Key::Escape }
|
{ "esc", Key::Escape }
|
||||||
|
@ -53,7 +53,7 @@ KeyList parse_keys(const String& str)
|
||||||
}
|
}
|
||||||
if (keyname.length() == 1)
|
if (keyname.length() == 1)
|
||||||
{
|
{
|
||||||
result.push_back(Key{ modifier, utf8::Codepoint(keyname[0]) });
|
result.push_back(Key{ modifier, Codepoint(keyname[0]) });
|
||||||
pos = end_pos;
|
pos = end_pos;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,7 @@ KeyList parse_keys(const String& str)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result.push_back({Key::Modifiers::None, utf8::Codepoint(str[pos])});
|
result.push_back({Key::Modifiers::None, Codepoint(str[pos])});
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
10
src/keys.hh
10
src/keys.hh
|
@ -2,7 +2,7 @@
|
||||||
#define keys_hh_INCLUDED
|
#define keys_hh_INCLUDED
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "utf8.hh"
|
#include "unicode.hh"
|
||||||
#include "string.hh"
|
#include "string.hh"
|
||||||
|
|
||||||
namespace Kakoune
|
namespace Kakoune
|
||||||
|
@ -17,7 +17,7 @@ struct Key
|
||||||
Alt = 2,
|
Alt = 2,
|
||||||
ControlAlt = 3
|
ControlAlt = 3
|
||||||
};
|
};
|
||||||
enum NamedKey : utf8::Codepoint
|
enum NamedKey : Codepoint
|
||||||
{
|
{
|
||||||
// use UTF-16 surrogate pairs range
|
// use UTF-16 surrogate pairs range
|
||||||
Backspace = 0xD800,
|
Backspace = 0xD800,
|
||||||
|
@ -32,12 +32,12 @@ struct Key
|
||||||
};
|
};
|
||||||
|
|
||||||
Modifiers modifiers;
|
Modifiers modifiers;
|
||||||
utf8::Codepoint key;
|
Codepoint key;
|
||||||
|
|
||||||
constexpr Key(Modifiers modifiers, utf8::Codepoint key)
|
constexpr Key(Modifiers modifiers, Codepoint key)
|
||||||
: modifiers(modifiers), key(key) {}
|
: modifiers(modifiers), key(key) {}
|
||||||
|
|
||||||
constexpr Key(utf8::Codepoint key)
|
constexpr Key(Codepoint key)
|
||||||
: modifiers(Modifiers::None), key(key) {}
|
: modifiers(Modifiers::None), key(key) {}
|
||||||
|
|
||||||
constexpr bool operator==(const Key& other) const
|
constexpr bool operator==(const Key& other) const
|
||||||
|
|
|
@ -197,7 +197,7 @@ Key NCursesUI::get_key()
|
||||||
else if (c == 27)
|
else if (c == 27)
|
||||||
{
|
{
|
||||||
timeout(0);
|
timeout(0);
|
||||||
const utf8::Codepoint new_c = getch();
|
const Codepoint new_c = getch();
|
||||||
timeout(-1);
|
timeout(-1);
|
||||||
if (new_c != ERR)
|
if (new_c != ERR)
|
||||||
return {Key::Modifiers::Alt, new_c};
|
return {Key::Modifiers::Alt, new_c};
|
||||||
|
|
|
@ -9,22 +9,11 @@
|
||||||
namespace Kakoune
|
namespace Kakoune
|
||||||
{
|
{
|
||||||
|
|
||||||
using utf8::Codepoint;
|
|
||||||
using Utf8Iterator = utf8::utf8_iterator<BufferIterator>;
|
using Utf8Iterator = utf8::utf8_iterator<BufferIterator>;
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
|
||||||
bool is_eol(Codepoint c)
|
|
||||||
{
|
|
||||||
return c == '\n';
|
|
||||||
}
|
|
||||||
|
|
||||||
bool is_blank(Codepoint c)
|
|
||||||
{
|
|
||||||
return c == ' ' or c == '\t';
|
|
||||||
}
|
|
||||||
|
|
||||||
template<bool punctuation_is_word = false>
|
template<bool punctuation_is_word = false>
|
||||||
bool is_word(Codepoint c)
|
bool is_word(Codepoint c)
|
||||||
{
|
{
|
||||||
|
|
|
@ -18,16 +18,16 @@ SelectionAndCaptures select_line(const Selection& selection);
|
||||||
SelectionAndCaptures select_matching(const Selection& selection);
|
SelectionAndCaptures select_matching(const Selection& selection);
|
||||||
|
|
||||||
|
|
||||||
using CodepointPair = std::pair<utf8::Codepoint, utf8::Codepoint>;
|
using CodepointPair = std::pair<Codepoint, Codepoint>;
|
||||||
SelectionAndCaptures select_surrounding(const Selection& selection,
|
SelectionAndCaptures select_surrounding(const Selection& selection,
|
||||||
const CodepointPair& matching,
|
const CodepointPair& matching,
|
||||||
bool inside);
|
bool inside);
|
||||||
|
|
||||||
SelectionAndCaptures select_to(const Selection& selection,
|
SelectionAndCaptures select_to(const Selection& selection,
|
||||||
utf8::Codepoint c,
|
Codepoint c,
|
||||||
int count, bool inclusive);
|
int count, bool inclusive);
|
||||||
SelectionAndCaptures select_to_reverse(const Selection& selection,
|
SelectionAndCaptures select_to_reverse(const Selection& selection,
|
||||||
utf8::Codepoint c,
|
Codepoint c,
|
||||||
int count, bool inclusive);
|
int count, bool inclusive);
|
||||||
|
|
||||||
SelectionAndCaptures select_to_eol(const Selection& selection);
|
SelectionAndCaptures select_to_eol(const Selection& selection);
|
||||||
|
|
|
@ -83,14 +83,6 @@ String int_to_str(int value);
|
||||||
int str_to_int(const String& str);
|
int str_to_int(const String& str);
|
||||||
std::vector<String> split(const String& str, char separator);
|
std::vector<String> split(const String& str, char separator);
|
||||||
|
|
||||||
inline bool is_word(char c)
|
|
||||||
{
|
|
||||||
return (c >= '0' and c <= '9') or
|
|
||||||
(c >= 'a' and c <= 'z') or
|
|
||||||
(c >= 'A' and c <= 'Z') or
|
|
||||||
c == '_';
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace std
|
namespace std
|
||||||
|
|
32
src/unicode.hh
Normal file
32
src/unicode.hh
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
#ifndef unicode_hh_INCLUDED
|
||||||
|
#define unicode_hh_INCLUDED
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
namespace Kakoune
|
||||||
|
{
|
||||||
|
|
||||||
|
using Codepoint = uint32_t;
|
||||||
|
|
||||||
|
inline bool is_word(Codepoint c)
|
||||||
|
{
|
||||||
|
return (c >= '0' and c <= '9') or
|
||||||
|
(c >= 'a' and c <= 'z') or
|
||||||
|
(c >= 'A' and c <= 'Z') or
|
||||||
|
c == '_';
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool is_eol(Codepoint c)
|
||||||
|
{
|
||||||
|
return c == '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool is_blank(Codepoint c)
|
||||||
|
{
|
||||||
|
return c == ' ' or c == '\t';
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // unicode_hh_INCLUDED
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#ifndef utf8_hh_INCLUDED
|
#ifndef utf8_hh_INCLUDED
|
||||||
#define utf8_hh_INCLUDED
|
#define utf8_hh_INCLUDED
|
||||||
|
|
||||||
#include <cstdint>
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
#include "unicode.hh"
|
||||||
|
|
||||||
namespace Kakoune
|
namespace Kakoune
|
||||||
{
|
{
|
||||||
|
@ -10,8 +10,6 @@ namespace Kakoune
|
||||||
namespace utf8
|
namespace utf8
|
||||||
{
|
{
|
||||||
|
|
||||||
using Codepoint = uint32_t;
|
|
||||||
|
|
||||||
// returns an iterator to next character first byte
|
// returns an iterator to next character first byte
|
||||||
template<typename Iterator>
|
template<typename Iterator>
|
||||||
Iterator next(Iterator it)
|
Iterator next(Iterator it)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user