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 // TODO(jmesserly): would be nice to have this on String (dartbug.com/6501). | 5 // TODO(jmesserly): would be nice to have this on String (dartbug.com/6501). |
6 /** | 6 /** |
7 * Provide a list of Unicode codepoints for a given string. | 7 * Provide a list of Unicode codepoints for a given string. |
8 */ | 8 */ |
9 List<int> stringToCodepoints(String str) { | 9 List<int> stringToCodepoints(String str) { |
10 // Note: str.charCodes gives us 16-bit code units on all Dart implementations. | 10 // Note: str.charCodes gives us 16-bit code units on all Dart implementations. |
11 // So we need to convert. The same is not true of "new String.fromCharCodes", | 11 // So we need to convert. |
12 // which accepts code points on the VM but not dart2js (dartbug.com/1357). | |
13 return _utf16CodeUnitsToCodepoints(str.charCodes); | 12 return _utf16CodeUnitsToCodepoints(str.charCodes); |
14 } | 13 } |
15 | 14 |
16 /** | 15 /** |
17 * Generate a string from the provided Unicode codepoints. | 16 * Generate a string from the provided Unicode codepoints. |
18 */ | 17 */ |
19 String codepointsToString(List<int> codepoints) { | 18 String codepointsToString(List<int> codepoints) { |
20 // TODO _is16BitCodeUnit() is used to work around a bug with dart2js | 19 return new String.fromCharCodes(codepoints); |
21 // (http://code.google.com/p/dart/issues/detail?id=1357). Consider | |
22 // removing after this issue is resolved. | |
23 if (_is16BitCodeUnit()) { | |
24 return new String.fromCharCodes( | |
25 _codepointsToUtf16CodeUnits(codepoints)); | |
26 } else { | |
27 return new String.fromCharCodes(codepoints); | |
28 } | |
29 } | |
30 | |
31 /* | |
32 * Test for presence of bug related to the use of UTF-16 code units for | |
33 * Dart compiled to JS. | |
34 */ | |
35 bool _test16BitCodeUnit = null; | |
36 // TODO _is16BitCodeUnit() is used to work around a bug with dart2js | |
37 // (http://code.google.com/p/dart/issues/detail?id=1357). Consider | |
38 // removing after this issue is resolved. | |
39 bool _is16BitCodeUnit() { | |
40 if (_test16BitCodeUnit == null) { | |
41 _test16BitCodeUnit = (new String.fromCharCodes([0x1D11E])) == | |
42 (new String.fromCharCodes([0xD11E])); | |
43 } | |
44 return _test16BitCodeUnit; | |
45 } | 20 } |
46 | 21 |
47 /** | 22 /** |
48 * Invalid codepoints or encodings may be substituted with the value U+fffd. | 23 * Invalid codepoints or encodings may be substituted with the value U+fffd. |
49 */ | 24 */ |
50 const int UNICODE_REPLACEMENT_CHARACTER_CODEPOINT = 0xfffd; | 25 const int UNICODE_REPLACEMENT_CHARACTER_CODEPOINT = 0xfffd; |
51 const int UNICODE_BOM = 0xfeff; | 26 const int UNICODE_BOM = 0xfeff; |
52 const int UNICODE_UTF_BOM_LO = 0xff; | 27 const int UNICODE_UTF_BOM_LO = 0xff; |
53 const int UNICODE_UTF_BOM_HI = 0xfe; | 28 const int UNICODE_UTF_BOM_HI = 0xfe; |
54 | 29 |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 _offset -= by; | 236 _offset -= by; |
262 } | 237 } |
263 | 238 |
264 int get remaining => _end - _offset; | 239 int get remaining => _end - _offset; |
265 | 240 |
266 void skip([int count = 1]) { | 241 void skip([int count = 1]) { |
267 _offset += count; | 242 _offset += count; |
268 } | 243 } |
269 } | 244 } |
270 | 245 |
OLD | NEW |