Minimal line-oriented markup → PrawnEx.Layout flow blocks (Phase D).
Syntax (intentionally small):
# title— level-1 heading (single line).## title— level-2 heading (smaller font).- item— bullet line; consecutive-lines form one paragraph with ASCII*line prefixes (PDF-safe).- Blank line — ends the current paragraph or bullet group.
- Other lines — accumulate into a plain paragraph until blank or heading.
Lines are split on \n only; each line is String.trim/1’d.
Example
markup = """
# Report
First line.
Second line.
## Details
- Point A
- Point B
"""
layout |> PrawnEx.Layout.Markup.apply(markup) |> PrawnEx.Layout.to_doc()
Summary
Functions
Parses markup and runs Layout.vstack/3 (optional vstack_opts: :gap).
Parses source into flow tuples for PrawnEx.Layout.vstack/3
Functions
@spec apply(PrawnEx.Layout.t(), String.t(), keyword()) :: PrawnEx.Layout.t()
Parses markup and runs Layout.vstack/3 (optional vstack_opts: :gap).
@spec parse(String.t()) :: [PrawnEx.Layout.flow_block()]
Parses source into flow tuples for PrawnEx.Layout.vstack/3:
{:heading, text, opts}—:level1 or 2{:paragraph, text, opts}