diff --git a/Cargo.lock b/Cargo.lock index de403e4..b0ef5c0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -934,7 +934,7 @@ dependencies = [ [[package]] name = "tengri" -version = "0.7.0" +version = "0.7.1" dependencies = [ "tengri_dsl", "tengri_input", @@ -944,7 +944,7 @@ dependencies = [ [[package]] name = "tengri_dsl" -version = "0.7.0" +version = "0.7.1" dependencies = [ "itertools 0.14.0", "konst", @@ -955,7 +955,7 @@ dependencies = [ [[package]] name = "tengri_input" -version = "0.7.0" +version = "0.7.1" dependencies = [ "tengri_dsl", "tengri_tui", @@ -963,7 +963,7 @@ dependencies = [ [[package]] name = "tengri_output" -version = "0.7.0" +version = "0.7.1" dependencies = [ "proptest", "proptest-derive", @@ -974,7 +974,7 @@ dependencies = [ [[package]] name = "tengri_tui" -version = "0.7.0" +version = "0.7.1" dependencies = [ "atomic_float", "better-panic", diff --git a/Cargo.toml b/Cargo.toml index aa4ceae..b9a6dab 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace.package] -version = "0.7.0" +version = "0.7.1" [workspace] resolver = "2" diff --git a/output/src/lib.rs b/output/src/lib.rs index 3abccd4..baaf657 100644 --- a/output/src/lib.rs +++ b/output/src/lib.rs @@ -42,12 +42,3 @@ pub type Perhaps = Result, Box>; } Ok(()) } - -#[cfg(test)] #[test] fn test_dimensions () { - use crate::*; - assert_eq!(Area::center(&[10u16, 10, 20, 20]), [20, 20]); -} - -#[cfg(test)] #[test] fn test_layout () -> Usually<()> { - Ok(()) -} diff --git a/output/src/ops.rs b/output/src/ops.rs index b1a5786..b10d8e2 100644 --- a/output/src/ops.rs +++ b/output/src/ops.rs @@ -1,3 +1,5 @@ +use crate::*; + mod align; pub use self::align::*; mod bsp; pub use self::bsp::*; mod cond; pub use self::cond::*; diff --git a/output/src/ops/align.rs b/output/src/ops/align.rs index d254ce3..e9ff5a7 100644 --- a/output/src/ops/align.rs +++ b/output/src/ops/align.rs @@ -40,20 +40,24 @@ try_from_expr!(<'a, E>: Align>: |state, iter|{ "align/n"|"align/s"|"align/e"|"align/w"| "align/nw"|"align/sw"|"align/ne"|"align/se" => { let _ = iter.next().unwrap(); - let c = iter.next().expect("no content specified"); - let c = state.get_content(&c.value).expect("no content provided"); + let content = iter.next().expect("no content specified"); + let content = if let Some(content) = state.get_content(&content.value) { + content + } else { + panic!("no content corresponding to {:?}", &content); + }; return Some(match key { - "align/c" => Self::c(c), - "align/x" => Self::x(c), - "align/y" => Self::y(c), - "align/n" => Self::n(c), - "align/s" => Self::s(c), - "align/e" => Self::e(c), - "align/w" => Self::w(c), - "align/nw" => Self::nw(c), - "align/ne" => Self::ne(c), - "align/sw" => Self::sw(c), - "align/se" => Self::se(c), + "align/c" => Self::c(content), + "align/x" => Self::x(content), + "align/y" => Self::y(content), + "align/n" => Self::n(content), + "align/s" => Self::s(content), + "align/e" => Self::e(content), + "align/w" => Self::w(content), + "align/nw" => Self::nw(content), + "align/ne" => Self::ne(content), + "align/sw" => Self::sw(content), + "align/se" => Self::se(content), _ => unreachable!() }) }, diff --git a/output/src/ops/cond.rs b/output/src/ops/cond.rs index 5408852..f92f157 100644 --- a/output/src/ops/cond.rs +++ b/output/src/ops/cond.rs @@ -22,10 +22,17 @@ impl Either { try_from_expr!(<'a, E>: When>: |state, iter| { if let Some(Token { value: Value::Key("when"), .. }) = iter.peek() { let _ = iter.next().unwrap(); + let condition = iter.next().expect("no condition specified"); - let content = iter.next().expect("no content specified"); let condition = state.get(&condition.value).expect("no condition provided"); - let content = state.get_content(&content.value).expect("no content provided"); + + let content = iter.next().expect("no content specified"); + let content = if let Some(content) = state.get_content(&content.value) { + content + } else { + panic!("no content corresponding to for {:?}", &content); + }; + return Some(Self(condition, content)) } }); @@ -34,12 +41,24 @@ try_from_expr!(<'a, E>: When>: |state, iter| { try_from_expr!(<'a, E>: Either, RenderBox<'a, E>>: |state, iter| { if let Some(Token { value: Value::Key("either"), .. }) = iter.peek() { let _ = iter.next().unwrap(); + let condition = iter.next().expect("no condition specified"); - let content = iter.next().expect("no content specified"); - let alternate = iter.next().expect("no alternate specified"); let condition = state.get(&condition.value).expect("no condition provided"); - let content = state.get_content(&content.value).expect("no content provided"); - let alternate = state.get_content(&alternate.value).expect("no alternate provided"); + + let content = iter.next().expect("no content specified"); + let content = if let Some(content) = state.get_content(&content.value) { + content + } else { + panic!("no content 1 corresponding to {:?}", &content); + }; + + let alternate = iter.next().expect("no alternate specified"); + let alternate = if let Some(alternate) = state.get_content(&alternate.value) { + alternate + } else { + panic!("no content 2 corresponding to {:?}", &alternate); + }; + return Some(Self(condition, content, alternate)) } }); diff --git a/output/src/ops/transform.rs b/output/src/ops/transform.rs index 6715588..3dd5b6e 100644 --- a/output/src/ops/transform.rs +++ b/output/src/ops/transform.rs @@ -90,10 +90,17 @@ macro_rules! transform_xy_unit { if let Some(Token { value: Value::Key(k), .. }) = iter.peek() { if k == $x || k == $y { let _ = iter.next().unwrap(); + let u = iter.next().expect("no unit specified"); - let c = iter.next().expect("no content specified"); let u = state.get(&u.value).expect("no unit provided"); - let c = state.get_content(&c.value).expect("no content provided"); + + let c = iter.next().expect("no content specified"); + let c = if let Some(c) = state.get_content(&c.value) { + c + } else { + panic!("no content corresponding to {:?}", &c); + }; + return Some(match k { $x => Self::x(u, c), $y => Self::y(u, c), @@ -101,12 +108,20 @@ macro_rules! transform_xy_unit { }) } else if k == $xy { let _ = iter.next().unwrap(); + let u = iter.next().expect("no unit specified"); + let u = state.get(&u.value).expect("no x unit provided"); + let v = iter.next().expect("no unit specified"); + let v = state.get(&v.value).expect("no y unit provided"); + let c = iter.next().expect("no content specified"); - let u = state.get(&u.value).expect("no unit provided"); - let v = state.get(&v.value).expect("no unit provided"); - let c = state.get_content(&c.value).expect("no content provided"); + let c = if let Some(c) = state.get_content(&c.value) { + c + } else { + panic!("no content corresponding to {:?}", &c); + }; + return Some(Self::xy(u, v, c)) } }