Initial commit
This commit is contained in:
commit
9d102c1e08
|
@ -0,0 +1,3 @@
|
|||
/target
|
||||
**/*.rs.bk
|
||||
Cargo.lock
|
|
@ -0,0 +1,11 @@
|
|||
[package]
|
||||
name = "owoify"
|
||||
version = "0.1.0"
|
||||
authors = [""]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
regex = "1.2.0"
|
||||
rand = "0.7.0"
|
|
@ -0,0 +1,49 @@
|
|||
use rand::prelude::*;
|
||||
use regex::Regex;
|
||||
use std::str::FromStr;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
#[test]
|
||||
fn owo() {
|
||||
let text = String::from("malfunction me mom.. t-till i break~~");
|
||||
let owoified = text.owoify();
|
||||
println!("\t\t{}", owoified);
|
||||
}
|
||||
#[test]
|
||||
fn all_match_owo() {
|
||||
let text = String::from("r l R L na Na NA ove !!");
|
||||
println!("\t\t{}", text.owoify());
|
||||
}
|
||||
}
|
||||
|
||||
pub trait OwOifiable {
|
||||
fn owoify(&self) -> Self;
|
||||
}
|
||||
|
||||
impl OwOifiable for String {
|
||||
fn owoify(&self) -> Self {
|
||||
let mut rng = rand::thread_rng();
|
||||
let faces = ["(・`ω´・)", ";;w;;", "owo", "UwU", ">w<", "^w^"];
|
||||
let face = &format!(" {} ", faces[rng.gen_range(0, faces.len())]).to_owned();
|
||||
let pats: Vec<(&str, &str)> = vec![
|
||||
("(?:r|l)", "w"),
|
||||
("(?:R|L)", "W"),
|
||||
("n([aeiou])", "ny$1"),
|
||||
("N([aeiou])", "Ny$1"),
|
||||
("N([AEIOU])", "Ny$1"),
|
||||
("ove", "uv"),
|
||||
("!+", face),
|
||||
];
|
||||
|
||||
let mut owoified = String::from_str(&self).unwrap();
|
||||
|
||||
for &(f, t) in &pats {
|
||||
let re = Regex::new(f).unwrap();
|
||||
owoified = re.replace_all(&owoified, t).to_string();
|
||||
}
|
||||
|
||||
owoified
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue