| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google 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 are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 | 93 |
| 94 static unsigned countDigits(const String& src, unsigned start) { | 94 static unsigned countDigits(const String& src, unsigned start) { |
| 95 unsigned index = start; | 95 unsigned index = start; |
| 96 for (; index < src.length(); ++index) { | 96 for (; index < src.length(); ++index) { |
| 97 if (!isASCIIDigit(src[index])) | 97 if (!isASCIIDigit(src[index])) |
| 98 break; | 98 break; |
| 99 } | 99 } |
| 100 return index - start; | 100 return index - start; |
| 101 } | 101 } |
| 102 | 102 |
| 103 // Very strict integer parser. Do not allow leading or trailing whitespace unlik
e charactersToIntStrict(). | 103 // Very strict integer parser. Do not allow leading or trailing whitespace |
| 104 // unlike charactersToIntStrict(). |
| 104 static bool toInt(const String& src, | 105 static bool toInt(const String& src, |
| 105 unsigned parseStart, | 106 unsigned parseStart, |
| 106 unsigned parseLength, | 107 unsigned parseLength, |
| 107 int& out) { | 108 int& out) { |
| 108 if (parseStart + parseLength > src.length() || !parseLength) | 109 if (parseStart + parseLength > src.length() || !parseLength) |
| 109 return false; | 110 return false; |
| 110 int value = 0; | 111 int value = 0; |
| 111 unsigned current = parseStart; | 112 unsigned current = parseStart; |
| 112 unsigned end = current + parseLength; | 113 unsigned end = current + parseLength; |
| 113 | 114 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 if (year < DateComponents::minimumYear()) | 170 if (year < DateComponents::minimumYear()) |
| 170 return false; | 171 return false; |
| 171 if (year < DateComponents::maximumYear()) | 172 if (year < DateComponents::maximumYear()) |
| 172 return true; | 173 return true; |
| 173 if (month < maximumMonthInMaximumYear) | 174 if (month < maximumMonthInMaximumYear) |
| 174 return true; | 175 return true; |
| 175 if (monthDay < maximumDayInMaximumMonth) | 176 if (monthDay < maximumDayInMaximumMonth) |
| 176 return true; | 177 return true; |
| 177 if (monthDay > maximumDayInMaximumMonth) | 178 if (monthDay > maximumDayInMaximumMonth) |
| 178 return false; | 179 return false; |
| 179 // (year, month, monthDay) = (maximumYear, maximumMonthInMaximumYear, maximumD
ayInMaximumMonth) | 180 // (year, month, monthDay) = |
| 181 // (maximumYear, maximumMonthInMaximumYear, maximumDayInMaximumMonth) |
| 180 return !hour && !minute && !second && !millisecond; | 182 return !hour && !minute && !second && !millisecond; |
| 181 } | 183 } |
| 182 | 184 |
| 183 bool DateComponents::addDay(int dayDiff) { | 185 bool DateComponents::addDay(int dayDiff) { |
| 184 ASSERT(m_monthDay); | 186 ASSERT(m_monthDay); |
| 185 | 187 |
| 186 int day = m_monthDay + dayDiff; | 188 int day = m_monthDay + dayDiff; |
| 187 if (day > maxDayOfMonth(m_year, m_month)) { | 189 if (day > maxDayOfMonth(m_year, m_month)) { |
| 188 day = m_monthDay; | 190 day = m_monthDay; |
| 189 int year = m_year; | 191 int year = m_year; |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 if (!addDay(carry)) | 278 if (!addDay(carry)) |
| 277 return false; | 279 return false; |
| 278 if (!withinHTMLDateLimits(m_year, m_month, m_monthDay, hour, minute, m_second, | 280 if (!withinHTMLDateLimits(m_year, m_month, m_monthDay, hour, minute, m_second, |
| 279 m_millisecond)) | 281 m_millisecond)) |
| 280 return false; | 282 return false; |
| 281 m_minute = minute; | 283 m_minute = minute; |
| 282 m_hour = hour; | 284 m_hour = hour; |
| 283 return true; | 285 return true; |
| 284 } | 286 } |
| 285 | 287 |
| 286 // Parses a timezone part, and adjust year, month, monthDay, hour, minute, secon
d, millisecond. | 288 // Parses a timezone part, and adjust year, month, monthDay, hour, minute, |
| 289 // second, millisecond. |
| 287 bool DateComponents::parseTimeZone(const String& src, | 290 bool DateComponents::parseTimeZone(const String& src, |
| 288 unsigned start, | 291 unsigned start, |
| 289 unsigned& end) { | 292 unsigned& end) { |
| 290 if (start >= src.length()) | 293 if (start >= src.length()) |
| 291 return false; | 294 return false; |
| 292 unsigned index = start; | 295 unsigned index = start; |
| 293 if (src[index] == 'Z') { | 296 if (src[index] == 'Z') { |
| 294 end = index + 1; | 297 end = index + 1; |
| 295 return true; | 298 return true; |
| 296 } | 299 } |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 526 if (!setMillisecondsSinceEpochForDateInternal(ms)) | 529 if (!setMillisecondsSinceEpochForDateInternal(ms)) |
| 527 return false; | 530 return false; |
| 528 if (!withinHTMLDateLimits(m_year, m_month, m_monthDay, m_hour, m_minute, | 531 if (!withinHTMLDateLimits(m_year, m_month, m_monthDay, m_hour, m_minute, |
| 529 m_second, m_millisecond)) | 532 m_second, m_millisecond)) |
| 530 return false; | 533 return false; |
| 531 m_type = DateTime; | 534 m_type = DateTime; |
| 532 return true; | 535 return true; |
| 533 } | 536 } |
| 534 | 537 |
| 535 bool DateComponents::setMillisecondsSinceEpochForDateTimeLocal(double ms) { | 538 bool DateComponents::setMillisecondsSinceEpochForDateTimeLocal(double ms) { |
| 536 // Internal representation of DateTimeLocal is the same as DateTime except m_t
ype. | 539 // Internal representation of DateTimeLocal is the same as DateTime except |
| 540 // m_type. |
| 537 if (!setMillisecondsSinceEpochForDateTime(ms)) | 541 if (!setMillisecondsSinceEpochForDateTime(ms)) |
| 538 return false; | 542 return false; |
| 539 m_type = DateTimeLocal; | 543 m_type = DateTimeLocal; |
| 540 return true; | 544 return true; |
| 541 } | 545 } |
| 542 | 546 |
| 543 bool DateComponents::setMillisecondsSinceEpochForMonth(double ms) { | 547 bool DateComponents::setMillisecondsSinceEpochForMonth(double ms) { |
| 544 m_type = Invalid; | 548 m_type = Invalid; |
| 545 if (!std::isfinite(ms)) | 549 if (!std::isfinite(ms)) |
| 546 return false; | 550 return false; |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 708 case Week: | 712 case Week: |
| 709 return String::format("%04d-W%02d", m_year, m_week); | 713 return String::format("%04d-W%02d", m_year, m_week); |
| 710 case Invalid: | 714 case Invalid: |
| 711 break; | 715 break; |
| 712 } | 716 } |
| 713 ASSERT_NOT_REACHED(); | 717 ASSERT_NOT_REACHED(); |
| 714 return String("(Invalid DateComponents)"); | 718 return String("(Invalid DateComponents)"); |
| 715 } | 719 } |
| 716 | 720 |
| 717 } // namespace blink | 721 } // namespace blink |
| OLD | NEW |