UNPKG

christopher

Version:

A cipher/code transcribing library built in JavaScript.

471 lines (469 loc) 12.6 kB
// Generated by CoffeeScript 1.10.0 var christopher; christopher = (typeof exports !== "undefined" && exports !== null ? exports.christopher : void 0) || (christopher = { to: { base: function(input, base, opts) { var i, inputArray, items, j, len, outputString; if (isNaN(input) !== true) { if (typeof input === "string") { if (opts != null ? opts.startBase : void 0) { return parseInt(input, opts.startBase).toString(base); } else { return parseInt(input, 10).toString(base); } } else { return input.toString(base); } } else { inputArray = input.split(""); outputString = ""; for (i = j = 0, len = inputArray.length; j < len; i = ++j) { items = inputArray[i]; outputString += items.charCodeAt(0).toString(base); if (i !== inputArray.length - 1 && (opts != null ? opts.spacing : void 0) !== false) { outputString += " "; } } return outputString; } }, morse: function(input) { var i, inputArray, item, j, len, morse, outputString; morse = { "a": ".-", "b": "-...", "c": "-.-.", "d": "-..", "e": ".", "f": "..-.", "g": "--.", "h": "....", "i": "..", "j": ".---", "k": "-.-", "l": ".-..", "m": "--", "n": "-.", "o": "---", "p": ".--.", "q": "--.-", "r": ".-.", "s": "...", "t": "-", "u": "..-", "v": "...-", "w": ".--", "x": "-..-", "y": "-.--", "z": "--..", "0": "-----", "1": ".----", "2": "..---", "3": "...--", "4": "....-", "5": ".....", "6": "-....", "7": "--...", "8": "---..", "9": "----.", ".": ".-.-.-", ",": "--..--", ":": "---...", "?": "..--..", "'": ".----.", "-": "-....-", "/": "-..-.", "\"": ".-..-.", "@": ".--.-.", "=": "-...-", " ": "/" }; inputArray = input.toLowerCase().split(""); outputString = ""; for (i = j = 0, len = inputArray.length; j < len; i = ++j) { item = inputArray[i]; outputString += (function() { if (morse[item]) { return morse[item]; } else { throw new Error("Character not translatable to Morse code: " + item); } })(); if (i !== inputArray.length - 1) { outputString += " "; } } return outputString; }, nato: function(input) { var i, inputArray, item, j, len, nato, outputString; nato = { "a": "Alpha", "b": "Bravo", "c": "Charlie", "d": "Delta", "e": "Echo", "f": "Foxtrot", "g": "Golf", "h": "Hotel", "i": "India", "j": "Juliet", "k": "Kilo", "l": "Lima", "m": "Mike", "n": "November", "o": "Oscar", "p": "Papa", "q": "Quebec", "r": "Romeo", "s": "Sierra", "t": "Tango", "u": "Uniform", "v": "Victor", "w": "Whiskey", "x": "X-ray", "y": "Yankee", "z": "Zulu", "1": "One", "2": "Two", "3": "Three", "4": "Four", "5": "Five", "6": "Six", "7": "Seven", "8": "Eight", "9": "Nine", "0": "Zero", " ": "/" }; inputArray = input.toLowerCase().split(""); outputString = ""; for (i = j = 0, len = inputArray.length; j < len; i = ++j) { item = inputArray[i]; outputString += nato[item] ? nato[item] : item; if (i !== inputArray.length - 1 && /^[\x00-\x7F]*$/.test(item) === true) { outputString += " "; } } return outputString; }, caesar: function(input, shift) { return input.replace(/([a-z|A-Z])/g, function($1) { var char; char = $1.charCodeAt(0); return String.fromCharCode(char >= 97 ? (char + shift + 26 - 97) % 26 + 97 : (char + shift + 26 - 65) % 26 + 65); }); }, atbash: function(input) { var atbash, i, inputArray, item, j, len, outputString; atbash = { "a": "z", "b": "y", "c": "x", "d": "w", "e": "v", "f": "u", "g": "t", "h": "s", "i": "r", "j": "q", "k": "p", "l": "o", "m": "n", "n": "m", "o": "l", "p": "k", "q": "j", "r": "i", "s": "h", "t": "g", "u": "f", "v": "e", "w": "d", "x": "c", "y": "b", "z": "a", "A": "Z", "B": "Y", "C": "X", "D": "W", "E": "V", "F": "U", "G": "T", "H": "S", "I": "R", "J": "Q", "K": "P", "L": "O", "M": "N", "N": "M", "O": "L", "P": "K", "Q": "J", "R": "I", "S": "H", "T": "G", "U": "F", "V": "E", "W": "D", "X": "C", "Y": "B", "Z": "A" }; inputArray = input.split(""); outputString = ""; for (i = j = 0, len = inputArray.length; j < len; i = ++j) { item = inputArray[i]; outputString += atbash[item] ? atbash[item] : item; } return outputString; }, letternumbers: function(input) { var alphabet, i, inputArray, item, j, len, outputString; alphabet = ["this space is intentionally left blank for the sake of this script", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; inputArray = input.toLowerCase().split(""); outputString = ""; for (i = j = 0, len = inputArray.length; j < len; i = ++j) { item = inputArray[i]; if (alphabet.indexOf(item) !== -1) { outputString += alphabet.indexOf(item); } else if (item === " ") { if (i !== inputArray.length - 1) { outputString += " / "; } } if (i !== inputArray.length - 1 && item !== " " && alphabet.indexOf(inputArray[i + 1]) > -1) { outputString += "-"; } } return outputString.toUpperCase(); } }, from: { base: function(input, base) { var inputString, items, j, len, outputArray; if (/\s/g.test(input) !== true) { console.log("Currently, spacing should be enabled/included to translate strings of encoded text. Your decode probably won't work without spacing. Unless, of course, you're only translating one character or something."); return outputArray = String.fromCharCode(parseInt(input, base)); } else if (isNaN(input) !== true || typeof input !== "string") { return input.toString(base); } else { outputArray = input.split(" "); inputString = ""; for (j = 0, len = outputArray.length; j < len; j++) { items = outputArray[j]; inputString += String.fromCharCode(parseInt(items, base)); } return inputString; } }, morse: function(input) { var inputString, item, j, len, morse, outputArray; morse = { "-----": "0", ".----": "1", "..---": "2", "...--": "3", "....-": "4", ".....": "5", "-....": "6", "--...": "7", "---..": "8", "----.": "9", ".-": "a", "-...": "b", "-.-.": "c", "-..": "d", ".": "e", "..-.": "f", "--.": "g", "....": "h", "..": "i", ".---": "j", "-.-": "k", ".-..": "l", "--": "m", "-.": "n", "---": "o", ".--.": "p", "--.-": "q", ".-.": "r", "...": "s", "-": "t", "..-": "u", "...-": "v", ".--": "w", "-..-": "x", "-.--": "y", "--..": "z", ".-.-.-": ".", "--..--": ",", "---...": ":", "..--..": "?", ".----.": "'", "-....-": "-", "-..-.": "/", ".-..-.": "\"", ".--.-.": "@", "-...-": "=", "/": " " }; outputArray = input.split(" "); inputString = ""; for (j = 0, len = outputArray.length; j < len; j++) { item = outputArray[j]; inputString += (function() { if (morse[item]) { return morse[item]; } else { throw new Error("Character not translatable from Morse code: " + item); } })(); } return inputString.toUpperCase(); }, nato: function(input) { var inputString, item, j, len, nato, outputArray; nato = { "Zero": "0", "One": "1", "Two": "2", "Three": "3", "Four": "4", "Five": "5", "Six": "6", "Seven": "7", "Eight": "8", "Nine": "9", "Alpha": "a", "Bravo": "b", "Charlie": "c", "Delta": "d", "Echo": "e", "Foxtrot": "f", "Golf": "g", "Hotel": "h", "India": "i", "Juliet": "j", "Kilo": "k", "Lima": "l", "Mike": "m", "November": "n", "Oscar": "o", "Papa": "p", "Quebec": "q", "Romeo": "r", "Sierra": "s", "Tango": "t", "Uniform": "u", "Victor": "v", "Whiskey": "w", "X-ray": "x", "Yankee": "y", "Zulu": "z", "/": " " }; outputArray = input.split(" "); inputString = ""; for (j = 0, len = outputArray.length; j < len; j++) { item = outputArray[j]; inputString += nato[item] ? nato[item] : item; } return inputString.toUpperCase(); }, caesar: function(input, shift) { var rot; if (Math.sign(shift) === 1) { rot = Math.abs(shift) * -1; } else if (Math.sign(shift) === -1) { rot = Math.abs(shift); } else { rot = shift; } return input.replace(/([a-z|A-Z])/g, function($1) { var char; char = $1.charCodeAt(0); return String.fromCharCode(char >= 97 ? (char + rot + 26 - 97) % 26 + 97 : (char + rot + 26 - 65) % 26 + 65); }); }, atbash: function(input) { var atbash, i, inputString, item, j, len, outputArray; atbash = { "z": "a", "y": "b", "x": "c", "w": "d", "v": "e", "u": "f", "t": "g", "s": "h", "r": "i", "q": "j", "p": "k", "o": "l", "n": "m", "m": "n", "l": "o", "k": "p", "j": "q", "i": "r", "h": "s", "g": "t", "f": "u", "e": "v", "d": "w", "c": "x", "b": "y", "a": "z", "Z": "A", "Y": "B", "X": "C", "W": "D", "V": "E", "U": "F", "T": "G", "S": "H", "R": "I", "Q": "J", "P": "K", "O": "L", "N": "M", "M": "N", "L": "O", "K": "P", "J": "Q", "I": "R", "H": "S", "G": "T", "F": "U", "E": "V", "D": "W", "C": "X", "B": "Y", "A": "Z" }; outputArray = input.split(""); inputString = ""; for (i = j = 0, len = outputArray.length; j < len; i = ++j) { item = outputArray[i]; inputString += atbash[item] ? atbash[item] : item; } return inputString; }, letternumbers: function(input) { var alphabet, i, inputString, item, j, len, outputArray; alphabet = ["this space is intentionally left blank for the sake of this script", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; outputArray = input.split(/[ -]+/); inputString = ""; for (i = j = 0, len = outputArray.length; j < len; i = ++j) { item = outputArray[i]; if (alphabet[item]) { inputString += alphabet[item]; } else if (item === "/") { inputString += " "; } } return inputString.toUpperCase(); } } });