/home/runner/work/json5cpp/json5cpp/src/jsonvalue.hpp
Line
Count
Source (jump to first uncovered line)
1
2
#pragma once
3
4
#include <variant>
5
#include <string>
6
#include <vector>
7
#include <map>
8
9
namespace JSON5 {
10
11
struct Null {};
12
const Null null;
13
14
struct Array;
15
struct Object;
16
17
using Value = std::variant<
18
  Null,
19
  bool,
20
  double,
21
  std::string,
22
  Array,
23
  Object
24
  >;
25
26
struct Array: public std::vector<Value> {
27
  using std::vector<Value>::vector;
28
};
29
30
struct Object: public std::map<std::string, Value> {
31
  using std::map<std::string, Value>::map;
32
};
33
34
6
bool isNull(const Value value) { return std::holds_alternative<Null>(value); }
35
6
bool isBoolean(const Value value) { return std::holds_alternative<bool>(value); }
36
6
bool isNumber(const Value value) { return std::holds_alternative<double>(value); }
37
6
bool isString(const Value value) { return std::holds_alternative<std::string>(value); }
38
252
bool isArray(const Value value) { return std::holds_alternative<Array>(value); }
39
119
bool isObject(const Value value) { return std::holds_alternative<Object>(value); }
40
41
2
bool operator==(Null, Null) { return true; }
42
43
127
bool operator==(const Value& lhs, const Value& rhs) {
44
127
  return std::visit( [](const auto& left, const auto& right) {
45
127
      if constexpr (std::is_same_v<decltype(left), decltype(right)>) 
{0
46
3
        return left == right;
47
3
      } else {
48
3
        return false;
49
3
      }
50
127
    }, lhs, rhs);
main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Null, JSON5::Null>(JSON5::Null const&, JSON5::Null const&) const
Line
Count
Source
44
2
  return std::visit( [](const auto& left, const auto& right) {
45
2
      if constexpr (std::is_same_v<decltype(left), decltype(right)>) {
46
2
        return left == right;
47
2
      } else {
48
2
        return false;
49
2
      }
50
2
    }, lhs, rhs);
main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Null, bool>(JSON5::Null const&, bool const&) const
Line
Count
Source
44
1
  return std::visit( [](const auto& left, const auto& right) {
45
1
      if constexpr (std::is_same_v<decltype(left), decltype(right)>) 
{0
46
1
        return left == right;
47
1
      } else {
48
1
        return false;
49
1
      }
50
1
    }, lhs, rhs);
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Null, double>(JSON5::Null const&, double const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Null, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(JSON5::Null const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Null, JSON5::Array>(JSON5::Null const&, JSON5::Array const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Null, JSON5::Object>(JSON5::Null const&, JSON5::Object const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<bool, JSON5::Null>(bool const&, JSON5::Null const&) const
main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<bool, bool>(bool const&, bool const&) const
Line
Count
Source
44
7
  return std::visit( [](const auto& left, const auto& right) {
45
7
      if constexpr (std::is_same_v<decltype(left), decltype(right)>) {
46
7
        return left == right;
47
7
      } else {
48
7
        return false;
49
7
      }
50
7
    }, lhs, rhs);
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<bool, double>(bool const&, double const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(bool const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<bool, JSON5::Array>(bool const&, JSON5::Array const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<bool, JSON5::Object>(bool const&, JSON5::Object const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<double, JSON5::Null>(double const&, JSON5::Null const&) const
main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<double, bool>(double const&, bool const&) const
Line
Count
Source
44
1
  return std::visit( [](const auto& left, const auto& right) {
45
1
      if constexpr (std::is_same_v<decltype(left), decltype(right)>) 
{0
46
1
        return left == right;
47
1
      } else {
48
1
        return false;
49
1
      }
50
1
    }, lhs, rhs);
main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<double, double>(double const&, double const&) const
Line
Count
Source
44
66
  return std::visit( [](const auto& left, const auto& right) {
45
66
      if constexpr (std::is_same_v<decltype(left), decltype(right)>) {
46
66
        return left == right;
47
66
      } else {
48
66
        return false;
49
66
      }
50
66
    }, lhs, rhs);
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(double const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<double, JSON5::Array>(double const&, JSON5::Array const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<double, JSON5::Object>(double const&, JSON5::Object const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Null>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, JSON5::Null const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&) const
main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, double const&) const
Line
Count
Source
44
1
  return std::visit( [](const auto& left, const auto& right) {
45
1
      if constexpr (std::is_same_v<decltype(left), decltype(right)>) 
{0
46
1
        return left == right;
47
1
      } else {
48
1
        return false;
49
1
      }
50
1
    }, lhs, rhs);
main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const
Line
Count
Source
44
14
  return std::visit( [](const auto& left, const auto& right) {
45
14
      if constexpr (std::is_same_v<decltype(left), decltype(right)>) {
46
14
        return left == right;
47
14
      } else {
48
14
        return false;
49
14
      }
50
14
    }, lhs, rhs);
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, JSON5::Array const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Object>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, JSON5::Object const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Array, JSON5::Null>(JSON5::Array const&, JSON5::Null const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Array, bool>(JSON5::Array const&, bool const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Array, double>(JSON5::Array const&, double const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Array, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(JSON5::Array const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const
main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Array, JSON5::Array>(JSON5::Array const&, JSON5::Array const&) const
Line
Count
Source
44
17
  return std::visit( [](const auto& left, const auto& right) {
45
17
      if constexpr (std::is_same_v<decltype(left), decltype(right)>) {
46
17
        return left == right;
47
17
      } else {
48
17
        return false;
49
17
      }
50
17
    }, lhs, rhs);
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Array, JSON5::Object>(JSON5::Array const&, JSON5::Object const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Object, JSON5::Null>(JSON5::Object const&, JSON5::Null const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Object, bool>(JSON5::Object const&, bool const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Object, double>(JSON5::Object const&, double const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Object, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(JSON5::Object const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const
Unexecuted instantiation: main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Object, JSON5::Array>(JSON5::Object const&, JSON5::Array const&) const
main.cpp:auto JSON5::operator==(std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&, std::variant<JSON5::Null, bool, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Array, JSON5::Object> const&)::$_0::operator()<JSON5::Object, JSON5::Object>(JSON5::Object const&, JSON5::Object const&) const
Line
Count
Source
44
18
  return std::visit( [](const auto& left, const auto& right) {
45
18
      if constexpr (std::is_same_v<decltype(left), decltype(right)>) {
46
18
        return left == right;
47
18
      } else {
48
18
        return false;
49
18
      }
50
18
    }, lhs, rhs);
51
127
}
52
53
12
bool operator!=(const Value& lhs, const Value& rhs) {
54
12
  return !(lhs == rhs);
55
12
}
56
57
}
/home/runner/work/json5cpp/json5cpp/src/parse.hpp
Line
Count
Source (jump to first uncovered line)
1
2
#pragma once
3
4
#include <string_view>
5
#include <stack>
6
#include <cmath>
7
#include <limits>
8
#include <variant>
9
#include <string>
10
#include <iostream>
11
#include <vector>
12
#include <map>
13
#include <optional>
14
#include <cstdio>
15
#include <cassert>
16
#include <cstdint>
17
18
#include "utf8.hpp"
19
#include "util.hpp"
20
#include "jsonvalue.hpp"
21
#include "parserstate.hpp"
22
#include "token.hpp"
23
24
namespace JSON5 {
25
26
const char32_t EndOfInput = char32_t(-1);
27
28
class EncodingBuffer {
29
  std::string data {};
30
public:
31
62
  EncodingBuffer& operator=(char32_t c) {
32
62
    data = toUTF8(c);
33
62
    return *this;
34
62
  }
35
134
  EncodingBuffer& operator+=(char32_t c) {
36
134
    data += toUTF8(c);
37
134
    return *this;
38
134
  }
39
82
  const std::string& str() { return data; }
40
322
  void clear() { data.clear(); }
41
};
42
43
struct SyntaxError: public std::runtime_error {
44
  const size_t lineNumber;
45
  const size_t columnNumber;
46
  SyntaxError(size_t line, size_t column, const std::string& message):
47
    std::runtime_error(message),
48
    lineNumber {line},
49
    columnNumber {column}
50
45
  {}
51
};
52
53
class Parser {
54
55
  std::string_view source;
56
  State parseState;
57
  std::stack<Value*> stack;
58
  size_t pos;
59
  size_t line;
60
  size_t column;
61
  Token token;
62
  std::string key;
63
  Value root;
64
65
public:
66
85
  Value parse(std::string_view text) {
67
85
    source = text;
68
85
    parseState = State::start;
69
85
    stack = {};
70
85
    pos = 0;
71
85
    line = 1;
72
85
    column = 0;
73
85
    token = incomplete;
74
85
    key = "";
75
85
    root = null;
76
77
300
    do {
78
300
      token = lex();
79
80
      // This code is unreachable.
81
      // if (!parseStates[parseState]) {
82
      //     throw invalidParseState()
83
      // }
84
85
300
      consumeToken(parseState);
86
300
    } while (token.type != TokenType::eof);
87
88
    // if (typeof reviver === 'function') {
89
    //     return internalize({'': root}, '', reviver)
90
    // }
91
92
85
    return root;
93
85
  }
94
private:
95
96
  State lexState;
97
  EncodingBuffer buffer;
98
  bool doubleQuote;
99
  int sign;
100
  char32_t c;
101
102
300
  Token lex() {
103
300
    lexState = State::deflt;
104
300
    buffer.clear();
105
300
    doubleQuote = false;
106
300
    sign = 1;
107
108
694
    for (;;) {
109
694
      c = peek().c;
110
111
      // This code is unreachable.;
112
      // if (!lexStates[lexState]) {
113
      //     throw invalidLexState(lexState);
114
      // };
115
116
694
      const Token token = consumeCharacter(lexState);
117
694
      if (token.type != TokenType::incomplete) {
118
263
        return token;
119
263
      }
120
694
    }
121
300
  }
122
123
  struct Peek { char32_t c; uint32_t n; };
124
1.43k
  Peek peek() {
125
1.43k
    const UTF8Peek result = peekUTF8(source.substr(pos));
126
1.43k
    switch (result.status) {
127
1.32k
      case UTF8Peek::Status::ok: return {result.codepoint, result.bytesRead};
128
110
      case UTF8Peek::Status::endOfString: return {EndOfInput, 0};
129
1
      case UTF8Peek::Status::invalid: throw invalidUnicode();
130
1.43k
    }
131
0
    assert(false); // suppress "control reaches end of non-void function" warning
132
0
  }
133
134
632
  char32_t read() {
135
632
    const auto [c, n] = peek();
136
137
632
    if (c == '\n') {
138
6
      line++;
139
6
      column = 0;
140
626
    } else if (c != EndOfInput) {
141
574
      column += 1;
142
574
    } else {
143
52
      column++;
144
52
    }
145
146
632
    if (c != EndOfInput) {
147
580
      pos += n;
148
580
    }
149
150
632
    return c;
151
632
  }
152
153
941
  Token consumeCharacter(State s) {
154
941
    switch (s) {
155
313
      case State::deflt: {
156
313
        switch (c) {
157
1
          case '\t':
158
2
          case '\v':
159
3
          case '\f':
160
5
          case ' ':
161
6
          case 0x00A0:
162
7
          case 0xFEFF:
163
8
          case '\n':
164
9
          case '\r':
165
10
          case 0x2028:
166
11
          case 0x2029:
167
11
            read();
168
11
            return incomplete;
169
170
7
          case '/':
171
7
            read();
172
7
            lexState = State::comment;
173
7
            return incomplete;
174
175
46
          case EndOfInput:
176
46
            read();
177
46
            return newToken(TokenType::eof);
178
313
        }
179
180
249
        if (util::isSpaceSeparator(c)) {
181
1
          read();
182
1
          return incomplete;
183
1
        }
184
185
        // This code is unreachable.;
186
        // if (!lexStates[parseState]) {
187
        //     throw invalidLexState(parseState);
188
        // };
189
190
248
        return consumeCharacter(parseState);
191
249
      }
192
193
7
      case State::comment: {
194
7
        switch (c) {
195
3
          case '*':
196
3
            read();
197
3
            lexState = State::multiLineComment;
198
3
            return incomplete;
199
200
3
          case '/':
201
3
            read();
202
3
            lexState = State::singleLineComment;
203
3
            return incomplete;
204
7
        }
205
206
1
        throw invalidChar(read());
207
7
      }
208
209
12
      case State::multiLineComment: {
210
12
        switch (c) {
211
3
          case '*':
212
3
            read();
213
3
            lexState = State::multiLineCommentAsterisk;
214
3
            return incomplete;
215
216
1
          case EndOfInput:
217
1
            throw invalidChar(read());
218
12
        }
219
220
8
        read();
221
8
      } break;
222
223
4
      case State::multiLineCommentAsterisk: {
224
4
        switch (c) {
225
1
          case '*':
226
1
            read();
227
1
            return incomplete;
228
229
1
          case '/':
230
1
            read();
231
1
            lexState = State::deflt;
232
1
            return incomplete;
233
234
1
          case EndOfInput:
235
1
            throw invalidChar(read());
236
4
        }
237
238
1
        read();
239
1
        lexState = State::multiLineComment;
240
1
      } break;
241
242
18
      case State::singleLineComment: {
243
18
        switch (c) {
244
1
          case '\n':
245
1
          case '\r':
246
1
          case 0x2028:
247
1
          case 0x2029:
248
1
            read();
249
1
            lexState = State::deflt;
250
1
            return incomplete;
251
252
2
          case EndOfInput:
253
2
            read();
254
2
            return newToken(TokenType::eof);
255
18
        }
256
257
15
        read();
258
15
      } break;
259
260
95
      case State::value: {
261
95
        switch (c) {
262
1
          case '{':
263
2
          case '[':
264
2
            return newToken(TokenType::punctuator, read());
265
266
1
          case 'n':
267
1
            read();
268
1
            literal("ull");
269
1
            return newToken(TokenType::null, null);
270
271
2
          case 't':
272
2
            read();
273
2
            literal("rue");
274
2
            return newToken(TokenType::boolean, Value {true});
275
276
1
          case 'f':
277
1
            read();
278
1
            literal("alse");
279
1
            return newToken(TokenType::boolean, Value {false});
280
281
6
          case '-':
282
8
          case '+':
283
8
            if (read() == '-') {
284
6
              sign = -1;
285
6
            }
286
287
8
            lexState = State::sign;
288
8
            return incomplete;
289
290
3
          case '.':
291
3
            buffer = read();
292
3
            lexState = State::decimalPointLeading;
293
3
            return incomplete;
294
295
9
          case '0':
296
9
            buffer = read();
297
9
            lexState = State::zero;
298
9
            return incomplete;
299
300
29
          case '1':
301
37
          case '2':
302
40
          case '3':
303
41
          case '4':
304
41
          case '5':
305
41
          case '6':
306
42
          case '7':
307
42
          case '8':
308
43
          case '9':
309
43
            buffer = read();
310
43
            lexState = State::decimalInteger;
311
43
            return incomplete;
312
313
1
          case 'I':
314
1
            read();
315
1
            literal("nfinity");
316
1
            return newToken(TokenType::numeric, std::numeric_limits<double>::infinity());
317
318
1
          case 'N':
319
1
            read();
320
1
            literal("aN");
321
1
            return newToken(TokenType::numeric, std::nan(""));
322
323
8
          case '"':
324
22
          case '\'':
325
22
            doubleQuote = (read() == '"');
326
22
            buffer.clear();
327
22
            lexState = State::string;
328
22
            return incomplete;
329
95
        }
330
331
2
        throw invalidChar(read());
332
95
      }
333
334
5
      case State::identifierNameStartEscape: {
335
5
        if (c != 'u') {
336
1
          throw invalidChar(read());
337
1
        }
338
339
4
        read();
340
4
        const char32_t u = unicodeEscape();
341
4
        switch (u) {
342
1
          case '$':
343
2
          case '_':
344
2
            break;
345
346
2
          default:
347
2
            if (!util::isIdStartChar(u)) {
348
1
              throw invalidIdentifier();
349
1
            }
350
351
1
            break;
352
4
        }
353
354
3
        buffer += u;
355
3
        lexState = State::identifierName;
356
3
      } break;
357
358
41
      case State::identifierName: {
359
41
        switch (c) {
360
1
          case '$':
361
2
          case '_':
362
3
          case 0x200C:
363
3
          case 0x200D:
364
3
            buffer += read();
365
3
            return incomplete;
366
367
5
          case '\\':
368
5
            read();
369
5
            lexState = State::identifierNameEscape;
370
5
            return incomplete;
371
41
        }
372
373
33
        if (util::isIdContinueChar(c)) {
374
14
          buffer += read();
375
14
          return incomplete;
376
14
        }
377
378
19
        return newToken(TokenType::identifier, buffer.str());
379
33
      }
380
381
5
      case State::identifierNameEscape: {
382
5
        if (c != 'u') {
383
1
          throw invalidChar(read());
384
1
        }
385
386
4
        read();
387
4
        const char32_t u = unicodeEscape();
388
4
        switch (u) {
389
1
          case '$':
390
2
          case '_':
391
2
          case 0x200C:
392
2
          case 0x200D:
393
2
            break;
394
395
2
          default:
396
2
            if (!util::isIdContinueChar(u)) {
397
1
              throw invalidIdentifier();
398
1
            }
399
400
1
            break;
401
4
        }
402
403
3
        buffer += u;
404
3
        lexState = State::identifierName;
405
3
      } break;
406
407
8
      case State::sign: {
408
8
        switch (c) {
409
1
          case '.':
410
1
            buffer = read();
411
1
            lexState = State::decimalPointLeading;
412
1
            return incomplete;
413
414
1
          case '0':
415
1
            buffer = read();
416
1
            lexState = State::zero;
417
1
            return incomplete;
418
419
2
          case '1':
420
3
          case '2':
421
3
          case '3':
422
3
          case '4':
423
3
          case '5':
424
3
          case '6':
425
3
          case '7':
426
3
          case '8':
427
3
          case '9':
428
3
            buffer = read();
429
3
            lexState = State::decimalInteger;
430
3
            return incomplete;
431
432
1
          case 'I':
433
1
            read();
434
1
            literal("nfinity");
435
1
            return newToken(TokenType::numeric, sign * std::numeric_limits<double>::infinity());
436
437
1
          case 'N':
438
1
            read();
439
1
            literal("aN");
440
1
            return newToken(TokenType::numeric, std::nan(""));
441
8
        }
442
443
1
        throw invalidChar(read());
444
8
      }
445
446
10
      case State::zero: {
447
10
        switch (c) {
448
1
          case '.':
449
1
            buffer += read();
450
1
            lexState = State::decimalPoint;
451
1
            return incomplete;
452
453
1
          case 'e':
454
1
          case 'E':
455
1
            buffer += read();
456
1
            lexState = State::decimalExponent;
457
1
            return incomplete;
458
459
6
          case 'x':
460
6
          case 'X':
461
6
            buffer += read();
462
6
            lexState = State::hexadecimal;
463
6
            return incomplete;
464
10
        }
465
466
2
        return newToken(TokenType::numeric, sign * 0.0);
467
10
      }
468
469
52
      case State::decimalInteger: {
470
52
        switch (c) {
471
5
          case '.':
472
5
            buffer += read();
473
5
            lexState = State::decimalPoint;
474
5
            return incomplete;
475
476
7
          case 'e':
477
7
          case 'E':
478
7
            buffer += read();
479
7
            lexState = State::decimalExponent;
480
7
            return incomplete;
481
52
        }
482
483
40
        if (util::isDigit(c)) {
484
6
          buffer += read();
485
6
          return incomplete;
486
6
        }
487
488
34
        return newToken(TokenType::numeric, sign * std::stod(buffer.str()));
489
40
      }
490
491
4
      case State::decimalPointLeading: {
492
4
        if (util::isDigit(c)) {
493
3
          buffer += read();
494
3
          lexState = State::decimalFraction;
495
3
          return incomplete;
496
3
        }
497
498
1
        throw invalidChar(read());
499
4
      }
500
501
6
      case State::decimalPoint: {
502
6
        switch (c) {
503
1
          case 'e':
504
1
          case 'E':
505
1
            buffer += read();
506
1
            lexState = State::decimalExponent;
507
1
            return incomplete;
508
6
        }
509
510
5
        if (util::isDigit(c)) {
511
4
          buffer += read();
512
4
          lexState = State::decimalFraction;
513
4
          return incomplete;
514
4
        }
515
516
1
        return newToken(TokenType::numeric, sign * std::stod(buffer.str()));
517
5
      }
518
519
10
      case State::decimalFraction: {
520
10
        switch (c) {
521
2
          case 'e':
522
2
          case 'E':
523
2
            buffer += read();
524
2
            lexState = State::decimalExponent;
525
2
            return incomplete;
526
10
        }
527
528
8
        if (util::isDigit(c)) {
529
3
          buffer += read();
530
3
          return incomplete;
531
3
        }
532
533
5
        return newToken(TokenType::numeric, sign * std::stod(buffer.str()));
534
8
      }
535
536
11
      case State::decimalExponent: {
537
11
        switch (c) {
538
1
          case '+':
539
3
          case '-':
540
3
            buffer += read();
541
3
            lexState = State::decimalExponentSign;
542
3
            return incomplete;
543
11
        }
544
545
8
        if (util::isDigit(c)) {
546
7
          buffer += read();
547
7
          lexState = State::decimalExponentInteger;
548
7
          return incomplete;
549
7
        }
550
551
1
        throw invalidChar(read());
552
8
      }
553
554
3
      case State::decimalExponentSign: {
555
3
        if (util::isDigit(c)) {
556
2
          buffer += read();
557
2
          lexState = State::decimalExponentInteger;
558
2
          return incomplete;
559
2
        }
560
561
1
        throw invalidChar(read());
562
3
      }
563
564
12
      case State::decimalExponentInteger: {
565
12
        if (util::isDigit(c)) {
566
3
          buffer += read();
567
3
          return incomplete;
568
3
        }
569
570
9
        return newToken(TokenType::numeric, sign * std::stod(buffer.str()));
571
12
      }
572
573
6
      case State::hexadecimal: {
574
6
        if (util::isHexDigit(c)) {
575
5
          buffer += read();
576
5
          lexState = State::hexadecimalInteger;
577
5
          return incomplete;
578
5
        }
579
580
1
        throw invalidChar(read());
581
6
      }
582
583
8
      case State::hexadecimalInteger: {
584
8
        if (util::isHexDigit(c)) {
585
3
          buffer += read();
586
3
          return incomplete;
587
3
        }
588
589
5
        return newToken(TokenType::numeric, sign * std::stod(buffer.str()));
590
8
      }
591
592
63
      case State::string: {
593
63
        switch (c) {
594
31
          case '\\':
595
31
            read();
596
31
            { auto esc = escape(); if (esc) 
{ buffer += *esc; }12
}
597
31
            return incomplete;
598
599
5
          case '"':
600
5
            if (doubleQuote) {
601
4
              read();
602
4
              return newToken(TokenType::string, buffer.str());
603
4
            }
604
605
1
            buffer += read();
606
1
            return incomplete;
607
608
6
          case '\'':
609
6
            if (!doubleQuote) {
610
5
              read();
611
5
              return newToken(TokenType::string, buffer.str());
612
5
            }
613
614
1
            buffer += read();
615
1
            return incomplete;
616
617
1
          case '\n':
618
1
          case '\r':
619
1
            throw invalidChar(read());
620
621
1
          case 0x2028:
622
2
          case 0x2029:
623
2
            separatorChar(c);
624
2
            break;
625
626
1
          case EndOfInput:
627
1
            throw invalidChar(read());
628
63
        }
629
630
19
        buffer += read();
631
19
      } break;
632
633
79
      case State::start: {
634
79
        switch (c) {
635
26
          case '{':
636
42
          case '[':
637
42
            return newToken(TokenType::punctuator, read());
638
639
            // This code is unreachable since the default lexState handles eof.;
640
            // case EndOfInput:
641
            //     return newToken(TokenType::eof);
642
79
        }
643
644
37
        lexState = State::value;
645
37
      } break;
646
647
32
      case State::beforePropertyName: {
648
32
        switch (c) {
649
1
          case '$':
650
2
          case '_':
651
2
            buffer = read();
652
2
            lexState = State::identifierName;
653
2
            return incomplete;
654
655
5
          case '\\':
656
5
            read();
657
5
            lexState = State::identifierNameStartEscape;
658
5
            return incomplete;
659
660
5
          case '}':
661
5
            return newToken(TokenType::punctuator, read());
662
663
2
          case '"':
664
3
          case '\'':
665
3
            doubleQuote = (read() == '"');
666
3
            lexState = State::string;
667
3
            return incomplete;
668
32
        }
669
670
17
        if (util::isIdStartChar(c)) {
671
16
          buffer += read();
672
16
          lexState = State::identifierName;
673
16
          return incomplete;
674
16
        }
675
676
1
        throw invalidChar(read());
677
17
      }
678
679
21
      case State::afterPropertyName: {
680
21
        if (c == ':') {
681
20
          return newToken(TokenType::punctuator, read());
682
20
        }
683
684
1
        throw invalidChar(read());
685
21
      }
686
687
19
      case State::beforePropertyValue: {
688
19
        lexState = State::value;
689
19
      } break;
690
691
18
      case State::afterPropertyValue: {
692
18
        switch (c) {
693
6
          case ',':
694
17
          case '}':
695
17
            return newToken(TokenType::punctuator, read());
696
18
        }
697
698
1
        throw invalidChar(read());
699
18
      }
700
701
40
      case State::beforeArrayValue: {
702
40
        if (c == ']') {
703
1
          return newToken(TokenType::punctuator, read());
704
1
        }
705
706
39
        lexState = State::value;
707
39
      } break;
708
709
38
      case State::afterArrayValue: {
710
38
        switch (c) {
711
24
          case ',':
712
37
          case ']':
713
37
            return newToken(TokenType::punctuator, read());
714
38
        }
715
716
1
        throw invalidChar(read());
717
38
      }
718
719
1
      case State::end: {
720
        // This code is unreachable since it's handled by the default lexState.;
721
        // if (c == EndOfInput) {
722
        //     read();
723
        //     return newToken(TokenType::eof);
724
        // }
725
726
1
        throw invalidChar(read());
727
38
      }
728
941
    }
729
730
144
    return incomplete;
731
941
  }
732
733
263
  Token newToken(TokenType type, std::variant<Value, char32_t> value = null) {
734
263
    return {
735
263
      type,
736
263
      value,
737
263
      line,
738
263
      column,
739
263
    };
740
263
  }
741
742
8
  void literal(const std::string& s) {
743
31
    for (const char& c: s) {
744
31
      const char32_t p = peek().c;
745
746
31
      if (p != char32_t(c)) {
747
1
        throw invalidChar(read());
748
1
      }
749
750
30
      read();
751
30
    }
752
8
  }
753
754
31
  std::optional<char32_t> escape() {
755
31
    const char32_t c = peek().c;
756
31
    switch (c) {
757
1
      case 'b':
758
1
        read();
759
1
        return '\b';
760
761
1
      case 'f':
762
1
        read();
763
1
        return '\f';
764
765
1
      case 'n':
766
1
        read();
767
1
        return '\n';
768
769
1
      case 'r':
770
1
        read();
771
1
        return '\r';
772
773
1
      case 't':
774
1
        read();
775
1
        return '\t';
776
777
1
      case 'v':
778
1
        read();
779
1
        return '\v';
780
781
2
      case '0':
782
2
        read();
783
2
        if (util::isDigit(peek().c)) {
784
1
          throw invalidChar(read());
785
1
        }
786
787
1
        return '\0';
788
789
3
      case 'x':
790
3
        read();
791
3
        return hexEscape();
792
793
2
      case 'u':
794
2
        read();
795
2
        return unicodeEscape();
796
797
1
      case '\n':
798
2
      case 0x2028:
799
3
      case 0x2029:
800
3
        read();
801
3
        return std::nullopt;
802
803
2
      case '\r':
804
2
        read();
805
2
        if (peek().c == '\n') {
806
1
          read();
807
1
        }
808
809
2
        return std::nullopt;
810
811
1
      case '1':
812
2
      case '2':
813
3
      case '3':
814
4
      case '4':
815
5
      case '5':
816
6
      case '6':
817
7
      case '7':
818
8
      case '8':
819
9
      case '9':
820
9
        throw invalidChar(read());
821
822
1
      case EndOfInput:
823
1
        throw invalidChar(read());
824
31
    }
825
826
3
    return read();
827
31
  }
828
829
3
  char32_t hexEscape() {
830
3
    std::string buffer = "";
831
3
    char32_t c = peek().c;
832
833
3
    if (!util::isHexDigit(c)) {
834
1
      throw invalidChar(read());
835
1
    }
836
837
2
    buffer += read();
838
839
2
    c = peek().c;
840
2
    if (!util::isHexDigit(c)) {
841
1
      throw invalidChar(read());
842
1
    }
843
844
1
    buffer += read();
845
846
1
    return char32_t(std::stoi(buffer, 0, 16));
847
2
  }
848
849
10
  char32_t unicodeEscape() {
850
10
    std::string buffer = "";
851
10
    uint8_t count = 4;
852
853
49
    while (count-- > 0) {
854
40
      const char32_t c = peek().c;
855
40
      if (!util::isHexDigit(c)) {
856
1
        throw invalidChar(read());
857
1
      }
858
859
39
      buffer += read();
860
39
    }
861
862
9
    return char32_t(std::stoi(buffer, 0, 16));
863
10
  }
864
865
263
  void consumeToken(State s) {
866
263
    switch (s) {
867
57
      case State::start: {
868
57
        if (token.type == TokenType::eof) {
869
2
          throw invalidEOF();
870
2
        }
871
872
55
        push();
873
55
      } break;
874
875
28
      case State::beforePropertyName: {
876
28
        switch (token.type) {
877
19
          case TokenType::identifier:
878
22
          case TokenType::string:
879
22
            key = std::get<std::string>(std::get<Value>(token.value));
880
22
            parseState = State::afterPropertyName;
881
22
            return;
882
883
5
          case TokenType::punctuator:
884
            // This code is unreachable since it's handled by the lexState.;
885
            // if (token.value != '}') {
886
            //     throw invalidToken();
887
            // }
888
889
5
            pop();
890
5
            return;
891
892
1
          case TokenType::eof:
893
1
            throw invalidEOF();
894
895
0
          default:; // suppress unhandled case warning
896
28
        }
897
898
        // This code is unreachable since it's handled by the lexState.;
899
        // throw invalidToken();
900
28
      }
901
902
21
      case State::afterPropertyName: {
903
        // This code is unreachable since it's handled by the lexState.;
904
        // if (token.type != TokenType::punctuator || token.value != ':') {
905
        //     throw invalidToken();
906
        // }
907
908
21
        if (token.type == TokenType::eof) {
909
1
          throw invalidEOF();
910
1
        }
911
912
20
        parseState = State::beforePropertyValue;
913
20
      } break;
914
915
20
      case State::beforePropertyValue: {
916
20
        if (token.type == TokenType::eof) {
917
1
          throw invalidEOF();
918
1
        }
919
920
19
        push();
921
19
      } break;
922
923
41
      case State::beforeArrayValue: {
924
41
        if (token.type == TokenType::eof) {
925
1
          throw invalidEOF();
926
1
        }
927
928
40
        if (token.type == TokenType::punctuator && 
std::get<char32_t>(token.value) == ']'2
) {
929
1
          pop();
930
1
          return;
931
1
        }
932
933
39
        push();
934
39
      } break;
935
936
18
      case State::afterPropertyValue: {
937
        // This code is unreachable since it's handled by the lexState.;
938
        // if (token.type != TokenType::punctuator) {
939
        //     throw invalidToken();
940
        // }
941
942
18
        if (token.type == TokenType::eof) {
943
1
          throw invalidEOF();
944
1
        }
945
946
17
        switch (std::get<char32_t>(token.value)) {
947
6
          case ',':
948
6
            parseState = State::beforePropertyName;
949
6
            return;
950
951
11
          case '}':
952
11
            pop();
953
17
        }
954
955
        // This code is unreachable since it's handled by the lexState.;
956
        // throw invalidToken();
957
17
      } 
break11
;
958
959
38
      case State::afterArrayValue: {
960
        // This code is unreachable since it's handled by the lexState.;
961
        // if (token.type != TokenType::punctuator) {
962
        //     throw invalidToken();
963
        // }
964
965
38
        if (token.type == TokenType::eof) {
966
1
          throw invalidEOF();
967
1
        }
968
969
37
        switch (std::get<char32_t>(token.value)) {
970
24
          case ',':
971
24
            parseState = State::beforeArrayValue;
972
24
            return;
973
974
13
          case ']':
975
13
            pop();
976
37
        }
977
978
        // This code is unreachable since it's handled by the lexState.;
979
        // throw invalidToken();
980
37
      } 
break13
;
981
982
40
      case State::end: {
983
        // This code is unreachable since it's handled by the lexState.;
984
        // if (token.type != TokenType::eof) {
985
        //     throw invalidToken();
986
        // }
987
40
      }
988
989
40
      default:; // suppress unhandled case warning
990
263
    }
991
263
  }
992
993
113
  void push() {
994
113
    Value temp;
995
996
113
    switch (token.type) {
997
44
      case TokenType::punctuator:
998
44
        switch (std::get<char32_t>(token.value)) {
999
27
          case '{':
1000
27
            temp = Object {};
1001
27
            break;
1002
1003
17
          case '[':
1004
17
            temp = Array {};
1005
17
            break;
1006
44
        }
1007
1008
44
        break;
1009
1010
44
      case TokenType::null:
1011
3
      case TokenType::boolean:
1012
63
      case TokenType::numeric:
1013
69
      case TokenType::string:
1014
69
        temp = std::get<Value>(token.value);
1015
69
        break;
1016
1017
0
      default:; // suppress unhandled case warning
1018
        // This code is unreachable.;
1019
        // default:
1020
        //     throw invalidToken();
1021
113
    }
1022
1023
113
    Value* value;
1024
113
    if (stack.size() == 0) {
1025
55
      root = temp;
1026
55
      value = &root;
1027
58
    } else {
1028
58
      Value& parent = *stack.top();
1029
58
      if (isArray(parent)) {
1030
39
        std::get<Array>(parent).push_back(temp);
1031
39
        value = &std::get<Array>(parent).back();
1032
39
      } else {
1033
        // auto result = std::get<Object>(parent).insert({key, temp});
1034
        // if (!result.second) {
1035
        //  throw std::runtime_error("Key " + key + " already exists in object");
1036
        // }
1037
        // value = &(result.first->second);
1038
19
        auto result = std::get<Object>(parent).insert_or_assign(key, temp);
1039
19
        value = &(result.first->second);
1040
19
      }
1041
58
    }
1042
1043
113
    if ((isObject(*value) || 
isArray(*value)86
)) {
1044
44
      stack.push(value);
1045
1046
44
      if (isArray(*value)) {
1047
17
        parseState = State::beforeArrayValue;
1048
27
      } else {
1049
27
        parseState = State::beforePropertyName;
1050
27
      }
1051
69
    } else {
1052
69
      if (stack.size() == 0) {
1053
13
        parseState = State::end;
1054
13
      }
1055
56
      else {
1056
56
        const Value& current = *stack.top();
1057
56
        if (isArray(current)) {
1058
38
          parseState = State::afterArrayValue;
1059
38
        } else {
1060
18
          parseState = State::afterPropertyValue;
1061
18
        }
1062
56
      }
1063
69
    }
1064
113
  }
1065
1066
30
  void pop() {
1067
30
    stack.pop();
1068
1069
30
    if (stack.size() == 0) {
1070
28
      parseState = State::end;
1071
28
    }
1072
2
    else {
1073
2
      const Value& current = *stack.top();
1074
2
      if (isArray(current)) {
1075
1
        parseState = State::afterArrayValue;
1076
1
      } else {
1077
1
        parseState = State::afterPropertyValue;
1078
1
      }
1079
2
    }
1080
30
  }
1081
1082
  // This code is unreachable.;
1083
  // std::runtime_error invalidParseState () {
1084
  //     return new Error("JSON5: invalid parse state '" + std::to_string(parseState) + "'");
1085
  // }
1086
1087
  // This code is unreachable.;
1088
  // std::runtime_error invalidLexState (state) {
1089
  //     return new Error("JSON5: invalid lex state '" + std::to_string(state) + "'");
1090
  // }
1091
1092
34
  SyntaxError invalidChar(char32_t c) {
1093
34
    if (c == EndOfInput) {
1094
4
      return syntaxError( "JSON5: invalid end of input at " + std::to_string(line) + ":" + std::to_string(column) + "");
1095
4
    }
1096
1097
30
    return syntaxError("JSON5: invalid character '" + formatChar(c) + "' at " + std::to_string(line) + ":" + std::to_string(column) + "");
1098
34
  }
1099
1100
1
  SyntaxError invalidUnicode() {
1101
1
    column += 1;
1102
1
    return syntaxError( "JSON5: invalid unicode byte sequence at " + std::to_string(line) + ":" + std::to_string(column) + "");
1103
1
  }
1104
1105
8
  SyntaxError invalidEOF() {
1106
8
    return syntaxError( "JSON5: invalid end of input at " + std::to_string(line) + ":" + std::to_string(column) + "");
1107
8
  }
1108
1109
  // This code is unreachable.;
1110
  // std::runtime_error invalidToken () {
1111
  //     if (token.type == TokenType::eof) {
1112
  //         return syntaxError("JSON5: invalid end of input at " + std::to_string(line) + ":" + std::to_string(column) + "");
1113
  //     }
1114
1115
  //     const auto c = char32_t(token.value.codePointAt(0));
1116
  //     return syntaxError("JSON5: invalid character '" + formatChar(c) + "' at " + std::to_string(line) + ":" + std::to_string(column) + "");
1117
  // }
1118
1119
2
  SyntaxError invalidIdentifier() {
1120
2
    column -= 5;
1121
2
    return syntaxError( "JSON5: invalid identifier character at " + std::to_string(line) + ":" + std::to_string(column) + "");
1122
2
  }
1123
1124
2
  void separatorChar(char32_t c) {
1125
2
    std::cerr << ("JSON5: '" + formatChar(c) + "' in strings is not valid ECMAScript; consider escaping");
1126
2
  }
1127
1128
32
  std::string formatChar(char32_t c) {
1129
32
    const std::map<char32_t, std::string> replacements = {
1130
32
      {'\'', "\\'"},
1131
32
      {'"', "\\\""},
1132
32
      {'\\', "\\\\"},
1133
32
      {'\b', "\\b"},
1134
32
      {'\f', "\\f"},
1135
32
      {'\n', "\\n"},
1136
32
      {'\r', "\\r"},
1137
32
      {'\t', "\\t"},
1138
32
      {'\v', "\\v"},
1139
32
      {'\0', "\\0"},
1140
32
      {0x2028, "\\u2028"},
1141
32
      {0x2029, "\\u2029"},
1142
32
    };
1143
1144
32
    if (replacements.count(c) > 0) {
1145
3
      return replacements.at(c);
1146
3
    }
1147
1148
29
    if (c < ' ') {
1149
1
      char hexString[5];
1150
1
      std::snprintf(hexString, sizeof(hexString),  "\\x%02X", c);
1151
1
      return hexString;
1152
1
    }
1153
1154
28
    return toUTF8(c);
1155
29
  }
1156
1157
45
  SyntaxError syntaxError(const std::string& message) {
1158
45
    return SyntaxError(line, column, message);
1159
45
  }
1160
1161
};
1162
1163
85
Value parse(std::string_view text) {
1164
85
  return Parser {}.parse(text);
1165
85
}
1166
1167
}
/home/runner/work/json5cpp/json5cpp/src/stringify.hpp
Line
Count
Source (jump to first uncovered line)
1
2
#pragma once
3
4
#include <array>
5
#include <vector>
6
#include <string>
7
#include <optional>
8
#include <charconv>
9
#include <cstdint>
10
11
#include "utf8.hpp"
12
#include "util.hpp"
13
#include "jsonvalue.hpp"
14
#include "parserstate.hpp"
15
#include "token.hpp"
16
17
namespace JSON5 {
18
19
struct StringifyOptions {
20
  // int so the user can write {4} instead of {4u}
21
  std::variant<std::string, int> space;
22
  std::optional<char> quote = std::nullopt;
23
};
24
25
class Stringifier {
26
  std::string indent;
27
  //std::vector<std::string> propertyList;
28
  //let replacerFunc
29
  std::string gap;
30
  std::optional<char> quote;
31
32
  template <class>
33
  static inline constexpr bool always_false_v = false;
34
35
public:
36
  std::string stringify(
37
    const Value& value,
38
    const StringifyOptions options = {}
39
44
  ) {
40
44
    indent = "";
41
    //propertyList = {};
42
    //let replacerFunc
43
44
    gap = "";
44
44
    quote = options.quote;
45
46
    // if (
47
    //     replacer != null &&
48
    //     typeof replacer === 'object' &&
49
    //     !Array.isArray(replacer)
50
    // ) {
51
    //     space = replacer.space
52
    //     quote = replacer.quote
53
    //     replacer = replacer.replacer
54
    // }
55
56
    // if (typeof replacer === 'function') {
57
    //     replacerFunc = replacer
58
    // } else if (Array.isArray(replacer)) {
59
    //     propertyList = []
60
    //     for (const v of replacer) {
61
    //         let item
62
63
    //         if (typeof v === 'string') {
64
    //             item = v
65
    //         } else if (
66
    //             typeof v === 'number' ||
67
    //             v instanceof String ||
68
    //             v instanceof Number
69
    //         ) {
70
    //             item = String(v)
71
    //         }
72
73
    //         if (item !== undefined && propertyList.indexOf(item) < 0) {
74
    //             propertyList.push(item)
75
    //         }
76
    //     }
77
    // }
78
79
    // if (space instanceof Number) {
80
    //     space = Number(space)
81
    // } else if (space instanceof String) {
82
    //     space = String(space)
83
    // }
84
85
    // if (typeof space === 'number') {
86
    //     if (space > 0) {
87
    //         space = Math.min(10, Math.floor(space))
88
    //         gap = '          '.substr(0, space)
89
    //     }
90
    // } else if (typeof space === 'string') {
91
    //     gap = space.substr(0, 10)
92
    // }
93
44
    if (std::holds_alternative<int>(options.space)) {
94
8
      int i = std::get<int>(options.space);
95
8
      if (i < 0) 
{ i = 0; }1
96
8
      if (i > 10) 
{ i = 10; }1
97
8
      gap = std::string(i, ' ');
98
8
    }
99
36
    else {
100
36
      gap = std::get<std::string>(options.space).substr(0, 10);
101
36
    }
102
44
    return serializeProperty("", Object {{"", value}});
103
44
  }
104
105
private:
106
16
  void replaceAll(std::string& str, const std::string& from, const std::string& to) {
107
16
    size_t start_pos = 0;
108
22
    while ((start_pos = str.find(from, start_pos)) != std::string::npos) {
109
6
      str.replace(start_pos, from.length(), to);
110
6
      start_pos += to.length();
111
6
    }
112
16
  }
113
114
32
  std::string join(const std::vector<std::string>& items, const std::string& separator) {
115
32
    if (items.empty()) 
{ return ""; }0
116
32
    std::string result = items[0];
117
42
    for (size_t i = 1; i < items.size(); 
++i10
) {
118
10
      result += separator + items[i];
119
10
    }
120
32
    return result;
121
32
  }
122
123
  template <typename K, typename H>
124
88
  std::string serializeProperty(const K& key, const H& holder) {
125
88
    const Value& value = holder.at(key);
126
    // if (!std::holds_alternative<Null>(value)) {
127
    //     if (typeof value.toJSON5 === 'function') {
128
    //         value = value.toJSON5(key)
129
    //     } else if (typeof value.toJSON === 'function') {
130
    //         value = value.toJSON(key)
131
    //     }
132
    // }
133
134
    // if (replacerFunc) {
135
    //     value = replacerFunc.call(holder, key, value)
136
    // }
137
138
    // if (value instanceof Number) {
139
    //     value = Number(value)
140
    // } else if (value instanceof String) {
141
    //     value = String(value)
142
    // } else if (value instanceof Boolean) {
143
    //     value = value.valueOf()
144
    // }
145
146
88
    return std::visit( [this](auto&& arg)
147
88
      {
148
88
        using T = std::decay_t<decltype(arg)>;
149
88
        if constexpr (std::is_same_v<T, Null>) 
{0
150
87
          return std::string("null");
151
87
        }
152
87
        else 
if constexpr (2
std::is_same_v<T, bool>)
{0
153
85
          return std::string(
arg2
?
"true"1
:
"false"1
);
154
2
        }
155
85
        else 
if constexpr (10
std::is_same_v<T, std::string>)
{0
156
75
          return quoteString(arg);
157
75
        }
158
75
        else 
if constexpr (39
std::is_same_v<T, double>)
{0
159
39
          if (std::isnan(arg)) 
{ return std::string("NaN"); }1
160
38
          if (std::isinf(arg)) 
{ return std::string(2
arg > 02
?
"Infinity"1
:
"-Infinity"1
); }
161
36
          std::array<char, 64> buffer;
162
36
          auto result = std::to_chars(buffer.data(), buffer.data() + buffer.size(), arg);
163
36
          return std::string(buffer.data(), result.ptr - buffer.data());
164
38
        }
165
36
        else 
if constexpr (17
std::is_same_v<T, Array>)
{0
166
19
          return serializeArray(arg);
167
19
        }
168
19
        else if constexpr (std::is_same_v<T, Object>) {
169
19
          return serializeObject(arg);
170
19
        }
171
88
        else {
172
88
          static_assert(always_false_v<T>, "unhandled variant alternative");
173
88
        }
174
88
      }, value);
auto JSON5::Stringifier::serializeProperty<char [1], JSON5::Object>(char const (&) [1], JSON5::Object const&)::{lambda(auto:1&&)#1}::operator()<JSON5::Null const&>(JSON5::Null const&) const
Line
Count
Source
147
1
      {
148
1
        using T = std::decay_t<decltype(arg)>;
149
1
        if constexpr (std::is_same_v<T, Null>) {
150
1
          return std::string("null");
151
1
        }
152
1
        else if constexpr (std::is_same_v<T, bool>) {
153
1
          return std::string(arg ? "true" : "false");
154
1
        }
155
1
        else if constexpr (std::is_same_v<T, std::string>) {
156
1
          return quoteString(arg);
157
1
        }
158
1
        else if constexpr (std::is_same_v<T, double>) {
159
1
          if (std::isnan(arg)) { return std::string("NaN"); }
160
1
          if (std::isinf(arg)) { return std::string(arg > 0 ? "Infinity" : "-Infinity"); }
161
1
          std::array<char, 64> buffer;
162
1
          auto result = std::to_chars(buffer.data(), buffer.data() + buffer.size(), arg);
163
1
          return std::string(buffer.data(), result.ptr - buffer.data());
164
1
        }
165
1
        else if constexpr (std::is_same_v<T, Array>) {
166
1
          return serializeArray(arg);
167
1
        }
168
1
        else if constexpr (std::is_same_v<T, Object>) {
169
1
          return serializeObject(arg);
170
1
        }
171
1
        else {
172
1
          static_assert(always_false_v<T>, "unhandled variant alternative");
173
1
        }
174
1
      }, value);
auto JSON5::Stringifier::serializeProperty<char [1], JSON5::Object>(char const (&) [1], JSON5::Object const&)::{lambda(auto:1&&)#1}::operator()<bool const&>(bool const&) const
Line
Count
Source
147
2
      {
148
2
        using T = std::decay_t<decltype(arg)>;
149
2
        if constexpr (std::is_same_v<T, Null>) 
{0
150
2
          return std::string("null");
151
2
        }
152
2
        else if constexpr (std::is_same_v<T, bool>) {
153
2
          return std::string(arg ? 
"true"1
:
"false"1
);
154
2
        }
155
2
        else if constexpr (std::is_same_v<T, std::string>) {
156
2
          return quoteString(arg);
157
2
        }
158
2
        else if constexpr (std::is_same_v<T, double>) {
159
2
          if (std::isnan(arg)) { return std::string("NaN"); }
160
2
          if (std::isinf(arg)) { return std::string(arg > 0 ? "Infinity" : "-Infinity"); }
161
2
          std::array<char, 64> buffer;
162
2
          auto result = std::to_chars(buffer.data(), buffer.data() + buffer.size(), arg);
163
2
          return std::string(buffer.data(), result.ptr - buffer.data());
164
2
        }
165
2
        else if constexpr (std::is_same_v<T, Array>) {
166
2
          return serializeArray(arg);
167
2
        }
168
2
        else if constexpr (std::is_same_v<T, Object>) {
169
2
          return serializeObject(arg);
170
2
        }
171
2
        else {
172
2
          static_assert(always_false_v<T>, "unhandled variant alternative");
173
2
        }
174
2
      }, value);
auto JSON5::Stringifier::serializeProperty<char [1], JSON5::Object>(char const (&) [1], JSON5::Object const&)::{lambda(auto:1&&)#1}::operator()<double const&>(double const&) const
Line
Count
Source
147
1
      {
148
1
        using T = std::decay_t<decltype(arg)>;
149
1
        if constexpr (std::is_same_v<T, Null>) 
{0
150
1
          return std::string("null");
151
1
        }
152
1
        else if constexpr (std::is_same_v<T, bool>) 
{0
153
1
          return std::string(arg ? "true" : "false");
154
1
        }
155
1
        else if constexpr (std::is_same_v<T, std::string>) 
{0
156
1
          return quoteString(arg);
157
1
        }
158
1
        else if constexpr (std::is_same_v<T, double>) {
159
1
          if (std::isnan(arg)) 
{ return std::string("NaN"); }0
160
1
          if (std::isinf(arg)) 
{ return std::string(0
arg > 00
?
"Infinity"0
:
"-Infinity"0
); }
161
1
          std::array<char, 64> buffer;
162
1
          auto result = std::to_chars(buffer.data(), buffer.data() + buffer.size(), arg);
163
1
          return std::string(buffer.data(), result.ptr - buffer.data());
164
1
        }
165
1
        else if constexpr (std::is_same_v<T, Array>) {
166
1
          return serializeArray(arg);
167
1
        }
168
1
        else if constexpr (std::is_same_v<T, Object>) {
169
1
          return serializeObject(arg);
170
1
        }
171
1
        else {
172
1
          static_assert(always_false_v<T>, "unhandled variant alternative");
173
1
        }
174
1
      }, value);
auto JSON5::Stringifier::serializeProperty<char [1], JSON5::Object>(char const (&) [1], JSON5::Object const&)::{lambda(auto:1&&)#1}::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const
Line
Count
Source
147
8
      {
148
8
        using T = std::decay_t<decltype(arg)>;
149
8
        if constexpr (std::is_same_v<T, Null>) 
{0
150
8
          return std::string("null");
151
8
        }
152
8
        else if constexpr (std::is_same_v<T, bool>) 
{0
153
8
          return std::string(arg ? "true" : "false");
154
8
        }
155
8
        else if constexpr (std::is_same_v<T, std::string>) {
156
8
          return quoteString(arg);
157
8
        }
158
8
        else if constexpr (std::is_same_v<T, double>) {
159
8
          if (std::isnan(arg)) { return std::string("NaN"); }
160
8
          if (std::isinf(arg)) { return std::string(arg > 0 ? "Infinity" : "-Infinity"); }
161
8
          std::array<char, 64> buffer;
162
8
          auto result = std::to_chars(buffer.data(), buffer.data() + buffer.size(), arg);
163
8
          return std::string(buffer.data(), result.ptr - buffer.data());
164
8
        }
165
8
        else if constexpr (std::is_same_v<T, Array>) {
166
8
          return serializeArray(arg);
167
8
        }
168
8
        else if constexpr (std::is_same_v<T, Object>) {
169
8
          return serializeObject(arg);
170
8
        }
171
8
        else {
172
8
          static_assert(always_false_v<T>, "unhandled variant alternative");
173
8
        }
174
8
      }, value);
auto JSON5::Stringifier::serializeProperty<char [1], JSON5::Object>(char const (&) [1], JSON5::Object const&)::{lambda(auto:1&&)#1}::operator()<JSON5::Array const&>(JSON5::Array const&) const
Line
Count
Source
147
15
      {
148
15
        using T = std::decay_t<decltype(arg)>;
149
15
        if constexpr (std::is_same_v<T, Null>) 
{0
150
15
          return std::string("null");
151
15
        }
152
15
        else if constexpr (std::is_same_v<T, bool>) 
{0
153
15
          return std::string(arg ? "true" : "false");
154
15
        }
155
15
        else if constexpr (std::is_same_v<T, std::string>) 
{0
156
15
          return quoteString(arg);
157
15
        }
158
15
        else if constexpr (std::is_same_v<T, double>) 
{0
159
15
          if (std::isnan(arg)) { return std::string("NaN"); }
160
15
          if (std::isinf(arg)) { return std::string(arg > 0 ? "Infinity" : "-Infinity"); }
161
15
          std::array<char, 64> buffer;
162
15
          auto result = std::to_chars(buffer.data(), buffer.data() + buffer.size(), arg);
163
15
          return std::string(buffer.data(), result.ptr - buffer.data());
164
15
        }
165
15
        else if constexpr (std::is_same_v<T, Array>) {
166
15
          return serializeArray(arg);
167
15
        }
168
15
        else if constexpr (std::is_same_v<T, Object>) {
169
15
          return serializeObject(arg);
170
15
        }
171
15
        else {
172
15
          static_assert(always_false_v<T>, "unhandled variant alternative");
173
15
        }
174
15
      }, value);
Unexecuted instantiation: auto JSON5::Stringifier::serializeProperty<unsigned long, JSON5::Array>(unsigned long const&, JSON5::Array const&)::{lambda(auto:1&&)#1}::operator()<JSON5::Null const&>(JSON5::Null const&) const
Unexecuted instantiation: auto JSON5::Stringifier::serializeProperty<unsigned long, JSON5::Array>(unsigned long const&, JSON5::Array const&)::{lambda(auto:1&&)#1}::operator()<bool const&>(bool const&) const
auto JSON5::Stringifier::serializeProperty<unsigned long, JSON5::Array>(unsigned long const&, JSON5::Array const&)::{lambda(auto:1&&)#1}::operator()<double const&>(double const&) const
Line
Count
Source
147
21
      {
148
21
        using T = std::decay_t<decltype(arg)>;
149
21
        if constexpr (std::is_same_v<T, Null>) 
{0
150
21
          return std::string("null");
151
21
        }
152
21
        else if constexpr (std::is_same_v<T, bool>) 
{0
153
21
          return std::string(arg ? "true" : "false");
154
21
        }
155
21
        else if constexpr (std::is_same_v<T, std::string>) 
{0
156
21
          return quoteString(arg);
157
21
        }
158
21
        else if constexpr (std::is_same_v<T, double>) {
159
21
          if (std::isnan(arg)) 
{ return std::string("NaN"); }1
160
20
          if (std::isinf(arg)) 
{ return std::string(2
arg > 02
?
"Infinity"1
:
"-Infinity"1
); }
161
18
          std::array<char, 64> buffer;
162
18
          auto result = std::to_chars(buffer.data(), buffer.data() + buffer.size(), arg);
163
18
          return std::string(buffer.data(), result.ptr - buffer.data());
164
20
        }
165
21
        else if constexpr (std::is_same_v<T, Array>) {
166
21
          return serializeArray(arg);
167
21
        }
168
21
        else if constexpr (std::is_same_v<T, Object>) {
169
21
          return serializeObject(arg);
170
21
        }
171
21
        else {
172
21
          static_assert(always_false_v<T>, "unhandled variant alternative");
173
21
        }
174
21
      }, value);
Unexecuted instantiation: auto JSON5::Stringifier::serializeProperty<unsigned long, JSON5::Array>(unsigned long const&, JSON5::Array const&)::{lambda(auto:1&&)#1}::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const
auto JSON5::Stringifier::serializeProperty<unsigned long, JSON5::Array>(unsigned long const&, JSON5::Array const&)::{lambda(auto:1&&)#1}::operator()<JSON5::Array const&>(JSON5::Array const&) const
Line
Count
Source
147
2
      {
148
2
        using T = std::decay_t<decltype(arg)>;
149
2
        if constexpr (std::is_same_v<T, Null>) 
{0
150
2
          return std::string("null");
151
2
        }
152
2
        else if constexpr (std::is_same_v<T, bool>) 
{0
153
2
          return std::string(arg ? "true" : "false");
154
2
        }
155
2
        else if constexpr (std::is_same_v<T, std::string>) 
{0
156
2
          return quoteString(arg);
157
2
        }
158
2
        else if constexpr (std::is_same_v<T, double>) 
{0
159
2
          if (std::isnan(arg)) { return std::string("NaN"); }
160
2
          if (std::isinf(arg)) { return std::string(arg > 0 ? "Infinity" : "-Infinity"); }
161
2
          std::array<char, 64> buffer;
162
2
          auto result = std::to_chars(buffer.data(), buffer.data() + buffer.size(), arg);
163
2
          return std::string(buffer.data(), result.ptr - buffer.data());
164
2
        }
165
2
        else if constexpr (std::is_same_v<T, Array>) {
166
2
          return serializeArray(arg);
167
2
        }
168
2
        else if constexpr (std::is_same_v<T, Object>) {
169
2
          return serializeObject(arg);
170
2
        }
171
2
        else {
172
2
          static_assert(always_false_v<T>, "unhandled variant alternative");
173
2
        }
174
2
      }, value);
Unexecuted instantiation: auto JSON5::Stringifier::serializeProperty<unsigned long, JSON5::Array>(unsigned long const&, JSON5::Array const&)::{lambda(auto:1&&)#1}::operator()<JSON5::Object const&>(JSON5::Object const&) const
Unexecuted instantiation: auto JSON5::Stringifier::serializeProperty<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Object>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, JSON5::Object const&)::{lambda(auto:1&&)#1}::operator()<JSON5::Null const&>(JSON5::Null const&) const
Unexecuted instantiation: auto JSON5::Stringifier::serializeProperty<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Object>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, JSON5::Object const&)::{lambda(auto:1&&)#1}::operator()<bool const&>(bool const&) const
auto JSON5::Stringifier::serializeProperty<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Object>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, JSON5::Object const&)::{lambda(auto:1&&)#1}::operator()<double const&>(double const&) const
Line
Count
Source
147
17
      {
148
17
        using T = std::decay_t<decltype(arg)>;
149
17
        if constexpr (std::is_same_v<T, Null>) 
{0
150
17
          return std::string("null");
151
17
        }
152
17
        else if constexpr (std::is_same_v<T, bool>) 
{0
153
17
          return std::string(arg ? "true" : "false");
154
17
        }
155
17
        else if constexpr (std::is_same_v<T, std::string>) 
{0
156
17
          return quoteString(arg);
157
17
        }
158
17
        else if constexpr (std::is_same_v<T, double>) {
159
17
          if (std::isnan(arg)) 
{ return std::string("NaN"); }0
160
17
          if (std::isinf(arg)) 
{ return std::string(0
arg > 00
?
"Infinity"0
:
"-Infinity"0
); }
161
17
          std::array<char, 64> buffer;
162
17
          auto result = std::to_chars(buffer.data(), buffer.data() + buffer.size(), arg);
163
17
          return std::string(buffer.data(), result.ptr - buffer.data());
164
17
        }
165
17
        else if constexpr (std::is_same_v<T, Array>) {
166
17
          return serializeArray(arg);
167
17
        }
168
17
        else if constexpr (std::is_same_v<T, Object>) {
169
17
          return serializeObject(arg);
170
17
        }
171
17
        else {
172
17
          static_assert(always_false_v<T>, "unhandled variant alternative");
173
17
        }
174
17
      }, value);
auto JSON5::Stringifier::serializeProperty<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Object>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, JSON5::Object const&)::{lambda(auto:1&&)#1}::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const
Line
Count
Source
147
2
      {
148
2
        using T = std::decay_t<decltype(arg)>;
149
2
        if constexpr (std::is_same_v<T, Null>) 
{0
150
2
          return std::string("null");
151
2
        }
152
2
        else if constexpr (std::is_same_v<T, bool>) 
{0
153
2
          return std::string(arg ? "true" : "false");
154
2
        }
155
2
        else if constexpr (std::is_same_v<T, std::string>) {
156
2
          return quoteString(arg);
157
2
        }
158
2
        else if constexpr (std::is_same_v<T, double>) {
159
2
          if (std::isnan(arg)) { return std::string("NaN"); }
160
2
          if (std::isinf(arg)) { return std::string(arg > 0 ? "Infinity" : "-Infinity"); }
161
2
          std::array<char, 64> buffer;
162
2
          auto result = std::to_chars(buffer.data(), buffer.data() + buffer.size(), arg);
163
2
          return std::string(buffer.data(), result.ptr - buffer.data());
164
2
        }
165
2
        else if constexpr (std::is_same_v<T, Array>) {
166
2
          return serializeArray(arg);
167
2
        }
168
2
        else if constexpr (std::is_same_v<T, Object>) {
169
2
          return serializeObject(arg);
170
2
        }
171
2
        else {
172
2
          static_assert(always_false_v<T>, "unhandled variant alternative");
173
2
        }
174
2
      }, value);
Unexecuted instantiation: auto JSON5::Stringifier::serializeProperty<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Object>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, JSON5::Object const&)::{lambda(auto:1&&)#1}::operator()<JSON5::Array const&>(JSON5::Array const&) const
auto JSON5::Stringifier::serializeProperty<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Object>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, JSON5::Object const&)::{lambda(auto:1&&)#1}::operator()<JSON5::Object const&>(JSON5::Object const&) const
Line
Count
Source
147
2
      {
148
2
        using T = std::decay_t<decltype(arg)>;
149
2
        if constexpr (std::is_same_v<T, Null>) 
{0
150
2
          return std::string("null");
151
2
        }
152
2
        else if constexpr (std::is_same_v<T, bool>) 
{0
153
2
          return std::string(arg ? "true" : "false");
154
2
        }
155
2
        else if constexpr (std::is_same_v<T, std::string>) 
{0
156
2
          return quoteString(arg);
157
2
        }
158
2
        else if constexpr (std::is_same_v<T, double>) 
{0
159
2
          if (std::isnan(arg)) { return std::string("NaN"); }
160
2
          if (std::isinf(arg)) { return std::string(arg > 0 ? "Infinity" : "-Infinity"); }
161
2
          std::array<char, 64> buffer;
162
2
          auto result = std::to_chars(buffer.data(), buffer.data() + buffer.size(), arg);
163
2
          return std::string(buffer.data(), result.ptr - buffer.data());
164
2
        }
165
2
        else if constexpr (std::is_same_v<T, Array>) 
{0
166
2
          return serializeArray(arg);
167
2
        }
168
2
        else if constexpr (std::is_same_v<T, Object>) {
169
2
          return serializeObject(arg);
170
2
        }
171
2
        else {
172
2
          static_assert(always_false_v<T>, "unhandled variant alternative");
173
2
        }
174
2
      }, value);
auto JSON5::Stringifier::serializeProperty<char [1], JSON5::Object>(char const (&) [1], JSON5::Object const&)::{lambda(auto:1&&)#1}::operator()<JSON5::Object const&>(JSON5::Object const&) const
Line
Count
Source
147
17
      {
148
17
        using T = std::decay_t<decltype(arg)>;
149
17
        if constexpr (std::is_same_v<T, Null>) 
{0
150
17
          return std::string("null");
151
17
        }
152
17
        else if constexpr (std::is_same_v<T, bool>) 
{0
153
17
          return std::string(arg ? "true" : "false");
154
17
        }
155
17
        else if constexpr (std::is_same_v<T, std::string>) 
{0
156
17
          return quoteString(arg);
157
17
        }
158
17
        else if constexpr (std::is_same_v<T, double>) 
{0
159
17
          if (std::isnan(arg)) { return std::string("NaN"); }
160
17
          if (std::isinf(arg)) { return std::string(arg > 0 ? "Infinity" : "-Infinity"); }
161
17
          std::array<char, 64> buffer;
162
17
          auto result = std::to_chars(buffer.data(), buffer.data() + buffer.size(), arg);
163
17
          return std::string(buffer.data(), result.ptr - buffer.data());
164
17
        }
165
17
        else if constexpr (std::is_same_v<T, Array>) 
{0
166
17
          return serializeArray(arg);
167
17
        }
168
17
        else if constexpr (std::is_same_v<T, Object>) {
169
17
          return serializeObject(arg);
170
17
        }
171
17
        else {
172
17
          static_assert(always_false_v<T>, "unhandled variant alternative");
173
17
        }
174
17
      }, value);
175
88
  }
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > JSON5::Stringifier::serializeProperty<char [1], JSON5::Object>(char const (&) [1], JSON5::Object const&)
Line
Count
Source
124
44
  std::string serializeProperty(const K& key, const H& holder) {
125
44
    const Value& value = holder.at(key);
126
    // if (!std::holds_alternative<Null>(value)) {
127
    //     if (typeof value.toJSON5 === 'function') {
128
    //         value = value.toJSON5(key)
129
    //     } else if (typeof value.toJSON === 'function') {
130
    //         value = value.toJSON(key)
131
    //     }
132
    // }
133
134
    // if (replacerFunc) {
135
    //     value = replacerFunc.call(holder, key, value)
136
    // }
137
138
    // if (value instanceof Number) {
139
    //     value = Number(value)
140
    // } else if (value instanceof String) {
141
    //     value = String(value)
142
    // } else if (value instanceof Boolean) {
143
    //     value = value.valueOf()
144
    // }
145
146
44
    return std::visit( [this](auto&& arg)
147
44
      {
148
44
        using T = std::decay_t<decltype(arg)>;
149
44
        if constexpr (std::is_same_v<T, Null>) {
150
44
          return std::string("null");
151
44
        }
152
44
        else if constexpr (std::is_same_v<T, bool>) {
153
44
          return std::string(arg ? "true" : "false");
154
44
        }
155
44
        else if constexpr (std::is_same_v<T, std::string>) {
156
44
          return quoteString(arg);
157
44
        }
158
44
        else if constexpr (std::is_same_v<T, double>) {
159
44
          if (std::isnan(arg)) { return std::string("NaN"); }
160
44
          if (std::isinf(arg)) { return std::string(arg > 0 ? "Infinity" : "-Infinity"); }
161
44
          std::array<char, 64> buffer;
162
44
          auto result = std::to_chars(buffer.data(), buffer.data() + buffer.size(), arg);
163
44
          return std::string(buffer.data(), result.ptr - buffer.data());
164
44
        }
165
44
        else if constexpr (std::is_same_v<T, Array>) {
166
44
          return serializeArray(arg);
167
44
        }
168
44
        else if constexpr (std::is_same_v<T, Object>) {
169
44
          return serializeObject(arg);
170
44
        }
171
44
        else {
172
44
          static_assert(always_false_v<T>, "unhandled variant alternative");
173
44
        }
174
44
      }, value);
175
44
  }
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > JSON5::Stringifier::serializeProperty<unsigned long, JSON5::Array>(unsigned long const&, JSON5::Array const&)
Line
Count
Source
124
23
  std::string serializeProperty(const K& key, const H& holder) {
125
23
    const Value& value = holder.at(key);
126
    // if (!std::holds_alternative<Null>(value)) {
127
    //     if (typeof value.toJSON5 === 'function') {
128
    //         value = value.toJSON5(key)
129
    //     } else if (typeof value.toJSON === 'function') {
130
    //         value = value.toJSON(key)
131
    //     }
132
    // }
133
134
    // if (replacerFunc) {
135
    //     value = replacerFunc.call(holder, key, value)
136
    // }
137
138
    // if (value instanceof Number) {
139
    //     value = Number(value)
140
    // } else if (value instanceof String) {
141
    //     value = String(value)
142
    // } else if (value instanceof Boolean) {
143
    //     value = value.valueOf()
144
    // }
145
146
23
    return std::visit( [this](auto&& arg)
147
23
      {
148
23
        using T = std::decay_t<decltype(arg)>;
149
23
        if constexpr (std::is_same_v<T, Null>) {
150
23
          return std::string("null");
151
23
        }
152
23
        else if constexpr (std::is_same_v<T, bool>) {
153
23
          return std::string(arg ? "true" : "false");
154
23
        }
155
23
        else if constexpr (std::is_same_v<T, std::string>) {
156
23
          return quoteString(arg);
157
23
        }
158
23
        else if constexpr (std::is_same_v<T, double>) {
159
23
          if (std::isnan(arg)) { return std::string("NaN"); }
160
23
          if (std::isinf(arg)) { return std::string(arg > 0 ? "Infinity" : "-Infinity"); }
161
23
          std::array<char, 64> buffer;
162
23
          auto result = std::to_chars(buffer.data(), buffer.data() + buffer.size(), arg);
163
23
          return std::string(buffer.data(), result.ptr - buffer.data());
164
23
        }
165
23
        else if constexpr (std::is_same_v<T, Array>) {
166
23
          return serializeArray(arg);
167
23
        }
168
23
        else if constexpr (std::is_same_v<T, Object>) {
169
23
          return serializeObject(arg);
170
23
        }
171
23
        else {
172
23
          static_assert(always_false_v<T>, "unhandled variant alternative");
173
23
        }
174
23
      }, value);
175
23
  }
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > JSON5::Stringifier::serializeProperty<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, JSON5::Object>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, JSON5::Object const&)
Line
Count
Source
124
21
  std::string serializeProperty(const K& key, const H& holder) {
125
21
    const Value& value = holder.at(key);
126
    // if (!std::holds_alternative<Null>(value)) {
127
    //     if (typeof value.toJSON5 === 'function') {
128
    //         value = value.toJSON5(key)
129
    //     } else if (typeof value.toJSON === 'function') {
130
    //         value = value.toJSON(key)
131
    //     }
132
    // }
133
134
    // if (replacerFunc) {
135
    //     value = replacerFunc.call(holder, key, value)
136
    // }
137
138
    // if (value instanceof Number) {
139
    //     value = Number(value)
140
    // } else if (value instanceof String) {
141
    //     value = String(value)
142
    // } else if (value instanceof Boolean) {
143
    //     value = value.valueOf()
144
    // }
145
146
21
    return std::visit( [this](auto&& arg)
147
21
      {
148
21
        using T = std::decay_t<decltype(arg)>;
149
21
        if constexpr (std::is_same_v<T, Null>) {
150
21
          return std::string("null");
151
21
        }
152
21
        else if constexpr (std::is_same_v<T, bool>) {
153
21
          return std::string(arg ? "true" : "false");
154
21
        }
155
21
        else if constexpr (std::is_same_v<T, std::string>) {
156
21
          return quoteString(arg);
157
21
        }
158
21
        else if constexpr (std::is_same_v<T, double>) {
159
21
          if (std::isnan(arg)) { return std::string("NaN"); }
160
21
          if (std::isinf(arg)) { return std::string(arg > 0 ? "Infinity" : "-Infinity"); }
161
21
          std::array<char, 64> buffer;
162
21
          auto result = std::to_chars(buffer.data(), buffer.data() + buffer.size(), arg);
163
21
          return std::string(buffer.data(), result.ptr - buffer.data());
164
21
        }
165
21
        else if constexpr (std::is_same_v<T, Array>) {
166
21
          return serializeArray(arg);
167
21
        }
168
21
        else if constexpr (std::is_same_v<T, Object>) {
169
21
          return serializeObject(arg);
170
21
        }
171
21
        else {
172
21
          static_assert(always_false_v<T>, "unhandled variant alternative");
173
21
        }
174
21
      }, value);
175
21
  }
176
177
17
  std::string quoteString(const std::string& value, bool = true) {
178
17
    size_t numSingleQuotes = 0;
179
17
    size_t numDoubleQuotes = 0;
180
181
17
    std::string product = "";
182
183
17
    std::string_view rest = value;
184
68
    while (rest.size() > 0) {
185
52
      const UTF8Peek peek = peekUTF8(rest);
186
52
      if (peek.status != UTF8Peek::Status::ok) {
187
1
        throw std::runtime_error("JSON5: invalid UTF-8 sequence in string");
188
1
      }
189
51
      const char32_t c = peek.codepoint;
190
51
      rest = rest.substr(peek.bytesRead);
191
192
51
      switch (c) {
193
7
        case '\'':
194
7
          numSingleQuotes++;
195
7
          product += c;
196
7
          continue;
197
4
        case '"':
198
4
          numDoubleQuotes++;
199
4
          product += c;
200
4
          continue;
201
6
        case '\0':
202
6
          product += util::isDigit(peekUTF8(rest).codepoint) ? 
"\\x00"2
:
"\\0"4
;
203
6
          continue;
204
2
        case '\\': product += "\\\\"; continue;
205
2
        case '\b': product += "\\b"; continue;
206
2
        case '\f': product += "\\f"; continue;
207
2
        case '\n': product += "\\n"; continue;
208
2
        case '\r': product += "\\r"; continue;
209
2
        case '\t': product += "\\t"; continue;
210
2
        case '\v': product += "\\v"; continue;
211
1
        case 0x2028: product += "\\u2028"; continue;
212
1
        case 0x2029: product += "\\u2029"; continue;
213
51
      }
214
215
18
      if (c < ' ') {
216
2
        char hexString[5];
217
2
        std::snprintf(hexString, sizeof(hexString),  "\\x%02X", c);
218
2
        product += hexString;
219
2
        continue;
220
16
      };
221
222
16
      product += c;
223
224
16
    }
225
226
16
    const char quoteChar = quote ? 
*quote4
227
16
      : 
(numSingleQuotes <= numDoubleQuotes)12
?
'\''9
:
'"'3
;
228
229
16
    replaceAll(product, std::string() + quoteChar, std::string("\\") + quoteChar);
230
231
16
    return quoteChar + product + quoteChar;
232
17
  }
233
234
19
  std::string serializeObject(const Object& value) {
235
236
19
    std::string stepback = indent;
237
19
    indent += gap;
238
239
    //let keys = propertyList || Object.keys(value);
240
19
    std::vector<std::string> partial = {};
241
21
    for (const auto& [key, _]: value) {
242
21
      const std::string propertyString = serializeProperty(key, value);
243
      //if (propertyString !== undefined) {
244
21
      std::string member = serializeKey(key) + ':';
245
21
      if (gap != "") {
246
3
        member += ' ';
247
3
      }
248
21
      member += propertyString;
249
21
      partial.push_back(member);
250
      //}
251
21
    }
252
253
19
    std::string final;
254
19
    if (partial.size() == 0) {
255
1
      final = "{}";
256
1
    }
257
18
    else {
258
18
      std::string properties;
259
18
      if (gap == "") {
260
13
        properties = join(partial, ",");
261
13
        final = '{' + properties + '}';
262
13
      }
263
5
      else {
264
5
        std::string separator = ",\n" + indent;
265
5
        properties = join(partial, separator);
266
5
        final = "{\n" + indent + properties + ",\n" + stepback + "}";
267
5
      }
268
18
    }
269
270
19
    indent = stepback;
271
19
    return final;
272
19
  }
273
274
21
  std::string serializeKey(const std::string& key) {
275
21
    if (key.size() == 0) {
276
1
      return quoteString(key, true);
277
1
    }
278
279
20
    const UTF8Peek firstChar = peekUTF8(key);
280
20
    if (firstChar.status != UTF8Peek::Status::ok) {
281
1
      throw std::runtime_error("JSON5: invalid UTF-8 sequence in key");
282
1
    }
283
19
    if (!util::isIdStartChar(firstChar.codepoint)) {
284
2
      return quoteString(key, true);
285
2
    }
286
287
17
    std::string_view rest = std::string_view(key).substr(firstChar.bytesRead);
288
30
    while (rest.size() > 0) {
289
18
      const UTF8Peek nextChar = peekUTF8(rest);
290
18
      if (nextChar.status != UTF8Peek::Status::ok) {
291
1
        throw std::runtime_error("JSON5: invalid UTF-8 sequence in key");
292
1
      }
293
17
      if (!util::isIdContinueChar(nextChar.codepoint)) {
294
4
        return quoteString(key, true);
295
4
      }
296
13
      rest = rest.substr(nextChar.bytesRead);
297
13
    }
298
299
12
    return key;
300
17
  }
301
302
17
  std::string serializeArray(const Array& value) {
303
304
17
    std::string stepback = indent;
305
17
    indent += gap;
306
307
17
    std::vector<std::string> partial = {};
308
40
    for (size_t i = 0; i < value.size(); 
i++23
) {
309
23
      const std::string propertyString = serializeProperty(i, value);
310
      //partial.push((propertyString !== undefined) ? propertyString : 'null');
311
23
      partial.push_back(propertyString);
312
23
    }
313
314
17
    std::string final;
315
17
    if (partial.size() == 0) {
316
1
      final = "[]";
317
1
    }
318
16
    else {
319
16
      std::string properties;
320
16
      if (gap == "") {
321
9
        properties = join(partial, ",");
322
9
        final = '[' + properties + ']';
323
9
      }
324
7
      else {
325
7
        std::string separator = ",\n" + indent;
326
7
        properties = join(partial, separator);
327
7
        final = "[\n" + indent + properties + ",\n" + stepback + "]";
328
7
      }
329
16
    }
330
331
17
    indent = stepback;
332
17
    return final;
333
17
  }
334
};
335
336
std::string stringify(
337
  const Value& value,
338
  const StringifyOptions options = {}
339
44
) {
340
44
  return Stringifier {}.stringify(value, options);
341
44
}
342
343
}
/home/runner/work/json5cpp/json5cpp/src/utf8.hpp
Line
Count
Source
1
2
#pragma once
3
4
#include <iostream>
5
#include <string>
6
#include <string_view>
7
#include <cstdint>
8
9
struct UTF8Peek {
10
  char32_t codepoint;
11
  uint16_t bytesRead;
12
13
  enum class Status { ok, endOfString, invalid };
14
  Status status;
15
};
16
17
1.11M
UTF8Peek peekUTF8(std::string_view source) {
18
19
1.11M
  if (source.empty()) {
20
111
    return {char32_t(-1), 0, UTF8Peek::Status::endOfString};
21
111
  }
22
23
1.11M
  uint8_t u_source0 = source[0];
24
25
1.11M
  if (u_source0 <= 0b0111'1111) {
26
1.50k
    return {u_source0, 1, UTF8Peek::Status::ok};
27
1.50k
  }
28
1.11M
  else if (
29
1.11M
    (u_source0 & 0b1110'0000) == 0b1100'0000
30
1.11M
    && 
source.size() >= 21.94k
31
1.11M
    && 
(source[1] & 0b1100'0000) == 0b1000'00001.94k
32
1.11M
  ) {
33
1.94k
    return {
34
1.94k
      ((char32_t(u_source0) & 0b0001'1111) << 6)
35
1.94k
        | (char32_t(source[1]) & 0b0011'1111),
36
1.94k
      2, UTF8Peek::Status::ok
37
1.94k
    };
38
1.94k
  }
39
1.11M
  else if (
40
1.11M
    (u_source0 & 0b1111'0000) == 0b1110'0000
41
1.11M
    && 
source.size() >= 361.4k
42
1.11M
    && 
(source[1] & 0b1100'0000) == 0b1000'000061.4k
43
1.11M
    && 
(source[2] & 0b1100'0000) == 0b1000'000061.4k
44
1.11M
  ) {
45
61.4k
    char32_t cp = ((char32_t(u_source0) & 0b0000'1111) << 12)
46
61.4k
      | ((char32_t(source[1]) & 0b0011'1111) << 6)
47
61.4k
      | (char32_t(source[2]) & 0b0011'1111);
48
49
    // reject surrogate pairs
50
61.4k
    if (cp < 0xd800 || 
cp > 0xdfff8.19k
) {
51
61.4k
      return {cp, 3, UTF8Peek::Status::ok};
52
61.4k
    }
53
61.4k
  }
54
1.04M
  else if (
55
1.04M
    (u_source0 & 0b1111'1000) == 0b1111'0000
56
1.04M
    && 
source.size() >= 41.04M
57
1.04M
    && 
(source[1] & 0b1100'0000) == 0b1000'00001.04M
58
1.04M
    && 
(source[2] & 0b1100'0000) == 0b1000'00001.04M
59
1.04M
    && 
(source[3] & 0b1100'0000) == 0b1000'00001.04M
60
1.04M
  ) {
61
1.04M
    char32_t cp = ((char32_t(u_source0) & 0b0000'0111) << 18)
62
1.04M
      | ((char32_t(source[1]) & 0b0011'1111) << 12)
63
1.04M
      | ((char32_t(source[2]) & 0b0011'1111) << 6)
64
1.04M
      | (char32_t(source[3]) & 0b0011'1111);
65
66
    // U+10FFFF is the last valid unicode character
67
1.04M
    if (cp <= 0x10ffff) {
68
1.04M
      return {cp, 4, UTF8Peek::Status::ok};
69
1.04M
    }
70
1.04M
  }
71
72
14
  return {char32_t(-1), 0, UTF8Peek::Status::invalid};
73
1.11M
}
74
75
1.11M
std::string toUTF8(char32_t codepoint) {
76
77
1.11M
  if (codepoint <= 0b1111111) {
78
341
    return {char(codepoint)};
79
341
  }
80
1.11M
  else if (codepoint <= 0b11111'111111) {
81
1.92k
    return {
82
1.92k
      char((codepoint >> 6) | 0b1100'0000),
83
1.92k
      char((codepoint & 0b0011'1111) | 0b1000'0000)
84
1.92k
    };
85
1.92k
  }
86
1.11M
  else if (codepoint <= 0b1111'111111'111111) {
87
63.4k
    if(codepoint >= 0xd800 && 
codepoint <= 0xdfff10.2k
){
88
2.04k
      return ""; // reject surrogate characters
89
2.04k
    }
90
61.4k
    return {
91
61.4k
      char((codepoint >> 12) | 0b1110'0000),
92
61.4k
      char(((codepoint >> 6) & 0b0011'1111) | 0b1000'0000),
93
61.4k
      char((codepoint & 0b0011'1111) | 0b1000'0000)
94
61.4k
    };
95
1.04M
  } else if (codepoint <= 0x10FFFF) {
96
1.04M
    return {
97
1.04M
      char((codepoint >> 18) | 0b1111'0000),
98
1.04M
      char(((codepoint >> 12) & 0b0011'1111) | 0b1000'0000),
99
1.04M
      char(((codepoint >> 6) & 0b0011'1111) | 0b1000'0000),
100
1.04M
      char((codepoint & 0b0011'1111) | 0b1000'0000)
101
1.04M
    };
102
1.04M
  }
103
1
  return "";
104
1.11M
}
/home/runner/work/json5cpp/json5cpp/src/util.hpp
Line
Count
Source
1
2
#pragma once
3
#include <cstdint>
4
#include <unordered_set>
5
6
namespace util {
7
8
1.11M
bool isSpaceSeparator(char32_t c) {
9
  // space and non-breaking space are handled explicitly in the code
10
1.11M
  return c == 0x1680
11
1.11M
    || 
(1.11M
c >= 0x20001.11M
&&
c <= 0x200a1.10M
)
12
1.11M
    || 
c == 0x202f1.11M
13
1.11M
    || 
c == 0x205f1.11M
14
1.11M
    || 
c == 0x30001.11M
;
15
1.11M
}
16
17
1.11M
bool isIdStartChar(char32_t c) {
18
1.11M
  return (c >= 'a' && 
c <= 'z'1.11M
)
19
1.11M
    || 
(1.11M
c >= 'A'1.11M
&&
c <= 'Z'1.11M
)
20
1.11M
    || 
c == '$'1.11M
21
1.11M
    || 
c == '_'1.11M
22
1.11M
    || 
c == 0xaa1.11M
||
c == 0xb51.11M
||
c == 0xba1.11M
||
(1.11M
c >= 0xc01.11M
&&
c <= 0xd61.11M
)
23
1.11M
    || 
(1.11M
c >= 0xd81.11M
&&
c <= 0xf61.11M
) ||
(1.11M
c >= 0xf81.11M
&&
c <= 0x2c11.11M
) ||
(1.11M
c >= 0x2c61.11M
&&
c <= 0x2d11.11M
) ||
(1.11M
c >= 0x2e01.11M
&&
c <= 0x2e41.11M
)
24
1.11M
    || 
c == 0x2ec1.11M
||
c == 0x2ee1.11M
||
(1.11M
c >= 0x3701.11M
&&
c <= 0x3741.11M
) ||
(1.11M
c >= 0x3761.11M
&&
c <= 0x3771.11M
)
25
1.11M
    || 
(1.11M
c >= 0x37a1.11M
&&
c <= 0x37d1.11M
) ||
c == 0x37f1.11M
||
c == 0x3861.11M
||
(1.11M
c >= 0x3881.11M
&&
c <= 0x38a1.11M
)
26
1.11M
    || 
c == 0x38c1.11M
||
(1.11M
c >= 0x38e1.11M
&&
c <= 0x3a11.11M
) ||
(1.11M
c >= 0x3a31.11M
&&
c <= 0x3f51.11M
) ||
(1.11M
c >= 0x3f71.11M
&&
c <= 0x4811.11M
)
27
1.11M
    || 
(1.11M
c >= 0x48a1.11M
&&
c <= 0x52f1.11M
) ||
(1.11M
c >= 0x5311.11M
&&
c <= 0x5561.11M
) ||
c == 0x5591.11M
||
(1.11M
c >= 0x5611.11M
&&
c <= 0x5871.11M
)
28
1.11M
    || 
(1.11M
c >= 0x5d01.11M
&&
c <= 0x5ea1.11M
) ||
(1.11M
c >= 0x5f01.11M
&&
c <= 0x5f21.11M
) ||
(1.11M
c >= 0x6201.11M
&&
c <= 0x64a1.11M
) ||
(1.11M
c >= 0x66e1.11M
&&
c <= 0x66f1.11M
)
29
1.11M
    || 
(1.11M
c >= 0x6711.11M
&&
c <= 0x6d31.11M
) ||
c == 0x6d51.11M
||
(1.11M
c >= 0x6e51.11M
&&
c <= 0x6e61.11M
) ||
(1.11M
c >= 0x6ee1.11M
&&
c <= 0x6ef1.11M
)
30
1.11M
    || 
(1.11M
c >= 0x6fa1.11M
&&
c <= 0x6fc1.11M
) ||
c == 0x6ff1.11M
||
c == 0x7101.11M
||
(1.11M
c >= 0x7121.11M
&&
c <= 0x72f1.11M
)
31
1.11M
    || 
(1.11M
c >= 0x74d1.11M
&&
c <= 0x7a51.11M
) ||
c == 0x7b11.11M
||
(1.11M
c >= 0x7ca1.11M
&&
c <= 0x7ea1.11M
) ||
(1.11M
c >= 0x7f41.11M
&&
c <= 0x7f51.11M
)
32
1.11M
    || 
c == 0x7fa1.11M
||
(1.11M
c >= 0x8001.11M
&&
c <= 0x8151.11M
) ||
c == 0x81a1.11M
||
c == 0x8241.11M
33
1.11M
    || 
c == 0x8281.11M
||
(1.11M
c >= 0x8401.11M
&&
c <= 0x8581.11M
) ||
(1.11M
c >= 0x8601.11M
&&
c <= 0x86a1.11M
) ||
(1.11M
c >= 0x8a01.11M
&&
c <= 0x8b41.11M
)
34
1.11M
    || 
(1.11M
c >= 0x8b61.11M
&&
c <= 0x8bd1.11M
) ||
(1.11M
c >= 0x9041.11M
&&
c <= 0x9391.11M
) ||
c == 0x93d1.11M
||
c == 0x9501.11M
35
1.11M
    || 
(1.11M
c >= 0x9581.11M
&&
c <= 0x9611.11M
) ||
(1.11M
c >= 0x9711.11M
&&
c <= 0x9801.11M
) ||
(1.11M
c >= 0x9851.11M
&&
c <= 0x98c1.11M
) ||
(1.11M
c >= 0x98f1.11M
&&
c <= 0x9901.11M
)
36
1.11M
    || 
(1.11M
c >= 0x9931.11M
&&
c <= 0x9a81.11M
) ||
(1.11M
c >= 0x9aa1.11M
&&
c <= 0x9b01.11M
) ||
c == 0x9b21.11M
||
(1.11M
c >= 0x9b61.11M
&&
c <= 0x9b91.11M
)
37
1.11M
    || 
c == 0x9bd1.11M
||
c == 0x9ce1.11M
||
(1.11M
c >= 0x9dc1.11M
&&
c <= 0x9dd1.11M
) ||
(1.11M
c >= 0x9df1.11M
&&
c <= 0x9e11.11M
)
38
1.11M
    || 
(1.11M
c >= 0x9f01.11M
&&
c <= 0x9f11.11M
) ||
c == 0x9fc1.11M
||
(1.11M
c >= 0xa051.11M
&&
c <= 0xa0a1.11M
) ||
(1.11M
c >= 0xa0f1.11M
&&
c <= 0xa101.11M
)
39
1.11M
    || 
(1.11M
c >= 0xa131.11M
&&
c <= 0xa281.11M
) ||
(1.11M
c >= 0xa2a1.11M
&&
c <= 0xa301.11M
) ||
(1.11M
c >= 0xa321.11M
&&
c <= 0xa331.11M
) ||
(1.11M
c >= 0xa351.11M
&&
c <= 0xa361.11M
)
40
1.11M
    || 
(1.11M
c >= 0xa381.11M
&&
c <= 0xa391.11M
) ||
(1.11M
c >= 0xa591.11M
&&
c <= 0xa5c1.11M
) ||
c == 0xa5e1.11M
||
(1.11M
c >= 0xa721.11M
&&
c <= 0xa741.11M
)
41
1.11M
    || 
(1.11M
c >= 0xa851.11M
&&
c <= 0xa8d1.11M
) ||
(1.11M
c >= 0xa8f1.11M
&&
c <= 0xa911.11M
) ||
(1.11M
c >= 0xa931.11M
&&
c <= 0xaa81.11M
) ||
(1.11M
c >= 0xaaa1.11M
&&
c <= 0xab01.11M
)
42
1.11M
    || 
(1.11M
c >= 0xab21.11M
&&
c <= 0xab31.11M
) ||
(1.11M
c >= 0xab51.11M
&&
c <= 0xab91.11M
) ||
c == 0xabd1.11M
||
c == 0xad01.11M
43
1.11M
    || 
(1.11M
c >= 0xae01.11M
&&
c <= 0xae11.11M
) ||
c == 0xaf91.11M
||
(1.11M
c >= 0xb051.11M
&&
c <= 0xb0c1.11M
) ||
(1.11M
c >= 0xb0f1.11M
&&
c <= 0xb101.11M
)
44
1.11M
    || 
(1.11M
c >= 0xb131.11M
&&
c <= 0xb281.11M
) ||
(1.11M
c >= 0xb2a1.11M
&&
c <= 0xb301.11M
) ||
(1.11M
c >= 0xb321.11M
&&
c <= 0xb331.11M
) ||
(1.11M
c >= 0xb351.11M
&&
c <= 0xb391.11M
)
45
1.11M
    || 
c == 0xb3d1.11M
||
(1.11M
c >= 0xb5c1.11M
&&
c <= 0xb5d1.11M
) ||
(1.11M
c >= 0xb5f1.11M
&&
c <= 0xb611.11M
) ||
c == 0xb711.11M
46
1.11M
    || 
c == 0xb831.11M
||
(1.11M
c >= 0xb851.11M
&&
c <= 0xb8a1.11M
) ||
(1.11M
c >= 0xb8e1.11M
&&
c <= 0xb901.11M
) ||
(1.11M
c >= 0xb921.11M
&&
c <= 0xb951.11M
)
47
1.11M
    || 
(1.11M
c >= 0xb991.11M
&&
c <= 0xb9a1.11M
) ||
c == 0xb9c1.11M
||
(1.11M
c >= 0xb9e1.11M
&&
c <= 0xb9f1.11M
) ||
(1.11M
c >= 0xba31.11M
&&
c <= 0xba41.11M
)
48
1.11M
    || 
(1.11M
c >= 0xba81.11M
&&
c <= 0xbaa1.11M
) ||
(1.11M
c >= 0xbae1.11M
&&
c <= 0xbb91.11M
) ||
c == 0xbd01.11M
||
(1.11M
c >= 0xc051.11M
&&
c <= 0xc0c1.11M
)
49
1.11M
    || 
(1.11M
c >= 0xc0e1.11M
&&
c <= 0xc101.11M
) ||
(1.11M
c >= 0xc121.11M
&&
c <= 0xc281.11M
) ||
(1.11M
c >= 0xc2a1.11M
&&
c <= 0xc391.11M
) ||
c == 0xc3d1.11M
50
1.11M
    || 
(1.11M
c >= 0xc581.11M
&&
c <= 0xc5a1.11M
) ||
(1.11M
c >= 0xc601.11M
&&
c <= 0xc611.11M
) ||
c == 0xc801.11M
||
(1.11M
c >= 0xc851.11M
&&
c <= 0xc8c1.11M
)
51
1.11M
    || 
(1.11M
c >= 0xc8e1.11M
&&
c <= 0xc901.11M
) ||
(1.11M
c >= 0xc921.11M
&&
c <= 0xca81.11M
) ||
(1.11M
c >= 0xcaa1.11M
&&
c <= 0xcb31.11M
) ||
(1.11M
c >= 0xcb51.11M
&&
c <= 0xcb91.11M
)
52
1.11M
    || 
c == 0xcbd1.11M
||
c == 0xcde1.11M
||
(1.11M
c >= 0xce01.11M
&&
c <= 0xce11.11M
) ||
(1.11M
c >= 0xcf11.11M
&&
c <= 0xcf21.11M
)
53
1.11M
    || 
(1.11M
c >= 0xd051.11M
&&
c <= 0xd0c1.11M
) ||
(1.11M
c >= 0xd0e1.11M
&&
c <= 0xd101.11M
) ||
(1.11M
c >= 0xd121.11M
&&
c <= 0xd3a1.11M
) ||
c == 0xd3d1.11M
54
1.11M
    || 
c == 0xd4e1.11M
||
(1.11M
c >= 0xd541.11M
&&
c <= 0xd561.11M
) ||
(1.11M
c >= 0xd5f1.11M
&&
c <= 0xd611.11M
) ||
(1.11M
c >= 0xd7a1.11M
&&
c <= 0xd7f1.11M
)
55
1.11M
    || 
(1.11M
c >= 0xd851.11M
&&
c <= 0xd961.11M
) ||
(1.11M
c >= 0xd9a1.11M
&&
c <= 0xdb11.11M
) ||
(1.11M
c >= 0xdb31.11M
&&
c <= 0xdbb1.11M
) ||
c == 0xdbd1.11M
56
1.11M
    || 
(1.11M
c >= 0xdc01.11M
&&
c <= 0xdc61.11M
) ||
(1.11M
c >= 0xe011.11M
&&
c <= 0xe301.11M
) ||
(1.11M
c >= 0xe321.11M
&&
c <= 0xe331.11M
) ||
(1.11M
c >= 0xe401.11M
&&
c <= 0xe461.11M
)
57
1.11M
    || 
(1.11M
c >= 0xe811.11M
&&
c <= 0xe821.11M
) ||
c == 0xe841.11M
||
(1.11M
c >= 0xe871.11M
&&
c <= 0xe881.11M
) ||
c == 0xe8a1.11M
58
1.11M
    || 
c == 0xe8d1.11M
||
(1.11M
c >= 0xe941.11M
&&
c <= 0xe971.11M
) ||
(1.11M
c >= 0xe991.11M
&&
c <= 0xe9f1.11M
) ||
(1.11M
c >= 0xea11.11M
&&
c <= 0xea31.11M
)
59
1.11M
    || 
c == 0xea51.11M
||
c == 0xea71.11M
||
(1.11M
c >= 0xeaa1.11M
&&
c <= 0xeab1.11M
) ||
(1.11M
c >= 0xead1.11M
&&
c <= 0xeb01.11M
)
60
1.11M
    || 
(1.11M
c >= 0xeb21.11M
&&
c <= 0xeb31.11M
) ||
c == 0xebd1.11M
||
(1.11M
c >= 0xec01.11M
&&
c <= 0xec41.11M
) ||
c == 0xec61.11M
61
1.11M
    || 
(1.11M
c >= 0xedc1.11M
&&
c <= 0xedf1.11M
) ||
c == 0xf001.11M
||
(1.11M
c >= 0xf401.11M
&&
c <= 0xf471.11M
) ||
(1.11M
c >= 0xf491.11M
&&
c <= 0xf6c1.11M
)
62
1.11M
    || 
(1.11M
c >= 0xf881.11M
&&
c <= 0xf8c1.11M
) ||
(1.11M
c >= 0x10001.11M
&&
c <= 0x102a1.11M
) ||
c == 0x103f1.11M
||
(1.11M
c >= 0x10501.11M
&&
c <= 0x10551.10M
)
63
1.11M
    || 
(1.11M
c >= 0x105a1.11M
&&
c <= 0x105d1.10M
) ||
c == 0x10611.11M
||
(1.11M
c >= 0x10651.11M
&&
c <= 0x10661.10M
) ||
(1.11M
c >= 0x106e1.11M
&&
c <= 0x10701.10M
)
64
1.11M
    || 
(1.11M
c >= 0x10751.11M
&&
c <= 0x10811.10M
) ||
c == 0x108e1.11M
||
(1.11M
c >= 0x10a01.11M
&&
c <= 0x10c51.10M
) ||
c == 0x10c71.11M
65
1.11M
    || 
c == 0x10cd1.11M
||
(1.11M
c >= 0x10d01.11M
&&
c <= 0x10fa1.10M
) ||
(1.11M
c >= 0x10fc1.11M
&&
c <= 0x12481.10M
) ||
(1.11M
c >= 0x124a1.11M
&&
c <= 0x124d1.10M
)
66
1.11M
    || 
(1.11M
c >= 0x12501.11M
&&
c <= 0x12561.10M
) ||
c == 0x12581.11M
||
(1.11M
c >= 0x125a1.11M
&&
c <= 0x125d1.10M
) ||
(1.11M
c >= 0x12601.11M
&&
c <= 0x12881.10M
)
67
1.11M
    || 
(1.11M
c >= 0x128a1.11M
&&
c <= 0x128d1.10M
) ||
(1.11M
c >= 0x12901.11M
&&
c <= 0x12b01.10M
) ||
(1.11M
c >= 0x12b21.11M
&&
c <= 0x12b51.10M
) ||
(1.11M
c >= 0x12b81.11M
&&
c <= 0x12be1.10M
)
68
1.11M
    || 
c == 0x12c01.11M
||
(1.11M
c >= 0x12c21.11M
&&
c <= 0x12c51.10M
) ||
(1.11M
c >= 0x12c81.11M
&&
c <= 0x12d61.10M
) ||
(1.11M
c >= 0x12d81.11M
&&
c <= 0x13101.10M
)
69
1.11M
    || 
(1.11M
c >= 0x13121.11M
&&
c <= 0x13151.10M
) ||
(1.11M
c >= 0x13181.11M
&&
c <= 0x135a1.10M
) ||
(1.11M
c >= 0x13801.11M
&&
c <= 0x138f1.10M
) ||
(1.11M
c >= 0x13a01.11M
&&
c <= 0x13f51.10M
)
70
1.11M
    || 
(1.11M
c >= 0x13f81.11M
&&
c <= 0x13fd1.10M
) ||
(1.11M
c >= 0x14011.11M
&&
c <= 0x166c1.10M
) ||
(1.11M
c >= 0x166f1.11M
&&
c <= 0x167f1.10M
) ||
(1.11M
c >= 0x16811.11M
&&
c <= 0x169a1.10M
)
71
1.11M
    || 
(1.11M
c >= 0x16a01.11M
&&
c <= 0x16ea1.10M
) ||
(1.11M
c >= 0x16ee1.11M
&&
c <= 0x16f81.10M
) ||
(1.11M
c >= 0x17001.11M
&&
c <= 0x170c1.10M
) ||
(1.11M
c >= 0x170e1.11M
&&
c <= 0x17111.10M
)
72
1.11M
    || 
(1.11M
c >= 0x17201.11M
&&
c <= 0x17311.10M
) ||
(1.11M
c >= 0x17401.11M
&&
c <= 0x17511.10M
) ||
(1.11M
c >= 0x17601.11M
&&
c <= 0x176c1.10M
) ||
(1.11M
c >= 0x176e1.11M
&&
c <= 0x17701.10M
)
73
1.11M
    || 
(1.11M
c >= 0x17801.11M
&&
c <= 0x17b31.10M
) ||
c == 0x17d71.11M
||
c == 0x17dc1.11M
||
(1.11M
c >= 0x18201.11M
&&
c <= 0x18771.10M
)
74
1.11M
    || 
(1.11M
c >= 0x18801.11M
&&
c <= 0x18841.10M
) ||
(1.11M
c >= 0x18871.11M
&&
c <= 0x18a81.10M
) ||
c == 0x18aa1.11M
||
(1.11M
c >= 0x18b01.11M
&&
c <= 0x18f51.10M
)
75
1.11M
    || 
(1.10M
c >= 0x19001.10M
&&
c <= 0x191e1.10M
) ||
(1.10M
c >= 0x19501.10M
&&
c <= 0x196d1.10M
) ||
(1.10M
c >= 0x19701.10M
&&
c <= 0x19741.10M
) ||
(1.10M
c >= 0x19801.10M
&&
c <= 0x19ab1.10M
)
76
1.11M
    || 
(1.10M
c >= 0x19b01.10M
&&
c <= 0x19c91.10M
) ||
(1.10M
c >= 0x1a001.10M
&&
c <= 0x1a161.10M
) ||
(1.10M
c >= 0x1a201.10M
&&
c <= 0x1a541.10M
) ||
c == 0x1aa71.10M
77
1.11M
    || 
(1.10M
c >= 0x1b051.10M
&&
c <= 0x1b331.10M
) ||
(1.10M
c >= 0x1b451.10M
&&
c <= 0x1b4b1.10M
) ||
(1.10M
c >= 0x1b831.10M
&&
c <= 0x1ba01.10M
) ||
(1.10M
c >= 0x1bae1.10M
&&
c <= 0x1baf1.10M
)
78
1.11M
    || 
(1.10M
c >= 0x1bba1.10M
&&
c <= 0x1be51.10M
) ||
(1.10M
c >= 0x1c001.10M
&&
c <= 0x1c231.10M
) ||
(1.10M
c >= 0x1c4d1.10M
&&
c <= 0x1c4f1.10M
) ||
(1.10M
c >= 0x1c5a1.10M
&&
c <= 0x1c7d1.10M
)
79
1.11M
    || 
(1.10M
c >= 0x1c801.10M
&&
c <= 0x1c881.10M
) ||
(1.10M
c >= 0x1ce91.10M
&&
c <= 0x1cec1.10M
) ||
(1.10M
c >= 0x1cee1.10M
&&
c <= 0x1cf11.10M
) ||
(1.10M
c >= 0x1cf51.10M
&&
c <= 0x1cf61.10M
)
80
1.11M
    || 
(1.10M
c >= 0x1d001.10M
&&
c <= 0x1dbf1.10M
) ||
(1.10M
c >= 0x1e001.10M
&&
c <= 0x1f151.10M
) ||
(1.10M
c >= 0x1f181.10M
&&
c <= 0x1f1d1.10M
) ||
(1.10M
c >= 0x1f201.10M
&&
c <= 0x1f451.10M
)
81
1.11M
    || 
(1.10M
c >= 0x1f481.10M
&&
c <= 0x1f4d1.10M
) ||
(1.10M
c >= 0x1f501.10M
&&
c <= 0x1f571.10M
) ||
c == 0x1f591.10M
||
c == 0x1f5b1.10M
82
1.11M
    || 
c == 0x1f5d1.10M
||
(1.10M
c >= 0x1f5f1.10M
&&
c <= 0x1f7d1.10M
) ||
(1.10M
c >= 0x1f801.10M
&&
c <= 0x1fb41.10M
) ||
(1.10M
c >= 0x1fb61.10M
&&
c <= 0x1fbc1.10M
)
83
1.11M
    || 
c == 0x1fbe1.10M
||
(1.10M
c >= 0x1fc21.10M
&&
c <= 0x1fc41.10M
) ||
(1.10M
c >= 0x1fc61.10M
&&
c <= 0x1fcc1.10M
) ||
(1.10M
c >= 0x1fd01.10M
&&
c <= 0x1fd31.10M
)
84
1.11M
    || 
(1.10M
c >= 0x1fd61.10M
&&
c <= 0x1fdb1.10M
) ||
(1.10M
c >= 0x1fe01.10M
&&
c <= 0x1fec1.10M
) ||
(1.10M
c >= 0x1ff21.10M
&&
c <= 0x1ff41.10M
) ||
(1.10M
c >= 0x1ff61.10M
&&
c <= 0x1ffc1.10M
)
85
1.11M
    || 
c == 0x20711.10M
||
c == 0x207f1.10M
||
(1.10M
c >= 0x20901.10M
&&
c <= 0x209c1.10M
) ||
c == 0x21021.10M
86
1.11M
    || 
c == 0x21071.10M
||
(1.10M
c >= 0x210a1.10M
&&
c <= 0x21131.10M
) ||
c == 0x21151.10M
||
(1.10M
c >= 0x21191.10M
&&
c <= 0x211d1.10M
)
87
1.11M
    || 
c == 0x21241.10M
||
c == 0x21261.10M
||
c == 0x21281.10M
||
(1.10M
c >= 0x212a1.10M
&&
c <= 0x212d1.10M
)
88
1.11M
    || 
(1.10M
c >= 0x212f1.10M
&&
c <= 0x21391.10M
) ||
(1.10M
c >= 0x213c1.10M
&&
c <= 0x213f1.10M
) ||
(1.10M
c >= 0x21451.10M
&&
c <= 0x21491.10M
) ||
c == 0x214e1.10M
89
1.11M
    || 
(1.10M
c >= 0x21601.10M
&&
c <= 0x21881.10M
) ||
(1.10M
c >= 0x2c001.10M
&&
c <= 0x2c2e1.10M
) ||
(1.10M
c >= 0x2c301.10M
&&
c <= 0x2c5e1.10M
) ||
(1.10M
c >= 0x2c601.10M
&&
c <= 0x2ce41.10M
)
90
1.11M
    || 
(1.10M
c >= 0x2ceb1.10M
&&
c <= 0x2cee1.10M
) ||
(1.10M
c >= 0x2cf21.10M
&&
c <= 0x2cf31.10M
) ||
(1.10M
c >= 0x2d001.10M
&&
c <= 0x2d251.10M
) ||
c == 0x2d271.10M
91
1.11M
    || 
c == 0x2d2d1.10M
||
(1.10M
c >= 0x2d301.10M
&&
c <= 0x2d671.10M
) ||
c == 0x2d6f1.10M
||
(1.10M
c >= 0x2d801.10M
&&
c <= 0x2d961.10M
)
92
1.11M
    || 
(1.10M
c >= 0x2da01.10M
&&
c <= 0x2da61.10M
) ||
(1.10M
c >= 0x2da81.10M
&&
c <= 0x2dae1.10M
) ||
(1.10M
c >= 0x2db01.10M
&&
c <= 0x2db61.10M
) ||
(1.10M
c >= 0x2db81.10M
&&
c <= 0x2dbe1.10M
)
93
1.11M
    || 
(1.10M
c >= 0x2dc01.10M
&&
c <= 0x2dc61.10M
) ||
(1.10M
c >= 0x2dc81.10M
&&
c <= 0x2dce1.10M
) ||
(1.10M
c >= 0x2dd01.10M
&&
c <= 0x2dd61.10M
) ||
(1.10M
c >= 0x2dd81.10M
&&
c <= 0x2dde1.10M
)
94
1.11M
    || 
c == 0x2e2f1.10M
||
(1.10M
c >= 0x30051.10M
&&
c <= 0x30071.10M
) ||
(1.10M
c >= 0x30211.10M
&&
c <= 0x30291.10M
) ||
(1.10M
c >= 0x30311.10M
&&
c <= 0x30351.10M
)
95
1.11M
    || 
(1.10M
c >= 0x30381.10M
&&
c <= 0x303c1.10M
) ||
(1.10M
c >= 0x30411.10M
&&
c <= 0x30961.10M
) ||
(1.10M
c >= 0x309d1.10M
&&
c <= 0x309f1.10M
) ||
(1.10M
c >= 0x30a11.10M
&&
c <= 0x30fa1.10M
)
96
1.11M
    || 
(1.10M
c >= 0x30fc1.10M
&&
c <= 0x30ff1.10M
) ||
(1.10M
c >= 0x31051.10M
&&
c <= 0x312e1.10M
) ||
(1.10M
c >= 0x31311.10M
&&
c <= 0x318e1.10M
) ||
(1.10M
c >= 0x31a01.10M
&&
c <= 0x31ba1.10M
)
97
1.11M
    || 
(1.10M
c >= 0x31f01.10M
&&
c <= 0x31ff1.10M
) ||
(1.10M
c >= 0x34001.10M
&&
c <= 0x4db51.10M
) ||
(1.10M
c >= 0x4e001.10M
&&
c <= 0x9fea1.09M
) ||
(1.08M
c >= 0xa0001.08M
&&
c <= 0xa48c1.07M
)
98
1.11M
    || 
(1.07M
c >= 0xa4d01.07M
&&
c <= 0xa4fd1.07M
) ||
(1.07M
c >= 0xa5001.07M
&&
c <= 0xa60c1.07M
) ||
(1.07M
c >= 0xa6101.07M
&&
c <= 0xa61f1.07M
) ||
(1.07M
c >= 0xa62a1.07M
&&
c <= 0xa62b1.07M
)
99
1.11M
    || 
(1.07M
c >= 0xa6401.07M
&&
c <= 0xa66e1.07M
) ||
(1.07M
c >= 0xa67f1.07M
&&
c <= 0xa69d1.07M
) ||
(1.07M
c >= 0xa6a01.07M
&&
c <= 0xa6ef1.07M
) ||
(1.07M
c >= 0xa7171.07M
&&
c <= 0xa71f1.07M
)
100
1.11M
    || 
(1.07M
c >= 0xa7221.07M
&&
c <= 0xa7881.07M
) ||
(1.07M
c >= 0xa78b1.07M
&&
c <= 0xa7ae1.07M
) ||
(1.07M
c >= 0xa7b01.07M
&&
c <= 0xa7b71.07M
) ||
(1.07M
c >= 0xa7f71.07M
&&
c <= 0xa8011.07M
)
101
1.11M
    || 
(1.07M
c >= 0xa8031.07M
&&
c <= 0xa8051.07M
) ||
(1.07M
c >= 0xa8071.07M
&&
c <= 0xa80a1.07M
) ||
(1.07M
c >= 0xa80c1.07M
&&
c <= 0xa8221.07M
) ||
(1.07M
c >= 0xa8401.07M
&&
c <= 0xa8731.07M
)
102
1.11M
    || 
(1.07M
c >= 0xa8821.07M
&&
c <= 0xa8b31.07M
) ||
(1.07M
c >= 0xa8f21.07M
&&
c <= 0xa8f71.07M
) ||
c == 0xa8fb1.07M
||
c == 0xa8fd1.07M
103
1.11M
    || 
(1.07M
c >= 0xa90a1.07M
&&
c <= 0xa9251.07M
) ||
(1.07M
c >= 0xa9301.07M
&&
c <= 0xa9461.07M
) ||
(1.07M
c >= 0xa9601.07M
&&
c <= 0xa97c1.07M
) ||
(1.07M
c >= 0xa9841.07M
&&
c <= 0xa9b21.07M
)
104
1.11M
    || 
c == 0xa9cf1.07M
||
(1.07M
c >= 0xa9e01.07M
&&
c <= 0xa9e41.07M
) ||
(1.07M
c >= 0xa9e61.07M
&&
c <= 0xa9ef1.07M
) ||
(1.07M
c >= 0xa9fa1.07M
&&
c <= 0xa9fe1.07M
)
105
1.11M
    || 
(1.07M
c >= 0xaa001.07M
&&
c <= 0xaa281.07M
) ||
(1.07M
c >= 0xaa401.07M
&&
c <= 0xaa421.07M
) ||
(1.07M
c >= 0xaa441.07M
&&
c <= 0xaa4b1.07M
) ||
(1.07M
c >= 0xaa601.07M
&&
c <= 0xaa761.07M
)
106
1.11M
    || 
c == 0xaa7a1.07M
||
(1.07M
c >= 0xaa7e1.07M
&&
c <= 0xaaaf1.07M
) ||
c == 0xaab11.07M
||
(1.07M
c >= 0xaab51.07M
&&
c <= 0xaab61.07M
)
107
1.11M
    || 
(1.07M
c >= 0xaab91.07M
&&
c <= 0xaabd1.07M
) ||
c == 0xaac01.07M
||
c == 0xaac21.07M
||
(1.07M
c >= 0xaadb1.07M
&&
c <= 0xaadd1.07M
)
108
1.11M
    || 
(1.07M
c >= 0xaae01.07M
&&
c <= 0xaaea1.07M
) ||
(1.07M
c >= 0xaaf21.07M
&&
c <= 0xaaf41.07M
) ||
(1.07M
c >= 0xab011.07M
&&
c <= 0xab061.07M
) ||
(1.07M
c >= 0xab091.07M
&&
c <= 0xab0e1.07M
)
109
1.11M
    || 
(1.07M
c >= 0xab111.07M
&&
c <= 0xab161.07M
) ||
(1.07M
c >= 0xab201.07M
&&
c <= 0xab261.07M
) ||
(1.07M
c >= 0xab281.07M
&&
c <= 0xab2e1.07M
) ||
(1.07M
c >= 0xab301.07M
&&
c <= 0xab5a1.07M
)
110
1.11M
    || 
(1.07M
c >= 0xab5c1.07M
&&
c <= 0xab651.07M
) ||
(1.07M
c >= 0xab701.07M
&&
c <= 0xabe21.07M
) ||
(1.07M
c >= 0xac001.07M
&&
c <= 0xd7a31.07M
) ||
(1.06M
c >= 0xd7b01.06M
&&
c <= 0xd7c61.05M
)
111
1.11M
    || 
(1.06M
c >= 0xd7cb1.06M
&&
c <= 0xd7fb1.05M
) ||
(1.06M
c >= 0xf9001.06M
&&
c <= 0xfa6d1.05M
) ||
(1.06M
c >= 0xfa701.06M
&&
c <= 0xfad91.05M
) ||
(1.06M
c >= 0xfb001.06M
&&
c <= 0xfb061.04M
)
112
1.11M
    || 
(1.06M
c >= 0xfb131.06M
&&
c <= 0xfb171.04M
) ||
c == 0xfb1d1.06M
||
(1.06M
c >= 0xfb1f1.06M
&&
c <= 0xfb281.04M
) ||
(1.06M
c >= 0xfb2a1.06M
&&
c <= 0xfb361.04M
)
113
1.11M
    || 
(1.06M
c >= 0xfb381.06M
&&
c <= 0xfb3c1.04M
) ||
c == 0xfb3e1.06M
||
(1.06M
c >= 0xfb401.06M
&&
c <= 0xfb411.04M
) ||
(1.06M
c >= 0xfb431.06M
&&
c <= 0xfb441.04M
)
114
1.11M
    || 
(1.06M
c >= 0xfb461.06M
&&
c <= 0xfbb11.04M
) ||
(1.06M
c >= 0xfbd31.06M
&&
c <= 0xfd3d1.04M
) ||
(1.06M
c >= 0xfd501.06M
&&
c <= 0xfd8f1.04M
) ||
(1.06M
c >= 0xfd921.06M
&&
c <= 0xfdc71.04M
)
115
1.11M
    || 
(1.06M
c >= 0xfdf01.06M
&&
c <= 0xfdfb1.04M
) ||
(1.06M
c >= 0xfe701.06M
&&
c <= 0xfe741.04M
) ||
(1.06M
c >= 0xfe761.06M
&&
c <= 0xfefc1.04M
) ||
(1.06M
c >= 0xff211.06M
&&
c <= 0xff3a1.04M
)
116
1.11M
    || 
(1.06M
c >= 0xff411.06M
&&
c <= 0xff5a1.04M
) ||
(1.06M
c >= 0xff661.06M
&&
c <= 0xffbe1.04M
) ||
(1.06M
c >= 0xffc21.06M
&&
c <= 0xffc71.04M
) ||
(1.06M
c >= 0xffca1.06M
&&
c <= 0xffcf1.04M
)
117
1.11M
    || 
(1.06M
c >= 0xffd21.06M
&&
c <= 0xffd71.04M
) ||
(1.06M
c >= 0xffda1.06M
&&
c <= 0xffdc1.04M
) ||
(1.06M
c >= 0x100001.06M
&&
c <= 0x1000b1.04M
) ||
(1.06M
c >= 0x1000d1.06M
&&
c <= 0x100261.04M
)
118
1.11M
    || 
(1.06M
c >= 0x100281.06M
&&
c <= 0x1003a1.04M
) ||
(1.06M
c >= 0x1003c1.06M
&&
c <= 0x1003d1.04M
) ||
(1.06M
c >= 0x1003f1.06M
&&
c <= 0x1004d1.04M
) ||
(1.06M
c >= 0x100501.06M
&&
c <= 0x1005d1.04M
)
119
1.11M
    || 
(1.06M
c >= 0x100801.06M
&&
c <= 0x100fa1.04M
) ||
(1.06M
c >= 0x101401.06M
&&
c <= 0x101741.04M
) ||
(1.06M
c >= 0x102801.06M
&&
c <= 0x1029c1.04M
) ||
(1.06M
c >= 0x102a01.06M
&&
c <= 0x102d01.04M
)
120
1.11M
    || 
(1.06M
c >= 0x103001.06M
&&
c <= 0x1031f1.04M
) ||
(1.06M
c >= 0x1032d1.06M
&&
c <= 0x1034a1.04M
) ||
(1.06M
c >= 0x103501.06M
&&
c <= 0x103751.04M
) ||
(1.06M
c >= 0x103801.06M
&&
c <= 0x1039d1.04M
)
121
1.11M
    || 
(1.06M
c >= 0x103a01.06M
&&
c <= 0x103c31.04M
) ||
(1.06M
c >= 0x103c81.06M
&&
c <= 0x103cf1.04M
) ||
(1.06M
c >= 0x103d11.06M
&&
c <= 0x103d51.04M
) ||
(1.06M
c >= 0x104001.06M
&&
c <= 0x1049d1.04M
)
122
1.11M
    || 
(1.06M
c >= 0x104b01.06M
&&
c <= 0x104d31.04M
) ||
(1.06M
c >= 0x104d81.06M
&&
c <= 0x104fb1.04M
) ||
(1.06M
c >= 0x105001.06M
&&
c <= 0x105271.04M
) ||
(1.06M
c >= 0x105301.06M
&&
c <= 0x105631.04M
)
123
1.11M
    || 
(1.06M
c >= 0x106001.06M
&&
c <= 0x107361.04M
) ||
(1.06M
c >= 0x107401.06M
&&
c <= 0x107551.04M
) ||
(1.06M
c >= 0x107601.06M
&&
c <= 0x107671.04M
) ||
(1.06M
c >= 0x108001.06M
&&
c <= 0x108051.04M
)
124
1.11M
    || 
c == 0x108081.06M
||
(1.06M
c >= 0x1080a1.06M
&&
c <= 0x108351.04M
) ||
(1.06M
c >= 0x108371.06M
&&
c <= 0x108381.04M
) ||
c == 0x1083c1.06M
125
1.11M
    || 
(1.06M
c >= 0x1083f1.06M
&&
c <= 0x108551.04M
) ||
(1.06M
c >= 0x108601.06M
&&
c <= 0x108761.04M
) ||
(1.06M
c >= 0x108801.06M
&&
c <= 0x1089e1.04M
) ||
(1.06M
c >= 0x108e01.06M
&&
c <= 0x108f21.04M
)
126
1.11M
    || 
(1.06M
c >= 0x108f41.06M
&&
c <= 0x108f51.04M
) ||
(1.06M
c >= 0x109001.06M
&&
c <= 0x109151.04M
) ||
(1.06M
c >= 0x109201.06M
&&
c <= 0x109391.04M
) ||
(1.06M
c >= 0x109801.06M
&&
c <= 0x109b71.04M
)
127
1.11M
    || 
(1.06M
c >= 0x109be1.06M
&&
c <= 0x109bf1.04M
) ||
c == 0x10a001.06M
||
(1.06M
c >= 0x10a101.06M
&&
c <= 0x10a131.04M
) ||
(1.06M
c >= 0x10a151.06M
&&
c <= 0x10a171.04M
)
128
1.11M
    || 
(1.06M
c >= 0x10a191.06M
&&
c <= 0x10a331.04M
) ||
(1.06M
c >= 0x10a601.06M
&&
c <= 0x10a7c1.04M
) ||
(1.06M
c >= 0x10a801.06M
&&
c <= 0x10a9c1.04M
) ||
(1.06M
c >= 0x10ac01.06M
&&
c <= 0x10ac71.04M
)
129
1.11M
    || 
(1.06M
c >= 0x10ac91.06M
&&
c <= 0x10ae41.04M
) ||
(1.06M
c >= 0x10b001.06M
&&
c <= 0x10b351.04M
) ||
(1.06M
c >= 0x10b401.06M
&&
c <= 0x10b551.04M
) ||
(1.06M
c >= 0x10b601.06M
&&
c <= 0x10b721.04M
)
130
1.11M
    || 
(1.06M
c >= 0x10b801.06M
&&
c <= 0x10b911.04M
) ||
(1.06M
c >= 0x10c001.06M
&&
c <= 0x10c481.04M
) ||
(1.06M
c >= 0x10c801.06M
&&
c <= 0x10cb21.04M
) ||
(1.06M
c >= 0x10cc01.06M
&&
c <= 0x10cf21.04M
)
131
1.11M
    || 
(1.06M
c >= 0x110031.06M
&&
c <= 0x110371.04M
) ||
(1.06M
c >= 0x110831.06M
&&
c <= 0x110af1.04M
) ||
(1.06M
c >= 0x110d01.06M
&&
c <= 0x110e81.04M
) ||
(1.06M
c >= 0x111031.06M
&&
c <= 0x111261.04M
)
132
1.11M
    || 
(1.06M
c >= 0x111501.06M
&&
c <= 0x111721.04M
) ||
c == 0x111761.06M
||
(1.06M
c >= 0x111831.06M
&&
c <= 0x111b21.04M
) ||
(1.06M
c >= 0x111c11.06M
&&
c <= 0x111c41.04M
)
133
1.11M
    || 
c == 0x111da1.06M
||
c == 0x111dc1.06M
||
(1.06M
c >= 0x112001.06M
&&
c <= 0x112111.04M
) ||
(1.06M
c >= 0x112131.06M
&&
c <= 0x1122b1.04M
)
134
1.11M
    || 
(1.06M
c >= 0x112801.06M
&&
c <= 0x112861.04M
) ||
c == 0x112881.06M
||
(1.06M
c >= 0x1128a1.06M
&&
c <= 0x1128d1.04M
) ||
(1.06M
c >= 0x1128f1.06M
&&
c <= 0x1129d1.04M
)
135
1.11M
    || 
(1.06M
c >= 0x1129f1.06M
&&
c <= 0x112a81.04M
) ||
(1.06M
c >= 0x112b01.06M
&&
c <= 0x112de1.04M
) ||
(1.06M
c >= 0x113051.06M
&&
c <= 0x1130c1.04M
) ||
(1.06M
c >= 0x1130f1.06M
&&
c <= 0x113101.04M
)
136
1.11M
    || 
(1.06M
c >= 0x113131.06M
&&
c <= 0x113281.04M
) ||
(1.06M
c >= 0x1132a1.06M
&&
c <= 0x113301.04M
) ||
(1.06M
c >= 0x113321.06M
&&
c <= 0x113331.04M
) ||
(1.06M
c >= 0x113351.06M
&&
c <= 0x113391.04M
)
137
1.11M
    || 
c == 0x1133d1.06M
||
c == 0x113501.06M
||
(1.06M
c >= 0x1135d1.06M
&&
c <= 0x113611.04M
) ||
(1.06M
c >= 0x114001.06M
&&
c <= 0x114341.04M
)
138
1.11M
    || 
(1.06M
c >= 0x114471.06M
&&
c <= 0x1144a1.04M
) ||
(1.06M
c >= 0x114801.06M
&&
c <= 0x114af1.04M
) ||
(1.06M
c >= 0x114c41.06M
&&
c <= 0x114c51.04M
) ||
c == 0x114c71.06M
139
1.11M
    || 
(1.06M
c >= 0x115801.06M
&&
c <= 0x115ae1.04M
) ||
(1.06M
c >= 0x115d81.06M
&&
c <= 0x115db1.04M
) ||
(1.06M
c >= 0x116001.06M
&&
c <= 0x1162f1.04M
) ||
c == 0x116441.06M
140
1.11M
    || 
(1.06M
c >= 0x116801.06M
&&
c <= 0x116aa1.04M
) ||
(1.06M
c >= 0x117001.06M
&&
c <= 0x117191.04M
) ||
(1.06M
c >= 0x118a01.06M
&&
c <= 0x118df1.04M
) ||
c == 0x118ff1.06M
141
1.11M
    || 
c == 0x11a001.06M
||
(1.06M
c >= 0x11a0b1.06M
&&
c <= 0x11a321.04M
) ||
c == 0x11a3a1.06M
||
c == 0x11a501.06M
142
1.11M
    || 
(1.06M
c >= 0x11a5c1.06M
&&
c <= 0x11a831.04M
) ||
(1.06M
c >= 0x11a861.06M
&&
c <= 0x11a891.04M
) ||
(1.06M
c >= 0x11ac01.06M
&&
c <= 0x11af81.04M
) ||
(1.06M
c >= 0x11c001.06M
&&
c <= 0x11c081.04M
)
143
1.11M
    || 
(1.06M
c >= 0x11c0a1.06M
&&
c <= 0x11c2e1.04M
) ||
c == 0x11c401.06M
||
(1.06M
c >= 0x11c721.06M
&&
c <= 0x11c8f1.04M
) ||
(1.06M
c >= 0x11d001.06M
&&
c <= 0x11d061.04M
)
144
1.11M
    || 
(1.06M
c >= 0x11d081.06M
&&
c <= 0x11d091.04M
) ||
(1.06M
c >= 0x11d0b1.06M
&&
c <= 0x11d301.04M
) ||
c == 0x11d461.06M
||
(1.06M
c >= 0x120001.06M
&&
c <= 0x123991.04M
)
145
1.11M
    || 
(1.06M
c >= 0x124001.06M
&&
c <= 0x1246e1.03M
) ||
(1.06M
c >= 0x124801.06M
&&
c <= 0x125431.03M
) ||
(1.06M
c >= 0x130001.06M
&&
c <= 0x1342e1.03M
) ||
(1.06M
c >= 0x144001.06M
&&
c <= 0x146461.03M
)
146
1.11M
    || 
(1.05M
c >= 0x168001.05M
&&
c <= 0x16a381.02M
) ||
(1.05M
c >= 0x16a401.05M
&&
c <= 0x16a5e1.02M
) ||
(1.05M
c >= 0x16ad01.05M
&&
c <= 0x16aed1.02M
) ||
(1.05M
c >= 0x16b001.05M
&&
c <= 0x16b2f1.02M
)
147
1.11M
    || 
(1.05M
c >= 0x16b401.05M
&&
c <= 0x16b431.02M
) ||
(1.05M
c >= 0x16b631.05M
&&
c <= 0x16b771.02M
) ||
(1.05M
c >= 0x16b7d1.05M
&&
c <= 0x16b8f1.02M
) ||
(1.05M
c >= 0x16f001.05M
&&
c <= 0x16f441.02M
)
148
1.11M
    || 
c == 0x16f501.05M
||
(1.05M
c >= 0x16f931.05M
&&
c <= 0x16f9f1.02M
) ||
(1.05M
c >= 0x16fe01.05M
&&
c <= 0x16fe11.01M
) ||
(1.05M
c >= 0x170001.05M
&&
c <= 0x187ec1.01M
)
149
1.11M
    || 
(1.05M
c >= 0x188001.05M
&&
c <= 0x18af21.01M
) ||
(1.05M
c >= 0x1b0001.05M
&&
c <= 0x1b11e1.00M
) ||
(1.05M
c >= 0x1b1701.05M
&&
c <= 0x1b2fb1.00M
) ||
(1.05M
c >= 0x1bc001.05M
&&
c <= 0x1bc6a1.00M
)
150
1.11M
    || 
(1.05M
c >= 0x1bc701.05M
&&
c <= 0x1bc7c1.00M
) ||
(1.05M
c >= 0x1bc801.05M
&&
c <= 0x1bc881.00M
) ||
(1.05M
c >= 0x1bc901.05M
&&
c <= 0x1bc991.00M
) ||
(1.05M
c >= 0x1d4001.05M
&&
c <= 0x1d454994k
)
151
1.11M
    || 
(1.05M
c >= 0x1d4561.05M
&&
c <= 0x1d49c994k
) ||
(1.05M
c >= 0x1d49e1.05M
&&
c <= 0x1d49f994k
) ||
c == 0x1d4a21.05M
||
(1.05M
c >= 0x1d4a51.05M
&&
c <= 0x1d4a6994k
)
152
1.11M
    || 
(1.05M
c >= 0x1d4a91.05M
&&
c <= 0x1d4ac994k
) ||
(1.05M
c >= 0x1d4ae1.05M
&&
c <= 0x1d4b9994k
) ||
c == 0x1d4bb1.05M
||
(1.05M
c >= 0x1d4bd1.05M
&&
c <= 0x1d4c3994k
)
153
1.11M
    || 
(1.05M
c >= 0x1d4c51.05M
&&
c <= 0x1d505994k
) ||
(1.05M
c >= 0x1d5071.05M
&&
c <= 0x1d50a994k
) ||
(1.05M
c >= 0x1d50d1.05M
&&
c <= 0x1d514994k
) ||
(1.05M
c >= 0x1d5161.05M
&&
c <= 0x1d51c994k
)
154
1.11M
    || 
(1.05M
c >= 0x1d51e1.05M
&&
c <= 0x1d539994k
) ||
(1.05M
c >= 0x1d53b1.05M
&&
c <= 0x1d53e993k
) ||
(1.05M
c >= 0x1d5401.05M
&&
c <= 0x1d544993k
) ||
c == 0x1d5461.05M
155
1.11M
    || 
(1.05M
c >= 0x1d54a1.05M
&&
c <= 0x1d550993k
) ||
(1.05M
c >= 0x1d5521.05M
&&
c <= 0x1d6a5993k
) ||
(1.05M
c >= 0x1d6a81.05M
&&
c <= 0x1d6c0993k
) ||
(1.05M
c >= 0x1d6c21.05M
&&
c <= 0x1d6da993k
)
156
1.11M
    || 
(1.05M
c >= 0x1d6dc1.05M
&&
c <= 0x1d6fa993k
) ||
(1.05M
c >= 0x1d6fc1.05M
&&
c <= 0x1d714993k
) ||
(1.05M
c >= 0x1d7161.05M
&&
c <= 0x1d734993k
) ||
(1.05M
c >= 0x1d7361.05M
&&
c <= 0x1d74e993k
)
157
1.11M
    || 
(1.05M
c >= 0x1d7501.05M
&&
c <= 0x1d76e993k
) ||
(1.05M
c >= 0x1d7701.05M
&&
c <= 0x1d788993k
) ||
(1.05M
c >= 0x1d78a1.05M
&&
c <= 0x1d7a8993k
) ||
(1.05M
c >= 0x1d7aa1.05M
&&
c <= 0x1d7c2993k
)
158
1.11M
    || 
(1.05M
c >= 0x1d7c41.05M
&&
c <= 0x1d7cb993k
) ||
(1.05M
c >= 0x1e8001.05M
&&
c <= 0x1e8c4989k
) ||
(1.04M
c >= 0x1e9001.04M
&&
c <= 0x1e943988k
) ||
(1.04M
c >= 0x1ee001.04M
&&
c <= 0x1ee03987k
)
159
1.11M
    || 
(1.04M
c >= 0x1ee051.04M
&&
c <= 0x1ee1f987k
) ||
(1.04M
c >= 0x1ee211.04M
&&
c <= 0x1ee22987k
) ||
c == 0x1ee241.04M
||
c == 0x1ee271.04M
160
1.11M
    || 
(1.04M
c >= 0x1ee291.04M
&&
c <= 0x1ee32987k
) ||
(1.04M
c >= 0x1ee341.04M
&&
c <= 0x1ee37987k
) ||
c == 0x1ee391.04M
||
c == 0x1ee3b1.04M
161
1.11M
    || 
c == 0x1ee421.04M
||
c == 0x1ee471.04M
||
c == 0x1ee491.04M
||
c == 0x1ee4b1.04M
162
1.11M
    || 
(1.04M
c >= 0x1ee4d1.04M
&&
c <= 0x1ee4f987k
) ||
(1.04M
c >= 0x1ee511.04M
&&
c <= 0x1ee52987k
) ||
c == 0x1ee541.04M
||
c == 0x1ee571.04M
163
1.11M
    || 
c == 0x1ee591.04M
||
c == 0x1ee5b1.04M
||
c == 0x1ee5d1.04M
||
c == 0x1ee5f1.04M
164
1.11M
    || 
(1.04M
c >= 0x1ee611.04M
&&
c <= 0x1ee62987k
) ||
c == 0x1ee641.04M
||
(1.04M
c >= 0x1ee671.04M
&&
c <= 0x1ee6a987k
) ||
(1.04M
c >= 0x1ee6c1.04M
&&
c <= 0x1ee72987k
)
165
1.11M
    || 
(1.04M
c >= 0x1ee741.04M
&&
c <= 0x1ee77987k
) ||
(1.04M
c >= 0x1ee791.04M
&&
c <= 0x1ee7c987k
) ||
c == 0x1ee7e1.04M
||
(1.04M
c >= 0x1ee801.04M
&&
c <= 0x1ee89987k
)
166
1.11M
    || 
(1.04M
c >= 0x1ee8b1.04M
&&
c <= 0x1ee9b987k
) ||
(1.04M
c >= 0x1eea11.04M
&&
c <= 0x1eea3987k
) ||
(1.04M
c >= 0x1eea51.04M
&&
c <= 0x1eea9987k
) ||
(1.04M
c >= 0x1eeab1.04M
&&
c <= 0x1eebb987k
)
167
1.11M
    || 
(1.04M
c >= 0x200001.04M
&&
c <= 0x2a6d6983k
) ||
(1.00M
c >= 0x2a7001.00M
&&
c <= 0x2b734940k
) ||
(1.00M
c >= 0x2b7401.00M
&&
c <= 0x2b81d936k
) ||
(1.00M
c >= 0x2b8201.00M
&&
c <= 0x2cea1935k
)
168
1.11M
    || 
(996k
c >= 0x2ceb0996k
&&
c <= 0x2ebe0930k
) ||
(989k
c >= 0x2f800989k
&&
c <= 0x2fa1d919k
);
169
1.11M
}
170
171
172
1.11M
bool isIdContinueChar(char32_t c) {
173
1.11M
  return
174
1.11M
    (c >= 'a' && 
c <= 'z'1.11M
)
175
1.11M
    || 
(1.11M
c >= 'A'1.11M
&&
c <= 'Z'1.11M
)
176
1.11M
    || 
(1.11M
c >= '0'1.11M
&&
c <= '9'1.11M
)
177
1.11M
    || 
c == '$'1.11M
178
1.11M
    || 
c == '_'1.11M
179
1.11M
    || 
c == 0x200c1.11M
180
1.11M
    || 
c == 0x200d1.11M
181
1.11M
    || 
c == 0xaa1.11M
||
c == 0xb51.11M
||
c == 0xba1.11M
||
(1.11M
c >= 0xc01.11M
&&
c <= 0xd61.11M
)
182
1.11M
    || 
(1.11M
c >= 0xd81.11M
&&
c <= 0xf61.11M
) ||
(1.11M
c >= 0xf81.11M
&&
c <= 0x2c11.11M
) ||
(1.11M
c >= 0x2c61.11M
&&
c <= 0x2d11.11M
) ||
(1.11M
c >= 0x2e01.11M
&&
c <= 0x2e41.11M
)
183
1.11M
    || 
c == 0x2ec1.11M
||
c == 0x2ee1.11M
||
(1.11M
c >= 0x3001.11M
&&
c <= 0x3741.11M
) ||
(1.11M
c >= 0x3761.11M
&&
c <= 0x3771.11M
)
184
1.11M
    || 
(1.11M
c >= 0x37a1.11M
&&
c <= 0x37d1.11M
) ||
c == 0x37f1.11M
||
c == 0x3861.11M
||
(1.11M
c >= 0x3881.11M
&&
c <= 0x38a1.11M
)
185
1.11M
    || 
c == 0x38c1.11M
||
(1.11M
c >= 0x38e1.11M
&&
c <= 0x3a11.11M
) ||
(1.11M
c >= 0x3a31.11M
&&
c <= 0x3f51.11M
) ||
(1.11M
c >= 0x3f71.11M
&&
c <= 0x4811.11M
)
186
1.11M
    || 
(1.11M
c >= 0x4831.11M
&&
c <= 0x4871.11M
) ||
(1.11M
c >= 0x48a1.11M
&&
c <= 0x52f1.11M
) ||
(1.11M
c >= 0x5311.11M
&&
c <= 0x5561.11M
) ||
c == 0x5591.11M
187
1.11M
    || 
(1.11M
c >= 0x5611.11M
&&
c <= 0x5871.11M
) ||
(1.11M
c >= 0x5911.11M
&&
c <= 0x5bd1.11M
) ||
c == 0x5bf1.11M
||
(1.11M
c >= 0x5c11.11M
&&
c <= 0x5c21.11M
)
188
1.11M
    || 
(1.11M
c >= 0x5c41.11M
&&
c <= 0x5c51.11M
) ||
c == 0x5c71.11M
||
(1.11M
c >= 0x5d01.11M
&&
c <= 0x5ea1.11M
) ||
(1.11M
c >= 0x5f01.11M
&&
c <= 0x5f21.11M
)
189
1.11M
    || 
(1.11M
c >= 0x6101.11M
&&
c <= 0x61a1.11M
) ||
(1.11M
c >= 0x6201.11M
&&
c <= 0x6691.11M
) ||
(1.11M
c >= 0x66e1.11M
&&
c <= 0x6d31.11M
) ||
(1.11M
c >= 0x6d51.11M
&&
c <= 0x6dc1.11M
)
190
1.11M
    || 
(1.11M
c >= 0x6df1.11M
&&
c <= 0x6e81.11M
) ||
(1.11M
c >= 0x6ea1.11M
&&
c <= 0x6fc1.11M
) ||
c == 0x6ff1.11M
||
(1.11M
c >= 0x7101.11M
&&
c <= 0x74a1.11M
)
191
1.11M
    || 
(1.11M
c >= 0x74d1.11M
&&
c <= 0x7b11.11M
) ||
(1.11M
c >= 0x7c01.11M
&&
c <= 0x7f51.11M
) ||
c == 0x7fa1.11M
||
(1.11M
c >= 0x8001.11M
&&
c <= 0x82d1.11M
)
192
1.11M
    || 
(1.11M
c >= 0x8401.11M
&&
c <= 0x85b1.11M
) ||
(1.11M
c >= 0x8601.11M
&&
c <= 0x86a1.11M
) ||
(1.11M
c >= 0x8a01.11M
&&
c <= 0x8b41.11M
) ||
(1.11M
c >= 0x8b61.11M
&&
c <= 0x8bd1.11M
)
193
1.11M
    || 
(1.11M
c >= 0x8d41.11M
&&
c <= 0x8e11.11M
) ||
(1.11M
c >= 0x8e31.11M
&&
c <= 0x9631.11M
) ||
(1.11M
c >= 0x9661.11M
&&
c <= 0x96f1.11M
) ||
(1.11M
c >= 0x9711.11M
&&
c <= 0x9831.11M
)
194
1.11M
    || 
(1.11M
c >= 0x9851.11M
&&
c <= 0x98c1.11M
) ||
(1.11M
c >= 0x98f1.11M
&&
c <= 0x9901.11M
) ||
(1.11M
c >= 0x9931.11M
&&
c <= 0x9a81.11M
) ||
(1.11M
c >= 0x9aa1.11M
&&
c <= 0x9b01.11M
)
195
1.11M
    || 
c == 0x9b21.11M
||
(1.11M
c >= 0x9b61.11M
&&
c <= 0x9b91.11M
) ||
(1.11M
c >= 0x9bc1.11M
&&
c <= 0x9c41.11M
) ||
(1.11M
c >= 0x9c71.11M
&&
c <= 0x9c81.11M
)
196
1.11M
    || 
(1.11M
c >= 0x9cb1.11M
&&
c <= 0x9ce1.11M
) ||
c == 0x9d71.11M
||
(1.11M
c >= 0x9dc1.11M
&&
c <= 0x9dd1.11M
) ||
(1.11M
c >= 0x9df1.11M
&&
c <= 0x9e31.11M
)
197
1.11M
    || 
(1.11M
c >= 0x9e61.11M
&&
c <= 0x9f11.11M
) ||
c == 0x9fc1.11M
||
(1.11M
c >= 0xa011.11M
&&
c <= 0xa031.11M
) ||
(1.11M
c >= 0xa051.11M
&&
c <= 0xa0a1.11M
)
198
1.11M
    || 
(1.11M
c >= 0xa0f1.11M
&&
c <= 0xa101.11M
) ||
(1.11M
c >= 0xa131.11M
&&
c <= 0xa281.11M
) ||
(1.11M
c >= 0xa2a1.11M
&&
c <= 0xa301.11M
) ||
(1.11M
c >= 0xa321.11M
&&
c <= 0xa331.11M
)
199
1.11M
    || 
(1.11M
c >= 0xa351.11M
&&
c <= 0xa361.11M
) ||
(1.11M
c >= 0xa381.11M
&&
c <= 0xa391.11M
) ||
c == 0xa3c1.11M
||
(1.11M
c >= 0xa3e1.11M
&&
c <= 0xa421.11M
)
200
1.11M
    || 
(1.11M
c >= 0xa471.11M
&&
c <= 0xa481.11M
) ||
(1.11M
c >= 0xa4b1.11M
&&
c <= 0xa4d1.11M
) ||
c == 0xa511.11M
||
(1.11M
c >= 0xa591.11M
&&
c <= 0xa5c1.11M
)
201
1.11M
    || 
c == 0xa5e1.11M
||
(1.11M
c >= 0xa661.11M
&&
c <= 0xa751.11M
) ||
(1.11M
c >= 0xa811.11M
&&
c <= 0xa831.11M
) ||
(1.11M
c >= 0xa851.11M
&&
c <= 0xa8d1.11M
)
202
1.11M
    || 
(1.11M
c >= 0xa8f1.11M
&&
c <= 0xa911.11M
) ||
(1.11M
c >= 0xa931.11M
&&
c <= 0xaa81.11M
) ||
(1.11M
c >= 0xaaa1.11M
&&
c <= 0xab01.11M
) ||
(1.11M
c >= 0xab21.11M
&&
c <= 0xab31.11M
)
203
1.11M
    || 
(1.11M
c >= 0xab51.11M
&&
c <= 0xab91.11M
) ||
(1.11M
c >= 0xabc1.11M
&&
c <= 0xac51.11M
) ||
(1.11M
c >= 0xac71.11M
&&
c <= 0xac91.11M
) ||
(1.11M
c >= 0xacb1.11M
&&
c <= 0xacd1.11M
)
204
1.11M
    || 
c == 0xad01.11M
||
(1.11M
c >= 0xae01.11M
&&
c <= 0xae31.11M
) ||
(1.11M
c >= 0xae61.11M
&&
c <= 0xaef1.11M
) ||
(1.11M
c >= 0xaf91.11M
&&
c <= 0xaff1.11M
)
205
1.11M
    || 
(1.11M
c >= 0xb011.11M
&&
c <= 0xb031.11M
) ||
(1.11M
c >= 0xb051.11M
&&
c <= 0xb0c1.11M
) ||
(1.11M
c >= 0xb0f1.11M
&&
c <= 0xb101.11M
) ||
(1.11M
c >= 0xb131.11M
&&
c <= 0xb281.11M
)
206
1.11M
    || 
(1.11M
c >= 0xb2a1.11M
&&
c <= 0xb301.11M
) ||
(1.11M
c >= 0xb321.11M
&&
c <= 0xb331.11M
) ||
(1.11M
c >= 0xb351.11M
&&
c <= 0xb391.11M
) ||
(1.11M
c >= 0xb3c1.11M
&&
c <= 0xb441.11M
)
207
1.11M
    || 
(1.11M
c >= 0xb471.11M
&&
c <= 0xb481.11M
) ||
(1.11M
c >= 0xb4b1.11M
&&
c <= 0xb4d1.11M
) ||
(1.11M
c >= 0xb561.11M
&&
c <= 0xb571.11M
) ||
(1.11M
c >= 0xb5c1.11M
&&
c <= 0xb5d1.11M
)
208
1.11M
    || 
(1.11M
c >= 0xb5f1.11M
&&
c <= 0xb631.11M
) ||
(1.11M
c >= 0xb661.11M
&&
c <= 0xb6f1.11M
) ||
c == 0xb711.11M
||
(1.11M
c >= 0xb821.11M
&&
c <= 0xb831.11M
)
209
1.11M
    || 
(1.11M
c >= 0xb851.11M
&&
c <= 0xb8a1.11M
) ||
(1.11M
c >= 0xb8e1.11M
&&
c <= 0xb901.11M
) ||
(1.11M
c >= 0xb921.11M
&&
c <= 0xb951.11M
) ||
(1.11M
c >= 0xb991.11M
&&
c <= 0xb9a1.11M
)
210
1.11M
    || 
c == 0xb9c1.11M
||
(1.11M
c >= 0xb9e1.11M
&&
c <= 0xb9f1.11M
) ||
(1.11M
c >= 0xba31.11M
&&
c <= 0xba41.11M
) ||
(1.11M
c >= 0xba81.11M
&&
c <= 0xbaa1.11M
)
211
1.11M
    || 
(1.11M
c >= 0xbae1.11M
&&
c <= 0xbb91.11M
) ||
(1.11M
c >= 0xbbe1.11M
&&
c <= 0xbc21.11M
) ||
(1.11M
c >= 0xbc61.11M
&&
c <= 0xbc81.11M
) ||
(1.11M
c >= 0xbca1.11M
&&
c <= 0xbcd1.11M
)
212
1.11M
    || 
c == 0xbd01.11M
||
c == 0xbd71.11M
||
(1.11M
c >= 0xbe61.11M
&&
c <= 0xbef1.11M
) ||
(1.11M
c >= 0xc001.11M
&&
c <= 0xc031.11M
)
213
1.11M
    || 
(1.11M
c >= 0xc051.11M
&&
c <= 0xc0c1.11M
) ||
(1.11M
c >= 0xc0e1.11M
&&
c <= 0xc101.11M
) ||
(1.11M
c >= 0xc121.11M
&&
c <= 0xc281.11M
) ||
(1.11M
c >= 0xc2a1.11M
&&
c <= 0xc391.11M
)
214
1.11M
    || 
(1.11M
c >= 0xc3d1.11M
&&
c <= 0xc441.11M
) ||
(1.11M
c >= 0xc461.11M
&&
c <= 0xc481.11M
) ||
(1.11M
c >= 0xc4a1.11M
&&
c <= 0xc4d1.11M
) ||
(1.11M
c >= 0xc551.11M
&&
c <= 0xc561.11M
)
215
1.11M
    || 
(1.11M
c >= 0xc581.11M
&&
c <= 0xc5a1.11M
) ||
(1.11M
c >= 0xc601.11M
&&
c <= 0xc631.11M
) ||
(1.11M
c >= 0xc661.11M
&&
c <= 0xc6f1.11M
) ||
(1.11M
c >= 0xc801.11M
&&
c <= 0xc831.11M
)
216
1.11M
    || 
(1.11M
c >= 0xc851.11M
&&
c <= 0xc8c1.11M
) ||
(1.11M
c >= 0xc8e1.11M
&&
c <= 0xc901.11M
) ||
(1.11M
c >= 0xc921.11M
&&
c <= 0xca81.11M
) ||
(1.11M
c >= 0xcaa1.11M
&&
c <= 0xcb31.11M
)
217
1.11M
    || 
(1.11M
c >= 0xcb51.11M
&&
c <= 0xcb91.11M
) ||
(1.11M
c >= 0xcbc1.11M
&&
c <= 0xcc41.11M
) ||
(1.11M
c >= 0xcc61.11M
&&
c <= 0xcc81.11M
) ||
(1.11M
c >= 0xcca1.11M
&&
c <= 0xccd1.11M
)
218
1.11M
    || 
(1.11M
c >= 0xcd51.11M
&&
c <= 0xcd61.11M
) ||
c == 0xcde1.11M
||
(1.11M
c >= 0xce01.11M
&&
c <= 0xce31.11M
) ||
(1.11M
c >= 0xce61.11M
&&
c <= 0xcef1.11M
)
219
1.11M
    || 
(1.11M
c >= 0xcf11.11M
&&
c <= 0xcf21.11M
) ||
(1.11M
c >= 0xd001.11M
&&
c <= 0xd031.11M
) ||
(1.11M
c >= 0xd051.11M
&&
c <= 0xd0c1.11M
) ||
(1.11M
c >= 0xd0e1.11M
&&
c <= 0xd101.11M
)
220
1.11M
    || 
(1.11M
c >= 0xd121.11M
&&
c <= 0xd441.11M
) ||
(1.11M
c >= 0xd461.11M
&&
c <= 0xd481.11M
) ||
(1.11M
c >= 0xd4a1.11M
&&
c <= 0xd4e1.11M
) ||
(1.11M
c >= 0xd541.11M
&&
c <= 0xd571.11M
)
221
1.11M
    || 
(1.11M
c >= 0xd5f1.11M
&&
c <= 0xd631.11M
) ||
(1.11M
c >= 0xd661.11M
&&
c <= 0xd6f1.11M
) ||
(1.11M
c >= 0xd7a1.11M
&&
c <= 0xd7f1.11M
) ||
(1.11M
c >= 0xd821.11M
&&
c <= 0xd831.11M
)
222
1.11M
    || 
(1.11M
c >= 0xd851.11M
&&
c <= 0xd961.11M
) ||
(1.11M
c >= 0xd9a1.11M
&&
c <= 0xdb11.11M
) ||
(1.11M
c >= 0xdb31.11M
&&
c <= 0xdbb1.11M
) ||
c == 0xdbd1.11M
223
1.11M
    || 
(1.11M
c >= 0xdc01.11M
&&
c <= 0xdc61.11M
) ||
c == 0xdca1.11M
||
(1.11M
c >= 0xdcf1.11M
&&
c <= 0xdd41.11M
) ||
c == 0xdd61.11M
224
1.11M
    || 
(1.11M
c >= 0xdd81.11M
&&
c <= 0xddf1.11M
) ||
(1.11M
c >= 0xde61.11M
&&
c <= 0xdef1.11M
) ||
(1.11M
c >= 0xdf21.11M
&&
c <= 0xdf31.11M
) ||
(1.11M
c >= 0xe011.11M
&&
c <= 0xe3a1.11M
)
225
1.11M
    || 
(1.11M
c >= 0xe401.11M
&&
c <= 0xe4e1.11M
) ||
(1.11M
c >= 0xe501.11M
&&
c <= 0xe591.11M
) ||
(1.11M
c >= 0xe811.11M
&&
c <= 0xe821.11M
) ||
c == 0xe841.11M
226
1.11M
    || 
(1.11M
c >= 0xe871.11M
&&
c <= 0xe881.11M
) ||
c == 0xe8a1.11M
||
c == 0xe8d1.11M
||
(1.11M
c >= 0xe941.11M
&&
c <= 0xe971.11M
)
227
1.11M
    || 
(1.11M
c >= 0xe991.11M
&&
c <= 0xe9f1.11M
) ||
(1.11M
c >= 0xea11.11M
&&
c <= 0xea31.11M
) ||
c == 0xea51.11M
||
c == 0xea71.11M
228
1.11M
    || 
(1.11M
c >= 0xeaa1.11M
&&
c <= 0xeab1.11M
) ||
(1.11M
c >= 0xead1.11M
&&
c <= 0xeb91.11M
) ||
(1.11M
c >= 0xebb1.11M
&&
c <= 0xebd1.11M
) ||
(1.11M
c >= 0xec01.11M
&&
c <= 0xec41.11M
)
229
1.11M
    || 
c == 0xec61.11M
||
(1.11M
c >= 0xec81.11M
&&
c <= 0xecd1.11M
) ||
(1.11M
c >= 0xed01.11M
&&
c <= 0xed91.11M
) ||
(1.11M
c >= 0xedc1.11M
&&
c <= 0xedf1.11M
)
230
1.11M
    || 
c == 0xf001.11M
||
(1.11M
c >= 0xf181.11M
&&
c <= 0xf191.11M
) ||
(1.11M
c >= 0xf201.11M
&&
c <= 0xf291.11M
) ||
c == 0xf351.11M
231
1.11M
    || 
c == 0xf371.11M
||
c == 0xf391.11M
||
(1.11M
c >= 0xf3e1.11M
&&
c <= 0xf471.11M
) ||
(1.11M
c >= 0xf491.11M
&&
c <= 0xf6c1.11M
)
232
1.11M
    || 
(1.11M
c >= 0xf711.11M
&&
c <= 0xf841.11M
) ||
(1.11M
c >= 0xf861.11M
&&
c <= 0xf971.11M
) ||
(1.11M
c >= 0xf991.11M
&&
c <= 0xfbc1.11M
) ||
c == 0xfc61.11M
233
1.11M
    || 
(1.11M
c >= 0x10001.11M
&&
c <= 0x10491.11M
) ||
(1.11M
c >= 0x10501.11M
&&
c <= 0x109d1.10M
) ||
(1.11M
c >= 0x10a01.11M
&&
c <= 0x10c51.10M
) ||
c == 0x10c71.11M
234
1.11M
    || 
c == 0x10cd1.11M
||
(1.11M
c >= 0x10d01.11M
&&
c <= 0x10fa1.10M
) ||
(1.11M
c >= 0x10fc1.11M
&&
c <= 0x12481.10M
) ||
(1.11M
c >= 0x124a1.11M
&&
c <= 0x124d1.10M
)
235
1.11M
    || 
(1.11M
c >= 0x12501.11M
&&
c <= 0x12561.10M
) ||
c == 0x12581.11M
||
(1.11M
c >= 0x125a1.11M
&&
c <= 0x125d1.10M
) ||
(1.11M
c >= 0x12601.11M
&&
c <= 0x12881.10M
)
236
1.11M
    || 
(1.11M
c >= 0x128a1.11M
&&
c <= 0x128d1.10M
) ||
(1.11M
c >= 0x12901.11M
&&
c <= 0x12b01.10M
) ||
(1.11M
c >= 0x12b21.11M
&&
c <= 0x12b51.10M
) ||
(1.11M
c >= 0x12b81.11M
&&
c <= 0x12be1.10M
)
237
1.11M
    || 
c == 0x12c01.11M
||
(1.11M
c >= 0x12c21.11M
&&
c <= 0x12c51.10M
) ||
(1.11M
c >= 0x12c81.11M
&&
c <= 0x12d61.10M
) ||
(1.11M
c >= 0x12d81.11M
&&
c <= 0x13101.10M
)
238
1.11M
    || 
(1.11M
c >= 0x13121.11M
&&
c <= 0x13151.10M
) ||
(1.11M
c >= 0x13181.11M
&&
c <= 0x135a1.10M
) ||
(1.11M
c >= 0x135d1.11M
&&
c <= 0x135f1.10M
) ||
(1.11M
c >= 0x13801.11M
&&
c <= 0x138f1.10M
)
239
1.11M
    || 
(1.11M
c >= 0x13a01.11M
&&
c <= 0x13f51.10M
) ||
(1.11M
c >= 0x13f81.11M
&&
c <= 0x13fd1.10M
) ||
(1.11M
c >= 0x14011.11M
&&
c <= 0x166c1.10M
) ||
(1.10M
c >= 0x166f1.10M
&&
c <= 0x167f1.10M
)
240
1.11M
    || 
(1.10M
c >= 0x16811.10M
&&
c <= 0x169a1.10M
) ||
(1.10M
c >= 0x16a01.10M
&&
c <= 0x16ea1.10M
) ||
(1.10M
c >= 0x16ee1.10M
&&
c <= 0x16f81.10M
) ||
(1.10M
c >= 0x17001.10M
&&
c <= 0x170c1.10M
)
241
1.11M
    || 
(1.10M
c >= 0x170e1.10M
&&
c <= 0x17141.10M
) ||
(1.10M
c >= 0x17201.10M
&&
c <= 0x17341.10M
) ||
(1.10M
c >= 0x17401.10M
&&
c <= 0x17531.10M
) ||
(1.10M
c >= 0x17601.10M
&&
c <= 0x176c1.10M
)
242
1.11M
    || 
(1.10M
c >= 0x176e1.10M
&&
c <= 0x17701.10M
) ||
(1.10M
c >= 0x17721.10M
&&
c <= 0x17731.10M
) ||
(1.10M
c >= 0x17801.10M
&&
c <= 0x17d31.10M
) ||
c == 0x17d71.10M
243
1.11M
    || 
(1.10M
c >= 0x17dc1.10M
&&
c <= 0x17dd1.10M
) ||
(1.10M
c >= 0x17e01.10M
&&
c <= 0x17e91.10M
) ||
(1.10M
c >= 0x180b1.10M
&&
c <= 0x180d1.10M
) ||
(1.10M
c >= 0x18101.10M
&&
c <= 0x18191.10M
)
244
1.11M
    || 
(1.10M
c >= 0x18201.10M
&&
c <= 0x18771.10M
) ||
(1.10M
c >= 0x18801.10M
&&
c <= 0x18aa1.10M
) ||
(1.10M
c >= 0x18b01.10M
&&
c <= 0x18f51.10M
) ||
(1.10M
c >= 0x19001.10M
&&
c <= 0x191e1.10M
)
245
1.11M
    || 
(1.10M
c >= 0x19201.10M
&&
c <= 0x192b1.10M
) ||
(1.10M
c >= 0x19301.10M
&&
c <= 0x193b1.10M
) ||
(1.10M
c >= 0x19461.10M
&&
c <= 0x196d1.10M
) ||
(1.10M
c >= 0x19701.10M
&&
c <= 0x19741.10M
)
246
1.11M
    || 
(1.10M
c >= 0x19801.10M
&&
c <= 0x19ab1.10M
) ||
(1.10M
c >= 0x19b01.10M
&&
c <= 0x19c91.10M
) ||
(1.10M
c >= 0x19d01.10M
&&
c <= 0x19d91.10M
) ||
(1.10M
c >= 0x1a001.10M
&&
c <= 0x1a1b1.10M
)
247
1.11M
    || 
(1.10M
c >= 0x1a201.10M
&&
c <= 0x1a5e1.10M
) ||
(1.10M
c >= 0x1a601.10M
&&
c <= 0x1a7c1.10M
) ||
(1.10M
c >= 0x1a7f1.10M
&&
c <= 0x1a891.10M
) ||
(1.10M
c >= 0x1a901.10M
&&
c <= 0x1a991.10M
)
248
1.11M
    || 
c == 0x1aa71.10M
||
(1.10M
c >= 0x1ab01.10M
&&
c <= 0x1abd1.10M
) ||
(1.10M
c >= 0x1b001.10M
&&
c <= 0x1b4b1.10M
) ||
(1.10M
c >= 0x1b501.10M
&&
c <= 0x1b591.10M
)
249
1.11M
    || 
(1.10M
c >= 0x1b6b1.10M
&&
c <= 0x1b731.10M
) ||
(1.10M
c >= 0x1b801.10M
&&
c <= 0x1bf31.10M
) ||
(1.10M
c >= 0x1c001.10M
&&
c <= 0x1c371.10M
) ||
(1.10M
c >= 0x1c401.10M
&&
c <= 0x1c491.10M
)
250
1.11M
    || 
(1.10M
c >= 0x1c4d1.10M
&&
c <= 0x1c7d1.10M
) ||
(1.10M
c >= 0x1c801.10M
&&
c <= 0x1c881.10M
) ||
(1.10M
c >= 0x1cd01.10M
&&
c <= 0x1cd21.10M
) ||
(1.10M
c >= 0x1cd41.10M
&&
c <= 0x1cf91.10M
)
251
1.11M
    || 
(1.10M
c >= 0x1d001.10M
&&
c <= 0x1df91.10M
) ||
(1.10M
c >= 0x1dfb1.10M
&&
c <= 0x1f151.10M
) ||
(1.10M
c >= 0x1f181.10M
&&
c <= 0x1f1d1.10M
) ||
(1.10M
c >= 0x1f201.10M
&&
c <= 0x1f451.10M
)
252
1.11M
    || 
(1.10M
c >= 0x1f481.10M
&&
c <= 0x1f4d1.10M
) ||
(1.10M
c >= 0x1f501.10M
&&
c <= 0x1f571.10M
) ||
c == 0x1f591.10M
||
c == 0x1f5b1.10M
253
1.11M
    || 
c == 0x1f5d1.10M
||
(1.10M
c >= 0x1f5f1.10M
&&
c <= 0x1f7d1.10M
) ||
(1.10M
c >= 0x1f801.10M
&&
c <= 0x1fb41.10M
) ||
(1.10M
c >= 0x1fb61.10M
&&
c <= 0x1fbc1.10M
)
254
1.11M
    || 
c == 0x1fbe1.10M
||
(1.10M
c >= 0x1fc21.10M
&&
c <= 0x1fc41.10M
) ||
(1.10M
c >= 0x1fc61.10M
&&
c <= 0x1fcc1.10M
) ||
(1.10M
c >= 0x1fd01.10M
&&
c <= 0x1fd31.10M
)
255
1.11M
    || 
(1.10M
c >= 0x1fd61.10M
&&
c <= 0x1fdb1.10M
) ||
(1.10M
c >= 0x1fe01.10M
&&
c <= 0x1fec1.10M
) ||
(1.10M
c >= 0x1ff21.10M
&&
c <= 0x1ff41.10M
) ||
(1.10M
c >= 0x1ff61.10M
&&
c <= 0x1ffc1.10M
)
256
1.11M
    || 
(1.10M
c >= 0x203f1.10M
&&
c <= 0x20401.10M
) ||
c == 0x20541.10M
||
c == 0x20711.10M
||
c == 0x207f1.10M
257
1.11M
    || 
(1.10M
c >= 0x20901.10M
&&
c <= 0x209c1.10M
) ||
(1.10M
c >= 0x20d01.10M
&&
c <= 0x20dc1.10M
) ||
c == 0x20e11.10M
||
(1.10M
c >= 0x20e51.10M
&&
c <= 0x20f01.10M
)
258
1.11M
    || 
c == 0x21021.10M
||
c == 0x21071.10M
||
(1.10M
c >= 0x210a1.10M
&&
c <= 0x21131.10M
) ||
c == 0x21151.10M
259
1.11M
    || 
(1.10M
c >= 0x21191.10M
&&
c <= 0x211d1.10M
) ||
c == 0x21241.10M
||
c == 0x21261.10M
||
c == 0x21281.10M
260
1.11M
    || 
(1.10M
c >= 0x212a1.10M
&&
c <= 0x212d1.10M
) ||
(1.10M
c >= 0x212f1.10M
&&
c <= 0x21391.10M
) ||
(1.10M
c >= 0x213c1.10M
&&
c <= 0x213f1.10M
) ||
(1.10M
c >= 0x21451.10M
&&
c <= 0x21491.10M
)
261
1.11M
    || 
c == 0x214e1.10M
||
(1.10M
c >= 0x21601.10M
&&
c <= 0x21881.10M
) ||
(1.10M
c >= 0x2c001.10M
&&
c <= 0x2c2e1.10M
) ||
(1.10M
c >= 0x2c301.10M
&&
c <= 0x2c5e1.10M
)
262
1.11M
    || 
(1.10M
c >= 0x2c601.10M
&&
c <= 0x2ce41.10M
) ||
(1.10M
c >= 0x2ceb1.10M
&&
c <= 0x2cf31.10M
) ||
(1.10M
c >= 0x2d001.10M
&&
c <= 0x2d251.10M
) ||
c == 0x2d271.10M
263
1.11M
    || 
c == 0x2d2d1.10M
||
(1.10M
c >= 0x2d301.10M
&&
c <= 0x2d671.10M
) ||
c == 0x2d6f1.10M
||
(1.10M
c >= 0x2d7f1.10M
&&
c <= 0x2d961.10M
)
264
1.11M
    || 
(1.10M
c >= 0x2da01.10M
&&
c <= 0x2da61.10M
) ||
(1.10M
c >= 0x2da81.10M
&&
c <= 0x2dae1.10M
) ||
(1.10M
c >= 0x2db01.10M
&&
c <= 0x2db61.10M
) ||
(1.10M
c >= 0x2db81.10M
&&
c <= 0x2dbe1.10M
)
265
1.11M
    || 
(1.10M
c >= 0x2dc01.10M
&&
c <= 0x2dc61.10M
) ||
(1.10M
c >= 0x2dc81.10M
&&
c <= 0x2dce1.10M
) ||
(1.10M
c >= 0x2dd01.10M
&&
c <= 0x2dd61.10M
) ||
(1.10M
c >= 0x2dd81.10M
&&
c <= 0x2dde1.10M
)
266
1.11M
    || 
(1.10M
c >= 0x2de01.10M
&&
c <= 0x2dff1.10M
) ||
c == 0x2e2f1.10M
||
(1.10M
c >= 0x30051.10M
&&
c <= 0x30071.10M
) ||
(1.10M
c >= 0x30211.10M
&&
c <= 0x302f1.10M
)
267
1.11M
    || 
(1.10M
c >= 0x30311.10M
&&
c <= 0x30351.10M
) ||
(1.10M
c >= 0x30381.10M
&&
c <= 0x303c1.10M
) ||
(1.10M
c >= 0x30411.10M
&&
c <= 0x30961.10M
) ||
(1.10M
c >= 0x30991.10M
&&
c <= 0x309a1.10M
)
268
1.11M
    || 
(1.10M
c >= 0x309d1.10M
&&
c <= 0x309f1.10M
) ||
(1.10M
c >= 0x30a11.10M
&&
c <= 0x30fa1.10M
) ||
(1.10M
c >= 0x30fc1.10M
&&
c <= 0x30ff1.10M
) ||
(1.10M
c >= 0x31051.10M
&&
c <= 0x312e1.10M
)
269
1.11M
    || 
(1.10M
c >= 0x31311.10M
&&
c <= 0x318e1.10M
) ||
(1.10M
c >= 0x31a01.10M
&&
c <= 0x31ba1.10M
) ||
(1.10M
c >= 0x31f01.10M
&&
c <= 0x31ff1.10M
) ||
(1.10M
c >= 0x34001.10M
&&
c <= 0x4db51.10M
)
270
1.11M
    || 
(1.10M
c >= 0x4e001.10M
&&
c <= 0x9fea1.09M
) ||
(1.07M
c >= 0xa0001.07M
&&
c <= 0xa48c1.07M
) ||
(1.07M
c >= 0xa4d01.07M
&&
c <= 0xa4fd1.07M
) ||
(1.07M
c >= 0xa5001.07M
&&
c <= 0xa60c1.07M
)
271
1.11M
    || 
(1.07M
c >= 0xa6101.07M
&&
c <= 0xa62b1.07M
) ||
(1.07M
c >= 0xa6401.07M
&&
c <= 0xa66f1.07M
) ||
(1.07M
c >= 0xa6741.07M
&&
c <= 0xa67d1.07M
) ||
(1.07M
c >= 0xa67f1.07M
&&
c <= 0xa6f11.07M
)
272
1.11M
    || 
(1.07M
c >= 0xa7171.07M
&&
c <= 0xa71f1.07M
) ||
(1.07M
c >= 0xa7221.07M
&&
c <= 0xa7881.07M
) ||
(1.07M
c >= 0xa78b1.07M
&&
c <= 0xa7ae1.07M
) ||
(1.07M
c >= 0xa7b01.07M
&&
c <= 0xa7b71.07M
)
273
1.11M
    || 
(1.07M
c >= 0xa7f71.07M
&&
c <= 0xa8271.07M
) ||
(1.07M
c >= 0xa8401.07M
&&
c <= 0xa8731.07M
) ||
(1.07M
c >= 0xa8801.07M
&&
c <= 0xa8c51.07M
) ||
(1.07M
c >= 0xa8d01.07M
&&
c <= 0xa8d91.07M
)
274
1.11M
    || 
(1.07M
c >= 0xa8e01.07M
&&
c <= 0xa8f71.07M
) ||
c == 0xa8fb1.07M
||
c == 0xa8fd1.07M
||
(1.07M
c >= 0xa9001.07M
&&
c <= 0xa92d1.07M
)
275
1.11M
    || 
(1.07M
c >= 0xa9301.07M
&&
c <= 0xa9531.07M
) ||
(1.07M
c >= 0xa9601.07M
&&
c <= 0xa97c1.07M
) ||
(1.07M
c >= 0xa9801.07M
&&
c <= 0xa9c01.07M
) ||
(1.07M
c >= 0xa9cf1.07M
&&
c <= 0xa9d91.07M
)
276
1.11M
    || 
(1.07M
c >= 0xa9e01.07M
&&
c <= 0xa9fe1.07M
) ||
(1.07M
c >= 0xaa001.07M
&&
c <= 0xaa361.07M
) ||
(1.07M
c >= 0xaa401.07M
&&
c <= 0xaa4d1.07M
) ||
(1.07M
c >= 0xaa501.07M
&&
c <= 0xaa591.07M
)
277
1.11M
    || 
(1.07M
c >= 0xaa601.07M
&&
c <= 0xaa761.07M
) ||
(1.07M
c >= 0xaa7a1.07M
&&
c <= 0xaac21.07M
) ||
(1.07M
c >= 0xaadb1.07M
&&
c <= 0xaadd1.07M
) ||
(1.07M
c >= 0xaae01.07M
&&
c <= 0xaaef1.07M
)
278
1.11M
    || 
(1.07M
c >= 0xaaf21.07M
&&
c <= 0xaaf61.07M
) ||
(1.07M
c >= 0xab011.07M
&&
c <= 0xab061.07M
) ||
(1.07M
c >= 0xab091.07M
&&
c <= 0xab0e1.07M
) ||
(1.07M
c >= 0xab111.07M
&&
c <= 0xab161.07M
)
279
1.11M
    || 
(1.07M
c >= 0xab201.07M
&&
c <= 0xab261.07M
) ||
(1.07M
c >= 0xab281.07M
&&
c <= 0xab2e1.07M
) ||
(1.07M
c >= 0xab301.07M
&&
c <= 0xab5a1.07M
) ||
(1.07M
c >= 0xab5c1.07M
&&
c <= 0xab651.07M
)
280
1.11M
    || 
(1.07M
c >= 0xab701.07M
&&
c <= 0xabea1.07M
) ||
(1.07M
c >= 0xabec1.07M
&&
c <= 0xabed1.07M
) ||
(1.07M
c >= 0xabf01.07M
&&
c <= 0xabf91.07M
) ||
(1.07M
c >= 0xac001.07M
&&
c <= 0xd7a31.07M
)
281
1.11M
    || 
(1.06M
c >= 0xd7b01.06M
&&
c <= 0xd7c61.05M
) ||
(1.06M
c >= 0xd7cb1.06M
&&
c <= 0xd7fb1.05M
) ||
(1.06M
c >= 0xf9001.06M
&&
c <= 0xfa6d1.05M
) ||
(1.06M
c >= 0xfa701.06M
&&
c <= 0xfad91.05M
)
282
1.11M
    || 
(1.06M
c >= 0xfb001.06M
&&
c <= 0xfb061.04M
) ||
(1.06M
c >= 0xfb131.06M
&&
c <= 0xfb171.04M
) ||
(1.06M
c >= 0xfb1d1.06M
&&
c <= 0xfb281.04M
) ||
(1.06M
c >= 0xfb2a1.06M
&&
c <= 0xfb361.04M
)
283
1.11M
    || 
(1.06M
c >= 0xfb381.06M
&&
c <= 0xfb3c1.04M
) ||
c == 0xfb3e1.06M
||
(1.06M
c >= 0xfb401.06M
&&
c <= 0xfb411.04M
) ||
(1.06M
c >= 0xfb431.06M
&&
c <= 0xfb441.04M
)
284
1.11M
    || 
(1.06M
c >= 0xfb461.06M
&&
c <= 0xfbb11.04M
) ||
(1.06M
c >= 0xfbd31.06M
&&
c <= 0xfd3d1.04M
) ||
(1.06M
c >= 0xfd501.06M
&&
c <= 0xfd8f1.04M
) ||
(1.06M
c >= 0xfd921.06M
&&
c <= 0xfdc71.04M
)
285
1.11M
    || 
(1.06M
c >= 0xfdf01.06M
&&
c <= 0xfdfb1.04M
) ||
(1.06M
c >= 0xfe001.06M
&&
c <= 0xfe0f1.04M
) ||
(1.06M
c >= 0xfe201.06M
&&
c <= 0xfe2f1.04M
) ||
(1.06M
c >= 0xfe331.06M
&&
c <= 0xfe341.04M
)
286
1.11M
    || 
(1.06M
c >= 0xfe4d1.06M
&&
c <= 0xfe4f1.04M
) ||
(1.06M
c >= 0xfe701.06M
&&
c <= 0xfe741.04M
) ||
(1.06M
c >= 0xfe761.06M
&&
c <= 0xfefc1.04M
) ||
(1.06M
c >= 0xff101.06M
&&
c <= 0xff191.04M
)
287
1.11M
    || 
(1.06M
c >= 0xff211.06M
&&
c <= 0xff3a1.04M
) ||
c == 0xff3f1.06M
||
(1.06M
c >= 0xff411.06M
&&
c <= 0xff5a1.04M
) ||
(1.06M
c >= 0xff661.06M
&&
c <= 0xffbe1.04M
)
288
1.11M
    || 
(1.06M
c >= 0xffc21.06M
&&
c <= 0xffc71.04M
) ||
(1.06M
c >= 0xffca1.06M
&&
c <= 0xffcf1.04M
) ||
(1.06M
c >= 0xffd21.06M
&&
c <= 0xffd71.04M
) ||
(1.06M
c >= 0xffda1.06M
&&
c <= 0xffdc1.04M
)
289
1.11M
    || 
(1.06M
c >= 0x100001.06M
&&
c <= 0x1000b1.04M
) ||
(1.06M
c >= 0x1000d1.06M
&&
c <= 0x100261.04M
) ||
(1.06M
c >= 0x100281.06M
&&
c <= 0x1003a1.04M
) ||
(1.06M
c >= 0x1003c1.06M
&&
c <= 0x1003d1.04M
)
290
1.11M
    || 
(1.06M
c >= 0x1003f1.06M
&&
c <= 0x1004d1.04M
) ||
(1.06M
c >= 0x100501.06M
&&
c <= 0x1005d1.04M
) ||
(1.06M
c >= 0x100801.06M
&&
c <= 0x100fa1.04M
) ||
(1.06M
c >= 0x101401.06M
&&
c <= 0x101741.04M
)
291
1.11M
    || 
c == 0x101fd1.06M
||
(1.06M
c >= 0x102801.06M
&&
c <= 0x1029c1.04M
) ||
(1.06M
c >= 0x102a01.06M
&&
c <= 0x102d01.04M
) ||
c == 0x102e01.06M
292
1.11M
    || 
(1.06M
c >= 0x103001.06M
&&
c <= 0x1031f1.04M
) ||
(1.06M
c >= 0x1032d1.06M
&&
c <= 0x1034a1.04M
) ||
(1.06M
c >= 0x103501.06M
&&
c <= 0x1037a1.04M
) ||
(1.06M
c >= 0x103801.06M
&&
c <= 0x1039d1.04M
)
293
1.11M
    || 
(1.06M
c >= 0x103a01.06M
&&
c <= 0x103c31.04M
) ||
(1.06M
c >= 0x103c81.06M
&&
c <= 0x103cf1.04M
) ||
(1.06M
c >= 0x103d11.06M
&&
c <= 0x103d51.04M
) ||
(1.06M
c >= 0x104001.06M
&&
c <= 0x1049d1.04M
)
294
1.11M
    || 
(1.06M
c >= 0x104a01.06M
&&
c <= 0x104a91.04M
) ||
(1.06M
c >= 0x104b01.06M
&&
c <= 0x104d31.04M
) ||
(1.06M
c >= 0x104d81.06M
&&
c <= 0x104fb1.04M
) ||
(1.06M
c >= 0x105001.06M
&&
c <= 0x105271.04M
)
295
1.11M
    || 
(1.06M
c >= 0x105301.06M
&&
c <= 0x105631.04M
) ||
(1.06M
c >= 0x106001.06M
&&
c <= 0x107361.04M
) ||
(1.06M
c >= 0x107401.06M
&&
c <= 0x107551.04M
) ||
(1.06M
c >= 0x107601.06M
&&
c <= 0x107671.04M
)
296
1.11M
    || 
(1.06M
c >= 0x108001.06M
&&
c <= 0x108051.04M
) ||
c == 0x108081.06M
||
(1.06M
c >= 0x1080a1.06M
&&
c <= 0x108351.04M
) ||
(1.06M
c >= 0x108371.06M
&&
c <= 0x108381.04M
)
297
1.11M
    || 
c == 0x1083c1.06M
||
(1.06M
c >= 0x1083f1.06M
&&
c <= 0x108551.04M
) ||
(1.06M
c >= 0x108601.06M
&&
c <= 0x108761.04M
) ||
(1.06M
c >= 0x108801.06M
&&
c <= 0x1089e1.04M
)
298
1.11M
    || 
(1.06M
c >= 0x108e01.06M
&&
c <= 0x108f21.04M
) ||
(1.06M
c >= 0x108f41.06M
&&
c <= 0x108f51.04M
) ||
(1.06M
c >= 0x109001.06M
&&
c <= 0x109151.04M
) ||
(1.06M
c >= 0x109201.06M
&&
c <= 0x109391.04M
)
299
1.11M
    || 
(1.06M
c >= 0x109801.06M
&&
c <= 0x109b71.04M
) ||
(1.06M
c >= 0x109be1.06M
&&
c <= 0x109bf1.04M
) ||
(1.06M
c >= 0x10a001.06M
&&
c <= 0x10a031.04M
) ||
(1.06M
c >= 0x10a051.06M
&&
c <= 0x10a061.04M
)
300
1.11M
    || 
(1.06M
c >= 0x10a0c1.06M
&&
c <= 0x10a131.04M
) ||
(1.06M
c >= 0x10a151.06M
&&
c <= 0x10a171.04M
) ||
(1.06M
c >= 0x10a191.06M
&&
c <= 0x10a331.04M
) ||
(1.06M
c >= 0x10a381.06M
&&
c <= 0x10a3a1.04M
)
301
1.11M
    || 
c == 0x10a3f1.06M
||
(1.06M
c >= 0x10a601.06M
&&
c <= 0x10a7c1.04M
) ||
(1.06M
c >= 0x10a801.06M
&&
c <= 0x10a9c1.04M
) ||
(1.06M
c >= 0x10ac01.06M
&&
c <= 0x10ac71.04M
)
302
1.11M
    || 
(1.06M
c >= 0x10ac91.06M
&&
c <= 0x10ae61.04M
) ||
(1.06M
c >= 0x10b001.06M
&&
c <= 0x10b351.04M
) ||
(1.06M
c >= 0x10b401.06M
&&
c <= 0x10b551.04M
) ||
(1.06M
c >= 0x10b601.06M
&&
c <= 0x10b721.04M
)
303
1.11M
    || 
(1.06M
c >= 0x10b801.06M
&&
c <= 0x10b911.04M
) ||
(1.06M
c >= 0x10c001.06M
&&
c <= 0x10c481.04M
) ||
(1.06M
c >= 0x10c801.06M
&&
c <= 0x10cb21.04M
) ||
(1.06M
c >= 0x10cc01.06M
&&
c <= 0x10cf21.04M
)
304
1.11M
    || 
(1.06M
c >= 0x110001.06M
&&
c <= 0x110461.04M
) ||
(1.06M
c >= 0x110661.06M
&&
c <= 0x1106f1.04M
) ||
(1.06M
c >= 0x1107f1.06M
&&
c <= 0x110ba1.04M
) ||
(1.06M
c >= 0x110d01.06M
&&
c <= 0x110e81.04M
)
305
1.11M
    || 
(1.06M
c >= 0x110f01.06M
&&
c <= 0x110f91.04M
) ||
(1.06M
c >= 0x111001.06M
&&
c <= 0x111341.04M
) ||
(1.06M
c >= 0x111361.06M
&&
c <= 0x1113f1.04M
) ||
(1.06M
c >= 0x111501.06M
&&
c <= 0x111731.04M
)
306
1.11M
    || 
c == 0x111761.06M
||
(1.06M
c >= 0x111801.06M
&&
c <= 0x111c41.04M
) ||
(1.06M
c >= 0x111ca1.06M
&&
c <= 0x111cc1.04M
) ||
(1.06M
c >= 0x111d01.06M
&&
c <= 0x111da1.04M
)
307
1.11M
    || 
c == 0x111dc1.06M
||
(1.06M
c >= 0x112001.06M
&&
c <= 0x112111.04M
) ||
(1.06M
c >= 0x112131.06M
&&
c <= 0x112371.04M
) ||
c == 0x1123e1.06M
308
1.11M
    || 
(1.06M
c >= 0x112801.06M
&&
c <= 0x112861.04M
) ||
c == 0x112881.06M
||
(1.06M
c >= 0x1128a1.06M
&&
c <= 0x1128d1.04M
) ||
(1.06M
c >= 0x1128f1.06M
&&
c <= 0x1129d1.04M
)
309
1.11M
    || 
(1.06M
c >= 0x1129f1.06M
&&
c <= 0x112a81.04M
) ||
(1.06M
c >= 0x112b01.06M
&&
c <= 0x112ea1.04M
) ||
(1.06M
c >= 0x112f01.06M
&&
c <= 0x112f91.04M
) ||
(1.06M
c >= 0x113001.06M
&&
c <= 0x113031.04M
)
310
1.11M
    || 
(1.06M
c >= 0x113051.06M
&&
c <= 0x1130c1.04M
) ||
(1.06M
c >= 0x1130f1.06M
&&
c <= 0x113101.04M
) ||
(1.06M
c >= 0x113131.06M
&&
c <= 0x113281.04M
) ||
(1.06M
c >= 0x1132a1.06M
&&
c <= 0x113301.04M
)
311
1.11M
    || 
(1.06M
c >= 0x113321.06M
&&
c <= 0x113331.04M
) ||
(1.06M
c >= 0x113351.06M
&&
c <= 0x113391.04M
) ||
(1.06M
c >= 0x1133c1.06M
&&
c <= 0x113441.04M
) ||
(1.06M
c >= 0x113471.06M
&&
c <= 0x113481.04M
)
312
1.11M
    || 
(1.06M
c >= 0x1134b1.06M
&&
c <= 0x1134d1.04M
) ||
c == 0x113501.06M
||
c == 0x113571.06M
||
(1.06M
c >= 0x1135d1.06M
&&
c <= 0x113631.04M
)
313
1.11M
    || 
(1.06M
c >= 0x113661.06M
&&
c <= 0x1136c1.04M
) ||
(1.06M
c >= 0x113701.06M
&&
c <= 0x113741.04M
) ||
(1.06M
c >= 0x114001.06M
&&
c <= 0x1144a1.04M
) ||
(1.06M
c >= 0x114501.06M
&&
c <= 0x114591.04M
)
314
1.11M
    || 
(1.06M
c >= 0x114801.06M
&&
c <= 0x114c51.04M
) ||
c == 0x114c71.06M
||
(1.06M
c >= 0x114d01.06M
&&
c <= 0x114d91.04M
) ||
(1.06M
c >= 0x115801.06M
&&
c <= 0x115b51.04M
)
315
1.11M
    || 
(1.06M
c >= 0x115b81.06M
&&
c <= 0x115c01.04M
) ||
(1.06M
c >= 0x115d81.06M
&&
c <= 0x115dd1.04M
) ||
(1.06M
c >= 0x116001.06M
&&
c <= 0x116401.04M
) ||
c == 0x116441.06M
316
1.11M
    || 
(1.06M
c >= 0x116501.06M
&&
c <= 0x116591.04M
) ||
(1.06M
c >= 0x116801.06M
&&
c <= 0x116b71.04M
) ||
(1.06M
c >= 0x116c01.06M
&&
c <= 0x116c91.04M
) ||
(1.06M
c >= 0x117001.06M
&&
c <= 0x117191.04M
)
317
1.11M
    || 
(1.06M
c >= 0x1171d1.06M
&&
c <= 0x1172b1.04M
) ||
(1.06M
c >= 0x117301.06M
&&
c <= 0x117391.04M
) ||
(1.06M
c >= 0x118a01.06M
&&
c <= 0x118e91.04M
) ||
c == 0x118ff1.06M
318
1.11M
    || 
(1.06M
c >= 0x11a001.06M
&&
c <= 0x11a3e1.04M
) ||
c == 0x11a471.06M
||
(1.06M
c >= 0x11a501.06M
&&
c <= 0x11a831.04M
) ||
(1.06M
c >= 0x11a861.06M
&&
c <= 0x11a991.04M
)
319
1.11M
    || 
(1.06M
c >= 0x11ac01.06M
&&
c <= 0x11af81.04M
) ||
(1.06M
c >= 0x11c001.06M
&&
c <= 0x11c081.04M
) ||
(1.06M
c >= 0x11c0a1.06M
&&
c <= 0x11c361.04M
) ||
(1.06M
c >= 0x11c381.06M
&&
c <= 0x11c401.04M
)
320
1.11M
    || 
(1.06M
c >= 0x11c501.06M
&&
c <= 0x11c591.04M
) ||
(1.06M
c >= 0x11c721.06M
&&
c <= 0x11c8f1.04M
) ||
(1.06M
c >= 0x11c921.06M
&&
c <= 0x11ca71.04M
) ||
(1.06M
c >= 0x11ca91.06M
&&
c <= 0x11cb61.04M
)
321
1.11M
    || 
(1.06M
c >= 0x11d001.06M
&&
c <= 0x11d061.04M
) ||
(1.06M
c >= 0x11d081.06M
&&
c <= 0x11d091.04M
) ||
(1.06M
c >= 0x11d0b1.06M
&&
c <= 0x11d361.04M
) ||
c == 0x11d3a1.06M
322
1.11M
    || 
(1.06M
c >= 0x11d3c1.06M
&&
c <= 0x11d3d1.04M
) ||
(1.06M
c >= 0x11d3f1.06M
&&
c <= 0x11d471.04M
) ||
(1.06M
c >= 0x11d501.06M
&&
c <= 0x11d591.04M
) ||
(1.06M
c >= 0x120001.06M
&&
c <= 0x123991.04M
)
323
1.11M
    || 
(1.05M
c >= 0x124001.05M
&&
c <= 0x1246e1.03M
) ||
(1.05M
c >= 0x124801.05M
&&
c <= 0x125431.03M
) ||
(1.05M
c >= 0x130001.05M
&&
c <= 0x1342e1.03M
) ||
(1.05M
c >= 0x144001.05M
&&
c <= 0x146461.03M
)
324
1.11M
    || 
(1.05M
c >= 0x168001.05M
&&
c <= 0x16a381.02M
) ||
(1.05M
c >= 0x16a401.05M
&&
c <= 0x16a5e1.02M
) ||
(1.05M
c >= 0x16a601.05M
&&
c <= 0x16a691.02M
) ||
(1.05M
c >= 0x16ad01.05M
&&
c <= 0x16aed1.02M
)
325
1.11M
    || 
(1.05M
c >= 0x16af01.05M
&&
c <= 0x16af41.02M
) ||
(1.05M
c >= 0x16b001.05M
&&
c <= 0x16b361.02M
) ||
(1.05M
c >= 0x16b401.05M
&&
c <= 0x16b431.02M
) ||
(1.05M
c >= 0x16b501.05M
&&
c <= 0x16b591.02M
)
326
1.11M
    || 
(1.05M
c >= 0x16b631.05M
&&
c <= 0x16b771.02M
) ||
(1.05M
c >= 0x16b7d1.05M
&&
c <= 0x16b8f1.02M
) ||
(1.05M
c >= 0x16f001.05M
&&
c <= 0x16f441.02M
) ||
(1.05M
c >= 0x16f501.05M
&&
c <= 0x16f7e1.02M
)
327
1.11M
    || 
(1.05M
c >= 0x16f8f1.05M
&&
c <= 0x16f9f1.02M
) ||
(1.05M
c >= 0x16fe01.05M
&&
c <= 0x16fe11.01M
) ||
(1.05M
c >= 0x170001.05M
&&
c <= 0x187ec1.01M
) ||
(1.05M
c >= 0x188001.05M
&&
c <= 0x18af21.01M
)
328
1.11M
    || 
(1.04M
c >= 0x1b0001.04M
&&
c <= 0x1b11e1.00M
) ||
(1.04M
c >= 0x1b1701.04M
&&
c <= 0x1b2fb1.00M
) ||
(1.04M
c >= 0x1bc001.04M
&&
c <= 0x1bc6a1.00M
) ||
(1.04M
c >= 0x1bc701.04M
&&
c <= 0x1bc7c1.00M
)
329
1.11M
    || 
(1.04M
c >= 0x1bc801.04M
&&
c <= 0x1bc881.00M
) ||
(1.04M
c >= 0x1bc901.04M
&&
c <= 0x1bc991.00M
) ||
(1.04M
c >= 0x1bc9d1.04M
&&
c <= 0x1bc9e1.00M
) ||
(1.04M
c >= 0x1d1651.04M
&&
c <= 0x1d169994k
)
330
1.11M
    || 
(1.04M
c >= 0x1d16d1.04M
&&
c <= 0x1d172994k
) ||
(1.04M
c >= 0x1d17b1.04M
&&
c <= 0x1d182994k
) ||
(1.04M
c >= 0x1d1851.04M
&&
c <= 0x1d18b994k
) ||
(1.04M
c >= 0x1d1aa1.04M
&&
c <= 0x1d1ad994k
)
331
1.11M
    || 
(1.04M
c >= 0x1d2421.04M
&&
c <= 0x1d244994k
) ||
(1.04M
c >= 0x1d4001.04M
&&
c <= 0x1d454994k
) ||
(1.04M
c >= 0x1d4561.04M
&&
c <= 0x1d49c994k
) ||
(1.04M
c >= 0x1d49e1.04M
&&
c <= 0x1d49f994k
)
332
1.11M
    || 
c == 0x1d4a21.04M
||
(1.04M
c >= 0x1d4a51.04M
&&
c <= 0x1d4a6994k
) ||
(1.04M
c >= 0x1d4a91.04M
&&
c <= 0x1d4ac994k
) ||
(1.04M
c >= 0x1d4ae1.04M
&&
c <= 0x1d4b9994k
)
333
1.11M
    || 
c == 0x1d4bb1.04M
||
(1.04M
c >= 0x1d4bd1.04M
&&
c <= 0x1d4c3994k
) ||
(1.04M
c >= 0x1d4c51.04M
&&
c <= 0x1d505994k
) ||
(1.04M
c >= 0x1d5071.04M
&&
c <= 0x1d50a994k
)
334
1.11M
    || 
(1.04M
c >= 0x1d50d1.04M
&&
c <= 0x1d514994k
) ||
(1.04M
c >= 0x1d5161.04M
&&
c <= 0x1d51c994k
) ||
(1.04M
c >= 0x1d51e1.04M
&&
c <= 0x1d539994k
) ||
(1.04M
c >= 0x1d53b1.04M
&&
c <= 0x1d53e993k
)
335
1.11M
    || 
(1.04M
c >= 0x1d5401.04M
&&
c <= 0x1d544993k
) ||
c == 0x1d5461.04M
||
(1.04M
c >= 0x1d54a1.04M
&&
c <= 0x1d550993k
) ||
(1.04M
c >= 0x1d5521.04M
&&
c <= 0x1d6a5993k
)
336
1.11M
    || 
(1.04M
c >= 0x1d6a81.04M
&&
c <= 0x1d6c0993k
) ||
(1.04M
c >= 0x1d6c21.04M
&&
c <= 0x1d6da993k
) ||
(1.04M
c >= 0x1d6dc1.04M
&&
c <= 0x1d6fa993k
) ||
(1.04M
c >= 0x1d6fc1.04M
&&
c <= 0x1d714993k
)
337
1.11M
    || 
(1.04M
c >= 0x1d7161.04M
&&
c <= 0x1d734993k
) ||
(1.04M
c >= 0x1d7361.04M
&&
c <= 0x1d74e993k
) ||
(1.04M
c >= 0x1d7501.04M
&&
c <= 0x1d76e993k
) ||
(1.04M
c >= 0x1d7701.04M
&&
c <= 0x1d788993k
)
338
1.11M
    || 
(1.04M
c >= 0x1d78a1.04M
&&
c <= 0x1d7a8993k
) ||
(1.04M
c >= 0x1d7aa1.04M
&&
c <= 0x1d7c2993k
) ||
(1.04M
c >= 0x1d7c41.04M
&&
c <= 0x1d7cb993k
) ||
(1.04M
c >= 0x1d7ce1.04M
&&
c <= 0x1d7ff993k
)
339
1.11M
    || 
(1.04M
c >= 0x1da001.04M
&&
c <= 0x1da36992k
) ||
(1.04M
c >= 0x1da3b1.04M
&&
c <= 0x1da6c992k
) ||
c == 0x1da751.04M
||
c == 0x1da841.04M
340
1.11M
    || 
(1.04M
c >= 0x1da9b1.04M
&&
c <= 0x1da9f992k
) ||
(1.04M
c >= 0x1daa11.04M
&&
c <= 0x1daaf992k
) ||
(1.04M
c >= 0x1e0001.04M
&&
c <= 0x1e006991k
) ||
(1.04M
c >= 0x1e0081.04M
&&
c <= 0x1e018991k
)
341
1.11M
    || 
(1.04M
c >= 0x1e01b1.04M
&&
c <= 0x1e021991k
) ||
(1.04M
c >= 0x1e0231.04M
&&
c <= 0x1e024991k
) ||
(1.04M
c >= 0x1e0261.04M
&&
c <= 0x1e02a991k
) ||
(1.04M
c >= 0x1e8001.04M
&&
c <= 0x1e8c4989k
)
342
1.11M
    || 
(1.04M
c >= 0x1e8d01.04M
&&
c <= 0x1e8d6988k
) ||
(1.04M
c >= 0x1e9001.04M
&&
c <= 0x1e94a988k
) ||
(1.04M
c >= 0x1e9501.04M
&&
c <= 0x1e959988k
) ||
(1.04M
c >= 0x1ee001.04M
&&
c <= 0x1ee03987k
)
343
1.11M
    || 
(1.04M
c >= 0x1ee051.04M
&&
c <= 0x1ee1f987k
) ||
(1.04M
c >= 0x1ee211.04M
&&
c <= 0x1ee22987k
) ||
c == 0x1ee241.04M
||
c == 0x1ee271.04M
344
1.11M
    || 
(1.04M
c >= 0x1ee291.04M
&&
c <= 0x1ee32987k
) ||
(1.04M
c >= 0x1ee341.04M
&&
c <= 0x1ee37987k
) ||
c == 0x1ee391.04M
||
c == 0x1ee3b1.04M
345
1.11M
    || 
c == 0x1ee421.04M
||
c == 0x1ee471.04M
||
c == 0x1ee491.04M
||
c == 0x1ee4b1.04M
346
1.11M
    || 
(1.04M
c >= 0x1ee4d1.04M
&&
c <= 0x1ee4f987k
) ||
(1.04M
c >= 0x1ee511.04M
&&
c <= 0x1ee52987k
) ||
c == 0x1ee541.04M
||
c == 0x1ee571.04M
347
1.11M
    || 
c == 0x1ee591.04M
||
c == 0x1ee5b1.04M
||
c == 0x1ee5d1.04M
||
c == 0x1ee5f1.04M
348
1.11M
    || 
(1.04M
c >= 0x1ee611.04M
&&
c <= 0x1ee62987k
) ||
c == 0x1ee641.04M
||
(1.04M
c >= 0x1ee671.04M
&&
c <= 0x1ee6a987k
) ||
(1.04M
c >= 0x1ee6c1.04M
&&
c <= 0x1ee72987k
)
349
1.11M
    || 
(1.04M
c >= 0x1ee741.04M
&&
c <= 0x1ee77987k
) ||
(1.04M
c >= 0x1ee791.04M
&&
c <= 0x1ee7c987k
) ||
c == 0x1ee7e1.04M
||
(1.04M
c >= 0x1ee801.04M
&&
c <= 0x1ee89987k
)
350
1.11M
    || 
(1.04M
c >= 0x1ee8b1.04M
&&
c <= 0x1ee9b987k
) ||
(1.04M
c >= 0x1eea11.04M
&&
c <= 0x1eea3987k
) ||
(1.04M
c >= 0x1eea51.04M
&&
c <= 0x1eea9987k
) ||
(1.04M
c >= 0x1eeab1.04M
&&
c <= 0x1eebb987k
)
351
1.11M
    || 
(1.04M
c >= 0x200001.04M
&&
c <= 0x2a6d6983k
) ||
(1.00M
c >= 0x2a7001.00M
&&
c <= 0x2b734940k
) ||
(1.00M
c >= 0x2b7401.00M
&&
c <= 0x2b81d936k
) ||
(1.00M
c >= 0x2b8201.00M
&&
c <= 0x2cea1935k
)
352
1.11M
    || 
(994k
c >= 0x2ceb0994k
&&
c <= 0x2ebe0930k
) ||
(986k
c >= 0x2f800986k
&&
c <= 0x2fa1d919k
) ||
(986k
c >= 0xe0100986k
&&
c <= 0xe01ef196k
);
353
1.11M
}
354
355
1.11M
bool isDigit(char32_t c) {
356
1.11M
  return c >= '0' && 
c <= '9'1.11M
;
357
1.11M
}
358
359
1.11M
bool isHexDigit(char32_t c) {
360
1.11M
  return (c >= '0' && 
c <= '9'1.11M
)
361
1.11M
    || 
(1.11M
c >= 'A'1.11M
&&
c <= 'F'1.11M
)
362
1.11M
    || 
(1.11M
c >= 'a'1.11M
&&
c <= 'f'1.11M
);
363
1.11M
}
364
365
} // namespace util