embroidery-viewer/src/format-readers/exp.js

50 lines
1.1 KiB
JavaScript

import { stitchTypes } from "../file-renderer/pattern";
function expDecode(input) {
return input > 128 ? -(~input & 255) - 1 : input;
}
export function expRead(file, pattern) {
let b0 = 0,
b1 = 0,
dx = 0,
dy = 0,
flags = 0,
i = 0,
byteCount = file.byteLength;
while (i < byteCount) {
flags = stitchTypes.normal;
b0 = file.getInt8(i);
i += 1;
b1 = file.getInt8(i);
i += 1;
if (b0 === -128) {
if (b1 & 1) {
b0 = file.getInt8(i);
i += 1;
b1 = file.getInt8(i);
i += 1;
flags = stitchTypes.stop;
} else if (b1 === 2 || b1 === 4) {
b0 = file.getInt8(i);
i += 1;
b1 = file.getInt8(i);
i += 1;
flags = stitchTypes.trim;
} else if (b1 === -128) {
b0 = file.getInt8(i);
i += 1;
b1 = file.getInt8(i);
i += 1;
b0 = 0;
b1 = 0;
flags = stitchTypes.trim;
}
}
dx = expDecode(b0);
dy = expDecode(b1);
pattern.addStitchRel(dx, dy, flags, true);
}
pattern.addStitchRel(0, 0, stitchTypes.end);
pattern.invertPatternVertical();
}