| // 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); |
| }; |
| |