提交 deec1b9b 编写于 作者: T Tomohito Nakayama 提交者: Ryan Dahl

Implement function convertLineEndingsToNative in blob.ts (#2695)

based on https://w3c.github.io/FileAPI/#convert-line-endings-to-native
上级 3971dcfe
......@@ -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(
......
......@@ -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.
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册