111 lines
2.8 KiB
JavaScript
111 lines
2.8 KiB
JavaScript
// please no
|
|
module['exports'] = function zalgo(text, options) {
|
|
text = text || ' he is here ';
|
|
var soul = {
|
|
'up': [
|
|
'̍', '̎', '̄', '̅',
|
|
'̿', '̑', '̆', '̐',
|
|
'͒', '͗', '͑', '̇',
|
|
'̈', '̊', '͂', '̓',
|
|
'̈', '͊', '͋', '͌',
|
|
'̃', '̂', '̌', '͐',
|
|
'̀', '́', '̋', '̏',
|
|
'̒', '̓', '̔', '̽',
|
|
'̉', 'ͣ', 'ͤ', 'ͥ',
|
|
'ͦ', 'ͧ', 'ͨ', 'ͩ',
|
|
'ͪ', 'ͫ', 'ͬ', 'ͭ',
|
|
'ͮ', 'ͯ', '̾', '͛',
|
|
'͆', '̚',
|
|
],
|
|
'down': [
|
|
'̖', '̗', '̘', '̙',
|
|
'̜', '̝', '̞', '̟',
|
|
'̠', '̤', '̥', '̦',
|
|
'̩', '̪', '̫', '̬',
|
|
'̭', '̮', '̯', '̰',
|
|
'̱', '̲', '̳', '̹',
|
|
'̺', '̻', '̼', 'ͅ',
|
|
'͇', '͈', '͉', '͍',
|
|
'͎', '͓', '͔', '͕',
|
|
'͖', '͙', '͚', '̣',
|
|
],
|
|
'mid': [
|
|
'̕', '̛', '̀', '́',
|
|
'͘', '̡', '̢', '̧',
|
|
'̨', '̴', '̵', '̶',
|
|
'͜', '͝', '͞',
|
|
'͟', '͠', '͢', '̸',
|
|
'̷', '͡', ' ҉',
|
|
],
|
|
};
|
|
var all = [].concat(soul.up, soul.down, soul.mid);
|
|
|
|
function randomNumber(range) {
|
|
var r = Math.floor(Math.random() * range);
|
|
return r;
|
|
}
|
|
|
|
function isChar(character) {
|
|
var bool = false;
|
|
all.filter(function(i) {
|
|
bool = (i === character);
|
|
});
|
|
return bool;
|
|
}
|
|
|
|
|
|
function heComes(text, options) {
|
|
var result = '';
|
|
var counts;
|
|
var l;
|
|
options = options || {};
|
|
options['up'] =
|
|
typeof options['up'] !== 'undefined' ? options['up'] : true;
|
|
options['mid'] =
|
|
typeof options['mid'] !== 'undefined' ? options['mid'] : true;
|
|
options['down'] =
|
|
typeof options['down'] !== 'undefined' ? options['down'] : true;
|
|
options['size'] =
|
|
typeof options['size'] !== 'undefined' ? options['size'] : 'maxi';
|
|
text = text.split('');
|
|
for (l in text) {
|
|
if (isChar(l)) {
|
|
continue;
|
|
}
|
|
result = result + text[l];
|
|
counts = {'up': 0, 'down': 0, 'mid': 0};
|
|
switch (options.size) {
|
|
case 'mini':
|
|
counts.up = randomNumber(8);
|
|
counts.mid = randomNumber(2);
|
|
counts.down = randomNumber(8);
|
|
break;
|
|
case 'maxi':
|
|
counts.up = randomNumber(16) + 3;
|
|
counts.mid = randomNumber(4) + 1;
|
|
counts.down = randomNumber(64) + 3;
|
|
break;
|
|
default:
|
|
counts.up = randomNumber(8) + 1;
|
|
counts.mid = randomNumber(6) / 2;
|
|
counts.down = randomNumber(8) + 1;
|
|
break;
|
|
}
|
|
|
|
var arr = ['up', 'mid', 'down'];
|
|
for (var d in arr) {
|
|
var index = arr[d];
|
|
for (var i = 0; i <= counts[index]; i++) {
|
|
if (options[index]) {
|
|
result = result + soul[index][randomNumber(soul[index].length)];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
// don't summon him
|
|
return heComes(text, options);
|
|
};
|
|
|