81 lines
3.0 KiB
Rust
81 lines
3.0 KiB
Rust
use crate::lipu_nimi;
|
|
use rand::Rng;
|
|
|
|
/// ni li open e pali ante tawa pali pi toki sin
|
|
/// mi ni tan ni: lon lipu ante la, wile wan li pona. wile mute li ike.
|
|
///
|
|
/// # wile
|
|
/// `nimi sin` - ni li nimi sin. nimi ni o lon toki
|
|
pub fn pali(nimi_sin: &str) -> String {
|
|
pali_lili(nimi_sin, true, false) //ilo li pali e toki la nimi "la" li ken lon la nimi sin li lon ala
|
|
}
|
|
|
|
/// ni li pali e pali suli
|
|
/// (ni la mi nimi "pali_lili" e ona tan seme a?)
|
|
///
|
|
/// # arguments
|
|
/// `nimi_sin` - ni li nimi sin. nimi ni o lon toki
|
|
/// `la_li_ken` - nimi "la" li lon la nimi "la" li ken ala. ante la ona li ken
|
|
/// `nimi_sin_li_lon` - nimi sin li lon anu seme?
|
|
fn pali_lili(nimi_sin: &str, la_li_ken: bool, mut nimi_sin_li_lon: bool) -> String {
|
|
let mut npsa = rand::thread_rng();
|
|
let mut toki_sin = String::new();
|
|
let mut mi_anu_sina = false;
|
|
let mut la_anu_seme = npsa.gen_range(0_u8..10) == 0;
|
|
if la_li_ken == false {
|
|
la_anu_seme = false;
|
|
}
|
|
let mut x = 0;
|
|
let suli = npsa.gen_range(1_u8..4); // toki la, kipisi tu tu li ken lon.
|
|
while x < suli {
|
|
if x == 1 {
|
|
if npsa.gen_range(0_u8..10) == 0 {
|
|
toki_sin.push_str("o "); //o li ken lon
|
|
} else if !mi_anu_sina {
|
|
toki_sin.push_str("li "); //nimi "mi" anu nimi "sina" li lon ala la nimi "li" li ken lon
|
|
}
|
|
}
|
|
if x == 2 {
|
|
toki_sin.push_str("e "); //nimi "e"
|
|
}
|
|
if x == 3 {
|
|
toki_sin.push_str(lipu_nimi::pana(&[1]).as_str()); //nimi sama nimi "kepeken"
|
|
toki_sin.push_str(" ");
|
|
}
|
|
let mut y = 0;
|
|
let suli_kipisi;
|
|
if suli == 1 {
|
|
suli_kipisi = npsa.gen_range(2_u8..4); //kipisi wan taso li lon la nimi tu anu nimi mute o lon kipisi
|
|
} else {
|
|
suli_kipisi = npsa.gen_range(1_u8..4); //ante la nimi wan li ken lon kin!
|
|
}
|
|
while y < suli_kipisi {
|
|
if (npsa.gen_range(0_u8..4) == 0 || (x == suli - 1 && y == suli_kipisi - 1))
|
|
&& !nimi_sin_li_lon
|
|
{
|
|
toki_sin.push_str(nimi_sin); //ilo li pana e nimi sin.
|
|
nimi_sin_li_lon = true; //ni la, nimi sin li lon!
|
|
} else {
|
|
let nimi_ni = lipu_nimi::pana(&[0, 1]);
|
|
if (nimi_ni == "mi" || nimi_ni == "sina") && suli_kipisi == 1 {
|
|
mi_anu_sina = true; //nimi li nimi "mi" taso anu nimi "sina" taso
|
|
}
|
|
toki_sin.push_str(nimi_ni.as_str());
|
|
}
|
|
toki_sin.push_str(" ");
|
|
y += 1;
|
|
if suli_kipisi - y > 1 && npsa.gen_range(0_u8..1) == 0 {
|
|
//nimi "pi" li ken lon la, ona li ken lon!
|
|
toki_sin.push_str("pi ");
|
|
}
|
|
}
|
|
x += 1;
|
|
}
|
|
if la_anu_seme {
|
|
//nimi "la" li lon la, ilo li pali e toki sin li pana e toki ni
|
|
toki_sin.push_str("la ");
|
|
toki_sin.push_str(pali_lili(nimi_sin, false, nimi_sin_li_lon).as_str());
|
|
}
|
|
toki_sin //ilo li pana e toki
|
|
}
|