Center images when they are the only contents in a paragraph.
Some checks failed
format Build format has succeeded
clippy Build clippy has failed
rust-test Build rust-test has succeeded
build Build build has succeeded

This commit is contained in:
Tom Alexander
2025-02-22 13:15:58 -05:00
parent c371b999d5
commit ae6f18d19c
4 changed files with 43 additions and 5 deletions

View File

@@ -12,6 +12,7 @@ use super::RenderObject;
#[serde(rename = "paragraph")]
pub(crate) struct RenderParagraph {
children: Vec<RenderObject>,
is_single_image: bool,
post_blank: organic::types::PostBlank,
}
@@ -26,6 +27,7 @@ render!(RenderParagraph, IParagraph, original, render_context, {
Ok(RenderParagraph {
children,
is_single_image: original.is_single_image(),
post_blank: original.post_blank,
})
});

View File

@@ -1,3 +1,5 @@
use std::any::Any;
use super::macros::intermediate;
use super::IObject;
use crate::error::CustomError;
@@ -41,4 +43,32 @@ impl IParagraph {
post_blank,
})
}
/// Checks if the paragraph contains nothing but a single image.
///
/// When this happens, we want to center the image.
pub(crate) fn is_single_image(&self) -> bool {
let num_images = self
.children
.iter()
.filter(|c| match c {
IObject::RegularLink(iregular_link) => match &iregular_link.target {
super::LinkTarget::Image { src, alt } => true,
_ => false,
},
_ => false,
})
.count();
num_images == 1
&& self.children.iter().all(|c| match c {
IObject::RegularLink(iregular_link) => match &iregular_link.target {
super::LinkTarget::Image { src, alt } => true,
_ => false,
},
IObject::PlainText(iplain_text) => {
iplain_text.source.chars().all(|c| c.is_ascii_whitespace())
}
_ => false,
})
}
}