]> git.scottworley.com Git - tablify/commitdiff
Don't allocate columns to rare events
authorScott Worley <scottworley@scottworley.com>
Thu, 26 Sep 2024 01:36:50 +0000 (18:36 -0700)
committerScott Worley <scottworley@scottworley.com>
Wed, 2 Oct 2024 09:40:47 +0000 (02:40 -0700)
Changelog
src/lib.rs
src/main.rs

index 33d7162a8d5d0fdededc9e45ad5cd9396d5b6c8a..6f091727ad19b94c3d79fe4c3e56a9d2f331c8df 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -2,6 +2,7 @@
 - Center text in each cell
 - Escape HTML characters properly
 - Fix an unnecessary O(n^2)ism
+- Rare events appear as end-of-line notes rather than mostly-empty columns
 
 ## [0.2.1] - 2024-08-20
 - A little more space up top
index bad71d0b2c2116d9134495c08f8316b84ffd4a7b..a7c28198b5faa15056fd274f1b9bd85ea61dd1dc 100644 (file)
@@ -4,7 +4,9 @@ use std::fmt::Write;
 use std::io::BufRead;
 use std::iter::Iterator;
 
-pub struct Config {}
+pub struct Config {
+    pub column_threshold: usize,
+}
 
 const HEADER: &str = r#"<!DOCTYPE html>
 <html>
@@ -180,10 +182,10 @@ fn column_counts(rows: &[Row]) -> Vec<(usize, String)> {
     counts.sort_unstable_by(|(an, acol), (bn, bcol)| bn.cmp(an).then(acol.cmp(bcol)));
     counts
 }
-fn column_order(rows: &[Row]) -> Vec<String> {
+fn column_order(config: &Config, rows: &[Row]) -> Vec<String> {
     column_counts(rows)
         .into_iter()
-        .map(|(_, col)| col)
+        .filter_map(|(n, col)| (n >= config.column_threshold).then_some(col))
         .collect()
 }
 
@@ -286,7 +288,7 @@ fn render_column_headers(columns: &[String]) -> HTML {
 ///     * an indented line with no preceding non-indented line
 pub fn tablify(config: &Config, input: impl std::io::Read) -> Result<HTML, std::io::Error> {
     let rows = read_rows(input).collect::<Result<Vec<_>, _>>()?;
-    let columns = column_order(&rows);
+    let columns = column_order(config, &rows);
     Ok(HTML(format!(
         "{HEADER}{}{}{FOOTER}",
         render_column_headers(&columns),
index b4f32fe0c9e925d5dc6a18cfaf94361562dd780b..6102247044bcad0a52d3d7bc31e5ce05ce19b461 100644 (file)
@@ -1,6 +1,12 @@
 fn main() {
     print!(
         "{}",
-        tablify::tablify(&tablify::Config {}, std::io::stdin()).unwrap()
+        tablify::tablify(
+            &tablify::Config {
+                column_threshold: 2
+            },
+            std::io::stdin()
+        )
+        .unwrap()
     );
 }