Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(49)

Side by Side Diff: pkg/intl/lib/number_format.dart

Issue 11263040: Make String.charCodes a getter. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 #library("number_format"); 5 #library("number_format");
6 6
7 #import('dart:math'); 7 #import('dart:math');
8 8
9 #import("intl.dart"); 9 #import("intl.dart");
10 #import("number_symbols.dart"); 10 #import("number_symbols.dart");
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 var fractionPresent = _minimumFractionDigits > 0 || fracValue > 0; 162 var fractionPresent = _minimumFractionDigits > 0 || fracValue > 0;
163 163
164 // On dartj2s the integer part may be large enough to be a floating 164 // On dartj2s the integer part may be large enough to be a floating
165 // point value, in which case we reduce it until it is small enough 165 // point value, in which case we reduce it until it is small enough
166 // to be printed as an integer and pad the remainder with zeros. 166 // to be printed as an integer and pad the remainder with zeros.
167 var paddingDigits = new StringBuffer(); 167 var paddingDigits = new StringBuffer();
168 while ((intValue & 0x7fffffff) != intValue) { 168 while ((intValue & 0x7fffffff) != intValue) {
169 paddingDigits.add(symbols.ZERO_DIGIT); 169 paddingDigits.add(symbols.ZERO_DIGIT);
170 intValue = intValue ~/ 10; 170 intValue = intValue ~/ 10;
171 } 171 }
172 var integerDigits = "${intValue}${paddingDigits}".charCodes(); 172 var integerDigits = "${intValue}${paddingDigits}".charCodes;
173 var digitLength = integerDigits.length; 173 var digitLength = integerDigits.length;
174 174
175 if (_hasPrintableIntegerPart(intValue)) { 175 if (_hasPrintableIntegerPart(intValue)) {
176 _pad(_minimumIntegerDigits - digitLength); 176 _pad(_minimumIntegerDigits - digitLength);
177 for (var i = 0; i < digitLength; i++) { 177 for (var i = 0; i < digitLength; i++) {
178 _addDigit(integerDigits[i]); 178 _addDigit(integerDigits[i]);
179 _group(digitLength, i); 179 _group(digitLength, i);
180 } 180 }
181 } else if (!fractionPresent) { 181 } else if (!fractionPresent) {
182 // If neither fraction nor integer part exists, just print zero. 182 // If neither fraction nor integer part exists, just print zero.
183 _addZero(); 183 _addZero();
184 } 184 }
185 185
186 _decimalSeparator(fractionPresent); 186 _decimalSeparator(fractionPresent);
187 _formatFractionPart((fracValue + power).toString()); 187 _formatFractionPart((fracValue + power).toString());
188 } 188 }
189 189
190 /** 190 /**
191 * Format the part after the decimal place in a fixed point number. 191 * Format the part after the decimal place in a fixed point number.
192 */ 192 */
193 void _formatFractionPart(String fractionPart) { 193 void _formatFractionPart(String fractionPart) {
194 var fractionCodes = fractionPart.charCodes(); 194 var fractionCodes = fractionPart.charCodes;
195 var fractionLength = fractionPart.length; 195 var fractionLength = fractionPart.length;
196 while (fractionPart[fractionLength - 1] == '0' && 196 while (fractionPart[fractionLength - 1] == '0' &&
197 fractionLength > _minimumFractionDigits + 1) { 197 fractionLength > _minimumFractionDigits + 1) {
198 fractionLength--; 198 fractionLength--;
199 } 199 }
200 for (var i = 1; i < fractionLength; i++) { 200 for (var i = 1; i < fractionLength; i++) {
201 _addDigit(fractionCodes[i]); 201 _addDigit(fractionCodes[i]);
202 } 202 }
203 } 203 }
204 204
(...skipping 25 matching lines...) Expand all
230 void _add(String x) { _buffer.add(x);} 230 void _add(String x) { _buffer.add(x);}
231 void _addCharCode(int x) { _buffer.addCharCode(x); } 231 void _addCharCode(int x) { _buffer.addCharCode(x); }
232 void _addZero() { _buffer.add(symbols.ZERO_DIGIT); } 232 void _addZero() { _buffer.add(symbols.ZERO_DIGIT); }
233 void _addDigit(int x) { _buffer.addCharCode(_localeZero + x - _zero); } 233 void _addDigit(int x) { _buffer.addCharCode(_localeZero + x - _zero); }
234 234
235 /** Print padding up to [numberOfDigits] above what's included in [basic]. */ 235 /** Print padding up to [numberOfDigits] above what's included in [basic]. */
236 void _pad(int numberOfDigits, [String basic = '']) { 236 void _pad(int numberOfDigits, [String basic = '']) {
237 for (var i = 0; i < numberOfDigits - basic.length; i++) { 237 for (var i = 0; i < numberOfDigits - basic.length; i++) {
238 _add(symbols.ZERO_DIGIT); 238 _add(symbols.ZERO_DIGIT);
239 } 239 }
240 for (var x in basic.charCodes()) { 240 for (var x in basic.charCodes) {
241 _addDigit(x); 241 _addDigit(x);
242 } 242 }
243 } 243 }
244 244
245 /** 245 /**
246 * We are printing the digits of the number from left to right. We may need 246 * We are printing the digits of the number from left to right. We may need
247 * to print a thousands separator or other grouping character as appropriate 247 * to print a thousands separator or other grouping character as appropriate
248 * to the locale. So we find how many places we are from the end of the number 248 * to the locale. So we find how many places we are from the end of the number
249 * by subtracting our current [position] from the [totalLength] and print 249 * by subtracting our current [position] from the [totalLength] and print
250 * the separator character every [_groupingSize] digits. 250 * the separator character every [_groupingSize] digits.
251 */ 251 */
252 void _group(int totalLength, int position) { 252 void _group(int totalLength, int position) {
253 var distanceFromEnd = totalLength - position; 253 var distanceFromEnd = totalLength - position;
254 if (distanceFromEnd <= 1 || _groupingSize <= 0) return; 254 if (distanceFromEnd <= 1 || _groupingSize <= 0) return;
255 if (distanceFromEnd % _groupingSize == 1) { 255 if (distanceFromEnd % _groupingSize == 1) {
256 _add(symbols.GROUP_SEP); 256 _add(symbols.GROUP_SEP);
257 } 257 }
258 } 258 }
259 259
260 /** Returns the code point for the character '0'. */ 260 /** Returns the code point for the character '0'. */
261 int get _zero => '0'.charCodes()[0]; 261 int get _zero => '0'.charCodes[0];
262 262
263 /** Returns the code point for the locale's zero digit. */ 263 /** Returns the code point for the locale's zero digit. */
264 int get _localeZero => symbols.ZERO_DIGIT.charCodeAt(0); 264 int get _localeZero => symbols.ZERO_DIGIT.charCodeAt(0);
265 265
266 /** 266 /**
267 * Returns the prefix for [x] based on whether it's positive or negative. 267 * Returns the prefix for [x] based on whether it's positive or negative.
268 * In en_US this would be '' and '-' respectively. 268 * In en_US this would be '' and '-' respectively.
269 */ 269 */
270 String _signPrefix(num x) { 270 String _signPrefix(num x) {
271 return x.isNegative ? _negativePrefix : _positivePrefix; 271 return x.isNegative ? _negativePrefix : _positivePrefix;
272 } 272 }
273 273
274 /** 274 /**
275 * Returns the suffix for [x] based on wether it's positive or negative. 275 * Returns the suffix for [x] based on wether it's positive or negative.
276 * In en_US there are no suffixes for positive or negative. 276 * In en_US there are no suffixes for positive or negative.
277 */ 277 */
278 String _signSuffix(num x) { 278 String _signSuffix(num x) {
279 return x.isNegative ? _negativeSuffix : _positiveSuffix; 279 return x.isNegative ? _negativeSuffix : _positiveSuffix;
280 } 280 }
281 } 281 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698