Skip to content

Commit f00986e

Browse files
Also preserve whitespaces after values
Relates to #327
1 parent 15c9f4c commit f00986e

4 files changed

Lines changed: 12 additions & 7 deletions

File tree

src/types/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -610,11 +610,12 @@ mod tests {
610610
fn test_preserve_space_separator() {
611611
// https://github.com/typst/hayagriva/issues/312
612612
// https://github.com/typst/hayagriva/issues/440
613-
let serial_numbers = &["ISO/IEC 23009-1:2022(E)", "GB/T 7714—2025", "GB/T 7714"];
613+
let serial_numbers =
614+
&["ISO/IEC 23009-1:2022(E)", "GB/T 7714—2025", "GB/T 7714", "第 6 册"];
614615
for s in serial_numbers {
615616
let val: MaybeTyped<Numeric> = MaybeTyped::infallible_from_str(s);
616617
// It can be either typed or string, as long as whitespaces between
617-
// prefixes and numbers are preserved.
618+
// affixes and numbers are preserved.
618619
assert_eq!(val.to_string(), *s);
619620
}
620621

src/types/numeric.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ impl FromStr for Numeric {
250250
let prefix = s.eat_while(|c: char| !c.is_numeric() && c != '-');
251251

252252
let value = number(&mut s).ok_or(NumericError::NoNumber)?;
253-
s.eat_whitespace();
253+
let space_after_value = s.eat_whitespace();
254254

255255
let value = match s.peek() {
256256
Some(c) if is_delimiter(c) => {
@@ -290,7 +290,11 @@ impl FromStr for Numeric {
290290
} else {
291291
Some(Box::new(prefix.to_string()))
292292
},
293-
suffix: if post.is_empty() { None } else { Some(Box::new(post.to_string())) },
293+
suffix: if post.is_empty() {
294+
None
295+
} else {
296+
Some(Box::new(format!("{space_after_value}{post}")))
297+
},
294298
})
295299
}
296300
}

src/types/page.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -416,15 +416,14 @@ mod test {
416416
#[test]
417417
fn nonnumeric_page() {
418418
// https://github.com/typst/hayagriva/issues/170
419-
for s in &["11E201", "072711"] {
419+
for s in &["11E201", "072711", "1.1-1.36", "011-012"] {
420420
let n: MaybeTyped<PageRanges> = MaybeTyped::infallible_from_str(s);
421421
assert_eq!(n, MaybeTyped::String(s.to_string()));
422422
}
423423

424424
// Page ranges should still be parsed as numeric values.
425-
let n: MaybeTyped<PageRanges> = MaybeTyped::infallible_from_str("S10-15");
426425
assert_eq!(
427-
n,
426+
MaybeTyped::<PageRanges>::infallible_from_str("S10-15"),
428427
MaybeTyped::Typed(PageRanges::new(vec![PageRangesPart::Range(
429428
Numeric::from_str("S10").unwrap(),
430429
Numeric::from_str("15").unwrap(),

tests/citeproc-pass.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,7 @@ namespaces_NonNada3
410410
number_FailingDelimiters
411411
number_IsNumericWithAlpha
412412
number_MixedPageRange
413+
number_MixedText
413414
number_PageFirst
414415
number_PageRange
415416
number_SimpleNumberArabic

0 commit comments

Comments
 (0)