work around missing tilde character in huffman tree

This commit is contained in:
p2r3
2026-08-14 09:57:21 +03:00
parent b12948bbef
commit bdc3c33026
+13
View File
@@ -263,10 +263,23 @@ export function compress (input, alphabet) {
huffmanNumber += BigInt(byte);
huffmanNumber = huffmanEncode(huffmanNumber, pathEncode["%"]);
i -= 2;
} else {
if (segment.value[i] === "~") {
/**
* HACK HACK HACK!!!
* Our Huffman tree is missing the tilde character (whoops!)
* It's too late to change it now without bumping the version
* number, and that currently costs 1 bit. Tildes are so rare
* that it makes more sense to %-encode them instead.
*/
huffmanNumber *= 256n;
huffmanNumber += BigInt(126);
huffmanNumber = huffmanEncode(huffmanNumber, pathEncode["%"]);
} else {
huffmanNumber = huffmanEncode(huffmanNumber, pathEncode[segment.value[i]]);
}
}
}
// Encode segment variant as 0
// (We're adding +1 here to introduce 0 as a special value indicating Huffman)
huffmanNumber *= BigInt(subalphabets.length + 1);