work around missing tilde character in huffman tree
This commit is contained in:
+14
-1
@@ -264,7 +264,20 @@ export function compress (input, alphabet) {
|
|||||||
huffmanNumber = huffmanEncode(huffmanNumber, pathEncode["%"]);
|
huffmanNumber = huffmanEncode(huffmanNumber, pathEncode["%"]);
|
||||||
i -= 2;
|
i -= 2;
|
||||||
} else {
|
} 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
|
// Encode segment variant as 0
|
||||||
|
|||||||
Reference in New Issue
Block a user