feat(documentmodus): zet elk hoofdstuk op een nieuwe pagina #1545

Merged
brenno merged 5 commits from feat/hoofdstukafbrekingen into main 2026-08-17 23:10:18 +00:00
Owner

Sluit #1535.

Een documentschrijver die elk hoofdstuk op een nieuwe pagina wil, moest tot nu toe met de hand een --- vóór elke H1 zetten. Het invoeg-palet doet dat nu in één handeling.

Vorm

applyChapterPageBreaks(String body) in lib/widgets/parts/document_source_rewrites.dart is een pure bewerking op de body, zodat de frontmatter per constructie buiten schot blijft. Idempotent: een tweede aanroep verandert niets en laat isDirty op false.

Geen eigen regex — de bewerking hergebruikt de bestaande fence-overslaande scan van DocumentMarkdownView via twee nieuwe statics (chapterHeadingLines, isThematicBreakLine). Een # of --- binnen een codeblok telt dus niet mee, en dat is getest.

De handeling commit via documentProvider.edit(coalesceKey: null), dus één ongedaan-stap. De melding zegt of er iets veranderde.

Twee dingen die niet vanzelf spraken

  • De lege regel vóór de ---. Zonder die regel maakt Markdown van Alfa\n--- een setext-H2 in plaats van een breuk. Er wordt er dus altijd één ingevoegd als er tekst boven staat; er is een test voor.
  • De labellengte. De eerste keus liet het popupmenu 236px overlopen. Het label is ingekort én _insertItem is buigzaam gemaakt (Expanded + ellipsis), zodat een langere vertaling of 200% tekstgrootte het menu niet alsnog omgooit. Alle 31 vertalingen zijn korter dan de Nederlandse bron.

Vertalingen

Drie bronstrings × 31 talen. Er bestond al een woordfamilie voor ditzelfde onderwerp (de exportinstelling Nieuw hoofdstuk op een nieuwe pagina); daar is per taal het zelfstandig naamwoord én het werkwoord uit overgenomen in plaats van vers te vertalen. Dat corrigeerde onder meer het Latijn (caput, niet capitulum) en het Ests (leht, niet lehekülg). Het verschil tussen begint nu en begon al draagt elke taal met eigen middelen — lexicaal, aspectueel, of in het Klingon met het perfectief -pu'.

Toetsing

38 tests: test/document_chapter_breaks_test.dart (13 gevallen, waaronder de setext-val, --- als laatste fence-regel vóór een kop, en frontmatterbehoud) plus twee widgettests over de paletroute en de idempotentie. make check groen (dekking 86,9%), scans schoon.

Documentatie: USER_GUIDE, DOCUMENT_MODE.md §13.6, SOURCE_MAP en de CHANGELOG.

Sluit #1535. Een documentschrijver die elk hoofdstuk op een nieuwe pagina wil, moest tot nu toe met de hand een `---` vóór elke `H1` zetten. Het invoeg-palet doet dat nu in één handeling. ## Vorm `applyChapterPageBreaks(String body)` in `lib/widgets/parts/document_source_rewrites.dart` is een pure bewerking op de **body**, zodat de frontmatter per constructie buiten schot blijft. Idempotent: een tweede aanroep verandert niets en laat `isDirty` op false. Geen eigen regex — de bewerking hergebruikt de bestaande fence-overslaande scan van `DocumentMarkdownView` via twee nieuwe statics (`chapterHeadingLines`, `isThematicBreakLine`). Een `#` of `---` binnen een codeblok telt dus niet mee, en dat is getest. De handeling commit via `documentProvider.edit(coalesceKey: null)`, dus één ongedaan-stap. De melding zegt of er iets veranderde. ## Twee dingen die niet vanzelf spraken - **De lege regel vóór de `---`.** Zonder die regel maakt Markdown van `Alfa\n---` een setext-`H2` in plaats van een breuk. Er wordt er dus altijd één ingevoegd als er tekst boven staat; er is een test voor. - **De labellengte.** De eerste keus liet het popupmenu 236px overlopen. Het label is ingekort én `_insertItem` is buigzaam gemaakt (`Expanded` + ellipsis), zodat een langere vertaling of 200% tekstgrootte het menu niet alsnog omgooit. Alle 31 vertalingen zijn korter dan de Nederlandse bron. ## Vertalingen Drie bronstrings × 31 talen. Er bestond al een woordfamilie voor ditzelfde onderwerp (de exportinstelling *Nieuw hoofdstuk op een nieuwe pagina*); daar is per taal het zelfstandig naamwoord én het werkwoord uit overgenomen in plaats van vers te vertalen. Dat corrigeerde onder meer het Latijn (`caput`, niet `capitulum`) en het Ests (`leht`, niet `lehekülg`). Het verschil tussen *begint nu* en *begon al* draagt elke taal met eigen middelen — lexicaal, aspectueel, of in het Klingon met het perfectief `-pu'`. ## Toetsing 38 tests: `test/document_chapter_breaks_test.dart` (13 gevallen, waaronder de setext-val, `---` als laatste fence-regel vóór een kop, en frontmatterbehoud) plus twee widgettests over de paletroute en de idempotentie. `make check` groen (dekking 86,9%), scans schoon. Documentatie: USER_GUIDE, `DOCUMENT_MODE.md` §13.6, SOURCE_MAP en de CHANGELOG.
Zet een `---` vóór elke `H1` behalve de eerste — de draagbare vorm van
'nieuw hoofdstuk op een nieuwe pagina' (FILE_FORMAT.md §14.6), in het
bestand in plaats van in een app-instelling. Idempotent, en de kop- en
breukherkenning komt van DocumentMarkdownView zodat een `#` of `---`
binnen een fenced blok niet meetelt.

Refs #1535

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
De bewerking loopt via documentProvider.edit als één discrete stap, dus
ongedaan maken werkt; de melding zegt of er iets veranderde. De labels in
het invoeg-palet buigen nu mee: een popupmenu kapt op ~256px af en een
langer label liet de rij overlopen.

Refs #1535

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Refs #1535

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
De handler op de schermstaat tripte zowel het bestands- als het
klasseplafond. Hij staat nu top-level naast de andere bronbewerkingen,
zoals _choosePageSetupScope.

Refs #1535

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
feat(l10n): de drie hoofdstukafbreking-strings in alle 31 talen
All checks were successful
scans / scans (pull_request) Successful in 2m30s
static-gate / static-gate (pull_request) Successful in 7m29s
013b7bc584
Het invoeg-palet en de twee terugmeldingen van 'Hoofdstukken op nieuwe
pagina' stonden nog alleen in het Nederlands; app_localizations_test viel
daarop om.

De woordenschat is niet nieuw verzonnen maar overgenomen uit het bestaande
gezin rond 'Nieuw hoofdstuk op een nieuwe pagina' en zijn beschrijving, zodat
hoofdstuk/pagina en het werkwoord "beginnen" per taal hetzelfde blijven —
la 'caput' (niet 'capitulum'), et 'leht', gsw 'Site', tlh 'ay' en 'nav'.

Het menu-item is bewust kort gehouden: het popupmenu kapt rond 256px, en
geen enkele vertaling is langer dan de al ingekorte Nederlandse bron. Het
verschil nu/al tussen de twee meldingen is in elke taal met eigen middelen
hoorbaar gemaakt (bg сега/вече, tlh DaH tegenover het perfectief -pu').

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
brenno merged commit e8be7254d8 into main 2026-08-17 23:10:18 +00:00
brenno deleted branch feat/hoofdstukafbrekingen 2026-08-17 23:10:19 +00:00
Sign in to join this conversation.
No description provided.