aboutsummaryrefslogtreecommitdiff
path: root/apps/koffice/libko/src/cass/format/gen.rs
blob: f77bcdc90e844a8854afe31307165df708670179 (plain)
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
//! 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::cass::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()
}