-- Pandoc Lua filter: wrap special sections in tcolorbox environments. -- -- 1. "Eksperimen X-Y" headings → experimentbox (until the next heading) -- 2. Indonesian question headings → questionbox (until the next same/higher heading) -- English headings remain supported for any legacy untranslated text. function Pandoc(doc) local new_blocks = {} local in_box = false local box_type = "" local box_level = 0 local function open_box(name) table.insert(new_blocks, pandoc.RawBlock("latex", "\\begin{" .. name .. "}")) in_box = true box_type = name end local function close_box() table.insert(new_blocks, pandoc.RawBlock("latex", "\\end{" .. box_type .. "}")) in_box = false box_type = "" end for _, block in ipairs(doc.blocks) do if block.t == "Header" then local text = pandoc.utils.stringify(block) if text:match("^[Ee]ksperimen%s?%d") or text:match("^[Ee]xperiment%s?%d") then if in_box then close_box() end box_level = block.level block.classes:insert("unnumbered") open_box("experimentbox") table.insert(new_blocks, block) elseif text:match("^[Pp]ertanyaan [Pp]emikiran") or text:match("^[Pp]ertanyaan [Rr]efleksi") or text:match("^[Pp]ertanyaan [Dd]iskusi") or text:match("^[Tt]hought [Qq]uestions") then if in_box then close_box() end box_level = block.level block.classes:insert("unnumbered") open_box("questionbox") table.insert(new_blocks, block) elseif in_box then if box_type == "experimentbox" then close_box() elseif block.level <= box_level then close_box() end table.insert(new_blocks, block) else table.insert(new_blocks, block) end else table.insert(new_blocks, block) end end if in_box then close_box() end doc.blocks = new_blocks return doc end