| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/strings/string_util.h" | 5 #include "base/strings/string_util.h" |
| 6 | 6 |
| 7 #include <ctype.h> | 7 #include <ctype.h> |
| 8 #include <errno.h> | 8 #include <errno.h> |
| 9 #include <math.h> | 9 #include <math.h> |
| 10 #include <stdarg.h> | 10 #include <stdarg.h> |
| (...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 STR result; | 327 STR result; |
| 328 result.resize(text.size()); | 328 result.resize(text.size()); |
| 329 | 329 |
| 330 // Set flags to pretend we're already in a trimmed whitespace sequence, so we | 330 // Set flags to pretend we're already in a trimmed whitespace sequence, so we |
| 331 // will trim any leading whitespace. | 331 // will trim any leading whitespace. |
| 332 bool in_whitespace = true; | 332 bool in_whitespace = true; |
| 333 bool already_trimmed = true; | 333 bool already_trimmed = true; |
| 334 | 334 |
| 335 int chars_written = 0; | 335 int chars_written = 0; |
| 336 for (typename STR::const_iterator i(text.begin()); i != text.end(); ++i) { | 336 for (typename STR::const_iterator i(text.begin()); i != text.end(); ++i) { |
| 337 if (IsWhitespace(*i)) { | 337 if (IsUnicodeWhitespace(*i)) { |
| 338 if (!in_whitespace) { | 338 if (!in_whitespace) { |
| 339 // Reduce all whitespace sequences to a single space. | 339 // Reduce all whitespace sequences to a single space. |
| 340 in_whitespace = true; | 340 in_whitespace = true; |
| 341 result[chars_written++] = L' '; | 341 result[chars_written++] = L' '; |
| 342 } | 342 } |
| 343 if (trim_sequences_with_line_breaks && !already_trimmed && | 343 if (trim_sequences_with_line_breaks && !already_trimmed && |
| 344 ((*i == '\n') || (*i == '\r'))) { | 344 ((*i == '\n') || (*i == '\r'))) { |
| 345 // Whitespace sequences containing CR or LF are eliminated entirely. | 345 // Whitespace sequences containing CR or LF are eliminated entirely. |
| 346 already_trimmed = true; | 346 already_trimmed = true; |
| 347 --chars_written; | 347 --chars_written; |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 610 if (search.size() > str.size()) | 610 if (search.size() > str.size()) |
| 611 return false; | 611 return false; |
| 612 return std::equal(search.begin(), search.end(), | 612 return std::equal(search.begin(), search.end(), |
| 613 str.begin() + (str.size() - search.size()), | 613 str.begin() + (str.size() - search.size()), |
| 614 CaseInsensitiveCompare<char16>()); | 614 CaseInsensitiveCompare<char16>()); |
| 615 } | 615 } |
| 616 return EndsWith(StringPiece16(str), StringPiece16(search), | 616 return EndsWith(StringPiece16(str), StringPiece16(search), |
| 617 CompareCase::SENSITIVE); | 617 CompareCase::SENSITIVE); |
| 618 } | 618 } |
| 619 | 619 |
| 620 } // namespace base | 620 char HexDigitToInt(wchar_t c) { |
| 621 DCHECK(IsHexDigit(c)); |
| 622 if (c >= '0' && c <= '9') |
| 623 return static_cast<char>(c - '0'); |
| 624 if (c >= 'A' && c <= 'F') |
| 625 return static_cast<char>(c - 'A' + 10); |
| 626 if (c >= 'a' && c <= 'f') |
| 627 return static_cast<char>(c - 'a' + 10); |
| 628 return 0; |
| 629 } |
| 621 | 630 |
| 622 static const char* const kByteStringsUnlocalized[] = { | 631 static const char* const kByteStringsUnlocalized[] = { |
| 623 " B", | 632 " B", |
| 624 " kB", | 633 " kB", |
| 625 " MB", | 634 " MB", |
| 626 " GB", | 635 " GB", |
| 627 " TB", | 636 " TB", |
| 628 " PB" | 637 " PB" |
| 629 }; | 638 }; |
| 630 | 639 |
| 631 string16 FormatBytesUnlocalized(int64 bytes) { | 640 string16 FormatBytesUnlocalized(int64 bytes) { |
| 632 double unit_amount = static_cast<double>(bytes); | 641 double unit_amount = static_cast<double>(bytes); |
| 633 size_t dimension = 0; | 642 size_t dimension = 0; |
| 634 const int kKilo = 1024; | 643 const int kKilo = 1024; |
| 635 while (unit_amount >= kKilo && | 644 while (unit_amount >= kKilo && |
| 636 dimension < arraysize(kByteStringsUnlocalized) - 1) { | 645 dimension < arraysize(kByteStringsUnlocalized) - 1) { |
| 637 unit_amount /= kKilo; | 646 unit_amount /= kKilo; |
| 638 dimension++; | 647 dimension++; |
| 639 } | 648 } |
| 640 | 649 |
| 641 char buf[64]; | 650 char buf[64]; |
| 642 if (bytes != 0 && dimension > 0 && unit_amount < 100) { | 651 if (bytes != 0 && dimension > 0 && unit_amount < 100) { |
| 643 base::snprintf(buf, arraysize(buf), "%.1lf%s", unit_amount, | 652 base::snprintf(buf, arraysize(buf), "%.1lf%s", unit_amount, |
| 644 kByteStringsUnlocalized[dimension]); | 653 kByteStringsUnlocalized[dimension]); |
| 645 } else { | 654 } else { |
| 646 base::snprintf(buf, arraysize(buf), "%.0lf%s", unit_amount, | 655 base::snprintf(buf, arraysize(buf), "%.0lf%s", unit_amount, |
| 647 kByteStringsUnlocalized[dimension]); | 656 kByteStringsUnlocalized[dimension]); |
| 648 } | 657 } |
| 649 | 658 |
| 650 return base::ASCIIToUTF16(buf); | 659 return ASCIIToUTF16(buf); |
| 651 } | 660 } |
| 652 | 661 |
| 662 } // namespace base |
| 663 |
| 653 // Runs in O(n) time in the length of |str|. | 664 // Runs in O(n) time in the length of |str|. |
| 654 template<class StringType> | 665 template<class StringType> |
| 655 void DoReplaceSubstringsAfterOffset(StringType* str, | 666 void DoReplaceSubstringsAfterOffset(StringType* str, |
| 656 size_t offset, | 667 size_t offset, |
| 657 const StringType& find_this, | 668 const StringType& find_this, |
| 658 const StringType& replace_with, | 669 const StringType& replace_with, |
| 659 bool replace_all) { | 670 bool replace_all) { |
| 660 DCHECK(!find_this.empty()); | 671 DCHECK(!find_this.empty()); |
| 661 | 672 |
| 662 // If the find string doesn't appear, there's nothing to do. | 673 // If the find string doesn't appear, there's nothing to do. |
| (...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1107 } | 1118 } |
| 1108 | 1119 |
| 1109 } // namespace | 1120 } // namespace |
| 1110 | 1121 |
| 1111 size_t base::strlcpy(char* dst, const char* src, size_t dst_size) { | 1122 size_t base::strlcpy(char* dst, const char* src, size_t dst_size) { |
| 1112 return lcpyT<char>(dst, src, dst_size); | 1123 return lcpyT<char>(dst, src, dst_size); |
| 1113 } | 1124 } |
| 1114 size_t base::wcslcpy(wchar_t* dst, const wchar_t* src, size_t dst_size) { | 1125 size_t base::wcslcpy(wchar_t* dst, const wchar_t* src, size_t dst_size) { |
| 1115 return lcpyT<wchar_t>(dst, src, dst_size); | 1126 return lcpyT<wchar_t>(dst, src, dst_size); |
| 1116 } | 1127 } |
| OLD | NEW |