string result;
for(string::const_iterator i=str.begin(); i!=str.end(); ++i)
{
- if(numeric_type==1)
+ if(numeric_type==16)
{
unsigned digit=0;
if(*i>='0' && *i<='9')
numeric_type=0;
}
}
- else if(numeric_type==2)
+ else if(numeric_type==8)
{
unsigned digit=0;
if(*i>='0' && *i<='7')
else
throw InvalidParameterValue("Invalid octal digit");
- if(numeric_pos==0 && digit>3)
- throw InvalidParameterValue("Octal escape sequence must start with [0-3]");
-
numeric_value=(numeric_value<<3 | digit);
++numeric_pos;
- if(numeric_pos==2)
+ if(numeric_pos==3)
{
result+=numeric_value;
numeric_type=0;
}
else if(escape)
{
- if(*i=='x' || (*i>='0' && *i<='7'))
+ if(*i=='x')
{
- numeric_type=(*i=='x' ? 1 : 2);
+ numeric_type=16;
numeric_pos=0;
numeric_value=0;
}
+ else if(*i>='0' && *i<='3')
+ {
+ numeric_type=8;
+ numeric_pos=1;
+ numeric_value=*i-'0';
+ }
else if(*i=='n')
result+='\n';
else if(*i=='t')