local KINDS = {"NOTE", "WARNING", "DEPRECATED", "TIP"}
local function detect_admonition(block)
if block.t ~= "Para" then return nil end
if #block.content == 0 then return nil end
local first = block.content[1]
if first == nil or first.t ~= "Strong" then return nil end
local strong_text = pandoc.utils.stringify(first)
for _, kind in ipairs(KINDS) do
if strong_text == kind .. ":" then
return kind
end
end
return nil
end
function Blocks(blocks)
local result = pandoc.List()
local i = 1
while i <= #blocks do
local block = blocks[i]
local kind = detect_admonition(block)
if kind then
local collected = pandoc.List({block})
local j = i + 1
while j <= #blocks and blocks[j].t == "Para" and not detect_admonition(blocks[j]) do
collected:insert(blocks[j])
j = j + 1
end
result:insert(pandoc.Div(collected, pandoc.Attr("", {"admonition", kind:lower()})))
i = j
else
result:insert(block)
i = i + 1
end
end
return result
end