summaryrefslogtreecommitdiffstats
path: root/src/poem/recite.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/poem/recite.rs')
-rw-r--r--src/poem/recite.rs39
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