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 intl; | 5 part of intl; |
6 /** | 6 /** |
7 * Provides the ability to format a number in a locale-specific way. The | 7 * Provides the ability to format a number in a locale-specific way. The |
8 * format is specified as a pattern using a subset of the ICU formatting | 8 * format is specified as a pattern using a subset of the ICU formatting |
9 * patterns. | 9 * patterns. |
10 * | 10 * |
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
468 format._positivePrefix = _parseAffix(); | 468 format._positivePrefix = _parseAffix(); |
469 var trunk = _parseTrunk(); | 469 var trunk = _parseTrunk(); |
470 format._positiveSuffix = _parseAffix(); | 470 format._positiveSuffix = _parseAffix(); |
471 // If we have separate positive and negative patterns, now parse the | 471 // If we have separate positive and negative patterns, now parse the |
472 // the negative version. | 472 // the negative version. |
473 if (pattern.current == _NumberFormatParser._PATTERN_SEPARATOR) { | 473 if (pattern.current == _NumberFormatParser._PATTERN_SEPARATOR) { |
474 pattern.moveNext(); | 474 pattern.moveNext(); |
475 format._negativePrefix = _parseAffix(); | 475 format._negativePrefix = _parseAffix(); |
476 // Skip over the negative trunk, verifying that it's identical to the | 476 // Skip over the negative trunk, verifying that it's identical to the |
477 // positive trunk. | 477 // positive trunk. |
478 for (var each in _iterator(trunk)) { | 478 for (var each in _iterable(trunk)) { |
479 if (pattern.current != each && pattern.current != null) { | 479 if (pattern.current != each && pattern.current != null) { |
480 throw new FormatException( | 480 throw new FormatException( |
481 "Positive and negative trunks must be the same"); | 481 "Positive and negative trunks must be the same"); |
482 } | 482 } |
483 pattern.moveNext(); | 483 pattern.moveNext(); |
484 } | 484 } |
485 format._negativeSuffix = _parseAffix(); | 485 format._negativeSuffix = _parseAffix(); |
486 } else { | 486 } else { |
487 // If no negative affix is specified, they share the same positive affix. | 487 // If no negative affix is specified, they share the same positive affix. |
488 format._negativePrefix = format._positivePrefix + format._negativePrefix; | 488 format._negativePrefix = format._positivePrefix + format._negativePrefix; |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
713 default: | 713 default: |
714 return false; | 714 return false; |
715 } | 715 } |
716 trunk.write(ch); | 716 trunk.write(ch); |
717 pattern.moveNext(); | 717 pattern.moveNext(); |
718 return true; | 718 return true; |
719 } | 719 } |
720 } | 720 } |
721 | 721 |
722 /** | 722 /** |
723 * Returns an [Iterable] on the string as a list of substrings. | |
724 */ | |
725 Iterable _iterable(String s) => new _StringIterable(s); | |
726 | |
727 /** | |
723 * Return an iterator on the string as a list of substrings. | 728 * Return an iterator on the string as a list of substrings. |
724 */ | 729 */ |
725 Iterator _iterator(String s) => new _StringIterator(s); | 730 Iterator _iterator(String s) => new _StringIterator(s); |
726 | 731 |
732 // TODO(nweiz): remove this when issue 3780 is fixed. | |
Alan Knight
2013/04/18 19:42:25
I wasn't getting any warnings from this in the edi
nweiz
2013/04/18 19:59:23
They showed up when running the analyzer. It's wei
Alan Knight
2013/04/18 20:07:18
The code runs fine because the iterator also imple
| |
733 /** | |
734 * Provides an Iterable that wraps [_iterator] so it can be used in a `for` | |
735 * loop. | |
736 */ | |
737 class _StringIterable extends Iterable<String> { | |
738 final Iterator<String> iterator; | |
739 | |
740 _StringIterable(String s) | |
741 : iterator = _iterator(s); | |
742 } | |
743 | |
727 /** | 744 /** |
728 * Provides an iterator over a string as a list of substrings, and also | 745 * Provides an iterator over a string as a list of substrings, and also |
729 * gives us a lookahead of one via the [peek] method. | 746 * gives us a lookahead of one via the [peek] method. |
730 */ | 747 */ |
731 class _StringIterator implements Iterator<String> { | 748 class _StringIterator implements Iterator<String> { |
732 String input; | 749 String input; |
733 var index = -1; | 750 var index = -1; |
734 inBounds(i) => i >= 0 && i < input.length; | 751 inBounds(i) => i >= 0 && i < input.length; |
735 _StringIterator(this.input); | 752 _StringIterator(this.input); |
736 String get current => inBounds(index) ? input[index] : null; | 753 String get current => inBounds(index) ? input[index] : null; |
737 | 754 |
738 bool moveNext() => inBounds(++index); | 755 bool moveNext() => inBounds(++index); |
739 String get peek => inBounds(index + 1) ? input[index + 1] : null; | 756 String get peek => inBounds(index + 1) ? input[index + 1] : null; |
740 Iterator<String> get iterator => this; | 757 Iterator<String> get iterator => this; |
741 } | 758 } |
OLD | NEW |