This commit does kind of a lot to get cass(1) over the finish line. For one it implements all the CLI functions (well, almost all) with their respective parameters, and also creates a new `gen` module which uses the IR stream to generate a new file based on the old one, while updating header fields that need to be updated (currently only `version`). This version does nothing with the actual header values, and probably has a lot of bugs. More documentation will follow in future cassiopeia commits.wip/yesman
parent
236cf191b9
commit
b9c988f425
@ -0,0 +1,33 @@ |
||||
//! Cassiopeia line generator
|
||||
//!
|
||||
//! This module takes a set of IR lines, and generates strings from
|
||||
//! them that are in accordance with the way that the parser of the
|
||||
//! same version expects them.
|
||||
|
||||
use crate::format::ir::{IrItem, IrType}; |
||||
|
||||
/// Take a line of IR and generate a string to print into a file
|
||||
pub(crate) fn line(ir: &IrItem) -> String { |
||||
let IrItem { tt, lo } = ir; |
||||
match tt { |
||||
IrType::Ignore => "".into(), |
||||
IrType::Header(map) => format!( |
||||
"HEADER {}", |
||||
map.iter() |
||||
.map(|(k, v)| format!("{}={},", k, v)) |
||||
.collect::<Vec<_>>() |
||||
.join("") |
||||
), |
||||
IrType::Start(time) => format!("START {}", time.to_string()), |
||||
|
||||
// FIXME: find a better way to align the lines here rather
|
||||
// than having to manually having to pad the 'STOP' commands
|
||||
IrType::Stop(time) => format!("STOP {}", time.to_string()), |
||||
IrType::Invoice(date) => format!("INVOICE {}", date.to_string()), |
||||
} |
||||
} |
||||
|
||||
pub(crate) fn head_comment() -> String { |
||||
";; generated by cassiopeia, be careful about editing by hand!".into() |
||||
} |
||||
|
Loading…
Reference in new issue