fix(pdf): een tabel over meerdere bladen laat zijn kopregel niet achter (#1790) #1799
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!1799
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/wees-tabelkop-1790"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Waarom
Ik had #1790 gesloten met de redenering dat
MultiPagegeen route biedt waarlangs een spannende widget zich kan terugtrekken, en dat een omhullende widget zou kunnen lussen. Op aandringen opnieuw bekeken — en beide argumenten hielden geen stand.De eerste opmaakaanroep gebruikt de volle paginabeperking, niet de resterende ruimte. Een tabel die langer is dan een blad valt daardoor altijd in de spanningstak (
multi_page.dartregel 376), en dáár wordt hij opnieuw opgemaakt met precies de ruimte die op dit blad over is. Dat is het aangrijpingspunt dat ik miste. En het lusargument gold alleen voor de naïeve variant; een grendel die vooruitgang afdwingt was te ontwerpen in plaats van weg te redeneren.Hoe het werkt
OrphanSafeTable(subklasse vanpw.Table) stelt na de opmaak vast dat er alleen herhaalrijen geplaatst zijn en zetlastLineop nul —paint()valt daar meteen op terug, dus dit blad blijft leeg en de opmaak gaat verder op het volgende. Mogelijk gemaakt doordatsaveContext()het lévendeTableContextteruggeeft, met publiekefirstLine/lastLine.Twee grendels houden het eindig:
Een valkuil die een ronde kostte
MultiPagekloont de context vóór de eerste aanroep en zet hem vóór de tweede terug. Liet ik de bewaarde leesregel na de eerste aanroep los, dan begon de tabel bij de tweede weer bij rij nul en herhaalde hij alles. Hij wordt nu pas losgelaten wanneer een opmaak werkelijk iets plaatst. Precies daarom eist de regressietoets niet alleen "geen verweesde kop" maar óók dat alle veertig rijen precies één keer voorkomen — die tweede assertie ving deze fout.Bijvangst: #1798
Bij het toetsen van de grendel bleek
package:pdfzélf oneindig rond te lopen wanneer één tabelrij hoger is dan een blad. Vastgesteld met een kalepw.Table, dus het ligt niet aan deze wijziging. De bewaking daarvoor staat upstream in eenasserten doet in een release-build niets — de gebruiker krijgt een bevroren venster. Apart vastgelegd als #1798. De grendeltoets hier gebruikt daarom rijen die bijna, maar niet helemaal, een blad hoog zijn.Toetsplan
make checkgroen (MAKE_CHECK_EXIT=0, nul fouten in het log)pw.Tablemake check-secretsenmake sast— 0 bevindingen