Index: sdk/lib/convert/line_splitter.dart |
diff --git a/sdk/lib/convert/line_splitter.dart b/sdk/lib/convert/line_splitter.dart |
index b5ec32bd6ee94bce6e248a2913cbf5c2e970991a..b9023f4c8fb246bfa235ef8c9e20ffa8120ac9c1 100644 |
--- a/sdk/lib/convert/line_splitter.dart |
+++ b/sdk/lib/convert/line_splitter.dart |
@@ -49,7 +49,29 @@ class LineSplitter extends Converter<String, List<String>> { |
} |
} |
- List<String> convert(String data) => split(data).toList(); |
+ 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) { |