1 #ifndef KTR_H_INCLUDED_ 2 #define KTR_H_INCLUDED_ 4 #include "kblib/kblib.h" 10 std::u32string expand_set(std::u32string_view
set);
12 std::string filter(std::string whitelist, std::string_view input);
13 std::string translate(std::string_view set1, std::string set2,
14 std::string_view input);
16 inline std::u32string widen(std::string_view str) {
18 utf8::utf8to32(str.begin(), str.end(), std::back_inserter(ret));
22 inline std::string narrow(std::u32string_view str) {
24 utf8::utf32to8(str.begin(), str.end(), std::back_inserter(ret));
28 inline bool match(std::string_view whitelist, std::string_view input) {
30 return widen(input).find_first_not_of(expand_set(widen(whitelist))) ==
34 inline bool find(std::u32string_view
set, char32_t c) {
35 auto p = std::find(
set.begin(),
set.end(), c);
36 return p !=
set.end();
42 enum Mode :
unsigned {
59 template <
typename Char>
60 std::basic_string<Char>
tr(Mode mode, std::basic_string_view<Char> set1, std::basic_string_view<Char> set2, std::basic_string_view<Char> input)
62 if (mode == tr::squeeze) {
64 }
else if (mode & tr::complement) {
66 }
else if (mode & tr::del) {
73 template <Mode mode,
typename Char>
74 std::basic_string<Char>
tr(std::basic_string_view<Char> set1, std::basic_string_view<Char> set2, std::basic_string_view<Char> input)
76 if constexpr (mode == tr::def) {
77 return translate(set1, set2, input);
78 }
else if constexpr (mode == (tr::c | tr::d)) {
79 return filter(set1, input);
86 #endif // KTR_H_INCLUDED_