| 9215 | } |
| 9216 | |
| 9217 | std::string Tokenizer::simplifyString(const std::string &source) |
| 9218 | { |
| 9219 | std::string str = source; |
| 9220 | |
| 9221 | for (std::string::size_type i = 0; i + 1U < str.size(); ++i) { |
| 9222 | if (str[i] != '\\') |
| 9223 | continue; |
| 9224 | |
| 9225 | int c = 'a'; // char |
| 9226 | int sz = 0; // size of stringdata |
| 9227 | if (str[i+1] == 'x') { |
| 9228 | sz = 2; |
| 9229 | while (sz < 4 && std::isxdigit(static_cast<unsigned char>(str[i+sz]))) |
| 9230 | sz++; |
| 9231 | if (sz > 2) { |
| 9232 | std::istringstream istr(str.substr(i+2, sz-2)); |
| 9233 | istr >> std::hex >> c; |
| 9234 | } |
| 9235 | } else if (MathLib::isOctalDigit(str[i+1])) { |
| 9236 | sz = 2; |
| 9237 | while (sz < 4 && MathLib::isOctalDigit(str[i+sz])) |
| 9238 | sz++; |
| 9239 | std::istringstream istr(str.substr(i+1, sz-1)); |
| 9240 | istr >> std::oct >> c; |
| 9241 | str = str.replace(i, sz, std::string(1U, static_cast<char>(c))); |
| 9242 | continue; |
| 9243 | } |
| 9244 | |
| 9245 | if (sz <= 2) |
| 9246 | i++; |
| 9247 | else if (i+sz < str.size()) |
| 9248 | str.replace(i, sz, std::string(1U, static_cast<char>(c))); |
| 9249 | else |
| 9250 | str.replace(i, str.size() - i - 1U, "a"); |
| 9251 | } |
| 9252 | |
| 9253 | return str; |
| 9254 | } |
| 9255 | |
| 9256 | void Tokenizer::simplifyFunctionTryCatch() |
| 9257 | { |