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 | ð· | |
"#
)
);