#include "jsonParse.h" #include #include #include void json::jsonParser::LexerError(const char * msg) { throw std::runtime_error(msg); } void json::jsonParser::appendEscape(const char * cphs, std::string & str) { appendEscape(std::strtoul(cphs + 1, nullptr, 16), str); } void json::jsonParser::appendEscape(unsigned long cp, std::string & str) { if (cp <= 0x7F) { str += static_cast(cp); } else if (cp <= 0x7FF) { str += static_cast((cp >> 6) + 192); str += static_cast((cp & 63) + 128); } else if ((0xd800 <= cp && cp <= 0xdfff) || cp > 0x10FFFF) { throw std::range_error("Invalid UTF-8 sequence"); } else if (cp <= 0xFFFF) { str += static_cast((cp >> 12) + 224); str += static_cast(((cp >> 6) & 63) + 128); str += static_cast((cp & 63) + 128); } else { str += static_cast((cp >> 18) + 240); str += static_cast(((cp >> 12) & 63) + 128); str += static_cast(((cp >> 6) & 63) + 128); str += static_cast((cp & 63) + 128); } }