From 7a246d87bb2de224662bb80526fd5ed31be05cbe Mon Sep 17 00:00:00 2001 From: Scott Worley Date: Sat, 11 Jul 2026 19:53:13 -0700 Subject: [PATCH 1/1] Explicitly specify a font for tally marks --- Changelog | 1 + src/lib.rs | 94 +++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 77 insertions(+), 18 deletions(-) diff --git a/Changelog b/Changelog index 7fd5cc8..9a64d5a 100644 --- a/Changelog +++ b/Changelog @@ -1,4 +1,5 @@ ## [Unreleased] +- Explicitly specify a font for tally marks ## [0.6.1] - 2025-07-16 - Minor cleanups diff --git a/src/lib.rs b/src/lib.rs index 1807333..bfcfdec 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,12 +4,15 @@ use std::fmt::Write; use std::io::BufRead; use std::iter::Iterator; +const TALLY_FONT: &str = "BabelStone Han"; + fn tally_marks(n: usize, mark: Option<&str>) -> HTML { HTML(match mark { None => { let fives = { 0..n / 5 }.map(|_| '𝍸'); let ones = { 0..n % 5 }.map(|_| '𝍷'); - fives.chain(ones).collect() + let marks: String = fives.chain(ones).collect(); + format!("{marks}") } Some(m) => { 0..n }.map(|_| m).collect(), }) @@ -504,17 +507,72 @@ mod tests { #[test] fn test_tally_marks() { - assert_eq!(tally_marks(1, None), "𝍷".into()); - assert_eq!(tally_marks(2, None), "𝍷𝍷".into()); - assert_eq!(tally_marks(3, None), "𝍷𝍷𝍷".into()); - assert_eq!(tally_marks(4, None), "𝍷𝍷𝍷𝍷".into()); - assert_eq!(tally_marks(5, None), "𝍸".into()); - assert_eq!(tally_marks(6, None), "𝍸𝍷".into()); - assert_eq!(tally_marks(7, None), "𝍸𝍷𝍷".into()); - assert_eq!(tally_marks(8, None), "𝍸𝍷𝍷𝍷".into()); - assert_eq!(tally_marks(9, None), "𝍸𝍷𝍷𝍷𝍷".into()); - assert_eq!(tally_marks(10, None), "𝍸𝍸".into()); - assert_eq!(tally_marks(11, None), "𝍸𝍸𝍷".into()); + assert_eq!( + tally_marks(1, None), + HTML(format!( + "𝍷" + )) + ); + assert_eq!( + tally_marks(2, None), + HTML(format!( + "𝍷𝍷" + )) + ); + assert_eq!( + tally_marks(3, None), + HTML(format!( + "𝍷𝍷𝍷" + )) + ); + assert_eq!( + tally_marks(4, None), + HTML(format!( + "𝍷𝍷𝍷𝍷" + )) + ); + assert_eq!( + tally_marks(5, None), + HTML(format!( + "𝍸" + )) + ); + assert_eq!( + tally_marks(6, None), + HTML(format!( + "𝍸𝍷" + )) + ); + assert_eq!( + tally_marks(7, None), + HTML(format!( + "𝍸𝍷𝍷" + )) + ); + assert_eq!( + tally_marks(8, None), + HTML(format!( + "𝍸𝍷𝍷𝍷" + )) + ); + assert_eq!( + tally_marks(9, None), + HTML(format!( + "𝍸𝍷𝍷𝍷𝍷" + )) + ); + assert_eq!( + tally_marks(10, None), + HTML(format!( + "𝍸𝍸" + )) + ); + assert_eq!( + tally_marks(11, None), + HTML(format!( + "𝍸𝍸𝍷" + )) + ); assert_eq!(tally_marks(1, Some("x")), "x".into()); assert_eq!(tally_marks(4, Some("x")), "xxxx".into()); assert_eq!(tally_marks(5, Some("x")), "xxxxx".into()); @@ -760,7 +818,7 @@ mod tests { } ), HTML::from( - r#"𝍷"# + r#"𝍷"# ) ); assert_eq!( @@ -773,7 +831,7 @@ mod tests { } ), HTML::from( - r#"𝍷𝍷"# + r#"𝍷𝍷"# ) ); assert_eq!( @@ -802,7 +860,7 @@ mod tests { } ), HTML::from( - r#"5 𝍷"# + r#"5 𝍷"# ) ); assert_eq!( @@ -841,7 +899,7 @@ mod tests { } ), HTML::from( - r#"𝍷"# + r#"𝍷"# ) ); assert_eq!( @@ -916,7 +974,7 @@ mod tests { ]), } ), - HTML::from("bar: 𝍷𝍷, foo") + HTML::from(r#"bar: 𝍷𝍷, foo"#) ); assert_eq!( render_all_leftovers( @@ -1071,7 +1129,7 @@ mod tests { }) ), HTML::from( - r#"nope𝍷 + r#"nope𝍷 "# ) ); -- 2.51.2