mod engine;
mod print;
pub use acorde_core::NoteAddr;
pub use engine::compute_layout;
pub use print::{
BreakReason, CropMarkPolicy, FinalPagePolicy, GLYPH_RESOURCE_CONTRACT_VERSION,
GlyphCollisionClass, GlyphCollisionDirection, GlyphExtents, GlyphFallbackPolicy, GlyphMetrics,
GlyphPlacement, GlyphPlacementError, GlyphResourceDescriptor, GlyphResourceDescriptorError,
GlyphResourcePolicy, KeepTogetherRange, MeasureMark, MeasureSpan, NotationBreakPolicy,
PAGE_RENDER_TREE_CONTRACT_VERSION, PRINT_LAYOUT_CONTRACT_VERSION, PRINT_PRESET_SCHEMA_VERSION,
PageAddress, PageArtifact, PageArtifactDiagnostic, PageLayout, PageNumbering, PageOrientation,
PagePublication, PageRenderAddress, PageRenderNode, PageRenderNodeKind, PageRenderTree,
PageSpanSegment, PaperSize, PartGroupMark, PartLabel, PartLayoutPolicy, PickupPolicy,
PrintColorPolicy, PrintConfig, PrintLayoutError, PrintLayoutResult, PrintPreset,
PublicationConfig, PublicationFrame, PublicationFramePlacement, PublicationImagePlacement,
PublicationImageResource, PublicationPageTemplate, PublicationSection, PublicationSpacer,
PublicationTextAlignment, PublicationTextBlock, PublicationTextRole, SpanSegment,
SystemAddress, SystemLayout, compute_print_layout, compute_print_layout_for_view,
distribute_glyph_spacing, glyph_extents, resolve_glyph_collisions,
resolve_glyph_collisions_checked, resolve_glyph_collisions_constrained,
resolve_glyph_collisions_with_classes, resolve_glyph_horizontal_collisions,
resolve_glyph_horizontal_collisions_checked, resolve_glyph_horizontal_collisions_with_classes,
validate_glyph_placements,
};
use acorde_core::{HairpinKind, NotationSpanner, 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,
},
Glissando {
start: NoteAddr,
end: NoteAddr,
},
Harmony {
label: String,
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 typed_spanners: Vec<NotationSpanner>,
#[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>,
#[serde(default)]
pub source_voice_addresses: Vec<SourceVoiceAddress>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SourceVoiceAddress {
pub part: usize,
pub staff: usize,
pub measure: usize,
pub voice: usize,
pub source_voice_number: u32,
}