diff --git a/utils/pdfpc.typ b/utils/pdfpc.typ index 6805e92..27251ea 100644 --- a/utils/pdfpc.typ +++ b/utils/pdfpc.typ @@ -1,3 +1,54 @@ +#let pdfpc-file = { + locate(loc => { + let arr = query(, loc).map(it => it.value) + let (config, ..slides) = arr.split((t: "NewSlide")) + let pdfpc = ( + pdfpcFormat: 2, + disableMarkdown: false, + ) + for item in config { + pdfpc.insert(lower(item.t.at(0)) + item.t.slice(1), item.v) + } + let pages = () + for slide in slides { + let page = ( + idx: 0, + label: 1, + overlay: 0, + forcedOverlay: false, + hidden: false, + ) + for item in slide { + if item.t == "Idx" { + page.idx = item.v + } else if item.t == "LogicalSlide" { + page.label = item.v + } else if item.t == "Overlay" { + page.overlay = item.v + page.forcedOverlay = item.v > 0 + } else if item.t == "HiddenSlide" { + page.hidden = true + } else if item.t == "SaveSlide" { + if "savedSlide" not in pdfpc { + pdfpc.savedSlide = page.label - 1 + } + } else if item.t == "EndSlide" { + if "endSlide" not in pdfpc { + pdfpc.endSlide = page.label - 1 + } + } else if item.t == "Note" { + page.note = item.v + } else { + pdfpc.insert(lower(item.t.at(0)) + item.t.slice(1), item.v) + } + } + pages.push(page) + } + pdfpc.insert("pages", pages) + [#metadata(pdfpc)] + }) +} + #let speaker-note(text) = { let text = if type(text) == "string" { text @@ -91,4 +142,7 @@ [ #metadata((t: "DefaultTransition", v: transition-str)) ] } + + // add a metadata to generate json-based pdfpc file + pdfpc-file }