ass_core/analysis/events/
mod.rs

1//! ASS dialogue event analysis and processing
2//!
3//! Provides comprehensive analysis capabilities for ASS dialogue events including
4//! timing validation, overlap detection, text analysis, and performance impact
5//! assessment. Designed for zero-copy efficiency with lifetime-generic references.
6//!
7//! # Features
8//!
9//! - **Timing Analysis**: Overlap detection using O(n log n) sweep-line algorithm
10//! - **Text Processing**: Override tag parsing and Unicode complexity detection
11//! - **Performance Scoring**: Animation complexity and rendering impact assessment
12//! - **Zero-Copy Design**: Minimal allocations via lifetime-generic spans
13//! - **Standards Compliance**: Full ASS v4+ and libass 0.17.4+ compatibility
14//!
15//! # Performance Targets
16//!
17//! - Event analysis: <1ms per dialogue event
18//! - Overlap detection: <1ms for 1000 events
19//! - Text parsing: <0.5ms per event text
20//! - Memory usage: ~1.1x input size via zero-copy spans
21//!
22//! # Quick Start
23//!
24//! ```rust
25//! use ass_core::analysis::events::{DialogueInfo, find_overlapping_events};
26//! use ass_core::parser::Event;
27//!
28//! let event = Event {
29//!     start: "0:00:00.00",
30//!     end: "0:00:05.00",
31//!     text: "Hello {\\b1}world{\\b0}!",
32//!     ..Default::default()
33//! };
34//!
35//! let info = DialogueInfo::analyze(&event)?;
36//! println!("Duration: {}ms", info.duration_ms());
37//! println!("Animation score: {}/10", info.animation_score());
38//! println!("Performance impact: {:?}", info.performance_impact());
39//! # Ok::<(), Box<dyn std::error::Error>>(())
40//! ```
41//!
42//! # Module Organization
43//!
44//! - [`dialogue_info`] - Individual event analysis and timing validation
45//! - [`text_analysis`] - Text content parsing and Unicode complexity detection
46//! - [`overlap`] - Efficient timing overlap detection algorithms
47//! - [`utils`] - Collection operations like sorting and duration calculations
48
49pub mod dialogue_info;
50pub mod overlap;
51pub mod scoring;
52pub mod tags;
53pub mod text_analysis;
54pub mod utils;
55
56pub use dialogue_info::{DialogueInfo, TimingRelation};
57pub use overlap::{count_overlapping_events, find_overlapping_event_refs, find_overlapping_events};
58pub use scoring::{
59    calculate_animation_score, calculate_complexity_score, get_performance_impact,
60    PerformanceImpact,
61};
62pub use tags::{
63    calculate_tag_complexity, parse_override_block, DiagnosticKind, OverrideTag, TagDiagnostic,
64};
65pub use text_analysis::TextAnalysis;
66pub use utils::{
67    calculate_average_duration, calculate_total_duration, count_overlapping_dialogue_events,
68    find_events_in_range, find_overlapping_dialogue_events, sort_events_by_time,
69};