onedrop_parser/
lib.rs

1//! # onedrop-parser
2//!
3//! A parser for Milkdrop `.milk` preset files.
4//!
5//! This crate provides functionality to parse Milkdrop visualization presets
6//! into structured Rust data types that can be used for rendering or analysis.
7
8pub mod double_preset;
9pub mod error;
10pub mod milk_img_ini;
11pub mod milk_msg_ini;
12pub mod parser;
13pub mod preset;
14
15pub use double_preset::{BlendPattern, DoublePreset, parse_double_preset};
16pub use error::{ParseError, Result};
17pub use milk_img_ini::{SpriteDef, parse_milk_img_ini};
18pub use milk_msg_ini::{MessageDef, parse_milk_msg_ini};
19pub use preset::MilkPreset;
20
21/// Parse a `.milk` preset file from a string.
22///
23/// # Examples
24///
25/// ```
26/// use onedrop_parser::parse_preset;
27///
28/// let content = r#"MILKDROP_PRESET_VERSION=201
29/// [preset00]
30/// fRating=5.000000
31/// zoom=0.99197
32/// "#;
33/// let preset = parse_preset(content).unwrap();
34/// println!("Preset version: {}", preset.version);
35/// ```
36pub fn parse_preset(input: &str) -> Result<MilkPreset> {
37    parser::parse_milk_preset(input)
38}
39
40#[cfg(test)]
41mod tests {
42    use super::*;
43
44    #[test]
45    fn test_parse_simple_preset() {
46        let input = r#"MILKDROP_PRESET_VERSION=201
47PSVERSION=2
48[preset00]
49fRating=5.000000
50zoom=0.99197
51rot=0.00000
52cx=0.500
53cy=0.500
54wave_r=1.000
55wave_g=0.000
56wave_b=0.000
57per_frame_1=wave_r = 0.5;
58per_pixel_1=zoom=zoom+0.1;
59"#;
60
61        let result = parse_preset(input);
62        assert!(result.is_ok());
63
64        let preset = result.unwrap();
65        assert_eq!(preset.version, 201);
66    }
67}