From e0ca2d19231c50543a6dc6bcc6335a3f9a84c595 Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Sun, 29 Dec 2024 23:57:32 +0100 Subject: feat(src): Make usable --- rust/format/src/main.rs | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 rust/format/src/main.rs (limited to 'rust/format/src/main.rs') diff --git a/rust/format/src/main.rs b/rust/format/src/main.rs new file mode 100644 index 0000000..3554087 --- /dev/null +++ b/rust/format/src/main.rs @@ -0,0 +1,55 @@ +use std::{env::args, fs::File, io::Read}; + +mod format_layer; + +fn main() { + let mut keymap_h = String::new(); + + File::open(args().skip(1).last().expect("Exists")) + .expect("Should work") + .read_to_string(&mut keymap_h) + .expect("Failed to read keymap_h"); + + let mut c_column_max = [0; 14]; + + let out = calculate(&mut c_column_max, keymap_h); + let output = calculate(&mut c_column_max, out.join("\n")); + + print!("{}", output.join("\n")); +} + +fn calculate(c_column_max: &mut [usize; 14], keymap_h: String) -> Vec { + let mut output: Vec = vec![]; + let mut c_layer: Vec = vec![]; + keymap_h + .lines() + .filter(|line| !line.trim().is_empty()) + .for_each(|line| { + let first_char = line.trim().chars().take(1).last().unwrap(); + let line = line.trim(); + + match first_char { + 'c' | '}' => { + // Start or end of the kemap def, leave it alone + output.push(line.to_owned()); + } + '[' => { + // Start of a new layer + assert!(c_layer.is_empty(), "No new layer, without empty"); + output.push(format!(" {}", line)); + } + ')' => { + // End of a layer + output.push(format_layer::format_layer(c_layer.join("\n"), c_column_max)); + c_layer.clear(); + + output.push(format!(" {}", line)); + } + _ => { + // We are in a layer + c_layer.push(line.to_owned()); + } + } + }); + output +} -- cgit 1.4.1