8#ifndef BOTAN_CHARSET_H_
9#define BOTAN_CHARSET_H_
11#include <botan/types.h>
77 const uint8_t n = b & 0x0F;
78 return static_cast<char>(n < 10 ?
'0' + n :
'A' + (n - 10));
112class CharacterValidityTable final {
117 set_tbl_range(tbl,
"0123456789");
118 set_tbl_range(tbl,
"abcdefghijklmnopqrstuvwxyz");
119 set_tbl_range(tbl,
"ABCDEFGHIJKLMNOPQRSTUVWXYZ");
120 set_tbl_range(tbl, extras);
122 return CharacterValidityTable(tbl);
126 const uint8_t uc =
static_cast<uint8_t
>(c);
127 return ((m_tbl[uc / 32] >> (uc % 32)) & 1) != 0;
130 constexpr CharacterValidityTable
invert()
const {
131 TableStorage inverted = m_tbl;
132 for(
auto& v : inverted) {
135 return CharacterValidityTable(inverted);
139 using TableStorage = std::array<uint32_t, 8>;
141 static constexpr void set_tbl_range(TableStorage& tbl, std::string_view valid_chars) {
142 for(
const char c : valid_chars) {
143 const uint8_t uc =
static_cast<uint8_t
>(c);
144 tbl[uc / 32] |= (uint32_t{1} << (uc % 32));
148 explicit constexpr CharacterValidityTable(TableStorage tbl) : m_tbl(tbl) {}
static constexpr CharacterValidityTable alpha_numeric_plus(std::string_view extras)
constexpr CharacterValidityTable invert() const
constexpr bool operator()(char c) const
std::string format_char_for_display(char c)
constexpr char nibble_to_hex(uint8_t b)
bool is_unicode_control_char(uint32_t cp)
bool is_valid_utf8(std::string_view utf8)
std::string latin1_to_utf8(std::span< const uint8_t > chars)
std::vector< uint8_t > utf8_to_ucs4(std::string_view utf8)
bool is_ascii_control_char(char c)
uint32_t next_utf8_codepoint(std::string_view utf8, size_t &pos)
std::string ucs2_to_utf8(std::span< const uint8_t > ucs2)
std::string ucs4_to_utf8(std::span< const uint8_t > ucs4)
std::string escape_control_chars(std::string_view utf8)
std::vector< uint8_t > utf8_to_ucs2(std::string_view utf8)