| OLD | NEW | 
|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 804 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 815 } | 815 } | 
| 816 | 816 | 
| 817 std::string JoinString(const std::vector<std::string>& parts, char sep) { | 817 std::string JoinString(const std::vector<std::string>& parts, char sep) { | 
| 818   return JoinStringT(parts, sep); | 818   return JoinStringT(parts, sep); | 
| 819 } | 819 } | 
| 820 | 820 | 
| 821 string16 JoinString(const std::vector<string16>& parts, char16 sep) { | 821 string16 JoinString(const std::vector<string16>& parts, char16 sep) { | 
| 822   return JoinStringT(parts, sep); | 822   return JoinStringT(parts, sep); | 
| 823 } | 823 } | 
| 824 | 824 | 
| 825 template<typename STR> |  | 
| 826 void SplitStringAlongWhitespaceT(const STR& str, std::vector<STR>* result) { |  | 
| 827   const size_t length = str.length(); |  | 
| 828   if (!length) |  | 
| 829     return; |  | 
| 830 |  | 
| 831   bool last_was_ws = false; |  | 
| 832   size_t last_non_ws_start = 0; |  | 
| 833   for (size_t i = 0; i < length; ++i) { |  | 
| 834     switch (str[i]) { |  | 
| 835       // HTML 5 defines whitespace as: space, tab, LF, line tab, FF, or CR. |  | 
| 836       case L' ': |  | 
| 837       case L'\t': |  | 
| 838       case L'\xA': |  | 
| 839       case L'\xB': |  | 
| 840       case L'\xC': |  | 
| 841       case L'\xD': |  | 
| 842         if (!last_was_ws) { |  | 
| 843           if (i > 0) { |  | 
| 844             result->push_back( |  | 
| 845                 str.substr(last_non_ws_start, i - last_non_ws_start)); |  | 
| 846           } |  | 
| 847           last_was_ws = true; |  | 
| 848         } |  | 
| 849         break; |  | 
| 850 |  | 
| 851       default:  // Not a space character. |  | 
| 852         if (last_was_ws) { |  | 
| 853           last_was_ws = false; |  | 
| 854           last_non_ws_start = i; |  | 
| 855         } |  | 
| 856         break; |  | 
| 857     } |  | 
| 858   } |  | 
| 859   if (!last_was_ws) { |  | 
| 860     result->push_back( |  | 
| 861         str.substr(last_non_ws_start, length - last_non_ws_start)); |  | 
| 862   } |  | 
| 863 } |  | 
| 864 |  | 
| 865 void SplitStringAlongWhitespace(const std::wstring& str, |  | 
| 866                                 std::vector<std::wstring>* result) { |  | 
| 867   SplitStringAlongWhitespaceT(str, result); |  | 
| 868 } |  | 
| 869 |  | 
| 870 #if !defined(WCHAR_T_IS_UTF16) |  | 
| 871 void SplitStringAlongWhitespace(const string16& str, |  | 
| 872                                 std::vector<string16>* result) { |  | 
| 873   SplitStringAlongWhitespaceT(str, result); |  | 
| 874 } |  | 
| 875 #endif |  | 
| 876 |  | 
| 877 void SplitStringAlongWhitespace(const std::string& str, |  | 
| 878                                 std::vector<std::string>* result) { |  | 
| 879   SplitStringAlongWhitespaceT(str, result); |  | 
| 880 } |  | 
| 881 |  | 
| 882 template<class FormatStringType, class OutStringType> | 825 template<class FormatStringType, class OutStringType> | 
| 883 OutStringType DoReplaceStringPlaceholders(const FormatStringType& format_string, | 826 OutStringType DoReplaceStringPlaceholders(const FormatStringType& format_string, | 
| 884     const std::vector<OutStringType>& subst, std::vector<size_t>* offsets) { | 827     const std::vector<OutStringType>& subst, std::vector<size_t>* offsets) { | 
| 885   size_t substitutions = subst.size(); | 828   size_t substitutions = subst.size(); | 
| 886   DCHECK(substitutions < 10); | 829   DCHECK(substitutions < 10); | 
| 887 | 830 | 
| 888   size_t sub_length = 0; | 831   size_t sub_length = 0; | 
| 889   for (typename std::vector<OutStringType>::const_iterator iter = subst.begin(); | 832   for (typename std::vector<OutStringType>::const_iterator iter = subst.begin(); | 
| 890        iter != subst.end(); ++iter) { | 833        iter != subst.end(); ++iter) { | 
| 891     sub_length += iter->length(); | 834     sub_length += iter->length(); | 
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1177       int rstr_len = (max_len - 3) / 2; | 1120       int rstr_len = (max_len - 3) / 2; | 
| 1178       int lstr_len = rstr_len + ((max_len - 3) % 2); | 1121       int lstr_len = rstr_len + ((max_len - 3) % 2); | 
| 1179       output->assign(input.substr(0, lstr_len) + L"..." + | 1122       output->assign(input.substr(0, lstr_len) + L"..." + | 
| 1180                      input.substr(input.length() - rstr_len)); | 1123                      input.substr(input.length() - rstr_len)); | 
| 1181       break; | 1124       break; | 
| 1182     } | 1125     } | 
| 1183   } | 1126   } | 
| 1184 | 1127 | 
| 1185   return true; | 1128   return true; | 
| 1186 } | 1129 } | 
| OLD | NEW | 
|---|