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