OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2010 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
153 | 153 |
154 bool valid = false; | 154 bool valid = false; |
155 double value = string.toDouble(&valid); | 155 double value = string.toDouble(&valid); |
156 return checkDoubleValue(value, valid, fallbackValue); | 156 return checkDoubleValue(value, valid, fallbackValue); |
157 } | 157 } |
158 | 158 |
159 template <typename CharacterType> | 159 template <typename CharacterType> |
160 static bool parseHTMLIntegerInternal(const CharacterType* position, | 160 static bool parseHTMLIntegerInternal(const CharacterType* position, |
161 const CharacterType* end, | 161 const CharacterType* end, |
162 int& value) { | 162 int& value) { |
163 // Step 3 | |
tkent
2016/10/06 14:37:42
Adding a comment why the implementation is differe
rwlbuis
2016/10/06 15:10:44
Done.
| |
164 int sign = 1; | |
165 | |
166 // Step 4 | 163 // Step 4 |
167 while (position < end) { | 164 while (position < end) { |
168 if (!isHTMLSpace<CharacterType>(*position)) | 165 if (!isHTMLSpace<CharacterType>(*position)) |
169 break; | 166 break; |
170 ++position; | 167 ++position; |
171 } | 168 } |
172 | 169 |
173 // Step 5 | 170 // Step 5 |
174 if (position == end) | 171 if (position == end) |
175 return false; | 172 return false; |
176 ASSERT(position < end); | 173 ASSERT(position < end); |
177 | 174 |
178 // Step 6 | 175 // Step 6 |
176 StringBuilder digits; | |
179 if (*position == '-') { | 177 if (*position == '-') { |
180 sign = -1; | 178 digits.append('-'); |
181 ++position; | 179 ++position; |
182 } else if (*position == '+') | 180 } else if (*position == '+') |
183 ++position; | 181 ++position; |
184 if (position == end) | 182 if (position == end) |
185 return false; | 183 return false; |
186 ASSERT(position < end); | 184 ASSERT(position < end); |
187 | 185 |
188 // Step 7 | 186 // Step 7 |
189 if (!isASCIIDigit(*position)) | 187 if (!isASCIIDigit(*position)) |
190 return false; | 188 return false; |
191 | 189 |
192 // Step 8 | 190 // Step 8 |
193 StringBuilder digits; | |
194 while (position < end) { | 191 while (position < end) { |
195 if (!isASCIIDigit(*position)) | 192 if (!isASCIIDigit(*position)) |
196 break; | 193 break; |
197 digits.append(*position++); | 194 digits.append(*position++); |
198 } | 195 } |
199 | 196 |
200 // Step 9 | 197 // Step 9 |
201 bool ok; | 198 bool ok; |
202 if (digits.is8Bit()) | 199 if (digits.is8Bit()) |
203 value = sign * | 200 value = charactersToIntStrict(digits.characters8(), digits.length(), &ok); |
204 charactersToIntStrict(digits.characters8(), digits.length(), &ok); | |
205 else | 201 else |
206 value = sign * | 202 value = charactersToIntStrict(digits.characters16(), digits.length(), &ok); |
207 charactersToIntStrict(digits.characters16(), digits.length(), &ok); | |
208 return ok; | 203 return ok; |
209 } | 204 } |
210 | 205 |
211 // http://www.whatwg.org/specs/web-apps/current-work/#rules-for-parsing-integers | 206 // http://www.whatwg.org/specs/web-apps/current-work/#rules-for-parsing-integers |
212 bool parseHTMLInteger(const String& input, int& value) { | 207 bool parseHTMLInteger(const String& input, int& value) { |
213 // Step 1 | 208 // Step 1 |
214 // Step 2 | 209 // Step 2 |
215 unsigned length = input.length(); | 210 unsigned length = input.length(); |
216 if (!length || input.is8Bit()) { | 211 if (!length || input.is8Bit()) { |
217 const LChar* start = input.characters8(); | 212 const LChar* start = input.characters8(); |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
490 string = StringImpl::create8BitIfPossible(characters, size); | 485 string = StringImpl::create8BitIfPossible(characters, size); |
491 else if (width == Force8Bit) | 486 else if (width == Force8Bit) |
492 string = String::make8BitFrom16BitSource(characters, size); | 487 string = String::make8BitFrom16BitSource(characters, size); |
493 else | 488 else |
494 string = String(characters, size); | 489 string = String(characters, size); |
495 | 490 |
496 return string; | 491 return string; |
497 } | 492 } |
498 | 493 |
499 } // namespace blink | 494 } // namespace blink |
OLD | NEW |