Skip to main content

ass_editor/extensions/registry_integration/
builtins.rs

1//! Built-in tag handler and section processor registration for
2//! [`RegistryIntegration`].
3//!
4//! Wires the handler factories and section processors shipped by ass-core into
5//! the wrapped `ExtensionRegistry`.
6
7use super::RegistryIntegration;
8use crate::core::{EditorError, Result};
9
10#[cfg(not(feature = "std"))]
11use alloc::{boxed::Box, format, string::ToString};
12
13impl RegistryIntegration {
14    /// Register all built-in tag handlers from ass-core
15    pub fn register_builtin_handlers(&mut self) -> Result<()> {
16        use ass_core::plugin::tags::*;
17
18        // Register formatting handlers
19        for handler in formatting::create_formatting_handlers() {
20            self.registry.register_tag_handler(handler).map_err(|e| {
21                EditorError::ExtensionError {
22                    extension: "builtin".to_string(),
23                    message: format!("Failed to register formatting handler: {e}"),
24                }
25            })?;
26        }
27
28        // Register special character handlers
29        for handler in special::create_special_handlers() {
30            self.registry.register_tag_handler(handler).map_err(|e| {
31                EditorError::ExtensionError {
32                    extension: "builtin".to_string(),
33                    message: format!("Failed to register special handler: {e}"),
34                }
35            })?;
36        }
37
38        // Register font handlers
39        for handler in font::create_font_handlers() {
40            self.registry.register_tag_handler(handler).map_err(|e| {
41                EditorError::ExtensionError {
42                    extension: "builtin".to_string(),
43                    message: format!("Failed to register font handler: {e}"),
44                }
45            })?;
46        }
47
48        // Register advanced handlers
49        for handler in advanced::create_advanced_handlers() {
50            self.registry.register_tag_handler(handler).map_err(|e| {
51                EditorError::ExtensionError {
52                    extension: "builtin".to_string(),
53                    message: format!("Failed to register advanced handler: {e}"),
54                }
55            })?;
56        }
57
58        // Register alignment handlers
59        for handler in alignment::create_alignment_handlers() {
60            self.registry.register_tag_handler(handler).map_err(|e| {
61                EditorError::ExtensionError {
62                    extension: "builtin".to_string(),
63                    message: format!("Failed to register alignment handler: {e}"),
64                }
65            })?;
66        }
67
68        // Register karaoke handlers
69        for handler in karaoke::create_karaoke_handlers() {
70            self.registry.register_tag_handler(handler).map_err(|e| {
71                EditorError::ExtensionError {
72                    extension: "builtin".to_string(),
73                    message: format!("Failed to register karaoke handler: {e}"),
74                }
75            })?;
76        }
77
78        // Register position handlers
79        for handler in position::create_position_handlers() {
80            self.registry.register_tag_handler(handler).map_err(|e| {
81                EditorError::ExtensionError {
82                    extension: "builtin".to_string(),
83                    message: format!("Failed to register position handler: {e}"),
84                }
85            })?;
86        }
87
88        // Register color handlers
89        for handler in color::create_color_handlers() {
90            self.registry.register_tag_handler(handler).map_err(|e| {
91                EditorError::ExtensionError {
92                    extension: "builtin".to_string(),
93                    message: format!("Failed to register color handler: {e}"),
94                }
95            })?;
96        }
97
98        // Register transform handlers
99        for handler in transform::create_transform_handlers() {
100            self.registry.register_tag_handler(handler).map_err(|e| {
101                EditorError::ExtensionError {
102                    extension: "builtin".to_string(),
103                    message: format!("Failed to register transform handler: {e}"),
104                }
105            })?;
106        }
107
108        // Register animation handlers
109        for handler in animation::create_animation_handlers() {
110            self.registry.register_tag_handler(handler).map_err(|e| {
111                EditorError::ExtensionError {
112                    extension: "builtin".to_string(),
113                    message: format!("Failed to register animation handler: {e}"),
114                }
115            })?;
116        }
117
118        // Register clipping handlers
119        for handler in clipping::create_clipping_handlers() {
120            self.registry.register_tag_handler(handler).map_err(|e| {
121                EditorError::ExtensionError {
122                    extension: "builtin".to_string(),
123                    message: format!("Failed to register clipping handler: {e}"),
124                }
125            })?;
126        }
127
128        // Register misc handlers
129        for handler in misc::create_misc_handlers() {
130            self.registry.register_tag_handler(handler).map_err(|e| {
131                EditorError::ExtensionError {
132                    extension: "builtin".to_string(),
133                    message: format!("Failed to register misc handler: {e}"),
134                }
135            })?;
136        }
137
138        Ok(())
139    }
140
141    /// Register built-in section processors from ass-core
142    pub fn register_builtin_sections(&mut self) -> Result<()> {
143        use ass_core::plugin::sections::*;
144
145        // Register Aegisub section processor
146        self.registry
147            .register_section_processor(Box::new(aegisub::AegisubProjectProcessor))
148            .map_err(|e| EditorError::ExtensionError {
149                extension: "builtin".to_string(),
150                message: format!("Failed to register Aegisub section processor: {e}"),
151            })?;
152
153        Ok(())
154    }
155}