diff --git a/src/app.rs b/src/app.rs index e9e807bd..10827db7 100644 --- a/src/app.rs +++ b/src/app.rs @@ -73,30 +73,22 @@ fn get_arc_str (_state: &App, src: impl Language) -> Perhaps> { } fn get_u16 (state: &App, src: impl Language) -> Perhaps { - if let Some(sym) = src.word()? { - Ok(Some(match sym { - ":w/sidebar" => state.project.w_sidebar(state.editor().is_some()), - ":h/sample-detail" => 6.max(state.size.h() as u16 * 3 / 9), - _ => return Err(format!("not a u16: {sym}").into()) - })) - } else { - try_to_u16(src) - } + Ok(Some(match src.word()? { + Some(":w/sidebar") => state.project.w_sidebar(state.editor().is_some()), + Some(":h/sample-detail") => 6.max(state.size.h() as u16 * 3 / 9), + _ => return try_to_u16(src) + })) } fn get_usize (state: &App, src: impl Language) -> Perhaps { - if let Some(sym) = src.word()? { - Ok(Some(match sym { - ":scene-count" => state.scenes().len(), - ":track-count" => state.tracks().len(), - ":device-kind" => state.dialog.device_kind().unwrap_or(0), - ":device-kind/next" => state.dialog.device_kind_next().unwrap_or(0), - ":device-kind/prev" => state.dialog.device_kind_prev().unwrap_or(0), - _ => return Err(format!("not usize: {sym}").into()) - })) - } else { - try_to_usize(src) - } + Ok(Some(match src.word()? { + Some(":scene-count") => state.scenes().len(), + Some(":track-count") => state.tracks().len(), + Some(":device-kind") => state.dialog.device_kind().unwrap_or(0), + Some(":device-kind/next") => state.dialog.device_kind_next().unwrap_or(0), + Some(":device-kind/prev") => state.dialog.device_kind_prev().unwrap_or(0), + _ => return try_to_usize(src) + })) } fn get_bool (state: &App, src: impl Language) -> Perhaps { @@ -132,33 +124,37 @@ fn get_selection (state: &App, src: impl Language) -> Perhaps { })).transpose() } -fn get_color (state: &App, src: impl Language) -> Perhaps { - Ok(if let Some(sym) = src.word()? { - match sym { - ":color/bg" => Some(Color::Rgb(28, 32, 36)), - _ => return Err(format!("not a color: {sym}").into()) - } - } else if let Some(expr) = src.expr()? { +fn get_color (_state: &App, src: impl Language) -> Perhaps { + Ok(if let Ok(Some(expr)) = src.expr() { match expr.head()? { Some("g") => { - let n = try_to_u8(expr.tail())? - .ok_or::>(format!("not gray: {expr}").into())?; + let n = try_to_u8(expr.tail())?.ok_or::>( + format!("not gray: {expr}").into() + )?; Some(Color::Rgb(n, n, n)) }, Some("rgb") => { - let r = try_to_u8(expr.tail().head())? - .ok_or::>(format!("not red: {expr}").into())?; - let g = try_to_u8(expr.tail().tail().head())? - .ok_or::>(format!("not green: {expr}").into())?; - let b = try_to_u8(expr.tail().tail().tail().head())? - .ok_or::>(format!("not blue: {expr}").into())?; + let r = try_to_u8(expr.tail().head())?.ok_or::>( + format!("not red: {expr}").into() + )?; + let g = try_to_u8(expr.tail().tail().head())?.ok_or::>( + format!("not green: {expr}").into() + )?; + let b = try_to_u8(expr.tail().tail().tail().head())?.ok_or::>( + format!("not blue: {expr}").into() + )?; Some(Color::Rgb(r, g, b)) }, Some(_) => return Err(format!("not a color expression: {expr}").into()), None => return Err(format!("not a color expression: {expr}").into()) } + } else if let Ok(Some(sym)) = src.word() { + match sym { + ":color/bg" => Some(Color::Rgb(28, 32, 36)), + _ => return Err(format!("not a color: {sym}").into()) + } } else { - None + return Err(format!("not a color: {:?}", src.src()?).into()) }) } diff --git a/src/app/draw.rs b/src/app/draw.rs index 0647fe9a..a92af05b 100644 --- a/src/app/draw.rs +++ b/src/app/draw.rs @@ -14,7 +14,9 @@ impl View for App { } for (index, dsl) in self.mode.view.iter().enumerate() { if let Err(e) = self.interpret(to, dsl) { - *self.error.write().unwrap() = Some(format!("view #{index}: {e}").into()); + *self.error.write().unwrap() = Some(format!( + "mode {:?} view #{index}: {e}", &self.mode.name, + ).into()); break; } } diff --git a/tengri b/tengri index be98e666..ad1a514e 160000 --- a/tengri +++ b/tengri @@ -1 +1 @@ -Subproject commit be98e666f53eedf95618396239641ad846a772bd +Subproject commit ad1a514eddbf3104b7631dedef786389863988bf