mod engine;
pub use acorde_core::NoteAddr;
pub use engine::compute_layout;
use acorde_core::{HairpinKind, OttavaKind};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LayoutConfig {
pub measures_per_row: usize,
#[serde(default)]
pub concert_pitch: bool,
#[serde(default)]
pub first_row_measures: Option<usize>,
}
impl Default for LayoutConfig {
fn default() -> Self {
Self {
measures_per_row: 4,
concert_pitch: false,
first_row_measures: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum SpanMark {
Hairpin {
kind: HairpinKind,
start: NoteAddr,
end: NoteAddr,
},
Ottava {
kind: OttavaKind,
start: NoteAddr,
end: NoteAddr,
},
Pedal {
start: NoteAddr,
end: NoteAddr,
},
Slur {
start: NoteAddr,
end: NoteAddr,
},
TrillLine {
start: NoteAddr,
end: NoteAddr,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RowLayout {
pub measure_indices: Vec<usize>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConcertKeyOverride {
pub part_index: usize,
pub staff_index: usize,
pub fifths: i8,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BeamGroup {
pub part: usize,
pub staff: usize,
pub measure: usize,
pub voice: usize,
pub note_indices: Vec<usize>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TupletGroup {
pub part: usize,
pub staff: usize,
pub measure: usize,
pub voice: usize,
pub note_indices: Vec<usize>,
pub actual_notes: u8,
pub normal_notes: u8,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CourtesyAccidental {
pub part: usize,
pub staff: usize,
pub measure: usize,
pub voice: usize,
pub note_index: usize,
pub pitch_index: usize,
pub alter: i8,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccidentalMark {
pub part: usize,
pub staff: usize,
pub measure: usize,
pub voice: usize,
pub note_index: usize,
pub pitch_index: usize,
pub alter: i8,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LayoutResult {
pub vis_slots: Vec<usize>,
pub rows: Vec<RowLayout>,
pub spans: Vec<SpanMark>,
#[serde(default)]
pub concert_key_overrides: Vec<ConcertKeyOverride>,
#[serde(default)]
pub beam_groups: Vec<BeamGroup>,
#[serde(default)]
pub tuplet_groups: Vec<TupletGroup>,
#[serde(default)]
pub courtesy_accidentals: Vec<CourtesyAccidental>,
#[serde(default)]
pub accidentals: Vec<AccidentalMark>,
}