| Index: pkg/dev_compiler/tool/input_sdk/lib/convert/string_conversion.dart
|
| diff --git a/pkg/dev_compiler/tool/input_sdk/lib/convert/string_conversion.dart b/pkg/dev_compiler/tool/input_sdk/lib/convert/string_conversion.dart
|
| deleted file mode 100644
|
| index 6eb27d992c3f5be05351f9c6d059166ac513fdd0..0000000000000000000000000000000000000000
|
| --- a/pkg/dev_compiler/tool/input_sdk/lib/convert/string_conversion.dart
|
| +++ /dev/null
|
| @@ -1,342 +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;
|
| -
|
| -/**
|
| - * This class provides an interface for converters to
|
| - * efficiently transmit String data.
|
| - *
|
| - * Instead of limiting the interface to one non-chunked String it accepts
|
| - * partial strings or can be transformed into a byte sink that
|
| - * accepts UTF-8 code units.
|
| - *
|
| - * This abstract class will likely get more methods over time. Implementers are
|
| - * urged to extend [StringConversionSinkBase] or to mix in
|
| - * [StringConversionSinkMixin], to ensure that their class covers the newly
|
| - * added methods.
|
| - */
|
| -abstract class StringConversionSink extends ChunkedConversionSink<String> {
|
| - StringConversionSink();
|
| - factory StringConversionSink.withCallback(void callback(String accumulated))
|
| - = _StringCallbackSink;
|
| - factory StringConversionSink.from(Sink<String> sink)
|
| - = _StringAdapterSink;
|
| -
|
| - /**
|
| - * Creates a new instance wrapping the given [sink].
|
| - *
|
| - * Every string that is added to the returned instance is forwarded to
|
| - * the [sink]. The instance is allowed to buffer and is not required to
|
| - * forward immediately.
|
| - */
|
| - factory StringConversionSink.fromStringSink(StringSink sink) =
|
| - _StringSinkConversionSink;
|
| -
|
| - /**
|
| - * Adds the next [chunk] to `this`.
|
| - *
|
| - * Adds the substring defined by [start] and [end]-exclusive to `this`.
|
| - *
|
| - * If [isLast] is `true` closes `this`.
|
| - */
|
| - void addSlice(String chunk, int start, int end, bool isLast);
|
| -
|
| - /**
|
| - * Returns `this` as a sink that accepts UTF-8 input.
|
| - *
|
| - * If used, this method must be the first and only call to `this`. It
|
| - * invalidates `this`. All further operations must be performed on the result.
|
| - */
|
| - ByteConversionSink asUtf8Sink(bool allowMalformed);
|
| - // - asRuneSink
|
| - // - asCodeUnitsSink
|
| -
|
| - /**
|
| - * Returns `this` as a [ClosableStringSink].
|
| - *
|
| - * If used, this method must be the first and only call to `this`. It
|
| - * invalidates `this`. All further operations must be performed on the result.
|
| - */
|
| - ClosableStringSink asStringSink();
|
| -}
|
| -
|
| -/**
|
| - * A [ClosableStringSink] extends the [StringSink] interface by adding a
|
| - * `close` method.
|
| - */
|
| -abstract class ClosableStringSink extends StringSink {
|
| - /**
|
| - * Creates a new instance combining a [StringSink] [sink] and a callback
|
| - * [onClose] which is invoked when the returned instance is closed.
|
| - */
|
| - factory ClosableStringSink.fromStringSink(StringSink sink, void onClose())
|
| - = _ClosableStringSink;
|
| -
|
| - /**
|
| - * Closes `this` and flushes any outstanding data.
|
| - */
|
| - void close();
|
| -}
|
| -
|
| -typedef void _StringSinkCloseCallback();
|
| -
|
| -/**
|
| - * This class wraps an existing [StringSink] and invokes a
|
| - * closure when [close] is invoked.
|
| - */
|
| -class _ClosableStringSink implements ClosableStringSink {
|
| - final _StringSinkCloseCallback _callback;
|
| - final StringSink _sink;
|
| -
|
| - _ClosableStringSink(this._sink, this._callback);
|
| -
|
| - void close() { _callback(); }
|
| -
|
| - void writeCharCode(int charCode) { _sink.writeCharCode(charCode); }
|
| - void write(Object o) { _sink.write(o); }
|
| - void writeln([Object o = ""]) { _sink.writeln(o); }
|
| - void writeAll(Iterable objects, [String separator = ""]) {
|
| - _sink.writeAll(objects, separator);
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * This class wraps an existing [StringConversionSink] and exposes a
|
| - * [ClosableStringSink] interface. The wrapped sink only needs to implement
|
| - * `add` and `close`.
|
| - */
|
| -// TODO(floitsch): make this class public?
|
| -class _StringConversionSinkAsStringSinkAdapter implements ClosableStringSink {
|
| - static const _MIN_STRING_SIZE = 16;
|
| -
|
| - StringBuffer _buffer;
|
| - StringConversionSink _chunkedSink;
|
| -
|
| - _StringConversionSinkAsStringSinkAdapter(this._chunkedSink)
|
| - : _buffer = new StringBuffer();
|
| -
|
| - void close() {
|
| - if (_buffer.isNotEmpty) _flush();
|
| - _chunkedSink.close();
|
| - }
|
| -
|
| - void writeCharCode(int charCode) {
|
| - _buffer.writeCharCode(charCode);
|
| - if (_buffer.length > _MIN_STRING_SIZE) _flush();
|
| - }
|
| -
|
| - void write(Object o) {
|
| - if (_buffer.isNotEmpty) _flush();
|
| - _chunkedSink.add(o.toString());
|
| - }
|
| -
|
| - void writeln([Object o = ""]) {
|
| - _buffer.writeln(o);
|
| - if (_buffer.length > _MIN_STRING_SIZE) _flush();
|
| - }
|
| -
|
| - void writeAll(Iterable objects, [String separator = ""]) {
|
| - if (_buffer.isNotEmpty) _flush();
|
| - Iterator iterator = objects.iterator;
|
| - if (!iterator.moveNext()) return;
|
| - if (separator.isEmpty) {
|
| - do {
|
| - _chunkedSink.add(iterator.current.toString());
|
| - } while (iterator.moveNext());
|
| - } else {
|
| - _chunkedSink.add(iterator.current.toString());
|
| - while (iterator.moveNext()) {
|
| - write(separator);
|
| - _chunkedSink.add(iterator.current.toString());
|
| - }
|
| - }
|
| - }
|
| -
|
| - void _flush() {
|
| - String accumulated = _buffer.toString();
|
| - _buffer.clear();
|
| - _chunkedSink.add(accumulated);
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * This class provides a base-class for converters that need to accept String
|
| - * inputs.
|
| - */
|
| -abstract class StringConversionSinkBase extends StringConversionSinkMixin {
|
| -}
|
| -
|
| -/**
|
| - * This class provides a mixin for converters that need to accept String
|
| - * inputs.
|
| - */
|
| -abstract class StringConversionSinkMixin implements StringConversionSink {
|
| -
|
| - void addSlice(String str, int start, int end, bool isLast);
|
| - void close();
|
| -
|
| - void add(String str) { addSlice(str, 0, str.length, false); }
|
| -
|
| - ByteConversionSink asUtf8Sink(bool allowMalformed) {
|
| - return new _Utf8ConversionSink(this, allowMalformed);
|
| - }
|
| -
|
| - ClosableStringSink asStringSink() {
|
| - return new _StringConversionSinkAsStringSinkAdapter(this);
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * This class is a [StringConversionSink] that wraps a [StringSink].
|
| - */
|
| -class _StringSinkConversionSink extends StringConversionSinkBase {
|
| - StringSink _stringSink;
|
| - _StringSinkConversionSink(StringSink this._stringSink);
|
| -
|
| - void close() {}
|
| - void addSlice(String str, int start, int end, bool isLast) {
|
| - if (start != 0 || end != str.length) {
|
| - for (int i = start; i < end; i++) {
|
| - _stringSink.writeCharCode(str.codeUnitAt(i));
|
| - }
|
| - } else {
|
| - _stringSink.write(str);
|
| - }
|
| - if (isLast) close();
|
| - }
|
| -
|
| - void add(String str) { _stringSink.write(str); }
|
| -
|
| - ByteConversionSink asUtf8Sink(bool allowMalformed) {
|
| - return new _Utf8StringSinkAdapter(this, _stringSink, allowMalformed);
|
| - }
|
| -
|
| - ClosableStringSink asStringSink() {
|
| - return new ClosableStringSink.fromStringSink(_stringSink, this.close);
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * This class accumulates all chunks into one string
|
| - * and invokes a callback when the sink is closed.
|
| - *
|
| - * This class can be used to terminate a chunked conversion.
|
| - */
|
| -class _StringCallbackSink extends _StringSinkConversionSink {
|
| - final _ChunkedConversionCallback<String> _callback;
|
| - _StringCallbackSink(this._callback) : super(new StringBuffer());
|
| -
|
| - void close() {
|
| - StringBuffer buffer = _stringSink;
|
| - String accumulated = buffer.toString();
|
| - buffer.clear();
|
| - _callback(accumulated);
|
| - }
|
| -
|
| - ByteConversionSink asUtf8Sink(bool allowMalformed) {
|
| - return new _Utf8StringSinkAdapter(
|
| - this, _stringSink, allowMalformed);
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * This class adapts a simple [ChunkedConversionSink] to a
|
| - * [StringConversionSink].
|
| - *
|
| - * All additional methods of the [StringConversionSink] (compared to the
|
| - * ChunkedConversionSink) are redirected to the `add` method.
|
| - */
|
| -class _StringAdapterSink extends StringConversionSinkBase {
|
| - final Sink<String> _sink;
|
| -
|
| - _StringAdapterSink(this._sink);
|
| -
|
| - void add(String str) { _sink.add(str); }
|
| -
|
| - void addSlice(String str, int start, int end, bool isLast) {
|
| - if (start == 0 && end == str.length) {
|
| - add(str);
|
| - } else {
|
| - add(str.substring(start, end));
|
| - }
|
| - if (isLast) close();
|
| - }
|
| -
|
| - void close() { _sink.close(); }
|
| -}
|
| -
|
| -
|
| -/**
|
| - * Decodes UTF-8 code units and stores them in a [StringSink].
|
| - */
|
| -class _Utf8StringSinkAdapter extends ByteConversionSink {
|
| - final _Utf8Decoder _decoder;
|
| - final Sink _sink;
|
| -
|
| - _Utf8StringSinkAdapter(this._sink,
|
| - StringSink stringSink, bool allowMalformed)
|
| - : _decoder = new _Utf8Decoder(stringSink, allowMalformed);
|
| -
|
| - void close() {
|
| - _decoder.close();
|
| - if(_sink != null) _sink.close();
|
| - }
|
| -
|
| - void add(List<int> chunk) {
|
| - addSlice(chunk, 0, chunk.length, false);
|
| - }
|
| -
|
| - void addSlice(List<int> codeUnits, int startIndex, int endIndex,
|
| - bool isLast) {
|
| - _decoder.convert(codeUnits, startIndex, endIndex);
|
| - if (isLast) close();
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Decodes UTF-8 code units.
|
| - *
|
| - * Forwards the decoded strings to the given [StringConversionSink].
|
| - */
|
| -// TODO(floitsch): make this class public?
|
| -class _Utf8ConversionSink extends ByteConversionSink {
|
| -
|
| - final _Utf8Decoder _decoder;
|
| - final StringConversionSink _chunkedSink;
|
| - final StringBuffer _buffer;
|
| - _Utf8ConversionSink(StringConversionSink sink, bool allowMalformed)
|
| - : this._(sink, new StringBuffer(), allowMalformed);
|
| -
|
| - _Utf8ConversionSink._(this._chunkedSink, StringBuffer stringBuffer,
|
| - bool allowMalformed)
|
| - : _decoder = new _Utf8Decoder(stringBuffer, allowMalformed),
|
| - _buffer = stringBuffer;
|
| -
|
| - void close() {
|
| - _decoder.close();
|
| - if (_buffer.isNotEmpty) {
|
| - String accumulated = _buffer.toString();
|
| - _buffer.clear();
|
| - _chunkedSink.addSlice(accumulated, 0, accumulated.length, true);
|
| - } else {
|
| - _chunkedSink.close();
|
| - }
|
| - }
|
| -
|
| - void add(List<int> chunk) {
|
| - addSlice(chunk, 0, chunk.length, false);
|
| - }
|
| -
|
| - void addSlice(List<int> chunk, int startIndex, int endIndex, bool isLast) {
|
| - _decoder.convert(chunk, startIndex, endIndex);
|
| - if (_buffer.isNotEmpty) {
|
| - String accumulated = _buffer.toString();
|
| - _chunkedSink.addSlice(accumulated, 0, accumulated.length, isLast);
|
| - _buffer.clear();
|
| - return;
|
| - }
|
| - if (isLast) close();
|
| - }
|
| -}
|
|
|