← index
MasterX_System/compiler/ETL/ir.cpp
Source: MasterX_System/compiler/ETL/ir.cpp
#include "parser.hpp"

#include "ir.hpp"


namespace ir {
    std::string escapeString(const std::string &input) {
        std::ostringstream escaped;
        if(input.length() > 0 && input.at(0) == '\"') {
            for (size_t i = 1; i < input.length()-1; ++i) {
                char c = input.at(i);
                switch (c) {
                    case '\n': escaped << "\\n"; break;
                    case '\t': escaped << "\\t"; break;
                    case '\r': escaped << "\\r"; break;
                    case '\v': escaped << "\\v"; break;
                    case '\b': escaped << "\\b"; break;
                    case '\f': escaped << "\\f"; break;
                    case '\a': escaped << "\\a"; break;
                    case '\\': escaped << "\\\\"; break;
                    case '\"': escaped << "\\\""; break;
                    case '\0': escaped << "\\0"; break;
                    default:
                        if (std::isprint(static_cast<unsigned char>(c))) {
                            escaped << c;
                        } else {
                            escaped << "\\x" << std::setw(2) << std::setfill('0') << std::hex << static_cast<int>(static_cast<unsigned char>(c));
                        }
                        break;
                }
            }
            return "\"" + escaped.str() + "\"";
        }
        return input;
    }
}