fix(documentmodus): de pagina-weergave honoreert de geforceerde pagina-einden #1518

Merged
brenno merged 2 commits from fix/geforceerde-paginaeinden into main 2026-08-17 10:46:09 +00:00
Owner

Sluit #1514.

Wat er mis was

Het formaat kent al twee pagina-einden die niets met hoogte te maken hebben, en de export honoreert ze allebei (FILE_FORMAT.md §14.6):

  • een --- in de body ís een pagina-einde — .document hr{page-break-after:always} in de print-CSS, \newpage in LaTeX;
  • de instelling Nieuw hoofdstuk op een nieuwe pagina laat elke H1 op een vers vel beginnen.

De pagina-weergave uit #1505 verdeelde puur op hoogte en liet een --- gewoon als streepje doorlopen. Het scherm dat laat zien wat op welke bladzijde komt, zei dus iets anders dan de druk — precies wat die stand hoort te voorkomen.

Gevonden bij het uitwerken van het front-matter-ontwerp (#1511), door de eigen formaatdocumentatie te lezen.

De oplossing

documentPageOffsets kent een forcedBreakBefore-verzameling; DocumentMarkdownView.forcedPageBreaks() wijst de blokken aan (soort rule, plus H1 wanneer de instelling aanstaat); PagedDocumentView geeft ze door. Een breuk bovenaan een vers vel wordt overgeslagen — anders opent een document dat met een --- of een kop begint met een leeg vel.

De parameter heeft een standaardwaarde, dus bestaande aanroepers merken niets.

Nog niet in de schrijfstand

De streepjeslijnen tijdens het typen doen dit nog niet. Daar is de blokindeling die van Quill en niet die van de weergave, dus de koppeling tussen beide lijsten moet eerst kloppen — anders staat de lijn op het verkeerde blok. Dat staat als open punt in #1514 in plaats van half gebouwd in de code.

Onderweg

DocumentMarkdownView tikte tegen het klasseplafond (die telt over alle part-bestanden samen, dus een splitsing helpt daar niet). De vijf regelclassificatie-helpers (_fenceMarker, _headingLevel, _isHorizontalRule, _listItem, _isParagraphLine) zijn daarom top-level functies geworden in het part dat de ontleedde bouwstenen al bevat — ze horen bij het ontleden, niet bij de weergave.

Tests

test/document_forced_page_breaks_test.dart: welke blokken een vers vel beginnen (een --- wel, een H1 alleen met de instelling, het eerste blok nooit, een tussenkop niet), plus end-to-end dat twee korte alinea's met een --- ertussen écht twee vellen opleveren. Uitbreidingen in test/document_pagination_test.dart voor de verdeler zelf, inclusief twee breuken achter elkaar.

Poorten

make check groen (9551 tests, dekking 86,9%). make check-secrets groen, make sast groen (0 findings).

Sluit #1514. ## Wat er mis was Het formaat kent al twee pagina-einden die niets met hoogte te maken hebben, en de export honoreert ze allebei (FILE_FORMAT.md §14.6): - een `---` in de body **ís** een pagina-einde — `.document hr{page-break-after:always}` in de print-CSS, `\newpage` in LaTeX; - de instelling *Nieuw hoofdstuk op een nieuwe pagina* laat elke `H1` op een vers vel beginnen. De pagina-weergave uit #1505 verdeelde puur op hoogte en liet een `---` gewoon als streepje doorlopen. Het scherm dat laat zien wat op welke bladzijde komt, zei dus iets anders dan de druk — precies wat die stand hoort te voorkomen. Gevonden bij het uitwerken van het front-matter-ontwerp (#1511), door de eigen formaatdocumentatie te lezen. ## De oplossing `documentPageOffsets` kent een `forcedBreakBefore`-verzameling; `DocumentMarkdownView.forcedPageBreaks()` wijst de blokken aan (soort `rule`, plus `H1` wanneer de instelling aanstaat); `PagedDocumentView` geeft ze door. Een breuk bovenaan een vers vel wordt overgeslagen — anders opent een document dat met een `---` of een kop begint met een leeg vel. De parameter heeft een standaardwaarde, dus bestaande aanroepers merken niets. ## Nog niet in de schrijfstand De streepjeslijnen tijdens het typen doen dit nog niet. Daar is de blokindeling die van Quill en niet die van de weergave, dus de koppeling tussen beide lijsten moet eerst kloppen — anders staat de lijn op het verkeerde blok. Dat staat als open punt in #1514 in plaats van half gebouwd in de code. ## Onderweg `DocumentMarkdownView` tikte tegen het klasseplafond (die telt over alle `part`-bestanden samen, dus een splitsing helpt daar niet). De vijf regelclassificatie-helpers (`_fenceMarker`, `_headingLevel`, `_isHorizontalRule`, `_listItem`, `_isParagraphLine`) zijn daarom top-level functies geworden in het part dat de ontleedde bouwstenen al bevat — ze horen bij het ontleden, niet bij de weergave. ## Tests `test/document_forced_page_breaks_test.dart`: welke blokken een vers vel beginnen (een `---` wel, een `H1` alleen met de instelling, het eerste blok nooit, een tussenkop niet), plus end-to-end dat twee korte alinea's met een `---` ertussen écht twee vellen opleveren. Uitbreidingen in `test/document_pagination_test.dart` voor de verdeler zelf, inclusief twee breuken achter elkaar. ## Poorten `make check` groen (9551 tests, dekking 86,9%). `make check-secrets` groen, `make sast` groen (0 findings).
Het formaat kent al twee pagina-einden die niets met hoogte te maken
hebben: een `---` in de body ís een einde, en de instelling "nieuw
hoofdstuk op een nieuwe pagina" doet hetzelfde voor elke H1
(FILE_FORMAT.md §14.6). De HTML- en LaTeX-export honoreren ze allebei.

De pagina-weergave verdeelde puur op hoogte en liet een `---` gewoon als
streepje doorlopen. Het scherm zei daarmee iets anders dan de druk —
precies wat die stand hoort te voorkomen.

`documentPageOffsets` kent nu geforceerde einden, en de weergave wijst aan
welke blokken dat zijn. Een breuk bovenaan een vers vel wordt overgeslagen,
anders opent het document met een leeg vel.

Nog niet in de schrijfstand: daar is de blokindeling die van Quill en niet
die van de weergave, dus de koppeling tussen beide lijsten moet eerst
kloppen. Staat in #1514.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
refactor(documentweergave): regelclassificatie top-level, klasse onder haar plafond
All checks were successful
scans / scans (pull_request) Successful in 3m11s
static-gate / static-gate (pull_request) Successful in 6m57s
01cd805d3f
De classificatiehelpers waren statisch op DocumentMarkdownView; de klasse
telde over al haar part-bestanden 1010 regels. Ze hangen niet aan de
weergave maar aan het ontleden, dus staan ze nu als top-level functies bij
de blokken.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
brenno merged commit cdace11716 into main 2026-08-17 10:46:09 +00:00
Sign in to join this conversation.
No description provided.