-
-
Save simonsan/b2b2a7a26f88dc9f95363d16e7f8cb73 to your computer and use it in GitHub Desktop.
Rust code to create Zalgo text
This file contains 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
use rand::{Rng, thread_rng}; | |
const ZALGO_UP: [char; 50] = | |
[ | |
'\u{030e}', /* ̎ */ '\u{0304}', /* ̄ */ '\u{0305}', /* ̅ */ | |
'\u{033f}', /* ̿ */ '\u{0311}', /* ̑ */ '\u{0306}', /* ̆ */ '\u{0310}', /* ̐ */ | |
'\u{0352}', /* ͒ */ '\u{0357}', /* ͗ */ '\u{0351}', /* ͑ */ '\u{0307}', /* ̇ */ | |
'\u{0308}', /* ̈ */ '\u{030a}', /* ̊ */ '\u{0342}', /* ͂ */ '\u{0343}', /* ̓ */ | |
'\u{0344}', /* ̈́ */ '\u{034a}', /* ͊ */ '\u{034b}', /* ͋ */ '\u{034c}', /* ͌ */ | |
'\u{0303}', /* ̃ */ '\u{0302}', /* ̂ */ '\u{030c}', /* ̌ */ '\u{0350}', /* ͐ */ | |
'\u{0300}', /* ̀ */ '\u{0301}', /* ́ */ '\u{030b}', /* ̋ */ '\u{030f}', /* ̏ */ | |
'\u{0312}', /* ̒ */ '\u{0313}', /* ̓ */ '\u{0314}', /* ̔ */ '\u{033d}', /* ̽ */ | |
'\u{0309}', /* ̉ */ '\u{0363}', /* ͣ */ '\u{0364}', /* ͤ */ '\u{0365}', /* ͥ */ | |
'\u{0366}', /* ͦ */ '\u{0367}', /* ͧ */ '\u{0368}', /* ͨ */ '\u{0369}', /* ͩ */ | |
'\u{036a}', /* ͪ */ '\u{036b}', /* ͫ */ '\u{036c}', /* ͬ */ '\u{036d}', /* ͭ */ | |
'\u{036e}', /* ͮ */ '\u{036f}', /* ͯ */ '\u{033e}', /* ̾ */ '\u{035b}', /* ͛ */ | |
'\u{0346}', /* ͆ */ '\u{031a}', /* ̚ */ '\u{030d}' /* ̍ */ | |
]; | |
const ZALGO_DOWN: [char; 40] = | |
[ | |
'\u{0317}', /* ̗ */ '\u{0318}', /* ̘ */ '\u{0319}', /* ̙ */ | |
'\u{031c}', /* ̜ */ '\u{031d}', /* ̝ */ '\u{031e}', /* ̞ */ '\u{031f}', /* ̟ */ | |
'\u{0320}', /* ̠ */ '\u{0324}', /* ̤ */ '\u{0325}', /* ̥ */ '\u{0326}', /* ̦ */ | |
'\u{0329}', /* ̩ */ '\u{032a}', /* ̪ */ '\u{032b}', /* ̫ */ '\u{032c}', /* ̬ */ | |
'\u{032d}', /* ̭ */ '\u{032e}', /* ̮ */ '\u{032f}', /* ̯ */ '\u{0330}', /* ̰ */ | |
'\u{0331}', /* ̱ */ '\u{0332}', /* ̲ */ '\u{0333}', /* ̳ */ '\u{0339}', /* ̹ */ | |
'\u{033a}', /* ̺ */ '\u{033b}', /* ̻ */ '\u{033c}', /* ̼ */ '\u{0345}', /* ͅ */ | |
'\u{0347}', /* ͇ */ '\u{0348}', /* ͈ */ '\u{0349}', /* ͉ */ '\u{034d}', /* ͍ */ | |
'\u{034e}', /* ͎ */ '\u{0353}', /* ͓ */ '\u{0354}', /* ͔ */ '\u{0355}', /* ͕ */ | |
'\u{0356}', /* ͖ */ '\u{0359}', /* ͙ */ '\u{035a}', /* ͚ */ '\u{0323}', /* ̣ */ | |
'\u{0316}' /* ̖ */ | |
]; | |
const ZALGO_MID: [char; 23] = | |
[ | |
'\u{031b}', /* ̛ */ '\u{0340}', /* ̀ */ '\u{0341}', /* ́ */ | |
'\u{0358}', /* ͘ */ '\u{0321}', /* ̡ */ '\u{0322}', /* ̢ */ '\u{0327}', /* ̧ */ | |
'\u{0328}', /* ̨ */ '\u{0334}', /* ̴ */ '\u{0335}', /* ̵ */ '\u{0336}', /* ̶ */ | |
'\u{034f}', /* ͏ */ '\u{035c}', /* ͜ */ '\u{035d}', /* ͝ */ '\u{035e}', /* ͞ */ | |
'\u{035f}', /* ͟ */ '\u{0360}', /* ͠ */ '\u{0362}', /* ͢ */ '\u{0338}', /* ̸ */ | |
'\u{0337}', /* ̷ */ '\u{0361}', /* ͡ */ '\u{0489}', /* ҉_ */ '\u{0315}' /* ̕ */ | |
]; | |
pub fn zalgify_text(s: &str) -> String | |
{ | |
let mut rng = thread_rng(); | |
let mut new_text = String::with_capacity(s.len() * 2); | |
for c in s.chars() | |
{ | |
new_text.push(c); | |
for _ in 0..rng.gen_range(0..8) / 2 + 1 | |
{ | |
new_text.push(ZALGO_UP[rng.gen_range(0..ZALGO_UP.len())]); | |
} | |
for _ in 0..rng.gen_range(0..3) / 2 | |
{ | |
new_text.push(ZALGO_MID[rng.gen_range(0..ZALGO_MID.len())]); | |
} | |
for _ in 0..rng.gen_range(0..4) / 2 + 1 | |
{ | |
new_text.push(ZALGO_DOWN[rng.gen_range(0..ZALGO_DOWN.len())]); | |
} | |
} | |
new_text | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment