From fe0938b1de0c46fc2afcaa3dcd6a0f4ec870d21a Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Fri, 2 Aug 2024 00:36:10 +0200 Subject: add state which is shared with the lua environment --- src/lua/mod.rs | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) (limited to 'src/lua/mod.rs') diff --git a/src/lua/mod.rs b/src/lua/mod.rs index 7388890..fe3555e 100644 --- a/src/lua/mod.rs +++ b/src/lua/mod.rs @@ -1,5 +1,4 @@ use std::{ - borrow::Borrow, path::Path, sync::{Mutex, MutexGuard}, }; @@ -7,8 +6,9 @@ use std::{ use lazy_static::lazy_static; use mlua::prelude::*; -use crate::{config::GlobalConfig, sheet::cell::CellRef}; +use crate::{config::{theme::{sheetview::SheetViewTheme, Theme}, GlobalConfig}, sheet::cell::CellRef, state::{sheetview::SheetViewState, GlobalState}}; +pub mod evalsto; pub mod iobuffer; pub mod ownedfunction; pub mod runtime; @@ -32,18 +32,33 @@ lazy_static! { }; } +macro_rules! ud_is_type { + ($writer:ident, $ud:ident, $f:ty => $fe:expr $(, $($r:ty => $e:expr),+)? $(,)?) => { + if $ud.is::<$f>() { + $writer.write(format!("{:#?}", $fe)) + } $($( else if $ud.is::<$r>() { + $writer.write(format!("{:#?}", $e)) + })*)? else { + $writer.write(format!("{:#?}", $ud)); + } + }; +} + fn print(_: &Lua, args: LuaMultiValue) -> LuaResult<()> { let mut writer = iobuffer::iobuffer().write().unwrap(); for (i, arg) in args.iter().enumerate() { if let Some(ud) = arg.as_userdata() { - if ud.is::() { - writer.write(ud.borrow::().unwrap().value().to_string()); - } else if ud.is::() { - writer.write(format!("{:#?}", GlobalConfig::instance().borrow())) - } else { - writer.write(format!("{:#?}", ud)); - } + ud_is_type!( + writer, + ud, + CellRef => ud.borrow::(), + GlobalConfig => GlobalConfig::instance(), + Theme => GlobalConfig::instance().theme, + SheetViewTheme => GlobalConfig::instance().theme.sheetview, + GlobalState => GlobalState::instance(), + SheetViewState => GlobalState::instance().sheetview, + ); } else { writer.write(format!("{:#?}", arg)); } -- cgit v1.2.3-70-g09d2