rot8000/src/main.rs
Harald Hoyer 9600d91ab6 initial commit
Signed-off-by: Harald Hoyer <harald@hoyer.xyz>
2024-03-21 13:21:06 +01:00

46 lines
1.2 KiB
Rust

use regex::{Captures, Regex, Replacer};
use std::io::stdin;
/*
"grfg123@rknzcyr.bet"
"grfg456@rknzcyr.bet"
"grfg456@rknzcyr1.bet"
*/
struct MailScrambler;
impl Replacer for MailScrambler {
fn replace_append(&mut self, caps: &Captures<'_>, dst: &mut String) {
for c in caps[0].chars() {
if c.is_ascii() {
// do rot13 for ascii alphanumeric characters
let mut c = c as u8;
if c.is_ascii_lowercase() {
c = (c - b'a' + 13) % 26 + b'a';
} else if c.is_ascii_uppercase() {
c = (c - b'A' + 13) % 26 + b'A';
}
dst.push(unsafe { char::from_u32_unchecked(c as u32) });
} else {
dst.push(c);
}
}
}
}
fn main() {
let re =
Regex::new(r#""([[[:ascii:]]&&[^"\s\[\]\\]]*?@[[[:ascii:]]&&[^"\s]\[\]\\]*)""#).unwrap();
let mut line = String::new();
while let Ok(n) = stdin().read_line(&mut line) {
if n == 0 {
break;
}
let result = re.replace(&line, MailScrambler);
print!("{}", result);
line.clear();
}
}