From a5c88c19b300c64fafd6a19e3f5f2fe6422a7b67 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Mon, 27 Mar 2023 11:58:17 +0200 Subject: [PATCH] Fix enum parsing and allow zero in numberings Fixes #353. --- library/src/layout/enum.rs | 12 ++++++------ library/src/meta/counter.rs | 14 +++++++------- library/src/meta/numbering.rs | 33 +++++++++++++++++++++------------ src/eval/library.rs | 2 +- src/syntax/ast.rs | 2 +- src/syntax/lexer.rs | 10 +++------- tests/ref/layout/enum.png | Bin 8727 -> 11276 bytes tests/ref/meta/numbering.png | Bin 7479 -> 8235 bytes tests/typ/layout/enum.typ | 12 ++++++++++-- tests/typ/meta/numbering.typ | 8 ++------ 10 files changed, 51 insertions(+), 42 deletions(-) diff --git a/library/src/layout/enum.rs b/library/src/layout/enum.rs index 1be57d4ce..ec4fbc184 100644 --- a/library/src/layout/enum.rs +++ b/library/src/layout/enum.rs @@ -100,8 +100,8 @@ pub struct EnumElem { /// [Ahead], /// ) /// ``` - #[default(NonZeroUsize::ONE)] - pub start: NonZeroUsize, + #[default(1)] + pub start: usize, /// Whether to display the full numbering, including the numbers of /// all parent enumerations. @@ -225,7 +225,7 @@ impl Layout for EnumElem { pub struct EnumItem { /// The item's number. #[positional] - pub number: Option, + pub number: Option, /// The item's body. #[required] @@ -245,11 +245,11 @@ cast_from_value! { v: Content => v.to::().cloned().unwrap_or_else(|| Self::new(v.clone())), } -struct Parent(NonZeroUsize); +struct Parent(usize); cast_from_value! { Parent, - v: NonZeroUsize => Self(v), + v: usize => Self(v), } cast_to_value! { @@ -257,7 +257,7 @@ cast_to_value! { } impl Fold for Parent { - type Output = Vec; + type Output = Vec; fn fold(self, mut outer: Self::Output) -> Self::Output { outer.push(self.0); diff --git a/library/src/meta/counter.rs b/library/src/meta/counter.rs index 0ebf144cd..fb656c766 100644 --- a/library/src/meta/counter.rs +++ b/library/src/meta/counter.rs @@ -372,8 +372,8 @@ impl Counter { ) -> SourceResult> { let mut vt = Vt { world, tracer, provider, introspector }; let mut state = CounterState(match &self.0 { - CounterKey::Selector(_) => smallvec![], - _ => smallvec![NonZeroUsize::ONE], + CounterKey::Selector(_) => smallvec![0], + _ => smallvec![1], }); let mut page = NonZeroUsize::ONE; let mut stops = eco_vec![(state.clone(), page)]; @@ -506,7 +506,7 @@ pub trait Count { /// Counts through elements with different levels. #[derive(Debug, Clone, PartialEq, Hash)] -pub struct CounterState(pub SmallVec<[NonZeroUsize; 3]>); +pub struct CounterState(pub SmallVec<[usize; 3]>); impl CounterState { /// Advance the counter and return the numbers for the given heading. @@ -534,13 +534,13 @@ impl CounterState { } while self.0.len() < level { - self.0.push(NonZeroUsize::ONE); + self.0.push(1); } } /// Get the first number of the state. - pub fn first(&self) -> NonZeroUsize { - self.0.first().copied().unwrap_or(NonZeroUsize::ONE) + pub fn first(&self) -> usize { + self.0.first().copied().unwrap_or(1) } /// Display the counter state with a numbering. @@ -551,7 +551,7 @@ impl CounterState { cast_from_value! { CounterState, - num: NonZeroUsize => Self(smallvec![num]), + num: usize => Self(smallvec![num]), array: Array => Self(array .into_iter() .map(Value::cast) diff --git a/library/src/meta/numbering.rs b/library/src/meta/numbering.rs index 6facb8338..0827e1606 100644 --- a/library/src/meta/numbering.rs +++ b/library/src/meta/numbering.rs @@ -62,7 +62,7 @@ pub fn numbering( /// If `numbering` is a pattern and more numbers than counting symbols are /// given, the last counting symbol with its prefix is repeated. #[variadic] - numbers: Vec, + numbers: Vec, ) -> Value { numbering.apply_vm(vm, &numbers)? } @@ -78,25 +78,23 @@ pub enum Numbering { impl Numbering { /// Apply the pattern to the given numbers. - pub fn apply_vm(&self, vm: &mut Vm, numbers: &[NonZeroUsize]) -> SourceResult { + pub fn apply_vm(&self, vm: &mut Vm, numbers: &[usize]) -> SourceResult { Ok(match self { Self::Pattern(pattern) => Value::Str(pattern.apply(numbers).into()), Self::Func(func) => { - let args = Args::new( - func.span(), - numbers.iter().map(|n| Value::Int(n.get() as i64)), - ); + let args = + Args::new(func.span(), numbers.iter().map(|&n| Value::Int(n as i64))); func.call_vm(vm, args)? } }) } /// Apply the pattern to the given numbers. - pub fn apply_vt(&self, vt: &mut Vt, numbers: &[NonZeroUsize]) -> SourceResult { + pub fn apply_vt(&self, vt: &mut Vt, numbers: &[usize]) -> SourceResult { Ok(match self { Self::Pattern(pattern) => Value::Str(pattern.apply(numbers).into()), Self::Func(func) => { - func.call_vt(vt, numbers.iter().map(|n| Value::Int(n.get() as i64)))? + func.call_vt(vt, numbers.iter().map(|&n| Value::Int(n as i64)))? } }) } @@ -147,7 +145,7 @@ pub struct NumberingPattern { impl NumberingPattern { /// Apply the pattern to the given number. - pub fn apply(&self, numbers: &[NonZeroUsize]) -> EcoString { + pub fn apply(&self, numbers: &[usize]) -> EcoString { let mut fmt = EcoString::new(); let mut numbers = numbers.into_iter(); @@ -179,7 +177,7 @@ impl NumberingPattern { } /// Apply only the k-th segment of the pattern to a number. - pub fn apply_kth(&self, k: usize, number: NonZeroUsize) -> EcoString { + pub fn apply_kth(&self, k: usize, number: usize) -> EcoString { let mut fmt = EcoString::new(); if let Some((prefix, _, _)) = self.pieces.first() { fmt.push_str(prefix); @@ -282,13 +280,16 @@ impl NumberingKind { } /// Apply the numbering to the given number. - pub fn apply(self, n: NonZeroUsize, case: Case) -> EcoString { - let mut n = n.get(); + pub fn apply(self, mut n: usize, case: Case) -> EcoString { match self { Self::Arabic => { eco_format!("{n}") } Self::Letter => { + if n == 0 { + return '-'.into(); + } + n -= 1; let mut letters = vec![]; @@ -308,6 +309,10 @@ impl NumberingKind { String::from_utf8(letters).unwrap().into() } Self::Roman => { + if n == 0 { + return 'N'.into(); + } + // Adapted from Yann Villessuzanne's roman.rs under the // Unlicense, at https://github.com/linfir/roman.rs/ let mut fmt = EcoString::new(); @@ -347,6 +352,10 @@ impl NumberingKind { fmt } Self::Symbol => { + if n == 0 { + return '-'.into(); + } + const SYMBOLS: &[char] = &['*', '†', '‡', '§', '¶', '‖']; let symbol = SYMBOLS[(n - 1) % SYMBOLS.len()]; let amount = ((n - 1) / SYMBOLS.len()) + 1; diff --git a/src/eval/library.rs b/src/eval/library.rs index 85d5647b9..5b0ff8e6d 100644 --- a/src/eval/library.rs +++ b/src/eval/library.rs @@ -74,7 +74,7 @@ pub struct LangItems { /// An item in a bullet list: `- ...`. pub list_item: fn(body: Content) -> Content, /// An item in an enumeration (numbered list): `+ ...` or `1. ...`. - pub enum_item: fn(number: Option, body: Content) -> Content, + pub enum_item: fn(number: Option, body: Content) -> Content, /// An item in a term list: `/ Term: Details`. pub term_item: fn(term: Content, description: Content) -> Content, /// A mathematical equation: `$x$`, `$ x^2 $`. diff --git a/src/syntax/ast.rs b/src/syntax/ast.rs index bd8fa230b..b064da88b 100644 --- a/src/syntax/ast.rs +++ b/src/syntax/ast.rs @@ -681,7 +681,7 @@ node! { impl EnumItem { /// The explicit numbering, if any: `23.`. - pub fn number(&self) -> Option { + pub fn number(&self) -> Option { self.0.children().find_map(|node| match node.kind() { SyntaxKind::EnumMarker => node.text().trim_end_matches('.').parse().ok(), _ => Option::None, diff --git a/src/syntax/lexer.rs b/src/syntax/lexer.rs index 90a10f522..c46fa37bc 100644 --- a/src/syntax/lexer.rs +++ b/src/syntax/lexer.rs @@ -170,7 +170,6 @@ impl Lexer<'_> { '`' => self.raw(), 'h' if self.s.eat_if("ttp://") => self.link(), 'h' if self.s.eat_if("ttps://") => self.link(), - '0'..='9' => self.numbering(start), '<' if self.s.at(is_id_continue) => self.label(), '@' => self.ref_marker(), @@ -200,6 +199,7 @@ impl Lexer<'_> { '-' if self.space_or_end() => SyntaxKind::ListMarker, '+' if self.space_or_end() => SyntaxKind::EnumMarker, '/' if self.space_or_end() => SyntaxKind::TermMarker, + '0'..='9' => self.numbering(start), _ => self.text(), } @@ -284,12 +284,8 @@ impl Lexer<'_> { self.s.eat_while(char::is_ascii_digit); let read = self.s.from(start); - if self.s.eat_if('.') { - if let Ok(number) = read.parse::() { - if number == 0 { - return self.error("must be positive"); - } - + if self.s.eat_if('.') && self.space_or_end() { + if read.parse::().is_ok() { return SyntaxKind::EnumMarker; } } diff --git a/tests/ref/layout/enum.png b/tests/ref/layout/enum.png index d80a584c4902a36e1e034c280bf56b1964661287..a52ad989ee1a560e4c91e205ea83b17503d5aef0 100644 GIT binary patch literal 11276 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 YmBf36DY%}0eCDgHpe|n~Yaa5y05bEH761SM literal 8727 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 Q1^hddr$RTHK2jD-H<`#VPKAVnsr6=kz=0 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 Oh`v=&ldqLE5C1>=ac_D6 diff --git a/tests/typ/layout/enum.typ b/tests/typ/layout/enum.typ index 9512e1b55..341afed48 100644 --- a/tests/typ/layout/enum.typ +++ b/tests/typ/layout/enum.typ @@ -4,6 +4,7 @@ #enum[Embrace][Extend][Extinguish] --- +0. Before first! 1. First. 2. Indented @@ -21,8 +22,15 @@ + Numbered List / Term: List +--- +// In the line. +1.2 \ +This is 0. \ +See 0.3. \ + --- // Edge cases. + -Empty -+Nope +Empty \ ++Nope \ +a + 0. diff --git a/tests/typ/meta/numbering.typ b/tests/typ/meta/numbering.typ index 63e453623..ecc3bdbf9 100644 --- a/tests/typ/meta/numbering.typ +++ b/tests/typ/meta/numbering.typ @@ -1,7 +1,7 @@ // Test integrated numbering patterns. --- -#for i in range(1, 9) { +#for i in range(0, 9) { numbering("*", i) [ and ] numbering("I.a", i, i) @@ -10,9 +10,5 @@ } --- -// Error: 17-18 number must be positive -#numbering("1", 0) - ---- -// Error: 17-19 number must be positive +// Error: 17-19 number must be at least zero #numbering("1", -1)