blob: 35540878465e0d06c47c7cfad7ea6abbc8f6868b (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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<String> {
let mut output: Vec<String> = vec![];
let mut c_layer: Vec<String> = 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
}
|