52#include    <libutf8/iterator.h> 
   62#include    <snapdev/poison.h> 
   79    char32_t        f_first = U
'\0';
 
   80    char32_t        f_last = U
'\0';
 
   82    bool operator < (char_range_t 
const & rhs)
 const 
   84        return f_last < rhs.f_first;
 
   89constexpr char_range_t 
const g_name_start_char[] =
 
   91    { 0x00003A, 0x00003A },     
 
   92    { 0x000041, 0x00005A },     
 
   93    { 0x00005F, 0x00005F },     
 
   94    { 0x000061, 0x00007A },     
 
   95    { 0x0000C0, 0x0000D6 },
 
   96    { 0x0000D8, 0x0000F6 },
 
   97    { 0x0000F8, 0x0002FF },
 
   98    { 0x000370, 0x00037D },
 
   99    { 0x00037F, 0x001FFF },
 
  100    { 0x00200C, 0x00200D },
 
  101    { 0x002070, 0x00218F },
 
  102    { 0x002C00, 0x002FEF },
 
  103    { 0x003001, 0x00D7FF },
 
  104    { 0x00F900, 0x00FDCF },
 
  105    { 0x00FDF0, 0x00FFFD },
 
  106    { 0x010000, 0x0EFFFF },     
 
  109constexpr char_range_t 
const g_name_char[] =
 
  111    { 0x00002D, 0x00002E },     
 
  112    { 0x000030, 0x00003A },     
 
  113    { 0x000041, 0x00005A },     
 
  114    { 0x00005F, 0x00005F },     
 
  115    { 0x000061, 0x00007A },     
 
  116    { 0x0000B7, 0x0000B7 },     
 
  117    { 0x0000C0, 0x0000D6 },
 
  118    { 0x0000D8, 0x0000F6 },
 
  119    { 0x0000F8, 0x0002FF },
 
  120    { 0x000300, 0x00037D },
 
  121    { 0x00037F, 0x001FFF },
 
  122    { 0x00200C, 0x00200D },
 
  123    { 0x00203F, 0x002040 },
 
  124    { 0x002070, 0x00218F },
 
  125    { 0x002C00, 0x002FEF },
 
  126    { 0x003001, 0x00D7FF },
 
  127    { 0x00F900, 0x00FDCF },
 
  128    { 0x00FDF0, 0x00FFFD },
 
  129    { 0x010000, 0x0EFFFF },     
 
  133bool find_char(
char32_t c, char_range_t 
const * b, char_range_t 
const * e)
 
  135    char_range_t r = { c, c };
 
  136    auto range(std::lower_bound(b, e, r));
 
  142    return range != e && c >= range->f_first && c <= range->f_last;
 
  150bool is_name_start_char(
char32_t c)
 
  152    return find_char(c, std::begin(g_name_start_char), std::end(g_name_start_char));
 
  156bool is_name_char(
char32_t c)
 
  158    return find_char(c, std::begin(g_name_char), std::end(g_name_char));
 
  162bool is_digit(
char32_t c)
 
  164    return (c >= U
'0' && c <= U
'9')
 
  169bool is_space(
char32_t c)
 
  211    libutf8::utf8_iterator it(token);
 
  216    if(!is_name_start_char(*it))
 
  221    for(++it; it != token.end(); ++it)
 
  223        if(!is_name_char(*it))
 
 
bool is_token(std::string const &token)
Verify that token is a valid string.
Database file implementation.