// Copyright 2018 Campbell Crowley. All rights reserved.
// Author: Campbell Crowley (dev@campbellcrowley.com)
/**
* @classdesc Converts text strings into different formats.
* @class
*/
function FunTranslators() {
const self = this;
/**
* Convert a string to a format based on it's name.
*
* @public
*
* @param {string} name The name of the translator.
* @param {string} input The string to convert.
* @returns {string} The formatted string.
*/
this.to = function(name, input) {
switch (name) {
default:
return input;
case 'leet':
return self.toLeetSpeak(input);
case 'mocking':
return self.toMockingFont(input);
case 'smallcaps':
return self.toSmallCaps(input);
case 'superscript':
return self.toSuperScript(input);
}
};
/**
* Convert a string to Leet Speak (1337 5p34k).
*
* @public
*
* @param {string} input The string to convert.
* @returns {string} The formatted string.
*/
this.toLeetSpeak = function(input) {
let output = input.replace(/cker(s?)\b/g, 'xor$1');
output = output.replace(/ate/g, '8');
output = output.replace(/and/g, '&');
output = output.replace(/[lL]|[eE]|[aA]|[sS]|[gG]|[tT]|[oO]/g, (m) => {
m = m.toLowerCase();
switch (m) {
case 'l':
return '1';
case 'e':
return '3';
case 'a':
return '4';
case 's':
return '5';
case 'g':
return '6';
case 't':
return '7';
case 'o':
return '0';
}
});
return output;
};
/**
* Convert a string to the SpongeBob mocking meme font (SpOngEBoB MoCKinG).
*
* @public
*
* @param {string} input The string to convert.
* @returns {string} The formatted string.
*/
this.toMockingFont = function(input) {
const output = input.toLowerCase().split('');
for (let i = 0; i < output.length / 2; i++) {
const rand = Math.floor(Math.random() * output.length);
output[rand] = output[rand].toUpperCase();
}
return output.join('');
};
/**
* Convert string to small caps (Hᴇʟʟᴏ Wᴏʀʟᴅ!).
*
* @public
*
* @param {string} input The string to convert.
* @returns {string} The formatted string.
*/
this.toSmallCaps = function(input) {
const map = {
'0': '0',
'1': '1',
'2': '2',
'3': '3',
'4': '4',
'5': '5',
'6': '6',
'7': '7',
'8': '8',
'9': '9',
'a': 'ᴀ',
'b': 'ʙ',
'c': 'ᴄ',
'd': 'ᴅ',
'e': 'ᴇ',
'f': 'ғ',
'g': 'ɢ',
'h': 'ʜ',
'i': 'ɪ',
'j': 'ᴊ',
'k': 'ᴋ',
'l': 'ʟ',
'm': 'ᴍ',
'n': 'ɴ',
'o': 'ᴏ',
'p': 'ᴘ',
'q': 'ǫ',
'r': 'ʀ',
's': 's',
't': 'ᴛ',
'u': 'ᴜ',
'v': 'ᴠ',
'w': 'ᴡ',
'x': 'x',
'y': 'ʏ',
'z': 'ᴢ',
'A': 'A',
'B': 'B',
'C': 'C',
'D': 'D',
'E': 'E',
'F': 'F',
'G': 'G',
'H': 'H',
'I': 'I',
'J': 'J',
'K': 'K',
'L': 'L',
'M': 'M',
'N': 'N',
'O': 'O',
'P': 'P',
'Q': 'Q',
'R': 'R',
'S': 'S',
'T': 'T',
'U': 'U',
'V': 'V',
'W': 'W',
'X': 'X',
'Y': 'Y',
'Z': 'Z',
};
let output = '';
for (let i = 0; i < input.length; i++) {
output += map[input[i]] || input[i];
}
return output;
};
/**
* Convert string to superscript characters (ᴴᵉˡˡᵒ ᵂᵒʳˡᵈᵎ).
*
* @public
*
* @param {string} input The string to convert.
* @returns {string} The formatted string.
*/
this.toSuperScript = function(input) {
const map = {
'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': 'ᶻ',
'A': 'ᴬ',
'B': 'ᴮ',
'C': 'ᶜ',
'D': 'ᴰ',
'E': 'ᴱ',
'F': 'ᶠ',
'G': 'ᴳ',
'H': 'ᴴ',
'I': 'ᴵ',
'J': 'ᴶ',
'K': 'ᴷ',
'L': 'ᴸ',
'M': 'ᴹ',
'N': 'ᴺ',
'O': 'ᴼ',
'P': 'ᴾ',
'Q': 'Q',
'R': 'ᴿ',
'S': 'ˢ',
'T': 'ᵀ',
'U': 'ᵁ',
'V': 'ⱽ',
'W': 'ᵂ',
'X': 'ˣ',
'Y': 'ʸ',
'Z': 'ᶻ',
'+': '⁺',
'-': '⁻',
'=': '⁼',
'(': '⁽',
')': '⁾',
'?': 'ˀ',
'!': 'ᵎ',
};
let output = '';
for (let i = 0; i < input.length; i++) {
output += map[input[i]] || input[i];
}
return output;
};
}
module.exports = new FunTranslators();