From bdc3c330269c28bc7f9b33f28c6c76153e444443 Mon Sep 17 00:00:00 2001 From: p2r3 Date: Fri, 14 Aug 2026 09:57:21 +0300 Subject: [PATCH] work around missing tilde character in huffman tree --- compress.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/compress.js b/compress.js index 15049f0..f52945d 100644 --- a/compress.js +++ b/compress.js @@ -264,7 +264,20 @@ export function compress (input, alphabet) { huffmanNumber = huffmanEncode(huffmanNumber, pathEncode["%"]); i -= 2; } else { - huffmanNumber = huffmanEncode(huffmanNumber, pathEncode[segment.value[i]]); + 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