summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2019-10-17 09:28:06 +0200
committerLaurenz <laurmaedje@gmail.com>2019-10-17 09:28:06 +0200
commit9a1d57a11a510b8e6af024b4338ee58d791f3088 (patch)
tree5f28224b68b69c3db1365f75613b85798da0b1f7 /src/library
parente87a34a4d0bf967427e2443f9f48026d09ccd5db (diff)
Implement context-modifying align 🧩
Diffstat (limited to 'src/library')
-rw-r--r--src/library/align.rs17
-rw-r--r--src/library/mod.rs2
-rw-r--r--src/library/styles.rs12
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)
}