Index: pkg/dev_compiler/tool/input_sdk/lib/convert/ascii.dart |
diff --git a/pkg/dev_compiler/tool/input_sdk/lib/convert/ascii.dart b/pkg/dev_compiler/tool/input_sdk/lib/convert/ascii.dart |
deleted file mode 100644 |
index a0762107cc19d028f27d5b2da16691a84050f63c..0000000000000000000000000000000000000000 |
--- a/pkg/dev_compiler/tool/input_sdk/lib/convert/ascii.dart |
+++ /dev/null |
@@ -1,310 +0,0 @@ |
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-part of dart.convert; |
- |
-/** |
- * An instance of the default implementation of the [AsciiCodec]. |
- * |
- * This instance provides a convenient access to the most common ASCII |
- * use cases. |
- * |
- * Examples: |
- * |
- * var encoded = ASCII.encode("This is ASCII!"); |
- * var decoded = ASCII.decode([0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, |
- * 0x20, 0x41, 0x53, 0x43, 0x49, 0x49, 0x21]); |
- */ |
-const AsciiCodec ASCII = const AsciiCodec(); |
- |
-const int _ASCII_MASK = 0x7F; |
- |
-/** |
- * An [AsciiCodec] allows encoding strings as ASCII bytes |
- * and decoding ASCII bytes to strings. |
- */ |
-class AsciiCodec extends Encoding { |
- final bool _allowInvalid; |
- /** |
- * Instantiates a new [AsciiCodec]. |
- * |
- * If [allowInvalid] is true, the [decode] method and the converter |
- * returned by [decoder] will default to allowing invalid values. |
- * If allowing invalid values, the values will be decoded into the Unicode |
- * Replacement character (U+FFFD). If not, an exception will be thrown. |
- * Calls to the [decode] method can choose to override this default. |
- * |
- * Encoders will not accept invalid (non Latin-1) characters. |
- */ |
- const AsciiCodec({bool allowInvalid: false}) : _allowInvalid = allowInvalid; |
- |
- String get name => "us-ascii"; |
- |
- /** |
- * Decodes the ASCII [bytes] (a list of unsigned 7-bit integers) to the |
- * corresponding string. |
- * |
- * If [bytes] contains values that are not in the range 0 .. 127, the decoder |
- * will eventually throw a [FormatException]. |
- * |
- * If [allowInvalid] is not provided, it defaults to the value used to create |
- * this [AsciiCodec]. |
- */ |
- String decode(List<int> bytes, { bool allowInvalid }) { |
- if (allowInvalid == null) allowInvalid = _allowInvalid; |
- if (allowInvalid) { |
- return const AsciiDecoder(allowInvalid: true).convert(bytes); |
- } else { |
- return const AsciiDecoder(allowInvalid: false).convert(bytes); |
- } |
- } |
- |
- AsciiEncoder get encoder => const AsciiEncoder(); |
- |
- AsciiDecoder get decoder => |
- _allowInvalid ? const AsciiDecoder(allowInvalid: true) |
- : const AsciiDecoder(allowInvalid: false); |
-} |
- |
-// Superclass for [AsciiEncoder] and [Latin1Encoder]. |
-// Generalizes common operations that only differ by a mask; |
-class _UnicodeSubsetEncoder extends Converter<String, List<int>> { |
- final int _subsetMask; |
- |
- const _UnicodeSubsetEncoder(this._subsetMask); |
- |
- /** |
- * Converts the [String] into a list of its code units. |
- * |
- * If [start] and [end] are provided, only the substring |
- * `string.substring(start, end)` is used as input to the conversion. |
- */ |
- List<int> convert(String string, [int start = 0, int end]) { |
- int stringLength = string.length; |
- RangeError.checkValidRange(start, end, stringLength); |
- if (end == null) end = stringLength; |
- int length = end - start; |
- List<int> result = new Uint8List(length); |
- for (int i = 0; i < length; i++) { |
- var codeUnit = string.codeUnitAt(start + i); |
- if ((codeUnit & ~_subsetMask) != 0) { |
- throw new ArgumentError("String contains invalid characters."); |
- } |
- result[i] = codeUnit; |
- } |
- return result; |
- } |
- |
- /** |
- * Starts a chunked conversion. |
- * |
- * The converter works more efficiently if the given [sink] is a |
- * [ByteConversionSink]. |
- */ |
- StringConversionSink startChunkedConversion(Sink<List<int>> sink) { |
- if (sink is! ByteConversionSink) { |
- sink = new ByteConversionSink.from(sink); |
- } |
- return new _UnicodeSubsetEncoderSink(_subsetMask, sink); |
- } |
- |
- // Override the base-class' bind, to provide a better type. |
- Stream<List<int>> bind(Stream<String> stream) => super.bind(stream); |
-} |
- |
-/** |
- * This class converts strings of only ASCII characters to bytes. |
- */ |
-class AsciiEncoder extends _UnicodeSubsetEncoder { |
- const AsciiEncoder() : super(_ASCII_MASK); |
-} |
- |
-/** |
- * This class encodes chunked strings to bytes (unsigned 8-bit |
- * integers). |
- */ |
-class _UnicodeSubsetEncoderSink extends StringConversionSinkBase { |
- final ByteConversionSink _sink; |
- final int _subsetMask; |
- |
- _UnicodeSubsetEncoderSink(this._subsetMask, this._sink); |
- |
- void close() { |
- _sink.close(); |
- } |
- |
- void addSlice(String source, int start, int end, bool isLast) { |
- RangeError.checkValidRange(start, end, source.length); |
- for (int i = start; i < end; i++) { |
- int codeUnit = source.codeUnitAt(i); |
- if ((codeUnit & ~_subsetMask) != 0) { |
- throw new ArgumentError( |
- "Source contains invalid character with code point: $codeUnit."); |
- } |
- } |
- _sink.add(source.codeUnits.sublist(start, end)); |
- if (isLast) { |
- close(); |
- } |
- } |
-} |
- |
-/** |
- * This class converts Latin-1 bytes (lists of unsigned 8-bit integers) |
- * to a string. |
- */ |
-abstract class _UnicodeSubsetDecoder extends Converter<List<int>, String> { |
- final bool _allowInvalid; |
- final int _subsetMask; |
- |
- /** |
- * Instantiates a new decoder. |
- * |
- * The [_allowInvalid] argument defines how [convert] deals |
- * with invalid bytes. |
- * |
- * The [_subsetMask] argument is a bit mask used to define the subset |
- * of Unicode being decoded. Use [_LATIN1_MASK] for Latin-1 (8-bit) or |
- * [_ASCII_MASK] for ASCII (7-bit). |
- * |
- * If [_allowInvalid] is `true`, [convert] replaces invalid bytes with the |
- * Unicode Replacement character `U+FFFD` (�). |
- * Otherwise it throws a [FormatException]. |
- */ |
- const _UnicodeSubsetDecoder(this._allowInvalid, this._subsetMask); |
- |
- /** |
- * Converts the [bytes] (a list of unsigned 7- or 8-bit integers) to the |
- * corresponding string. |
- * |
- * If [start] and [end] are provided, only the sub-list of bytes from |
- * `start` to `end` (`end` not inclusive) is used as input to the conversion. |
- */ |
- String convert(List<int> bytes, [int start = 0, int end]) { |
- int byteCount = bytes.length; |
- RangeError.checkValidRange(start, end, byteCount); |
- if (end == null) end = byteCount; |
- |
- for (int i = start; i < end; i++) { |
- int byte = bytes[i]; |
- if ((byte & ~_subsetMask) != 0) { |
- if (!_allowInvalid) { |
- throw new FormatException("Invalid value in input: $byte"); |
- } |
- return _convertInvalid(bytes, start, end); |
- } |
- } |
- return new String.fromCharCodes(bytes, start, end); |
- } |
- |
- String _convertInvalid(List<int> bytes, int start, int end) { |
- StringBuffer buffer = new StringBuffer(); |
- for (int i = start; i < end; i++) { |
- int value = bytes[i]; |
- if ((value & ~_subsetMask) != 0) value = 0xFFFD; |
- buffer.writeCharCode(value); |
- } |
- return buffer.toString(); |
- } |
- |
- /** |
- * Starts a chunked conversion. |
- * |
- * The converter works more efficiently if the given [sink] is a |
- * [StringConversionSink]. |
- */ |
- ByteConversionSink startChunkedConversion(Sink<String> sink); |
- |
- // Override the base-class's bind, to provide a better type. |
- Stream<String> bind(Stream<List<int>> stream) => super.bind(stream); |
-} |
- |
-class AsciiDecoder extends _UnicodeSubsetDecoder { |
- const AsciiDecoder({bool allowInvalid: false}) |
- : super(allowInvalid, _ASCII_MASK); |
- |
- /** |
- * Starts a chunked conversion. |
- * |
- * The converter works more efficiently if the given [sink] is a |
- * [StringConversionSink]. |
- */ |
- ByteConversionSink startChunkedConversion(Sink<String> sink) { |
- StringConversionSink stringSink; |
- if (sink is StringConversionSink) { |
- stringSink = sink; |
- } else { |
- stringSink = new StringConversionSink.from(sink); |
- } |
- // TODO(lrn): Use asUtf16Sink when it becomes available. It |
- // works just as well, is likely to have less decoding overhead, |
- // and make adding U+FFFD easier. |
- // At that time, merge this with _Latin1DecoderSink; |
- if (_allowInvalid) { |
- return new _ErrorHandlingAsciiDecoderSink(stringSink.asUtf8Sink(false)); |
- } else { |
- return new _SimpleAsciiDecoderSink(stringSink); |
- } |
- } |
-} |
- |
-class _ErrorHandlingAsciiDecoderSink extends ByteConversionSinkBase { |
- ByteConversionSink _utf8Sink; |
- _ErrorHandlingAsciiDecoderSink(this._utf8Sink); |
- |
- void close() { |
- _utf8Sink.close(); |
- } |
- |
- void add(List<int> source) { |
- addSlice(source, 0, source.length, false); |
- } |
- |
- void addSlice(List<int> source, int start, int end, bool isLast) { |
- RangeError.checkValidRange(start, end, source.length); |
- for (int i = start; i < end; i++) { |
- if ((source[i] & ~_ASCII_MASK) != 0) { |
- if (i > start) _utf8Sink.addSlice(source, start, i, false); |
- // Add UTF-8 encoding of U+FFFD. |
- _utf8Sink.add(const<int>[0xEF, 0xBF, 0xBD]); |
- start = i + 1; |
- } |
- } |
- if (start < end) { |
- _utf8Sink.addSlice(source, start, end, isLast); |
- } else if (isLast) { |
- close(); |
- } |
- } |
-} |
- |
-class _SimpleAsciiDecoderSink extends ByteConversionSinkBase { |
- Sink _sink; |
- _SimpleAsciiDecoderSink(this._sink); |
- |
- void close() { |
- _sink.close(); |
- } |
- |
- void add(List<int> source) { |
- for (int i = 0; i < source.length; i++) { |
- if ((source[i] & ~_ASCII_MASK) != 0) { |
- throw new FormatException("Source contains non-ASCII bytes."); |
- } |
- } |
- _sink.add(new String.fromCharCodes(source)); |
- } |
- |
- void addSlice(List<int> source, int start, int end, bool isLast) { |
- final int length = source.length; |
- RangeError.checkValidRange(start, end, length); |
- if (start < end) { |
- if (start != 0 || end != length) { |
- source = source.sublist(start, end); |
- } |
- add(source); |
- } |
- if (isLast) close(); |
- } |
-} |