use fop_core::{PropertyId, PropertyList};
use fop_types::Length;
pub fn extract_space_before(properties: &PropertyList) -> Length {
properties
.get(PropertyId::SpaceBefore)
.ok()
.and_then(|v| v.as_length())
.unwrap_or(Length::ZERO)
}
pub fn extract_space_after(properties: &PropertyList) -> Length {
properties
.get(PropertyId::SpaceAfter)
.ok()
.and_then(|v| v.as_length())
.unwrap_or(Length::ZERO)
}
pub fn extract_start_indent(properties: &PropertyList) -> Length {
properties
.get(PropertyId::StartIndent)
.ok()
.and_then(|v| v.as_length())
.unwrap_or(Length::ZERO)
}
pub fn extract_end_indent(properties: &PropertyList) -> Length {
properties
.get(PropertyId::EndIndent)
.ok()
.and_then(|v| v.as_length())
.unwrap_or(Length::ZERO)
}
pub fn extract_text_indent(properties: &PropertyList) -> Length {
properties
.get(PropertyId::TextIndent)
.ok()
.and_then(|v| v.as_length())
.unwrap_or(Length::ZERO)
}
pub fn extract_line_height(properties: &PropertyList) -> Option<Length> {
properties.get(PropertyId::LineHeight).ok().and_then(|v| {
if let Some(len) = v.as_length() {
Some(len)
} else if let Some(num) = v.as_number() {
let font_size = properties
.get(PropertyId::FontSize)
.ok()
.and_then(|fs| fs.as_length())
.unwrap_or(Length::from_pt(12.0));
Some(Length::from_millipoints(
(font_size.millipoints() as f64 * num) as i32,
))
} else {
None
}
})
}
pub fn extract_letter_spacing(properties: &PropertyList) -> Option<Length> {
properties
.get(PropertyId::LetterSpacing)
.ok()
.and_then(|v| v.as_length())
}
pub fn extract_word_spacing(properties: &PropertyList) -> Option<Length> {
properties
.get(PropertyId::WordSpacing)
.ok()
.and_then(|v| v.as_length())
}