1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-22 15:06:54 -05:00

Implement function convertLineEndingsToNative in blob.ts (#2695)

based on https://w3c.github.io/FileAPI/#convert-line-endings-to-native
This commit is contained in:
Tomohito Nakayama 2019-08-01 23:04:39 +09:00 committed by Ryan Dahl
parent 3971dcfe10
commit deec1b9b97
2 changed files with 56 additions and 3 deletions

View file

@ -2,13 +2,57 @@
import * as domTypes from "./dom_types";
import { containsOnlyASCII, hasOwnProperty } from "./util";
import { TextEncoder } from "./text_encoding";
import { build } from "./build";
export const bytesSymbol = Symbol("bytes");
function convertLineEndingsToNative(s: string): string {
// TODO(qti3e) Implement convertLineEndingsToNative.
// https://w3c.github.io/FileAPI/#convert-line-endings-to-native
return s;
let nativeLineEnd = build.os == "win" ? "\r\n" : "\n";
let position = 0;
let collectionResult = collectSequenceNotCRLF(s, position);
let token = collectionResult.collected;
position = collectionResult.newPosition;
let result = token;
while (position < s.length) {
let c = s.charAt(position);
if (c == "\r") {
result += nativeLineEnd;
position++;
if (position < s.length && s.charAt(position) == "\n") {
position++;
}
} else if (c == "\n") {
position++;
result += nativeLineEnd;
}
collectionResult = collectSequenceNotCRLF(s, position);
token = collectionResult.collected;
position = collectionResult.newPosition;
result += token;
}
return result;
}
function collectSequenceNotCRLF(
s: string,
position: number
): { collected: string; newPosition: number } {
const start = position;
for (
let c = s.charAt(position);
position < s.length && !(c == "\r" || c == "\n");
c = s.charAt(++position)
);
return { collected: s.slice(start, position), newPosition: position };
}
function toUint8Arrays(

View file

@ -50,4 +50,13 @@ test(function blobShouldNotThrowError(): void {
assertEquals(hasThrown, false);
});
test(function nativeEndLine(): void {
const options: object = {
ending: "native"
};
let blob = new Blob(["Hello\nWorld"], options);
assertEquals(blob.size, Deno.build.os === "win" ? 12 : 11);
});
// TODO(qti3e) Test the stored data in a Blob after implementing FileReader API.