Streamplace AtmosphereConf 2026 VOD JAM
README.md

ass-core #

Crates.io Documentation License

ASS (Advanced SubStation Alpha) subtitle format parser and analyzer for Rust.

Features #

  • Zero-copy parsing: Lifetime-generic AST with minimal allocations
  • ASS v4+ support: Compatibility with libass and Aegisub
  • Script analysis: Style resolution, linting, and event analysis

Quick Start #

Add to your Cargo.toml:

[dependencies]
ass-core = { version = "0.1", features = ["analysis"] }

Basic usage:

use ass_core::parser::Script;

let script_text = r#"
[Script Info]
Title: Example
ScriptType: v4.00+

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,,Hello World!
"#;

let script = Script::parse(script_text)?;
println!("Parsed {} sections", script.sections().len());

Advanced Usage #

Script Analysis #

use ass_core::analysis::ScriptAnalysis;

let analysis = ScriptAnalysis::analyze(&script)?;
println!("Found {} dialogue events", analysis.dialogue_info().len());

Linting #

use ass_core::analysis::linting::{lint_script, LintConfig};

let config = LintConfig::default();
let issues = lint_script(&script, &config)?;
for issue in issues {
    println!("{}: {}", issue.severity(), issue.message());
}

Feature Flags #

  • std (default): Standard library support
  • analysis: Script analysis and linting
  • plugins: Extension registry support
  • serde: Serialization support

Architecture #

  • parser: Core ASS parsing with zero-copy AST
  • analysis: Script analysis and linting
  • utils: Common utilities and error types

Compatibility #

  • ASS v4.00+: Full support including advanced features
  • SSA v4: Legacy compatibility
  • libass extensions: Renderer-specific feature support
  • Aegisub: Aegisub-specific feature support

License #

Licensed under the MIT license.

Contributing #

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.