OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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.convert; | 5 part of dart.convert; |
6 | 6 |
7 /** | 7 /** |
8 * An instance of the default implementation of the [AsciiCodec]. | 8 * An instance of the default implementation of the [AsciiCodec]. |
9 * | 9 * |
10 * This instance provides a convenient access to the most common ASCII | 10 * This instance provides a convenient access to the most common ASCII |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 | 62 |
63 AsciiEncoder get encoder => const AsciiEncoder(); | 63 AsciiEncoder get encoder => const AsciiEncoder(); |
64 | 64 |
65 AsciiDecoder get decoder => | 65 AsciiDecoder get decoder => |
66 _allowInvalid ? const AsciiDecoder(allowInvalid: true) | 66 _allowInvalid ? const AsciiDecoder(allowInvalid: true) |
67 : const AsciiDecoder(allowInvalid: false); | 67 : const AsciiDecoder(allowInvalid: false); |
68 } | 68 } |
69 | 69 |
70 // Superclass for [AsciiEncoder] and [Latin1Encoder]. | 70 // Superclass for [AsciiEncoder] and [Latin1Encoder]. |
71 // Generalizes common operations that only differ by a mask; | 71 // Generalizes common operations that only differ by a mask; |
72 class _UnicodeSubsetEncoder extends | 72 class _UnicodeSubsetEncoder extends Converter<String, List<int>> { |
73 ChunkedConverter<String, List<int>, String, List<int>> { | |
74 final int _subsetMask; | 73 final int _subsetMask; |
75 | 74 |
76 const _UnicodeSubsetEncoder(this._subsetMask); | 75 const _UnicodeSubsetEncoder(this._subsetMask); |
77 | 76 |
78 /** | 77 /** |
79 * Converts the [String] into a list of its code units. | 78 * Converts the [String] into a list of its code units. |
80 * | 79 * |
81 * If [start] and [end] are provided, only the substring | 80 * If [start] and [end] are provided, only the substring |
82 * `string.substring(start, end)` is used as input to the conversion. | 81 * `string.substring(start, end)` is used as input to the conversion. |
83 */ | 82 */ |
84 List<int> convert(String string, [int start = 0, int end]) { | 83 List<int> convert(String string, [int start = 0, int end]) { |
85 int stringLength = string.length; | 84 int stringLength = string.length; |
86 RangeError.checkValidRange(start, end, stringLength); | 85 RangeError.checkValidRange(start, end, stringLength); |
87 if (end == null) end = stringLength; | 86 if (end == null) end = stringLength; |
88 int length = end - start; | 87 int length = end - start; |
89 List result = new Uint8List(length); | 88 List<int> result = new Uint8List(length); |
90 for (int i = 0; i < length; i++) { | 89 for (int i = 0; i < length; i++) { |
91 var codeUnit = string.codeUnitAt(start + i); | 90 var codeUnit = string.codeUnitAt(start + i); |
92 if ((codeUnit & ~_subsetMask) != 0) { | 91 if ((codeUnit & ~_subsetMask) != 0) { |
93 throw new ArgumentError("String contains invalid characters."); | 92 throw new ArgumentError("String contains invalid characters."); |
94 } | 93 } |
95 result[i] = codeUnit; | 94 result[i] = codeUnit; |
96 } | 95 } |
97 return result; | 96 return result; |
98 } | 97 } |
99 | 98 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 if (isLast) { | 147 if (isLast) { |
149 close(); | 148 close(); |
150 } | 149 } |
151 } | 150 } |
152 } | 151 } |
153 | 152 |
154 /** | 153 /** |
155 * This class converts Latin-1 bytes (lists of unsigned 8-bit integers) | 154 * This class converts Latin-1 bytes (lists of unsigned 8-bit integers) |
156 * to a string. | 155 * to a string. |
157 */ | 156 */ |
158 abstract class _UnicodeSubsetDecoder extends | 157 abstract class _UnicodeSubsetDecoder extends Converter<List<int>, String> { |
159 ChunkedConverter<List<int>, String, List<int>, String> { | |
160 final bool _allowInvalid; | 158 final bool _allowInvalid; |
161 final int _subsetMask; | 159 final int _subsetMask; |
162 | 160 |
163 /** | 161 /** |
164 * Instantiates a new decoder. | 162 * Instantiates a new decoder. |
165 * | 163 * |
166 * The [_allowInvalid] argument defines how [convert] deals | 164 * The [_allowInvalid] argument defines how [convert] deals |
167 * with invalid bytes. | 165 * with invalid bytes. |
168 * | 166 * |
169 * The [_subsetMask] argument is a bit mask used to define the subset | 167 * The [_subsetMask] argument is a bit mask used to define the subset |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 RangeError.checkValidRange(start, end, length); | 301 RangeError.checkValidRange(start, end, length); |
304 if (start < end) { | 302 if (start < end) { |
305 if (start != 0 || end != length) { | 303 if (start != 0 || end != length) { |
306 source = source.sublist(start, end); | 304 source = source.sublist(start, end); |
307 } | 305 } |
308 add(source); | 306 add(source); |
309 } | 307 } |
310 if (isLast) close(); | 308 if (isLast) close(); |
311 } | 309 } |
312 } | 310 } |
OLD | NEW |