| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of _interceptors; | 5 part of _interceptors; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * The interceptor class for [String]. The compiler recognizes this | 8 * The interceptor class for [String]. The compiler recognizes this |
| 9 * class as an interceptor, and changes references to [:this:] to | 9 * class as an interceptor, and changes references to [:this:] to |
| 10 * actually use the receiver of the method, which is generated as an extra | 10 * actually use the receiver of the method, which is generated as an extra |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 int otherLength = other.length; | 35 int otherLength = other.length; |
| 36 if (otherLength > length) return false; | 36 if (otherLength > length) return false; |
| 37 return other == substring(length - otherLength); | 37 return other == substring(length - otherLength); |
| 38 } | 38 } |
| 39 | 39 |
| 40 String replaceAll(Pattern from, String to) { | 40 String replaceAll(Pattern from, String to) { |
| 41 checkString(to); | 41 checkString(to); |
| 42 return stringReplaceAllUnchecked(this, from, to); | 42 return stringReplaceAllUnchecked(this, from, to); |
| 43 } | 43 } |
| 44 | 44 |
| 45 String replaceAllMapped(Pattern from, String convert(Match match)) { |
| 46 return this.splitMapJoin(from, onMatch: convert); |
| 47 } |
| 48 |
| 49 String splitMapJoin(Pattern from, |
| 50 {String onMatch(Match match), |
| 51 String onNonMatch(String nonMatch)}) { |
| 52 return stringReplaceAllFuncUnchecked(this, from, onMatch, onNonMatch); |
| 53 } |
| 54 |
| 45 String replaceFirst(Pattern from, String to) { | 55 String replaceFirst(Pattern from, String to) { |
| 46 checkString(to); | 56 checkString(to); |
| 47 return stringReplaceFirstUnchecked(this, from, to); | 57 return stringReplaceFirstUnchecked(this, from, to); |
| 48 } | 58 } |
| 49 | 59 |
| 50 List<String> split(Pattern pattern) { | 60 List<String> split(Pattern pattern) { |
| 51 checkNull(pattern); | 61 checkNull(pattern); |
| 52 if (pattern is String) { | 62 if (pattern is String) { |
| 53 return JS('=List', r'#.split(#)', this, pattern); | 63 return JS('=List', r'#.split(#)', this, pattern); |
| 54 } else if (pattern is JSSyntaxRegExp) { | 64 } else if (pattern is JSSyntaxRegExp) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 74 String substring(int startIndex, [int endIndex]) { | 84 String substring(int startIndex, [int endIndex]) { |
| 75 checkNum(startIndex); | 85 checkNum(startIndex); |
| 76 if (endIndex == null) endIndex = length; | 86 if (endIndex == null) endIndex = length; |
| 77 checkNum(endIndex); | 87 checkNum(endIndex); |
| 78 if (startIndex < 0 ) throw new RangeError.value(startIndex); | 88 if (startIndex < 0 ) throw new RangeError.value(startIndex); |
| 79 if (startIndex > endIndex) throw new RangeError.value(startIndex); | 89 if (startIndex > endIndex) throw new RangeError.value(startIndex); |
| 80 if (endIndex > length) throw new RangeError.value(endIndex); | 90 if (endIndex > length) throw new RangeError.value(endIndex); |
| 81 return JS('String', r'#.substring(#, #)', this, startIndex, endIndex); | 91 return JS('String', r'#.substring(#, #)', this, startIndex, endIndex); |
| 82 } | 92 } |
| 83 | 93 |
| 94 String slice([int startIndex, int endIndex]) { |
| 95 int start, end; |
| 96 if (startIndex == null) { |
| 97 start = 0; |
| 98 } else if (startIndex is! int) { |
| 99 throw new ArgumentError("startIndex is not int"); |
| 100 } else if (startIndex >= 0) { |
| 101 start = startIndex; |
| 102 } else { |
| 103 start = this.length + startIndex; |
| 104 } |
| 105 if (start < 0 || start > this.length) { |
| 106 throw new RangeError( |
| 107 "startIndex out of range: $startIndex (length: $length)"); |
| 108 } |
| 109 if (endIndex == null) { |
| 110 end = this.length; |
| 111 } else if (endIndex is! int) { |
| 112 throw new ArgumentError("endIndex is not int"); |
| 113 } else if (endIndex >= 0) { |
| 114 end = endIndex; |
| 115 } else { |
| 116 end = this.length + endIndex; |
| 117 } |
| 118 if (end < 0 || end > this.length) { |
| 119 throw new RangeError( |
| 120 "endIndex out of range: $endIndex (length: $length)"); |
| 121 } |
| 122 if (end < start) { |
| 123 throw new ArgumentError( |
| 124 "End before start: $endIndex < $startIndex (length: $length)"); |
| 125 } |
| 126 return JS('String', '#.substring(#, #)', this, start, end); |
| 127 } |
| 128 |
| 129 |
| 84 String toLowerCase() { | 130 String toLowerCase() { |
| 85 return JS('String', r'#.toLowerCase()', this); | 131 return JS('String', r'#.toLowerCase()', this); |
| 86 } | 132 } |
| 87 | 133 |
| 88 String toUpperCase() { | 134 String toUpperCase() { |
| 89 return JS('String', r'#.toUpperCase()', this); | 135 return JS('String', r'#.toUpperCase()', this); |
| 90 } | 136 } |
| 91 | 137 |
| 92 String trim() { | 138 String trim() { |
| 93 return JS('String', r'#.trim()', this); | 139 return JS('String', r'#.trim()', this); |
| 94 } | 140 } |
| 95 | 141 |
| 96 List<int> get charCodes { | 142 List<int> get charCodes { |
| 97 List<int> result = new List<int>(length); | 143 List<int> result = new List<int>.fixedLength(length); |
| 98 for (int i = 0; i < length; i++) { | 144 for (int i = 0; i < length; i++) { |
| 99 result[i] = JS('int', '#.charCodeAt(#)', this, i); | 145 result[i] = JS('int', '#.charCodeAt(#)', this, i); |
| 100 } | 146 } |
| 101 return result; | 147 return result; |
| 102 } | 148 } |
| 103 | 149 |
| 104 int indexOf(String other, [int start = 0]) { | 150 int indexOf(String other, [int start = 0]) { |
| 105 checkNull(other); | 151 checkNull(other); |
| 106 if (start is !int) throw new ArgumentError(start); | 152 if (start is !int) throw new ArgumentError(start); |
| 107 if (other is !String) throw new ArgumentError(other); | 153 if (other is !String) throw new ArgumentError(other); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 Type get runtimeType => String; | 209 Type get runtimeType => String; |
| 164 | 210 |
| 165 int get length => JS('int', r'#.length', this); | 211 int get length => JS('int', r'#.length', this); |
| 166 | 212 |
| 167 String operator [](int index) { | 213 String operator [](int index) { |
| 168 if (index is !int) throw new ArgumentError(index); | 214 if (index is !int) throw new ArgumentError(index); |
| 169 if (index >= length || index < 0) throw new RangeError.value(index); | 215 if (index >= length || index < 0) throw new RangeError.value(index); |
| 170 return JS('String', '#[#]', this, index); | 216 return JS('String', '#[#]', this, index); |
| 171 } | 217 } |
| 172 } | 218 } |
| OLD | NEW |