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 hidden or 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 hidden or 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