X-Git-Url: http://git.scottworley.com/tablify/blobdiff_plain/493e21a274f99cfcc29559de89cf5ca1c11cc35c..7a246d87bb2de224662bb80526fd5ed31be05cbe:/src/lib.rs diff --git a/src/lib.rs b/src/lib.rs index 11ee0c3..bfcfdec 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,15 +4,18 @@ use std::fmt::Write; use std::io::BufRead; use std::iter::Iterator; -fn tally_marks(n: usize, mark: Option<&str>) -> String { - match mark { +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(), - } + }) } #[derive(PartialEq, Eq, Debug)] @@ -308,7 +311,7 @@ fn render_instances(instances: &[Option], mark: Option<&str>) -> HTML { None => tally += 1, Some(ref content) => { if tally > 0 { - out.push(HTML(tally_marks(tally, mark))); + out.push(tally_marks(tally, mark)); tally = 0; } out.push(HTML::escape(content)); @@ -316,7 +319,7 @@ fn render_instances(instances: &[Option], mark: Option<&str>) -> HTML { } } if tally > 0 { - out.push(HTML(tally_marks(tally, mark))); + out.push(tally_marks(tally, mark)); } HTML( out.into_iter() @@ -504,22 +507,77 @@ mod tests { #[test] fn test_tally_marks() { - assert_eq!(tally_marks(1, None), "𝍷"); - assert_eq!(tally_marks(2, None), "𝍷𝍷"); - assert_eq!(tally_marks(3, None), "𝍷𝍷𝍷"); - assert_eq!(tally_marks(4, None), "𝍷𝍷𝍷𝍷"); - assert_eq!(tally_marks(5, None), "𝍸"); - assert_eq!(tally_marks(6, None), "𝍸𝍷"); - assert_eq!(tally_marks(7, None), "𝍸𝍷𝍷"); - assert_eq!(tally_marks(8, None), "𝍸𝍷𝍷𝍷"); - assert_eq!(tally_marks(9, None), "𝍸𝍷𝍷𝍷𝍷"); - assert_eq!(tally_marks(10, None), "𝍸𝍸"); - assert_eq!(tally_marks(11, None), "𝍸𝍸𝍷"); - assert_eq!(tally_marks(1, Some("x")), "x"); - assert_eq!(tally_marks(4, Some("x")), "xxxx"); - assert_eq!(tally_marks(5, Some("x")), "xxxxx"); - assert_eq!(tally_marks(6, Some("x")), "xxxxxx"); - assert_eq!(tally_marks(2, Some("🍔")), "🍔🍔"); + 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()); + assert_eq!(tally_marks(6, Some("x")), "xxxxxx".into()); + assert_eq!(tally_marks(2, Some("🍔")), "🍔🍔".into()); } fn read_rows(input: impl std::io::Read) -> Result, std::io::Error> { @@ -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𝍷 "# ) );