work around missing tilde character in huffman tree
This commit is contained in:
+13
@@ -263,10 +263,23 @@ export function compress (input, alphabet) {
|
|||||||
huffmanNumber += BigInt(byte);
|
huffmanNumber += BigInt(byte);
|
||||||
huffmanNumber = huffmanEncode(huffmanNumber, pathEncode["%"]);
|
huffmanNumber = huffmanEncode(huffmanNumber, pathEncode["%"]);
|
||||||
i -= 2;
|
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 {
|
} else {
|
||||||
huffmanNumber = huffmanEncode(huffmanNumber, pathEncode[segment.value[i]]);
|
huffmanNumber = huffmanEncode(huffmanNumber, pathEncode[segment.value[i]]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Encode segment variant as 0
|
// Encode segment variant as 0
|
||||||
// (We're adding +1 here to introduce 0 as a special value indicating Huffman)
|
// (We're adding +1 here to introduce 0 as a special value indicating Huffman)
|
||||||
huffmanNumber *= BigInt(subalphabets.length + 1);
|
huffmanNumber *= BigInt(subalphabets.length + 1);
|
||||||
|
|||||||
Reference in New Issue
Block a user