diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-05-31 12:00:13 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-05-31 22:33:40 +0200 |
| commit | 00ac68b8451179468aa39cba0d7fbea1ee20e0a1 (patch) | |
| tree | 8271cf0189dc2a99109af72ce54867fb0cf90802 /src/library | |
| parent | e023bf2ac9f5796355d9485afc16781196bf212b (diff) | |
Fix and improve
- Set context location to resolved path during module evaluation.
- Dump module diagnostics on import
- Use same-file for more robustness than fs::canonicalize
Diffstat (limited to 'src/library')
| -rw-r--r-- | src/library/lang.rs | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/src/library/lang.rs b/src/library/lang.rs index 9e163755..d88d23c0 100644 --- a/src/library/lang.rs +++ b/src/library/lang.rs @@ -16,20 +16,19 @@ use super::*; /// - `ltr` /// - `rtl` pub fn lang(ctx: &mut EvalContext, args: &mut FuncArgs) -> Value { - let iso = args.eat::<String>(ctx).map(|s| s.to_ascii_lowercase()); - let dir = args.eat_named::<Spanned<Dir>>(ctx, "dir"); - - Value::template("lang", move |ctx| { - if let Some(iso) = &iso { - ctx.state.lang.dir = lang_dir(iso); + let iso = args.eat::<String>(ctx).map(|s| lang_dir(&s)); + let dir = match args.eat_named::<Spanned<Dir>>(ctx, "dir") { + Some(dir) if dir.v.axis() == SpecAxis::Horizontal => Some(dir.v), + Some(dir) => { + ctx.diag(error!(dir.span, "must be horizontal")); + None } + None => None, + }; - if let Some(dir) = dir { - if dir.v.axis() == SpecAxis::Horizontal { - ctx.state.lang.dir = dir.v; - } else { - ctx.diag(error!(dir.span, "must be horizontal")); - } + Value::template("lang", move |ctx| { + if let Some(dir) = dir.or(iso) { + ctx.state.lang.dir = dir; } ctx.parbreak(); @@ -38,7 +37,7 @@ pub fn lang(ctx: &mut EvalContext, args: &mut FuncArgs) -> Value { /// The default direction for the language identified by `iso`. fn lang_dir(iso: &str) -> Dir { - match iso { + match iso.to_ascii_lowercase().as_str() { "ar" | "he" | "fa" | "ur" | "ps" | "yi" => Dir::RTL, "en" | "fr" | "de" | _ => Dir::LTR, } |
