From 4b1b8061e79b42128df4f06fd1e439549bf9696b Mon Sep 17 00:00:00 2001 From: Rory Dudley Date: Sun, 19 May 2024 18:50:06 -0600 Subject: Handle STDERR, in addition to STDOUT This patch overhauls the reading and reciting of verses, such that the redirection of STDERR (in addition to STDOUT, which was already a feature), is now possible. Removed the 'stdout' argument from recite(), since it is no longer needed with how incantations function. A verse's couplet indicator is now a u8, instead of a bool, with certain values corresponding to types of couplets, for instance: ls | grep Ca | lolcat ^ ^ ^ | | 2: right side of a couplet | 3: both sides of a couplet 1: left side of a couplet Incantions are no longer hanlded in rune.rs, and the task macros have been removed. Now, a verse incants itself, matching on its own meter to determine how to handle the next verse. The following runes were added to help with handling STDERR: Write2 -> 2> WriteAll -> &> Addendum2 -> 2>> AddendumAll -> &>> The 'io' field in verse was changed from an Option, to an array of Runes, since a single verse might have multiple IO operations. The following fields were added to Verse, to assist with handling STDERR: ip -> List of filenames to read into STDIN op -> List of filenames to send STDOUT to ep -> List of filenames to send STDERR to Keep track of channels when reading a poem. Channels are relating to IO operations. If channel is None, words get pushed to the verse's primary stanza (i.e. the verb or the clause). If a channel is selected, words are pushed to one of the aforementioned new fields in Verse. Read -> ip Write/Addedum -> op Write2/Addedum2 -> ep WriteAll/AddendumAll -> op and ep --- src/poem/anthology/source.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src/poem/anthology/source.rs') diff --git a/src/poem/anthology/source.rs b/src/poem/anthology/source.rs index 43d6204..3c81110 100644 --- a/src/poem/anthology/source.rs +++ b/src/poem/anthology/source.rs @@ -42,9 +42,7 @@ pub fn incant(verse: &Verse, out: &mut Vec, env: &mut Environment) -> i32 { } }; - let stdout = if verse.couplet { Some(true) } else { None }; - - *out = match poem.recite(env, stdout) { + *out = match poem.recite(env) { Ok(out) => out, Err(e) => { eprintln!("dwvsh: {}", e.to_string().to_lowercase()); -- cgit v1.2.3