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 dart.utf; | 5 part of dart.utf; |
6 | 6 |
7 const int _UTF8_ONE_BYTE_MAX = 0x7f; | 7 const int _UTF8_ONE_BYTE_MAX = 0x7f; |
8 const int _UTF8_TWO_BYTE_MAX = 0x7ff; | 8 const int _UTF8_TWO_BYTE_MAX = 0x7ff; |
9 const int _UTF8_THREE_BYTE_MAX = 0xffff; | 9 const int _UTF8_THREE_BYTE_MAX = 0xffff; |
10 | 10 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 encodedLength++; | 79 encodedLength++; |
80 } else if (value <= _UTF8_TWO_BYTE_MAX) { | 80 } else if (value <= _UTF8_TWO_BYTE_MAX) { |
81 encodedLength += 2; | 81 encodedLength += 2; |
82 } else if (value <= _UTF8_THREE_BYTE_MAX) { | 82 } else if (value <= _UTF8_THREE_BYTE_MAX) { |
83 encodedLength += 3; | 83 encodedLength += 3; |
84 } else if (value <= UNICODE_VALID_RANGE_MAX) { | 84 } else if (value <= UNICODE_VALID_RANGE_MAX) { |
85 encodedLength += 4; | 85 encodedLength += 4; |
86 } | 86 } |
87 } | 87 } |
88 | 88 |
89 List<int> encoded = new List<int>.fixedLength(encodedLength); | 89 List<int> encoded = new List<int>(encodedLength); |
90 int insertAt = 0; | 90 int insertAt = 0; |
91 for (int value in source) { | 91 for (int value in source) { |
92 if (value < 0 || value > UNICODE_VALID_RANGE_MAX) { | 92 if (value < 0 || value > UNICODE_VALID_RANGE_MAX) { |
93 encoded.setRange(insertAt, 3, [0xef, 0xbf, 0xbd]); | 93 encoded.setRange(insertAt, 3, [0xef, 0xbf, 0xbd]); |
94 insertAt += 3; | 94 insertAt += 3; |
95 } else if (value <= _UTF8_ONE_BYTE_MAX) { | 95 } else if (value <= _UTF8_ONE_BYTE_MAX) { |
96 encoded[insertAt] = value; | 96 encoded[insertAt] = value; |
97 insertAt++; | 97 insertAt++; |
98 } else if (value <= _UTF8_TWO_BYTE_MAX) { | 98 } else if (value <= _UTF8_TWO_BYTE_MAX) { |
99 encoded[insertAt] = _UTF8_FIRST_BYTE_OF_TWO_BASE | ( | 99 encoded[insertAt] = _UTF8_FIRST_BYTE_OF_TWO_BASE | ( |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 | 166 |
167 Utf8Decoder._fromListRangeIterator(_ListRange source, [ | 167 Utf8Decoder._fromListRangeIterator(_ListRange source, [ |
168 this.replacementCodepoint = | 168 this.replacementCodepoint = |
169 UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) : | 169 UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) : |
170 utf8EncodedBytesIterator = source.iterator; | 170 utf8EncodedBytesIterator = source.iterator; |
171 | 171 |
172 /** Decode the remaininder of the characters in this decoder | 172 /** Decode the remaininder of the characters in this decoder |
173 * into a [List<int>]. | 173 * into a [List<int>]. |
174 */ | 174 */ |
175 List<int> decodeRest() { | 175 List<int> decodeRest() { |
176 List<int> codepoints = new List<int>.fixedLength(utf8EncodedBytesIterator.re
maining); | 176 List<int> codepoints = new List<int>(utf8EncodedBytesIterator.remaining); |
177 int i = 0; | 177 int i = 0; |
178 while (moveNext()) { | 178 while (moveNext()) { |
179 codepoints[i++] = current; | 179 codepoints[i++] = current; |
180 } | 180 } |
181 if (i == codepoints.length) { | 181 if (i == codepoints.length) { |
182 return codepoints; | 182 return codepoints; |
183 } else { | 183 } else { |
184 List<int> truncCodepoints = new List<int>.fixedLength(i); | 184 List<int> truncCodepoints = new List<int>(i); |
185 truncCodepoints.setRange(0, i, codepoints); | 185 truncCodepoints.setRange(0, i, codepoints); |
186 return truncCodepoints; | 186 return truncCodepoints; |
187 } | 187 } |
188 } | 188 } |
189 | 189 |
190 int get current => _current; | 190 int get current => _current; |
191 | 191 |
192 bool moveNext() { | 192 bool moveNext() { |
193 _current = null; | 193 _current = null; |
194 | 194 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 return true; | 266 return true; |
267 } else if (replacementCodepoint != null) { | 267 } else if (replacementCodepoint != null) { |
268 _current = replacementCodepoint; | 268 _current = replacementCodepoint; |
269 return true; | 269 return true; |
270 } else { | 270 } else { |
271 throw new ArgumentError( | 271 throw new ArgumentError( |
272 "Invalid UTF8 at ${utf8EncodedBytesIterator.position - j}"); | 272 "Invalid UTF8 at ${utf8EncodedBytesIterator.position - j}"); |
273 } | 273 } |
274 } | 274 } |
275 } | 275 } |
OLD | NEW |