diff --git a/src/tokens.cpp b/src/tokens.cpp index e426c12..e4cf365 100644 --- a/src/tokens.cpp +++ b/src/tokens.cpp @@ -17,6 +17,25 @@ static bool iswhitespace(char& character) { static std::optional 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(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]); } - auto escaped = get_escaped(escaped_content); - if (escaped.has_value()) - content += *escaped; + if (escaped_content.size() > 0) { + auto escaped = get_escaped(escaped_content); + if (escaped.has_value()) + content += *escaped; + } c = text[i]; }