| Index: pkg/dev_compiler/tool/input_sdk/lib/convert/line_splitter.dart
|
| diff --git a/pkg/dev_compiler/tool/input_sdk/lib/convert/line_splitter.dart b/pkg/dev_compiler/tool/input_sdk/lib/convert/line_splitter.dart
|
| deleted file mode 100644
|
| index b728d8f2c2edf434a7e7f49f62216dc0451dec6c..0000000000000000000000000000000000000000
|
| --- a/pkg/dev_compiler/tool/input_sdk/lib/convert/line_splitter.dart
|
| +++ /dev/null
|
| @@ -1,179 +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;
|
| -
|
| -// Character constants.
|
| -const int _LF = 10;
|
| -const int _CR = 13;
|
| -
|
| -/**
|
| - * A [Converter] that splits a [String] into individual lines.
|
| - *
|
| - * A line is terminated by either a CR (U+000D), a LF (U+000A), a
|
| - * CR+LF sequence (DOS line ending),
|
| - * and a final non-empty line can be ended by the end of the string.
|
| - *
|
| - * The returned lines do not contain the line terminators.
|
| - */
|
| -class LineSplitter
|
| - extends Converter<String, List<String>>/*=Object*/
|
| - implements Object/*=StreamTransformer<String, String>*/ {
|
| -
|
| - const LineSplitter();
|
| -
|
| - /// Split [lines] into individual lines.
|
| - ///
|
| - /// If [start] and [end] are provided, only split the contents of
|
| - /// `lines.substring(start, end)`. The [start] and [end] values must
|
| - /// specify a valid sub-range of [lines]
|
| - /// (`0 <= start <= end <= lines.length`).
|
| - static Iterable<String> split(String lines, [int start = 0, int end]) sync* {
|
| - end = RangeError.checkValidRange(start, end, lines.length);
|
| - int sliceStart = start;
|
| - int char = 0;
|
| - for (int i = start; i < end; i++) {
|
| - int previousChar = char;
|
| - char = lines.codeUnitAt(i);
|
| - if (char != _CR) {
|
| - if (char != _LF) continue;
|
| - if (previousChar == _CR) {
|
| - sliceStart = i + 1;
|
| - continue;
|
| - }
|
| - }
|
| - yield lines.substring(sliceStart, i);
|
| - sliceStart = i + 1;
|
| - }
|
| - if (sliceStart < end) {
|
| - yield lines.substring(sliceStart, end);
|
| - }
|
| - }
|
| -
|
| - List<String> convert(String data) {
|
| - List<String> lines = <String>[];
|
| - int end = data.length;
|
| - int sliceStart = 0;
|
| - int char = 0;
|
| - for (int i = 0; i < end; i++) {
|
| - int previousChar = char;
|
| - char = data.codeUnitAt(i);
|
| - if (char != _CR) {
|
| - if (char != _LF) continue;
|
| - if (previousChar == _CR) {
|
| - sliceStart = i + 1;
|
| - continue;
|
| - }
|
| - }
|
| - lines.add(data.substring(sliceStart, i));
|
| - sliceStart = i + 1;
|
| - }
|
| - if (sliceStart < end) {
|
| - lines.add(data.substring(sliceStart, end));
|
| - }
|
| - return lines;
|
| - }
|
| -
|
| - StringConversionSink startChunkedConversion(Sink<String> sink) {
|
| - if (sink is! StringConversionSink) {
|
| - sink = new StringConversionSink.from(sink);
|
| - }
|
| - return new _LineSplitterSink(sink);
|
| - }
|
| -
|
| - Stream/*<String>*/ bind(Stream/*<String>*/ stream) {
|
| - return new Stream<String>.eventTransformed(
|
| - stream,
|
| - (EventSink<String> sink) => new _LineSplitterEventSink(sink));
|
| - }
|
| -}
|
| -
|
| -// TODO(floitsch): deal with utf8.
|
| -class _LineSplitterSink extends StringConversionSinkBase {
|
| - final StringConversionSink _sink;
|
| -
|
| - /// The carry-over from the previous chunk.
|
| - ///
|
| - /// If the previous slice ended in a line without a line terminator,
|
| - /// then the next slice may continue the line.
|
| - String _carry;
|
| -
|
| - /// Whether to skip a leading LF character from the next slice.
|
| - ///
|
| - /// If the previous slice ended on a CR character, a following LF
|
| - /// would be part of the same line termination, and should be ignored.
|
| - ///
|
| - /// Only `true` when [_carry] is `null`.
|
| - bool _skipLeadingLF = false;
|
| -
|
| - _LineSplitterSink(this._sink);
|
| -
|
| - void addSlice(String chunk, int start, int end, bool isLast) {
|
| - end = RangeError.checkValidRange(start, end, chunk.length);
|
| - // If the chunk is empty, it's probably because it's the last one.
|
| - // Handle that here, so we know the range is non-empty below.
|
| - if (start >= end) {
|
| - if (isLast) close();
|
| - return;
|
| - }
|
| - if (_carry != null) {
|
| - assert(!_skipLeadingLF);
|
| - chunk = _carry + chunk.substring(start, end);
|
| - start = 0;
|
| - end = chunk.length;
|
| - _carry = null;
|
| - } else if (_skipLeadingLF) {
|
| - if (chunk.codeUnitAt(start) == _LF) {
|
| - start += 1;
|
| - }
|
| - _skipLeadingLF = false;
|
| - }
|
| - _addLines(chunk, start, end);
|
| - if (isLast) close();
|
| - }
|
| -
|
| - void close() {
|
| - if (_carry != null) {
|
| - _sink.add(_carry);
|
| - _carry = null;
|
| - }
|
| - _sink.close();
|
| - }
|
| -
|
| - void _addLines(String lines, int start, int end) {
|
| - int sliceStart = start;
|
| - int char = 0;
|
| - for (int i = start; i < end; i++) {
|
| - int previousChar = char;
|
| - char = lines.codeUnitAt(i);
|
| - if (char != _CR) {
|
| - if (char != _LF) continue;
|
| - if (previousChar == _CR) {
|
| - sliceStart = i + 1;
|
| - continue;
|
| - }
|
| - }
|
| - _sink.add(lines.substring(sliceStart, i));
|
| - sliceStart = i + 1;
|
| - }
|
| - if (sliceStart < end) {
|
| - _carry = lines.substring(sliceStart, end);
|
| - } else {
|
| - _skipLeadingLF = (char == _CR);
|
| - }
|
| - }
|
| -}
|
| -
|
| -class _LineSplitterEventSink extends _LineSplitterSink
|
| - implements EventSink<String> {
|
| - final EventSink<String> _eventSink;
|
| -
|
| - _LineSplitterEventSink(EventSink<String> eventSink)
|
| - : _eventSink = eventSink,
|
| - super(new StringConversionSink.from(eventSink));
|
| -
|
| - void addError(Object o, [StackTrace stackTrace]) {
|
| - _eventSink.addError(o, stackTrace);
|
| - }
|
| -}
|
|
|