diff options
author | Rory Dudley | 2024-04-04 00:47:24 -0600 |
---|---|---|
committer | Rory Dudley | 2024-04-04 00:47:24 -0600 |
commit | 9b3e4dd71ec1491e3580e079e9be1b42117a74c9 (patch) | |
tree | 6bf49aee7b725e87f34b124eb20def50e475c26c /src/poem/anthology/source.rs | |
parent | beb11773f6ac17d0b97f908311ac5989e1a0a5ae (diff) | |
download | dwarvish-9b3e4dd71ec1491e3580e079e9be1b42117a74c9.tar.gz |
Add better support for aliases
Make sure to interpret alias values as their own poems, since aliases
can be fairly complex.
Notes
Notes:
Previously, I was doing a simple find and replace for aliases within
each verse. However, aliases can be fairly complex, containing their own
range of meters, commands, and io operations. This could cause problems,
since a verse should never have, for instance, a pipe (`|`) in the
middle of it. This patch fixes it, so that we iterate once through the
poem, generating a new poem based on aliases that are found. In order to
avoid two loops in the recite() function, it might make sense to offload
handling aliases to read().
Diffstat (limited to 'src/poem/anthology/source.rs')
-rw-r--r-- | src/poem/anthology/source.rs | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/poem/anthology/source.rs b/src/poem/anthology/source.rs index ed4ed13..77d1330 100644 --- a/src/poem/anthology/source.rs +++ b/src/poem/anthology/source.rs @@ -12,7 +12,7 @@ use std::fs; /// ```sh /// source ~/.dwvshrc /// ``` -pub fn incant(verse: &Verse, env: &mut Environment) -> i32 { +pub fn incant(verse: &Verse, out: &mut String, env: &mut Environment) -> i32 { let files = match verse.clause() { Some(clause) => clause, None => { @@ -42,13 +42,15 @@ pub fn incant(verse: &Verse, env: &mut Environment) -> i32 { } }; - match poem.recite(env, None) { - Ok(_) => {} + let stdout = if verse.couplet { Some(true) } else { None }; + + *out = match poem.recite(env, stdout) { + Ok(out) => out, Err(e) => { eprintln!("dwvsh: {}", e.to_string().to_lowercase()); continue; } - } + }; } 0 |