diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-11-16 00:37:33 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-11-16 00:37:33 +0100 |
| commit | 210c4d93736263e124e66622f052758dbec544b1 (patch) | |
| tree | a0ccabe6686bc9f50a80ad3d6c383ceb8139a985 /src/library | |
| parent | 370802de1368961744316ea8f4a8786afc0b87d6 (diff) | |
Move `lang` functionality into `par`
Diffstat (limited to 'src/library')
| -rw-r--r-- | src/library/mod.rs | 1 | ||||
| -rw-r--r-- | src/library/par.rs | 53 |
2 files changed, 21 insertions, 33 deletions
diff --git a/src/library/mod.rs b/src/library/mod.rs index d96b370a..775fb51f 100644 --- a/src/library/mod.rs +++ b/src/library/mod.rs @@ -59,7 +59,6 @@ pub fn new() -> Scope { // Text. std.def_func("font", font); std.def_func("par", par); - std.def_func("lang", lang); std.def_func("strike", strike); std.def_func("underline", underline); std.def_func("overline", overline); diff --git a/src/library/par.rs b/src/library/par.rs index c781a32d..216b7d41 100644 --- a/src/library/par.rs +++ b/src/library/par.rs @@ -15,54 +15,43 @@ pub fn par(ctx: &mut EvalContext, args: &mut Args) -> TypResult<Value> { let spacing = args.named("spacing")?; let leading = args.named("leading")?; + let mut dir = args.named::<EcoString>("lang")?.map(|iso| { + match iso.to_ascii_lowercase().as_str() { + "ar" | "he" | "fa" | "ur" | "ps" | "yi" => Dir::RTL, + "en" | "fr" | "de" => Dir::LTR, + _ => Dir::LTR, + } + }); + + if let Some(Spanned { v, span }) = args.named::<Spanned<Dir>>("dir")? { + if v.axis() == SpecAxis::Horizontal { + dir = Some(v) + } else { + bail!(span, "must be horizontal"); + } + } + ctx.template.modify(move |style| { let par = style.par_mut(); - if let Some(spacing) = spacing { - par.spacing = spacing; + if let Some(dir) = dir { + par.dir = dir; } if let Some(leading) = leading { par.leading = leading; } - }); - - ctx.template.parbreak(); - Ok(Value::None) -} - -/// `lang`: Configure the language. -pub fn lang(ctx: &mut EvalContext, args: &mut Args) -> TypResult<Value> { - let iso = args.find::<EcoString>(); - let dir = if let Some(dir) = args.named::<Spanned<Dir>>("dir")? { - if dir.v.axis() == SpecAxis::Horizontal { - Some(dir.v) - } else { - bail!(dir.span, "must be horizontal"); + if let Some(spacing) = spacing { + par.spacing = spacing; } - } else { - iso.as_deref().map(lang_dir) - }; - - if let Some(dir) = dir { - ctx.template.modify(move |style| style.dir = dir); - } + }); ctx.template.parbreak(); Ok(Value::None) } -/// The default direction for the language identified by the given `iso` code. -fn lang_dir(iso: &str) -> Dir { - match iso.to_ascii_lowercase().as_str() { - "ar" | "he" | "fa" | "ur" | "ps" | "yi" => Dir::RTL, - "en" | "fr" | "de" => Dir::LTR, - _ => Dir::LTR, - } -} - /// A node that arranges its children into a paragraph. #[derive(Debug, Hash)] pub struct ParNode { |
