mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-06-11 07:18:11 -05:00
Fix SimpleLexer not being able to read escaped strings
This commit is contained in:
91
src/Utils/Utils/StringUtils.cpp
Normal file
91
src/Utils/Utils/StringUtils.cpp
Normal file
@ -0,0 +1,91 @@
|
||||
#include "StringUtils.h"
|
||||
|
||||
#include <sstream>
|
||||
|
||||
namespace utils
|
||||
{
|
||||
std::string EscapeStringForQuotationMarks(const std::string_view& str)
|
||||
{
|
||||
std::ostringstream ss;
|
||||
EscapeStringForQuotationMarks(ss, str);
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
void EscapeStringForQuotationMarks(std::ostream& stream, const std::string_view& str)
|
||||
{
|
||||
for (const auto& c : str)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '\r':
|
||||
stream << "\\r";
|
||||
break;
|
||||
case '\n':
|
||||
stream << "\\n";
|
||||
break;
|
||||
case '\t':
|
||||
stream << "\\t";
|
||||
break;
|
||||
case '\f':
|
||||
stream << "\\f";
|
||||
break;
|
||||
case '"':
|
||||
stream << "\\\"";
|
||||
break;
|
||||
case '\\':
|
||||
stream << "\\\\";
|
||||
break;
|
||||
default:
|
||||
stream << c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string UnescapeStringFromQuotationMarks(const std::string_view& str)
|
||||
{
|
||||
std::ostringstream ss;
|
||||
UnescapeStringFromQuotationMarks(ss, str);
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
void UnescapeStringFromQuotationMarks(std::ostream& stream, const std::string_view& str)
|
||||
{
|
||||
auto inEscape = false;
|
||||
for (const auto& c : str)
|
||||
{
|
||||
if (inEscape)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case 'r':
|
||||
stream << "\r";
|
||||
break;
|
||||
case 'n':
|
||||
stream << "\n";
|
||||
break;
|
||||
case 't':
|
||||
stream << "\t";
|
||||
break;
|
||||
case 'f':
|
||||
stream << "\f";
|
||||
break;
|
||||
case '"':
|
||||
stream << "\"";
|
||||
break;
|
||||
case '\\':
|
||||
stream << "\\";
|
||||
break;
|
||||
default:
|
||||
stream << c;
|
||||
break;
|
||||
}
|
||||
inEscape = false;
|
||||
}
|
||||
else if (c != '\\')
|
||||
stream << c;
|
||||
else
|
||||
inEscape = true;
|
||||
}
|
||||
}
|
||||
}
|
10
src/Utils/Utils/StringUtils.h
Normal file
10
src/Utils/Utils/StringUtils.h
Normal file
@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
#include <string>
|
||||
|
||||
namespace utils
|
||||
{
|
||||
std::string EscapeStringForQuotationMarks(const std::string_view& str);
|
||||
void EscapeStringForQuotationMarks(std::ostream& stream, const std::string_view& str);
|
||||
std::string UnescapeStringFromQuotationMarks(const std::string_view& str);
|
||||
void UnescapeStringFromQuotationMarks(std::ostream& stream, const std::string_view& str);
|
||||
}
|
Reference in New Issue
Block a user