diff options
| author | Laurenz <laurmaedje@gmail.com> | 2019-10-17 09:28:06 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2019-10-17 09:28:06 +0200 |
| commit | 9a1d57a11a510b8e6af024b4338ee58d791f3088 (patch) | |
| tree | 5f28224b68b69c3db1365f75613b85798da0b1f7 /src/library | |
| parent | e87a34a4d0bf967427e2443f9f48026d09ccd5db (diff) | |
Implement context-modifying align 🧩
Diffstat (limited to 'src/library')
| -rw-r--r-- | src/library/align.rs | 17 | ||||
| -rw-r--r-- | src/library/mod.rs | 2 | ||||
| -rw-r--r-- | src/library/styles.rs | 12 |
3 files changed, 19 insertions, 12 deletions
diff --git a/src/library/align.rs b/src/library/align.rs index be564c1b..922464a8 100644 --- a/src/library/align.rs +++ b/src/library/align.rs @@ -38,18 +38,21 @@ impl Function for AlignFunc { Ok(AlignFunc { alignment, body }) } - fn layout(&self, mut ctx: LayoutContext) -> LayoutResult<FuncCommands> { + fn layout(&self, ctx: LayoutContext) -> LayoutResult<CommandList> { if let Some(body) = &self.body { - ctx.alignment = self.alignment; + let layouts = layout_tree(body, LayoutContext { + alignment: self.alignment, + .. ctx + })?; - let layouts = layout_tree(body, ctx)?; - - let mut commands = FuncCommands::new(); + let mut commands = CommandList::new(); commands.add(Command::AddMany(layouts)); - Ok(commands) } else { - unimplemented!("context-modifying align func") + let mut commands = CommandList::new(); + commands.add(Command::SetAlignment(self.alignment)); + + Ok(commands) } } } diff --git a/src/library/mod.rs b/src/library/mod.rs index f3156b4a..9a8b2e21 100644 --- a/src/library/mod.rs +++ b/src/library/mod.rs @@ -7,7 +7,7 @@ mod styles; /// Useful imports for creating your own functions. pub mod prelude { - pub use crate::func::{Command, FuncCommands, Function}; + pub use crate::func::{Command, CommandList, Function}; pub use crate::layout::{layout_tree, Layout, LayoutContext, MultiLayout}; pub use crate::layout::{LayoutError, LayoutResult}; pub use crate::parsing::{parse, ParseContext, ParseError, ParseResult}; diff --git a/src/library/styles.rs b/src/library/styles.rs index 666c8975..f0e5bbdb 100644 --- a/src/library/styles.rs +++ b/src/library/styles.rs @@ -27,12 +27,16 @@ macro_rules! style_func { } } - fn layout(&self, _: LayoutContext) -> LayoutResult<FuncCommands> { - let mut commands = FuncCommands::new(); + fn layout(&self, ctx: LayoutContext) -> LayoutResult<CommandList> { + let mut commands = CommandList::new(); - commands.add(Command::ToggleStyleClass(FontClass::$class)); + let saved_style = ctx.style.clone(); + let mut new_style = ctx.style.clone(); + new_style.toggle_class(FontClass::$class); + + commands.add(Command::SetStyle(new_style)); commands.add(Command::Layout(&self.body)); - commands.add(Command::ToggleStyleClass(FontClass::$class)); + commands.add(Command::SetStyle(saved_style)); Ok(commands) } |
