diff options
Diffstat (limited to 'src/poem/recite.rs')
-rw-r--r-- | src/poem/recite.rs | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/src/poem/recite.rs b/src/poem/recite.rs index 45d4d2e..1f24d14 100644 --- a/src/poem/recite.rs +++ b/src/poem/recite.rs @@ -4,6 +4,7 @@ use crate::compose::Environment; use crate::path; use crate::poem::anthology; use crate::poem::elements::rune::Rune; +use crate::poem::read::Readable; use std::env; use std::{ io, @@ -25,8 +26,30 @@ impl Reciteable for Poem { // Keep track of pids for background processes let mut pids: Arc<Mutex<Vec<i32>>> = Arc::new(Mutex::new(Vec::new())); - // Loop through each verse in the poem + // Check for aliases + let mut vv = Poem::new(); for verse in self.iter() { + let alias = match env.aliases.get(&verse.verb()) { + Some(alias) => alias, + None => { + vv.push(verse.clone()); + continue; + } + } + .to_string(); + + let mut poem = Poem::read(alias).unwrap(); + let len = poem.len(); + for (i, new_verse) in poem.iter_mut().enumerate() { + if verse.clause().is_some() && i + 1 == len { + new_verse.stanza.append(&mut verse.clause().unwrap()); + } + vv.push(new_verse.clone()); + } + } + + // Loop through each verse in the poem + for verse in vv.iter() { // Verse may need to be mutable let mut verse = verse.clone(); @@ -59,18 +82,6 @@ impl Reciteable for Poem { *word = word.replace('\x0e', "$"); } - // Check for aliases - match env.aliases.get(&verse.verb()) { - Some(verb) => { - let mut split: Vec<String> = verb.split(" ").map(|s| s.to_string()).collect(); - let mut old_stanza = verse.stanza.clone(); - old_stanza.remove(0); - split.append(&mut old_stanza); - verse.stanza = split; - } - None => {} - }; - // Check if verse is a builtin let index = anthology::lookup(&verse.verb()); @@ -142,7 +153,7 @@ impl Reciteable for Poem { // Incant the verse if it's a built-in let status = if index.is_some() { - anthology::incant(&verse, index.unwrap(), env) + anthology::incant(&verse, &mut out, index.unwrap(), env) } else { // Checking for environment variables and running internal // poems may mean that the verb is empty now, so check it once |