Files
textmate/Frameworks/regexp/src/parser_base.cc
Allan Odgaard 9894969e67 Initial commit
2012-08-09 16:25:56 +02:00

44 lines
965 B
C++

#include "parser_base.h"
parser_base_t::parser_base_t (std::string const& str)
{
it = str.data();
last = str.data() + str.size();
}
bool parser_base_t::parse_char (char const* ch)
{
return it != last && strchr(ch, *it) ? (++it, true) : false;
}
bool parser_base_t::parse_chars (char const* chars, std::string& res)
{
res.clear();
while(it != last && strchr(chars, *it))
res += *it++;
return !res.empty();
}
bool parser_base_t::parse_int (size_t& res)
{
if(it == last || !isdigit(*it))
return false;
res = 0;
for(; it != last && isdigit(*it); ++it)
res = (res * 10) + (*it - '0');
return true;
}
bool parser_base_t::parse_until (char const* stopChars, std::string& res)
{
res.clear();
char const* backtrack = it;
for(; it != last && !strchr(stopChars, *it); ++it)
{
if(*it == '\\' && it+1 != last && (it[1] == '\\' || strchr(stopChars, it[1])))
++it;
res += *it;
}
return parse_char(stopChars) ? true : (it = backtrack, false);
}