Last active
August 18, 2023 03:22
-
-
Save SaphireLattice/ab906e190ec0f25c22e27314d2a78e95 to your computer and use it in GitHub Desktop.
A Code128b barcode generator for Discord, doing cursed things to spoilers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const code128b = [ | |
{ char: " ", pattern: "11011001100" }, | |
{ char: "!", pattern: "11001101100" }, | |
{ char: '"', pattern: "11001100110" }, | |
{ char: "#", pattern: "10010011000" }, | |
{ char: "$", pattern: "10010001100" }, | |
{ char: "%", pattern: "10001001100" }, | |
{ char: "&", pattern: "10011001000" }, | |
{ char: "'", pattern: "10011000100" }, | |
{ char: "(", pattern: "10001100100" }, | |
{ char: ")", pattern: "11001001000" }, | |
{ char: "*", pattern: "11001000100" }, | |
{ char: "+", pattern: "11000100100" }, | |
{ char: ",", pattern: "10110011100" }, | |
{ char: "-", pattern: "10011011100" }, | |
{ char: ".", pattern: "10011001110" }, | |
{ char: "/", pattern: "10111001100" }, | |
{ char: "0", pattern: "10011101100" }, | |
{ char: "1", pattern: "10011100110" }, | |
{ char: "2", pattern: "11001110010" }, | |
{ char: "3", pattern: "11001011100" }, | |
{ char: "4", pattern: "11001001110" }, | |
{ char: "5", pattern: "11011100100" }, | |
{ char: "6", pattern: "11001110100" }, | |
{ char: "7", pattern: "11101101110" }, | |
{ char: "8", pattern: "11101001100" }, | |
{ char: "9", pattern: "11100101100" }, | |
{ char: ":", pattern: "11100100110" }, | |
{ char: ";", pattern: "11101100100" }, | |
{ char: "<", pattern: "11100110100" }, | |
{ char: "=", pattern: "11100110010" }, | |
{ char: ">", pattern: "11011011000" }, | |
{ char: "?", pattern: "11011000110" }, | |
{ char: "@", pattern: "11000110110" }, | |
{ char: "A", pattern: "10100011000" }, | |
{ char: "B", pattern: "10001011000" }, | |
{ char: "C", pattern: "10001000110" }, | |
{ char: "D", pattern: "10110001000" }, | |
{ char: "E", pattern: "10001101000" }, | |
{ char: "F", pattern: "10001100010" }, | |
{ char: "G", pattern: "11010001000" }, | |
{ char: "H", pattern: "11000101000" }, | |
{ char: "I", pattern: "11000100010" }, | |
{ char: "J", pattern: "10110111000" }, | |
{ char: "K", pattern: "10110001110" }, | |
{ char: "L", pattern: "10001101110" }, | |
{ char: "M", pattern: "10111011000" }, | |
{ char: "N", pattern: "10111000110" }, | |
{ char: "O", pattern: "10001110110" }, | |
{ char: "P", pattern: "11101110110" }, | |
{ char: "Q", pattern: "11010001110" }, | |
{ char: "R", pattern: "11000101110" }, | |
{ char: "S", pattern: "11011101000" }, | |
{ char: "T", pattern: "11011100010" }, | |
{ char: "U", pattern: "11011101110" }, | |
{ char: "V", pattern: "11101011000" }, | |
{ char: "W", pattern: "11101000110" }, | |
{ char: "X", pattern: "11100010110" }, | |
{ char: "Y", pattern: "11101101000" }, | |
{ char: "Z", pattern: "11101100010" }, | |
{ char: "[", pattern: "11100011010" }, | |
{ char: "\\", pattern: "11101111010" }, | |
{ char: "]", pattern: "11001000010" }, | |
{ char: "^", pattern: "11110001010" }, | |
{ char: "_", pattern: "10100110000" }, | |
{ char: "`", pattern: "10100001100" }, | |
{ char: "a", pattern: "10010110000" }, | |
{ char: "b", pattern: "10010000110" }, | |
{ char: "c", pattern: "10000101100" }, | |
{ char: "d", pattern: "10000100110" }, | |
{ char: "e", pattern: "10110010000" }, | |
{ char: "f", pattern: "10110000100" }, | |
{ char: "g", pattern: "10011010000" }, | |
{ char: "h", pattern: "10011000010" }, | |
{ char: "i", pattern: "10000110100" }, | |
{ char: "j", pattern: "10000110010" }, | |
{ char: "k", pattern: "11000010010" }, | |
{ char: "l", pattern: "11001010000" }, | |
{ char: "m", pattern: "11110111010" }, | |
{ char: "n", pattern: "11000010100" }, | |
{ char: "o", pattern: "10001111010" }, | |
{ char: "p", pattern: "10100111100" }, | |
{ char: "q", pattern: "10010111100" }, | |
{ char: "r", pattern: "10010011110" }, | |
{ char: "s", pattern: "10111100100" }, | |
{ char: "t", pattern: "10011110100" }, | |
{ char: "u", pattern: "10011110010" }, | |
{ char: "v", pattern: "11110100100" }, | |
{ char: "w", pattern: "11110010100" }, | |
{ char: "x", pattern: "11110010010" }, | |
{ char: "y", pattern: "11011011110" }, | |
{ char: "z", pattern: "11011110110" }, | |
{ char: "{", pattern: "11110110110" }, | |
{ char: "|", pattern: "10101111000" }, | |
{ char: "}", pattern: "10100011110" }, | |
{ char: "~", pattern: "10001011110" }, | |
{ char: "DEL", pattern: "10111101000" }, | |
{ char: "FNC 3", pattern: "10111100010" }, | |
{ char: "FNC 2", pattern: "11110101000" }, | |
{ char: "Shift A", pattern: "11110100010" }, | |
{ char: "Code C", pattern: "10111011110" }, | |
{ char: "FNC 4", pattern: "10111101110" }, | |
{ char: "Code A", pattern: "11101011110" }, | |
{ char: "FNC 1", pattern: "11110101110" }, | |
{ char: "START A", pattern: "11010000100" }, | |
{ char: "START B", pattern: "11010010000" }, | |
{ char: "START C", pattern: "11010011100" }, | |
{ char: "STOP", pattern: "1100011101011" }, | |
{ char: "REVERSE STOP", pattern: "11010111000" }, | |
]; | |
function binaryToSpoilers(code, spacer) { | |
return code | |
.replace(/1/g, "||" + spacer + "||") | |
.replace(/0/g, spacer) | |
.replace(/\|\|\|\|/g, ""); | |
} | |
function convert(input, spacer = " ") { | |
const chars = input.split(""); | |
const code = chars.map((c) => code128b.findIndex((p) => p.char == c) ?? 0); | |
code.unshift(104); | |
const checksum = | |
(104 + code.reduce((acc, code, i) => acc + code * i, 0)) % 103; | |
code.push(checksum); | |
code.push(106); | |
return binaryToSpoilers( | |
code.map((v) => code128b[v].pattern ?? "ERROR").join(""), | |
spacer | |
); | |
} | |
const spaces = { | |
hair: " ", | |
thin: " ", | |
normal: " ", | |
underscore: "_" | |
}; | |
console.log(convert("REPLACEME", spaces["hair"] ?? "X")); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const code128b = [ | |
{ char: " ", pattern: "11011001100" }, | |
{ char: "!", pattern: "11001101100" }, | |
{ char: '"', pattern: "11001100110" }, | |
{ char: "#", pattern: "10010011000" }, | |
{ char: "$", pattern: "10010001100" }, | |
{ char: "%", pattern: "10001001100" }, | |
{ char: "&", pattern: "10011001000" }, | |
{ char: "'", pattern: "10011000100" }, | |
{ char: "(", pattern: "10001100100" }, | |
{ char: ")", pattern: "11001001000" }, | |
{ char: "*", pattern: "11001000100" }, | |
{ char: "+", pattern: "11000100100" }, | |
{ char: ",", pattern: "10110011100" }, | |
{ char: "-", pattern: "10011011100" }, | |
{ char: ".", pattern: "10011001110" }, | |
{ char: "/", pattern: "10111001100" }, | |
{ char: "0", pattern: "10011101100" }, | |
{ char: "1", pattern: "10011100110" }, | |
{ char: "2", pattern: "11001110010" }, | |
{ char: "3", pattern: "11001011100" }, | |
{ char: "4", pattern: "11001001110" }, | |
{ char: "5", pattern: "11011100100" }, | |
{ char: "6", pattern: "11001110100" }, | |
{ char: "7", pattern: "11101101110" }, | |
{ char: "8", pattern: "11101001100" }, | |
{ char: "9", pattern: "11100101100" }, | |
{ char: ":", pattern: "11100100110" }, | |
{ char: ";", pattern: "11101100100" }, | |
{ char: "<", pattern: "11100110100" }, | |
{ char: "=", pattern: "11100110010" }, | |
{ char: ">", pattern: "11011011000" }, | |
{ char: "?", pattern: "11011000110" }, | |
{ char: "@", pattern: "11000110110" }, | |
{ char: "A", pattern: "10100011000" }, | |
{ char: "B", pattern: "10001011000" }, | |
{ char: "C", pattern: "10001000110" }, | |
{ char: "D", pattern: "10110001000" }, | |
{ char: "E", pattern: "10001101000" }, | |
{ char: "F", pattern: "10001100010" }, | |
{ char: "G", pattern: "11010001000" }, | |
{ char: "H", pattern: "11000101000" }, | |
{ char: "I", pattern: "11000100010" }, | |
{ char: "J", pattern: "10110111000" }, | |
{ char: "K", pattern: "10110001110" }, | |
{ char: "L", pattern: "10001101110" }, | |
{ char: "M", pattern: "10111011000" }, | |
{ char: "N", pattern: "10111000110" }, | |
{ char: "O", pattern: "10001110110" }, | |
{ char: "P", pattern: "11101110110" }, | |
{ char: "Q", pattern: "11010001110" }, | |
{ char: "R", pattern: "11000101110" }, | |
{ char: "S", pattern: "11011101000" }, | |
{ char: "T", pattern: "11011100010" }, | |
{ char: "U", pattern: "11011101110" }, | |
{ char: "V", pattern: "11101011000" }, | |
{ char: "W", pattern: "11101000110" }, | |
{ char: "X", pattern: "11100010110" }, | |
{ char: "Y", pattern: "11101101000" }, | |
{ char: "Z", pattern: "11101100010" }, | |
{ char: "[", pattern: "11100011010" }, | |
{ char: "\\", pattern: "11101111010" }, | |
{ char: "]", pattern: "11001000010" }, | |
{ char: "^", pattern: "11110001010" }, | |
{ char: "_", pattern: "10100110000" }, | |
{ char: "`", pattern: "10100001100" }, | |
{ char: "a", pattern: "10010110000" }, | |
{ char: "b", pattern: "10010000110" }, | |
{ char: "c", pattern: "10000101100" }, | |
{ char: "d", pattern: "10000100110" }, | |
{ char: "e", pattern: "10110010000" }, | |
{ char: "f", pattern: "10110000100" }, | |
{ char: "g", pattern: "10011010000" }, | |
{ char: "h", pattern: "10011000010" }, | |
{ char: "i", pattern: "10000110100" }, | |
{ char: "j", pattern: "10000110010" }, | |
{ char: "k", pattern: "11000010010" }, | |
{ char: "l", pattern: "11001010000" }, | |
{ char: "m", pattern: "11110111010" }, | |
{ char: "n", pattern: "11000010100" }, | |
{ char: "o", pattern: "10001111010" }, | |
{ char: "p", pattern: "10100111100" }, | |
{ char: "q", pattern: "10010111100" }, | |
{ char: "r", pattern: "10010011110" }, | |
{ char: "s", pattern: "10111100100" }, | |
{ char: "t", pattern: "10011110100" }, | |
{ char: "u", pattern: "10011110010" }, | |
{ char: "v", pattern: "11110100100" }, | |
{ char: "w", pattern: "11110010100" }, | |
{ char: "x", pattern: "11110010010" }, | |
{ char: "y", pattern: "11011011110" }, | |
{ char: "z", pattern: "11011110110" }, | |
{ char: "{", pattern: "11110110110" }, | |
{ char: "|", pattern: "10101111000" }, | |
{ char: "}", pattern: "10100011110" }, | |
{ char: "~", pattern: "10001011110" }, | |
{ char: "DEL", pattern: "10111101000" }, | |
{ char: "FNC 3", pattern: "10111100010" }, | |
{ char: "FNC 2", pattern: "11110101000" }, | |
{ char: "Shift A", pattern: "11110100010" }, | |
{ char: "Code C", pattern: "10111011110" }, | |
{ char: "FNC 4", pattern: "10111101110" }, | |
{ char: "Code A", pattern: "11101011110" }, | |
{ char: "FNC 1", pattern: "11110101110" }, | |
{ char: "START A", pattern: "11010000100" }, | |
{ char: "START B", pattern: "11010010000" }, | |
{ char: "START C", pattern: "11010011100" }, | |
{ char: "STOP", pattern: "1100011101011" }, | |
{ char: "REVERSE STOP", pattern: "11010111000" }, | |
]; | |
function binaryToSpoilers(code: string, spacer: string) { | |
return code | |
.replace(/1/g, "||" + spacer + "||") | |
.replace(/0/g, spacer) | |
.replace(/\|\|\|\|/g, ""); | |
} | |
function convert(input: string, spacer: string = " ") { | |
const chars = input.split(""); | |
const code = chars.map((c) => code128b.findIndex((p) => p.char == c) ?? 0); | |
code.unshift(104); | |
const checksum = | |
(104 + code.reduce((acc, code, i) => acc + code * i, 0)) % 103; | |
code.push(checksum); | |
code.push(106); | |
return binaryToSpoilers( | |
code.map((v) => code128b[v].pattern ?? "ERROR").join(""), | |
spacer | |
); | |
} | |
const spaces = { | |
hair: " ", | |
thin: " ", | |
normal: " ", | |
underscore: "_" | |
}; | |
console.log(convert(Deno.args[0], spaces[Deno.args[1] ?? "hair"] ?? "X")); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment