pub mod auto_complete;
pub mod syntax_highlight;
pub use auto_complete::AutoCompleteExtension;
pub use syntax_highlight::SyntaxHighlightExtension;
#[cfg(feature = "std")]
pub fn load_builtin_extensions(
manager: &mut crate::extensions::ExtensionManager,
) -> crate::core::Result<()> {
let syntax_ext = Box::new(SyntaxHighlightExtension::new());
manager.load_extension(syntax_ext)?;
let autocomplete_ext = Box::new(AutoCompleteExtension::new());
manager.load_extension(autocomplete_ext)?;
Ok(())
}
pub fn register_builtin_extensions(
registry: &mut crate::extensions::registry_integration::RegistryIntegration,
) -> crate::core::Result<()> {
registry.register_builtin_handlers()?;
registry.register_builtin_sections()?;
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
#[cfg(not(feature = "std"))]
use crate::extensions::ExtensionManager;
use crate::extensions::{EditorExtension, ExtensionCapability};
#[cfg(not(feature = "std"))]
#[test]
fn test_load_builtin_extensions() {
let manager = ExtensionManager::new();
let extensions = manager.list_extensions();
assert_eq!(extensions.len(), 0);
}
#[test]
fn test_syntax_highlight_extension() {
let ext = SyntaxHighlightExtension::new();
assert_eq!(ext.info().name, "syntax-highlight");
assert!(ext
.info()
.has_capability(&ExtensionCapability::SyntaxHighlighting));
}
#[test]
fn test_auto_complete_extension() {
let ext = AutoCompleteExtension::new();
assert_eq!(ext.info().name, "auto-complete");
assert!(ext
.info()
.has_capability(&ExtensionCapability::CodeCompletion));
}
#[test]
fn test_register_builtin_extensions() {
use crate::extensions::registry_integration::RegistryIntegration;
let mut registry = RegistryIntegration::new();
assert!(register_builtin_extensions(&mut registry).is_ok());
let test_content = r#"[Script Info]
Title: Test Script
PlayResX: 1920
PlayResY: 1080
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour
Style: Default,Arial,20,&H00FFFFFF,&H000000FF
[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,,{\b1}Bold{\b0} text with {\i1}italics{\i0}"#;
let result = ass_core::parser::Script::builder()
.with_registry(registry.registry())
.parse(test_content);
assert!(result.is_ok());
let script = result.unwrap();
assert_eq!(script.sections().len(), 3);
}
}