| 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 patch class String { | 5 patch class String { |
| 6 /* patch */ factory String.fromCharCodes(Iterable<int> charCodes) { | 6 /* patch */ factory String.fromCharCodes(Iterable<int> charCodes) { |
| 7 return _StringBase.createFromCharCodes(charCodes); | 7 return _StringBase.createFromCharCodes(charCodes); |
| 8 } | 8 } |
| 9 } | 9 } |
| 10 | 10 |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 if ((startIndex + 1) == endIndex) { | 193 if ((startIndex + 1) == endIndex) { |
| 194 return this[startIndex]; | 194 return this[startIndex]; |
| 195 } | 195 } |
| 196 return _substringUncheckedNative(startIndex, endIndex); | 196 return _substringUncheckedNative(startIndex, endIndex); |
| 197 } | 197 } |
| 198 | 198 |
| 199 String _substringUncheckedNative(int startIndex, int endIndex) | 199 String _substringUncheckedNative(int startIndex, int endIndex) |
| 200 native "StringBase_substringUnchecked"; | 200 native "StringBase_substringUnchecked"; |
| 201 | 201 |
| 202 // Checks for one-byte whitespaces only. | 202 // Checks for one-byte whitespaces only. |
| 203 // TODO(srdjan): Investigate if 0x85 (NEL) and 0xA0 (NBSP) are valid | |
| 204 // whitespaces for one byte strings. | |
| 205 static bool _isOneByteWhitespace(int codePoint) { | 203 static bool _isOneByteWhitespace(int codePoint) { |
| 206 return | 204 return |
| 207 (codePoint == 32) || // Space. | 205 (codePoint == 32) || // Space. |
| 208 ((9 <= codePoint) && (codePoint <= 13)); // CR, LF, TAB, etc. | 206 ((9 <= codePoint) && (codePoint <= 13)) || // CR, LF, TAB, etc. |
| 207 (codePoint == 0x85) || // NEL |
| 208 (codePoint == 0xA0); // NBSP |
| 209 } |
| 210 |
| 211 // Characters in the Zl category: |
| 212 // U+0020 SPACE |
| 213 // U+00A0 NO-BREAK SPACE |
| 214 // U+1680 OGHAM SPACE MARK |
| 215 // U+180E MONGOLIAN VOWEL SEPARATOR |
| 216 // U+2000 EN QUAD |
| 217 // U+2001 EM QUAD |
| 218 // U+2002 EN SPACE |
| 219 // U+2003 EM SPACE |
| 220 // U+2004 THREE-PER-EM SPACE |
| 221 // U+2005 FOUR-PER-EM SPACE |
| 222 // U+2006 SIX-PER-EM SPACE |
| 223 // U+2007 FIGURE SPACE |
| 224 // U+2008 PUNCTUATION SPACE |
| 225 // U+2009 THIN SPACE |
| 226 // U+200A HAIR SPACE |
| 227 // U+202F NARROW NO-BREAK SPACE |
| 228 // U+205F MEDIUM MATHEMATICAL SPACE |
| 229 // U+3000 IDEOGRAPHIC SPACE |
| 230 // |
| 231 // Characters in the Zl category: 0x2028 |
| 232 // Characters in the Zp category: 0x2029 |
| 233 // BOM: 0xFEFF |
| 234 static bool _isTwoByteWhitespace(int codePoint) { |
| 235 if (codePoint < 256) return _isOneByteWhitespace(codePoint); |
| 236 return (codePoint == 0x1680) || |
| 237 (codePoint == 0x180E) || |
| 238 ((0x2000 <= codePoint) && (codePoint <= 0x200A)) || |
| 239 (codePoint == 0x202F) || |
| 240 (codePoint == 0x205F) || |
| 241 (codePoint == 0x3000) || |
| 242 (codePoint == 0x2028) || |
| 243 (codePoint == 0x2029) || |
| 244 (codePoint == 0xFEFF); |
| 209 } | 245 } |
| 210 | 246 |
| 211 String trim() { | 247 String trim() { |
| 212 final int len = this.length; | 248 final int len = this.length; |
| 213 int first = 0; | 249 int first = 0; |
| 214 for (; first < len; first++) { | 250 for (; first < len; first++) { |
| 215 if (!_isWhitespace(this.codeUnitAt(first))) { | 251 if (!_isWhitespace(this.codeUnitAt(first))) { |
| 216 break; | 252 break; |
| 217 } | 253 } |
| 218 } | 254 } |
| (...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 566 } | 602 } |
| 567 | 603 |
| 568 | 604 |
| 569 class _TwoByteString extends _StringBase implements String { | 605 class _TwoByteString extends _StringBase implements String { |
| 570 factory _TwoByteString._uninstantiable() { | 606 factory _TwoByteString._uninstantiable() { |
| 571 throw new UnsupportedError( | 607 throw new UnsupportedError( |
| 572 "_TwoByteString can only be allocated by the VM"); | 608 "_TwoByteString can only be allocated by the VM"); |
| 573 } | 609 } |
| 574 | 610 |
| 575 bool _isWhitespace(int codePoint) { | 611 bool _isWhitespace(int codePoint) { |
| 576 // For now we only check for one byte white space characters. | 612 return _StringBase._isTwoByteWhitespace(codePoint); |
| 577 return _StringBase._isOneByteWhitespace(codePoint); | |
| 578 } | 613 } |
| 579 } | 614 } |
| 580 | 615 |
| 581 | 616 |
| 582 class _ExternalOneByteString extends _StringBase implements String { | 617 class _ExternalOneByteString extends _StringBase implements String { |
| 583 factory _ExternalOneByteString._uninstantiable() { | 618 factory _ExternalOneByteString._uninstantiable() { |
| 584 throw new UnsupportedError( | 619 throw new UnsupportedError( |
| 585 "_ExternalOneByteString can only be allocated by the VM"); | 620 "_ExternalOneByteString can only be allocated by the VM"); |
| 586 } | 621 } |
| 587 | 622 |
| 588 bool _isWhitespace(int codePoint) { | 623 bool _isWhitespace(int codePoint) { |
| 589 return _StringBase._isOneByteWhitespace(codePoint); | 624 return _StringBase._isOneByteWhitespace(codePoint); |
| 590 } | 625 } |
| 591 } | 626 } |
| 592 | 627 |
| 593 | 628 |
| 594 class _ExternalTwoByteString extends _StringBase implements String { | 629 class _ExternalTwoByteString extends _StringBase implements String { |
| 595 factory _ExternalTwoByteString._uninstantiable() { | 630 factory _ExternalTwoByteString._uninstantiable() { |
| 596 throw new UnsupportedError( | 631 throw new UnsupportedError( |
| 597 "_ExternalTwoByteString can only be allocated by the VM"); | 632 "_ExternalTwoByteString can only be allocated by the VM"); |
| 598 } | 633 } |
| 599 | 634 |
| 600 bool _isWhitespace(int codePoint) { | 635 bool _isWhitespace(int codePoint) { |
| 601 // For now we only check for one byte white space characters. | 636 return _StringBase._isTwoByteWhitespace(codePoint); |
| 602 return _StringBase._isOneByteWhitespace(codePoint); | |
| 603 } | 637 } |
| 604 } | 638 } |
| 605 | 639 |
| 606 | 640 |
| 607 class _StringMatch implements Match { | 641 class _StringMatch implements Match { |
| 608 const _StringMatch(int this.start, | 642 const _StringMatch(int this.start, |
| 609 String this.str, | 643 String this.str, |
| 610 String this.pattern); | 644 String this.pattern); |
| 611 | 645 |
| 612 int get end => start + pattern.length; | 646 int get end => start + pattern.length; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 639 class _CodeUnits extends Object with ListMixin<int>, | 673 class _CodeUnits extends Object with ListMixin<int>, |
| 640 UnmodifiableListMixin<int> { | 674 UnmodifiableListMixin<int> { |
| 641 /** The string that this is the code units of. */ | 675 /** The string that this is the code units of. */ |
| 642 String _string; | 676 String _string; |
| 643 | 677 |
| 644 _CodeUnits(this._string); | 678 _CodeUnits(this._string); |
| 645 | 679 |
| 646 int get length => _string.length; | 680 int get length => _string.length; |
| 647 int operator[](int i) => _string.codeUnitAt(i); | 681 int operator[](int i) => _string.codeUnitAt(i); |
| 648 } | 682 } |
| OLD | NEW |