pretty sure I accidentally hardcoded edge cases

This commit is contained in:
Jean-Marie Mineau 2025-10-15 16:57:55 +02:00
parent 1f5f70779b
commit 528e1bc5b5
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
3 changed files with 113 additions and 26 deletions

View file

@ -123,11 +123,25 @@ cmyk(25%,7%,0%,0%),
sns-polylux-template_date.update(date)
body
context {
//let section-pages = sns-polylux-template_section-pages.final()
if not "END" in sns-polylux-template_section-pages.at(here()).keys() {
let page_num = counter("logical-slide").at(here())
sns-polylux-template_section-pages.update(secpages => {
secpages.insert("END", page_num)
secpages
})
}
}
}
#let register-section(title) = context {
#let register-section(title, no_dedicated_slide: false) = context {
// YUCKKKKK, but polylux don't allows access to integers soooooo
let page_num = counter("logical-slide").at(here()) //sns-polylux-template_slide-pages.at(here())
if no_dedicated_slide {
page_num.at(0) += 1
}
sns-polylux-template_section-pages.update(secpages => {
secpages.insert(repr(title), page_num)
secpages
@ -267,35 +281,52 @@ cmyk(25%,7%,0%,0%),
#let sections() = context {
let section-pages = sns-polylux-template_section-pages.final()
let pnum = counter("logical-slide").at(here()).first()
let pnum = counter("logical-slide").at(here()).first() + 1
pl.toolbox.all-sections((sections, current) => {
let pnum_i = 0
let beg-end-section = (:)
let prev-sec = none
for section in sections {
let s = repr(section.at("body"))
if prev-sec != none {
beg-end-section.insert(prev-sec, (section-pages.at(prev-sec).first(), section-pages.at(s).first()))
}
prev-sec = s
}
if prev-sec != none {
beg-end-section.insert(prev-sec, (section-pages.at(prev-sec).first(), section-pages.at("END").first() + 1))
}
let section_names = ()
let section_pages = ()
for s in sections {
let pages = ()
let pnum_max = section-pages.at(repr(s.at("body"))).first()
while pnum_i < pnum_max and pnum_i < pnum - 1 {
let (pmin, pmax) = beg-end-section.at(repr(s.at("body")))
let p_i = pmin
while p_i < pmax and p_i < pnum {
// In section, before current page
pages.push(sym.circle.filled)
pnum_i += 1
p_i += 1
}
if pnum_i == pnum {
if p_i == pnum and p_i != pmax {
// In section, current page
pages.push(sym.ast.circle)
pnum_i += 1
p_i += 1
}
while pnum_i < pnum_max {
while p_i < pmax {
// In section, after current page
pages.push(sym.circle.dotted)
pnum_i += 1
p_i += 1
}
/*
//section_names.push(scale(50%, reflow: true, [#pnum #s (#pmin, #pmax)]))
if s == current {
strong(s + " " + str(pnum))
section_names.push(strong(s))
section_pages.push(strong(pages.join([])))
} else {
s + " " + str(pnum)
}*/
section_names.push(s)
section_pages.push(pages.join([]))
section_names.push(s)
section_pages.push(pages.join([]))
}
}
grid(
columns: (auto,)*section_names.len(),
@ -340,6 +371,7 @@ cmyk(25%,7%,0%,0%),
new-sec : false,
page-number : true,
hide-section : false,
hide-title : false,
body
) = context( {
let sections_height = 1.5cm
@ -355,7 +387,7 @@ cmyk(25%,7%,0%,0%),
// Else the new-sec name is new-sec
if type(new-sec)==bool {
if new-sec {
register-section(title)
register-section(title, no_dedicated_slide: true)
}
} else {
register-section(new-sec)
@ -379,7 +411,7 @@ cmyk(25%,7%,0%,0%),
}))
),
grid.cell(colspan: columns.len(), progress-bar()),
if title != none {
if title != none and not hide-title {
rect(
width: 100%, height: title_bar_height,
inset: 0.8cm, outset: 0pt,