use std::collections::{HashMap, HashSet};
+use std::fmt::Write;
use std::io::BufRead;
use std::iter::Iterator;
tr.key > th > div > div { width: 5em; transform-origin: bottom left; transform: translateX(1em) rotate(-65deg) }
td { border: thin solid gray; }
td.numeric { text-align: right; }
- td.yes { border: thin solid gray; background-color: gray; }
+ td.yes { border: thin solid gray; background-color: #ddd; }
td.spacer { border: none; }
/* h/t https://stackoverflow.com/questions/5687035/css-bolding-some-text-without-changing-its-containers-size/46452396#46452396 */
.highlight { text-shadow: -0.06ex 0 black, 0.06ex 0 black; }
</head>
<body>
<table>
- <tbody>";
+ <tbody>
+";
const FOOTER: &str = " </tbody>
</table>
</body>
)
}
+fn render_column_headers(columns: &[String]) -> String {
+ // TODO: Escape HTML special characters
+ String::from("<th></th>")
+ + &columns.iter().fold(String::new(), |mut acc, c| {
+ write!(&mut acc, "<th>{c}</th>").unwrap();
+ acc
+ })
+ + "\n"
+}
+
/// # Errors
///
/// Will return `Err` if
let rows = read_rows(input).collect::<Result<Vec<_>, _>>()?;
let columns = column_order(&rows);
Ok(String::from(HEADER)
+ + &render_column_headers(&columns)
+ &rows
.into_iter()
.map(|r| render_row(&columns, &r))