#[cfg(not(feature = "std"))]
extern crate alloc;
#[cfg(not(feature = "std"))]
use alloc::{format, vec::Vec};
use super::Style;
#[cfg(debug_assertions)]
use core::ops::Range;
impl Style<'_> {
#[must_use]
pub fn to_ass_string(&self) -> alloc::string::String {
format!(
"Style: {},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}",
self.name,
self.fontname,
self.fontsize,
self.primary_colour,
self.secondary_colour,
self.outline_colour,
self.back_colour,
self.bold,
self.italic,
self.underline,
self.strikeout,
self.scale_x,
self.scale_y,
self.spacing,
self.angle,
self.border_style,
self.outline,
self.shadow,
self.alignment,
self.margin_l,
self.margin_r,
self.margin_v,
self.encoding
)
}
#[must_use]
pub fn to_ass_string_with_format(&self, format: &[&str]) -> alloc::string::String {
let mut field_values = Vec::with_capacity(format.len());
for field in format {
let value = match *field {
"Name" => self.name,
"Fontname" => self.fontname,
"Fontsize" => self.fontsize,
"PrimaryColour" => self.primary_colour,
"SecondaryColour" => self.secondary_colour,
"OutlineColour" | "TertiaryColour" => self.outline_colour,
"BackColour" => self.back_colour,
"Bold" => self.bold,
"Italic" => self.italic,
"Underline" => self.underline,
"Strikeout" | "StrikeOut" => self.strikeout,
"ScaleX" => self.scale_x,
"ScaleY" => self.scale_y,
"Spacing" => self.spacing,
"Angle" => self.angle,
"BorderStyle" => self.border_style,
"Outline" => self.outline,
"Shadow" => self.shadow,
"Alignment" => self.alignment,
"MarginL" => self.margin_l,
"MarginR" => self.margin_r,
"MarginV" => self.margin_v,
"MarginT" => self.margin_t.unwrap_or("0"),
"MarginB" => self.margin_b.unwrap_or("0"),
"Encoding" => self.encoding,
"RelativeTo" => self.relative_to.unwrap_or("0"),
_ => "", };
field_values.push(value);
}
let joined = field_values.join(",");
format!("Style: {joined}")
}
#[cfg(debug_assertions)]
#[must_use]
pub fn validate_spans(&self, source_range: &Range<usize>) -> bool {
let spans = [
self.name,
self.fontname,
self.fontsize,
self.primary_colour,
self.secondary_colour,
self.outline_colour,
self.back_colour,
self.bold,
self.italic,
self.underline,
self.strikeout,
self.scale_x,
self.scale_y,
self.spacing,
self.angle,
self.border_style,
self.outline,
self.shadow,
self.alignment,
self.margin_l,
self.margin_r,
self.margin_v,
self.encoding,
];
spans.iter().all(|span| {
let ptr = span.as_ptr() as usize;
source_range.contains(&ptr)
})
}
}