OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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/string_util.h" | 5 #include "base/string_util.h" |
6 | 6 |
7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
8 | 8 |
9 #include <ctype.h> | 9 #include <ctype.h> |
10 #include <errno.h> | 10 #include <errno.h> |
(...skipping 761 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
772 } | 772 } |
773 | 773 |
774 std::wstring FormatSpeed(int64 bytes, DataUnits units, bool show_units) { | 774 std::wstring FormatSpeed(int64 bytes, DataUnits units, bool show_units) { |
775 return FormatBytesInternal(bytes, units, show_units, kSpeedStrings); | 775 return FormatBytesInternal(bytes, units, show_units, kSpeedStrings); |
776 } | 776 } |
777 | 777 |
778 template<class StringType> | 778 template<class StringType> |
779 void DoReplaceSubstringsAfterOffset(StringType* str, | 779 void DoReplaceSubstringsAfterOffset(StringType* str, |
780 typename StringType::size_type start_offset, | 780 typename StringType::size_type start_offset, |
781 const StringType& find_this, | 781 const StringType& find_this, |
782 const StringType& replace_with) { | 782 const StringType& replace_with, |
| 783 bool replace_all) { |
783 if ((start_offset == StringType::npos) || (start_offset >= str->length())) | 784 if ((start_offset == StringType::npos) || (start_offset >= str->length())) |
784 return; | 785 return; |
785 | 786 |
786 DCHECK(!find_this.empty()); | 787 DCHECK(!find_this.empty()); |
787 for (typename StringType::size_type offs(str->find(find_this, start_offset)); | 788 for (typename StringType::size_type offs(str->find(find_this, start_offset)); |
788 offs != StringType::npos; offs = str->find(find_this, offs)) { | 789 offs != StringType::npos; offs = str->find(find_this, offs)) { |
789 str->replace(offs, find_this.length(), replace_with); | 790 str->replace(offs, find_this.length(), replace_with); |
790 offs += replace_with.length(); | 791 offs += replace_with.length(); |
| 792 |
| 793 if (!replace_all) |
| 794 break; |
791 } | 795 } |
792 } | 796 } |
793 | 797 |
| 798 void ReplaceFirstSubstringAfterOffset(std::wstring* str, |
| 799 std::wstring::size_type start_offset, |
| 800 const std::wstring& find_this, |
| 801 const std::wstring& replace_with) { |
| 802 DoReplaceSubstringsAfterOffset(str, start_offset, find_this, replace_with, |
| 803 false); // replace first instance |
| 804 } |
| 805 |
| 806 void ReplaceFirstSubstringAfterOffset(std::string* str, |
| 807 std::string::size_type start_offset, |
| 808 const std::string& find_this, |
| 809 const std::string& replace_with) { |
| 810 DoReplaceSubstringsAfterOffset(str, start_offset, find_this, replace_with, |
| 811 false); // replace first instance |
| 812 } |
| 813 |
794 void ReplaceSubstringsAfterOffset(std::wstring* str, | 814 void ReplaceSubstringsAfterOffset(std::wstring* str, |
795 std::wstring::size_type start_offset, | 815 std::wstring::size_type start_offset, |
796 const std::wstring& find_this, | 816 const std::wstring& find_this, |
797 const std::wstring& replace_with) { | 817 const std::wstring& replace_with) { |
798 DoReplaceSubstringsAfterOffset(str, start_offset, find_this, replace_with); | 818 DoReplaceSubstringsAfterOffset(str, start_offset, find_this, replace_with, |
| 819 true); // replace all instances |
799 } | 820 } |
800 | 821 |
801 void ReplaceSubstringsAfterOffset(std::string* str, | 822 void ReplaceSubstringsAfterOffset(std::string* str, |
802 std::string::size_type start_offset, | 823 std::string::size_type start_offset, |
803 const std::string& find_this, | 824 const std::string& find_this, |
804 const std::string& replace_with) { | 825 const std::string& replace_with) { |
805 DoReplaceSubstringsAfterOffset(str, start_offset, find_this, replace_with); | 826 DoReplaceSubstringsAfterOffset(str, start_offset, find_this, replace_with, |
| 827 true); // replace all instances |
806 } | 828 } |
807 | 829 |
808 // Overloaded wrappers around vsnprintf and vswprintf. The buf_size parameter | 830 // Overloaded wrappers around vsnprintf and vswprintf. The buf_size parameter |
809 // is the size of the buffer. These return the number of characters in the | 831 // is the size of the buffer. These return the number of characters in the |
810 // formatted string excluding the NUL terminator. If the buffer is not | 832 // formatted string excluding the NUL terminator. If the buffer is not |
811 // large enough to accommodate the formatted string without truncation, they | 833 // large enough to accommodate the formatted string without truncation, they |
812 // return the number of characters that would be in the fully-formatted string | 834 // return the number of characters that would be in the fully-formatted string |
813 // (vsnprintf, and vswprintf on Windows), or -1 (vswprintf on POSIX platforms). | 835 // (vsnprintf, and vswprintf on Windows), or -1 (vswprintf on POSIX platforms). |
814 inline int vsnprintfT(char* buffer, | 836 inline int vsnprintfT(char* buffer, |
815 size_t buf_size, | 837 size_t buf_size, |
(...skipping 687 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1503 int rstr_len = (max_len - 3) / 2; | 1525 int rstr_len = (max_len - 3) / 2; |
1504 int lstr_len = rstr_len + ((max_len - 3) % 2); | 1526 int lstr_len = rstr_len + ((max_len - 3) % 2); |
1505 output->assign(input.substr(0, lstr_len) + L"..." + | 1527 output->assign(input.substr(0, lstr_len) + L"..." + |
1506 input.substr(input.length() - rstr_len)); | 1528 input.substr(input.length() - rstr_len)); |
1507 break; | 1529 break; |
1508 } | 1530 } |
1509 } | 1531 } |
1510 | 1532 |
1511 return true; | 1533 return true; |
1512 } | 1534 } |
OLD | NEW |