ambuda-org / vidyut

Infrastructure for Sanskrit software. For Python bindings, see `vidyut-py`.
49 stars 21 forks source link

prakriyA-generation example #114

Closed vvasuki closed 4 months ago

vvasuki commented 7 months ago

Would be nice to add a file named print_prakriyaa.rs with the following content to the vidyut-prakriya/examples folder

use vidyut_prakriya::{Prakriya, Vyakarana};
use vidyut_prakriya::args::*;

fn build_dhaatu(upadesha: &str, gana: Gana, sanadi: Sanadi)  -> Dhatu {
    let v = Vyakarana::new();
    let dhatu = Dhatu::builder()
        .upadesha(upadesha)
        .gana(gana)
        .sanadi(&[sanadi])
        .build()
        .unwrap();
    let prakriyas = v.derive_dhatus(&dhatu);

    print_prakriyaa(prakriyas);
    dhatu
}

fn lat_kartari_1_1(dhatu: Dhatu) {
    let v: Vyakarana = Vyakarana::new();
    let args: Tinanta = Tinanta::builder()
        .dhatu(dhatu)
        .lakara(Lakara::Lat)
        .prayoga(Prayoga::Kartari)
        .purusha(Purusha::Prathama)
        .vacana(Vacana::Eka)
        .build().unwrap();

    let prakriyas = v.derive_tinantas(&args);

    print_prakriyaa(prakriyas);
}

fn print_prakriyaa(prakriyas: Vec<Prakriya>) {
    for p in prakriyas {
        println!("{}", p.text());
        println!("---------------------------");
        for step in p.history() {
            // let terms: Vec<_> = step.result().iter().map(|x| x.text()).filter(|x| !x.is_empty()).collect();
            let terms: Vec<_> = step.result().iter().map(|x| x.to_string()).filter(|x| !x.is_empty()).collect();
            let result = terms.join(" + ");
            println!("{:<10} | {}", step.rule().code(), result);
        }
        println!("---------------------------");
        println!("\n");
    }
}

fn main() {
    let dhatu: Dhatu = Dhatu::mula("BU", Gana::Bhvadi);
    lat_kartari_1_1(dhatu);

    let sannanta = build_dhaatu("jYA", Gana::Kryadi, Sanadi::san);
    lat_kartari_1_1(sannanta);
}
akprasad commented 5 months ago

Adding now.

akprasad commented 5 months ago

Done, will push as part of the next update.

akprasad commented 4 months ago

Pushing within the next 30 minutes or so.