Select Git revision
-
Carl Philipp Klemm authored
improve relaxis translateor
Carl Philipp Klemm authoredimprove relaxis translateor
strops.cpp 3.83 KiB
#include "strops.h"
#include <algorithm>
#include <cassert>
#include "log.h"
char getOpposingBracketChar(const char ch)
{
switch(ch)
{
case '(':
return ')';
case ')':
return '(';
case '{':
return '}';
case '}':
return '{';
case '[':
return ']';
case ']':
return '[';
case '<':
return '>';
default:
eis::Log(eis::Log::ERROR)<<ch<<" is not a valid bracket char";
assert(false);
}
return 'x';
}
std::vector<std::string> tokenize(const std::string& str, const char delim, const char ignBracketStart, const char ignBracketEnd, const char escapeChar)
{
std::vector<std::string> tokens;
std::string token;
size_t bracketCounter = 0;
for(size_t i = 0; i < str.size(); ++i)
{
if(str[i] == delim && bracketCounter == 0 && (i == 0 || str[i-1] != escapeChar))
{
tokens.push_back(token);
token.clear();
}
else
{
token.push_back(str[i]);
}
if(ignBracketStart == str[i])
++bracketCounter;
else if(ignBracketEnd == str[i])
--bracketCounter;
}
if(bracketCounter == 0)
tokens.push_back(token);
return tokens;
}
std::vector<std::string> tokenizeBinaryIgnore(const std::string& str, const char delim, const char ignoreBraket, const char escapeChar)
{
std::vector<std::string> tokens;
std::string token;
bool inBaracket = false;
for(size_t i = 0; i < str.size(); ++i)
{
if(str[i] == delim && !inBaracket && (i == 0 || str[i-1] != escapeChar))
{
tokens.push_back(token);