Improve escaped character parsing
This commit is contained in:
parent
63584525f2
commit
c4837ca9b0
@ -17,6 +17,25 @@ static bool iswhitespace(char& character) {
|
||||
static std::optional<char> get_escaped(std::string_view inspected) {
|
||||
if (inspected == "n")
|
||||
return '\n';
|
||||
if (inspected == "r")
|
||||
return '\r';
|
||||
if (inspected == "t")
|
||||
return '\t';
|
||||
if (inspected.size() <= 3) {
|
||||
for (char c : inspected) {
|
||||
std::cout << c << std::endl;
|
||||
if (!std::isdigit(c))
|
||||
return {};
|
||||
if (std::stoi(std::string{ c }) > 8)
|
||||
return {};
|
||||
}
|
||||
unsigned int x;
|
||||
std::stringstream ss;
|
||||
ss << std::oct << inspected;
|
||||
ss >> x;
|
||||
|
||||
return static_cast<char>(x);
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
@ -162,15 +181,15 @@ namespace token {
|
||||
std::string escaped_content{};
|
||||
if ((i + 1) >= text_length) break;
|
||||
auto potential = get_escaped(escaped_content + text[++i]);
|
||||
std::cout << "\"" << escaped_content << "\"" << std::endl;
|
||||
while (potential.has_value() && (i + 1) < text_length) {
|
||||
escaped_content += text[i];
|
||||
std::cout << "\"" << escaped_content << "\"" << std::endl;
|
||||
potential = get_escaped(escaped_content + text[++i]);
|
||||
}
|
||||
if (escaped_content.size() > 0) {
|
||||
auto escaped = get_escaped(escaped_content);
|
||||
if (escaped.has_value())
|
||||
content += *escaped;
|
||||
}
|
||||
|
||||
c = text[i];
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user