From ecf0ff4d054f11c79ec0ddbbdf45f3dfcf9fc8d7 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Wed, 23 Oct 2019 00:14:43 +0200 Subject: =?UTF-8?q?Introduce=20a=20set=20of=20macros=20for=20writing=20fun?= =?UTF-8?q?ctions=20more=20concisely=20=F0=9F=8E=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/library/mod.rs | 65 +++++++++++++----------------------------------------- 1 file changed, 15 insertions(+), 50 deletions(-) (limited to 'src/library/mod.rs') diff --git a/src/library/mod.rs b/src/library/mod.rs index 784ef204..74f77204 100644 --- a/src/library/mod.rs +++ b/src/library/mod.rs @@ -2,64 +2,29 @@ use crate::func::Scope; -mod align; -mod boxed; -mod breaks; -mod spacing; -mod styles; +mod structure; +mod style; -/// Useful imports for creating your own functions. -pub mod prelude { - 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}; - pub use crate::syntax::{Expression, FuncHeader, SyntaxTree}; - pub use super::helpers::*; -} - -pub use align::AlignFunc; -pub use boxed::BoxFunc; -pub use breaks::{LinebreakFunc, PagebreakFunc}; -pub use spacing::{HorizontalSpaceFunc, VerticalSpaceFunc}; -pub use styles::{BoldFunc, ItalicFunc, MonospaceFunc}; +pub use structure::*; +pub use style::*; /// Create a scope with all standard functions. pub fn std() -> Scope { let mut std = Scope::new(); - std.add::("align"); - std.add::("box"); - std.add::("line.break"); - std.add::("n"); - std.add::("page.break"); + std.add::("align"); + std.add::("box"); - std.add::("h"); - std.add::("v"); + std.add::("line.break"); + std.add::("n"); + std.add::("page.break"); - std.add::("bold"); - std.add::("italic"); - std.add::("mono"); - std -} + std.add::("h"); + std.add::("v"); -/// Helpers for writing custom functions. -pub mod helpers { - use super::prelude::*; + std.add::("bold"); + std.add::("italic"); + std.add::("mono"); - pub fn has_arguments(header: &FuncHeader) -> bool { - !header.args.is_empty() || !header.kwargs.is_empty() - } - - pub fn parse_maybe_body(body: Option<&str>, ctx: ParseContext) -> ParseResult> { - if let Some(body) = body { - Ok(Some(parse(body, ctx)?)) - } else { - Ok(None) - } - } - - pub fn err, T>(message: S) -> ParseResult { - Err(ParseError::new(message)) - } + std } -- cgit v1.2.3