added preliminary kijefiles support

This commit is contained in:
spiders 2022-05-05 14:12:18 -07:00
parent 305fa2e673
commit b291745a3e
3 changed files with 50 additions and 16 deletions

View file

@ -160,7 +160,7 @@ impl BubbleConfig {
" ",
);
let bubble_bottom = manipulate::pad_left(
&format!(" {} ", self.bottom.repeat(longest_length + 2),),
&format!(" {} \n", self.bottom.repeat(longest_length + 2),),
left_pad_length,
" ",
);

View file

@ -1,4 +1,6 @@
use super::kule::*;
use std::fs;
use std::io;
use voca_rs::*;
// represents inherent structural information about a critter
@ -45,11 +47,10 @@ impl CritterConfig {
object: &Option<String>,
format: &Option<String>,
name: &Option<String>,
) -> CritterConfig {
) -> Result<CritterConfig, String> {
let kijetesantakalu = CritterTemplate {
anchor: 14,
critter: r"
$8 $9$6
critter: r"$8 $9$6
$8 /__ $9$6
$8 / $1$2\ $9$5
$8 | |$3$4
@ -59,8 +60,7 @@ $8 (III|\|| $9$0"
};
let kijetesantakalu_little = CritterTemplate {
anchor: 13,
critter: r"
$8 $9$6
critter: r"$8 $9$6
$8 /__ $9$6
$8 / $1$2\ $9$5
$8 | |$3$4
@ -69,8 +69,7 @@ $8 (I|\|| $9$0"
};
let soweli = CritterTemplate {
anchor: 10,
critter: r"
$8 $9$6
critter: r"$8 $9$6
$8 ___ $9$6
$8 $1$2) $9$5
$8 |||| $9$0"
@ -159,11 +158,11 @@ $8 |||| $9$0"
"kijetesantakalu" => (),
"lili" => config.template = kijetesantakalu_little,
"soweli" => config.template = soweli,
_ => (),
name => config.template = template_from_file(&name)?,
}
}
return config;
return Ok(config);
}
// gives a fully formatted version of the critter
@ -183,3 +182,24 @@ $8 |||| $9$0"
.replace("$0", &self.object);
}
}
// attempts to interpret file as a path, and if this fails, tries appending it to every location in the kijepath environment variable.
pub fn template_from_file(name: &str) -> Result<CritterTemplate, &str> {
let file = fs::read_to_string(name)
.map_err(|_| "mi ken ala lukin e lipu kije\ncouldn't find/read kijefile")?;
let mut lines = file.lines().skip_while(|l| l.starts_with('#')); // skips comments
let anchor: usize;
if let Some(anchor_line) = lines.next() {
anchor = anchor_line
.trim()
.parse()
.map_err(|_| "nanpa li nasa\ncouldn't parse anchor as number")?;
} else {
return Err("ale li weka tan lipu kije\nkijefile missing content");
}
let mut critter = String::new();
lines.for_each(|l| critter.push_str(&format!("{}\n", l)));
Ok(CritterTemplate { anchor, critter })
}

View file

@ -21,8 +21,16 @@ use voca_rs::*;
fn main() {
let cli = Args::parse();
let mut text = String::new();
let (critter_config, bubble_config) = cli.configs_from_arguments();
let (critter_config, bubble_config);
match cli.configs_from_arguments() {
Err(s) => {
println!("pakala a!\n{}", s);
return;
}
Ok((c, b)) => {
(critter_config, bubble_config) = (c, b);
}
}
if !cli.text.is_empty() {
text = cli.text.join(" ")
} else {
@ -104,7 +112,7 @@ struct Args {
}
impl Args {
fn configs_from_arguments(&self) -> (CritterConfig, BubbleConfig) {
fn configs_from_arguments(&self) -> Result<(CritterConfig, BubbleConfig), String> {
let mut eyes = self.lukin.clone();
let mut tongue = self.uta.clone();
let mut line = self.palisa.clone();
@ -206,8 +214,14 @@ impl Args {
_ => String::new(),
})
}
let critter_config =
CritterConfig::config_from_string(&eyes, &tongue, &line, &object, &Some(format), &name);
let critter_config = CritterConfig::config_from_string(
&eyes,
&tongue,
&line,
&object,
&Some(format),
&name,
)?;
let bubble_config = BubbleConfig::config_from_string(
critter_config.template.anchor,
self.pakala,
@ -215,7 +229,7 @@ impl Args {
&border,
);
(critter_config, bubble_config)
Ok((critter_config, bubble_config))
}
}