Skip to main content

panache_parser/parser/blocks/
figures.rs

1//! Figure parsing for standalone images.
2//!
3//! In Pandoc, a paragraph containing only an image (and optional attributes)
4//! is treated as a Figure block element rather than a paragraph with inline image.
5
6use crate::options::ParserOptions;
7use crate::syntax::SyntaxKind;
8use rowan::GreenNodeBuilder;
9
10use crate::parser::utils::helpers;
11use crate::parser::utils::inline_emission::emit_inlines;
12
13/// Parse a figure block (standalone image).
14///
15/// Emits inline-parsed structure directly during block parsing.
16pub(in crate::parser) fn parse_figure(
17    builder: &mut GreenNodeBuilder<'static>,
18    line: &str,
19    config: &ParserOptions,
20) {
21    builder.start_node(SyntaxKind::FIGURE.into());
22
23    // Split off trailing newline
24    let (text_without_newline, newline_str) = helpers::strip_newline(line);
25
26    // Parse inline content (IMAGE_LINK) directly
27    if !text_without_newline.is_empty() {
28        emit_inlines(builder, text_without_newline, config);
29    }
30
31    if !newline_str.is_empty() {
32        builder.token(SyntaxKind::NEWLINE.into(), newline_str);
33    }
34
35    builder.finish_node(); // Close Figure
36}