V1_commit_RGC
This commit is contained in:
51
SuiviREForamteur/node_modules/fast-png/lib-esm/helpers/text.js
generated
vendored
Normal file
51
SuiviREForamteur/node_modules/fast-png/lib-esm/helpers/text.js
generated
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
import { writeCrc } from './crc';
|
||||
// https://www.w3.org/TR/png/#11tEXt
|
||||
export const textChunkName = 'tEXt';
|
||||
const NULL = 0;
|
||||
const latin1Decoder = new TextDecoder('latin1');
|
||||
function validateKeyword(keyword) {
|
||||
validateLatin1(keyword);
|
||||
if (keyword.length === 0 || keyword.length > 79) {
|
||||
throw new Error('keyword length must be between 1 and 79');
|
||||
}
|
||||
}
|
||||
// eslint-disable-next-line no-control-regex
|
||||
const latin1Regex = /^[\u0000-\u00FF]*$/;
|
||||
function validateLatin1(text) {
|
||||
if (!latin1Regex.test(text)) {
|
||||
throw new Error('invalid latin1 text');
|
||||
}
|
||||
}
|
||||
export function decodetEXt(text, buffer, length) {
|
||||
const keyword = readKeyword(buffer);
|
||||
text[keyword] = readLatin1(buffer, length - keyword.length - 1);
|
||||
}
|
||||
export function encodetEXt(buffer, keyword, text) {
|
||||
validateKeyword(keyword);
|
||||
validateLatin1(text);
|
||||
const length = keyword.length + 1 /* NULL */ + text.length;
|
||||
buffer.writeUint32(length);
|
||||
buffer.writeChars(textChunkName);
|
||||
buffer.writeChars(keyword);
|
||||
buffer.writeByte(NULL);
|
||||
buffer.writeChars(text);
|
||||
writeCrc(buffer, length + 4);
|
||||
}
|
||||
// https://www.w3.org/TR/png/#11keywords
|
||||
export function readKeyword(buffer) {
|
||||
buffer.mark();
|
||||
while (buffer.readByte() !== NULL) {
|
||||
/* advance */
|
||||
}
|
||||
const end = buffer.offset;
|
||||
buffer.reset();
|
||||
const keyword = latin1Decoder.decode(buffer.readBytes(end - buffer.offset - 1));
|
||||
// NULL
|
||||
buffer.skip(1);
|
||||
validateKeyword(keyword);
|
||||
return keyword;
|
||||
}
|
||||
export function readLatin1(buffer, length) {
|
||||
return latin1Decoder.decode(buffer.readBytes(length));
|
||||
}
|
||||
//# sourceMappingURL=text.js.map
|
||||
Reference in New Issue
Block a user