129 {
130 bool escape_mode = false;
131 std::string::const_iterator it = star_end_string;
132 ++it;
133 std::string::const_iterator fi = it;
134 while (fi != buf_end && ((lut[(
uint8_t)*fi] & 32)) == 0)
135 ++fi;
136 val.assign(it, fi);
137 val.reserve(std::distance(star_end_string, buf_end));
138 it = fi;
139 for(;it != buf_end;it++)
140 {
141 if(escape_mode)
142 {
143 switch(*it)
144 {
145 case 'b':
146 val.push_back(0x08);break;
147 case 'f':
148 val.push_back(0x0C);break;
149 case 'n':
150 val.push_back('\n');break;
151 case 'r':
152 val.push_back('\r');break;
153 case 't':
154 val.push_back('\t');break;
155 case 'v':
156 val.push_back('\v');break;
157 case '\'':
158 val.push_back('\'');break;
159 case '"':
160 val.push_back('"');break;
161 case '\\':
162 val.push_back('\\');break;
163 case '/':
164 val.push_back('/');break;
165 default:
166 val.push_back(*it);
167 LOG_PRINT_L0(
"Unknown escape sequence :\"\\" << *it <<
"\"");
168 }
169 escape_mode = false;
170 }else if(*it == '"')
171 {
172 star_end_string = it;
173 return;
174 }else if(*it == '\\')
175 {
176 escape_mode = true;
177 }
178 else
179 {
180 val.push_back(*it);
181 }
182 }
183 ASSERT_MES_AND_THROW(
"Failed to match string in json entry: " << std::string(star_end_string, buf_end));
184 }