Documenttitel voor export kan uit een codeblok worden gehaald #1679

Closed
opened 2026-08-21 12:02:13 +00:00 by brenno · 1 comment
Owner

Probleem

Als frontmatter geen title bevat, wordt de eerste regel die na trimmen met # begint als titel gebruikt, ook wanneer die in een fenced codeblock staat. Daardoor krijgen export en conversie een inhoudelijk verkeerde titel en bestandsnaam.

Reproductie

  1. Maak een document zonder title/H1 dat begint met een fenced codeblock met daarin # Voorbeeld.
  2. Exporteer het document of converteer het naar een presentatie.
  3. Bekijk de afgeleide titel/bestandsnaam.

Verwacht

Alleen echte documentkoppen buiten codeblokken kunnen de documenttitel leveren.

Technische aanwijzing

lib/widgets/document_editor_screen.dart:_documentTitle loopt losse regels af met ^#\s+ en houdt geen fence-status bij.

Gevonden bij audit van commit d439638c6b.

## Probleem Als frontmatter geen title bevat, wordt de eerste regel die na trimmen met # begint als titel gebruikt, ook wanneer die in een fenced codeblock staat. Daardoor krijgen export en conversie een inhoudelijk verkeerde titel en bestandsnaam. ## Reproductie 1. Maak een document zonder title/H1 dat begint met een fenced codeblock met daarin # Voorbeeld. 2. Exporteer het document of converteer het naar een presentatie. 3. Bekijk de afgeleide titel/bestandsnaam. ## Verwacht Alleen echte documentkoppen buiten codeblokken kunnen de documenttitel leveren. ## Technische aanwijzing lib/widgets/document_editor_screen.dart:_documentTitle loopt losse regels af met ^#\s+ en houdt geen fence-status bij. Gevonden bij audit van commit d439638c6bd1b519d68d87680cb022b7d5eddc85.
Author
Owner

Triage: accepted

Bevestigd tegen main (e93ef205c). _documentTitle (lib/widgets/document_editor_screen.dart, onderaan) loopt de losse regels af met RegExp(r'^#\s+(.+)$') op line.trim() en houdt geen hek-status bij. Een # Voorbeeld binnen een ``` -blok is dus de titel. Voor de export wint document.fields['title'], dus dit bijt bij een document zonder title: — en dan meteen op twee plekken: de exportnaam én de titel van de nieuwe presentatie bij Converteren.

Oplossingsrichting

Geen derde eigen kopregex. Er zijn er al twee die dit goed doen — documentHeadingBlocks / de Overzicht-ontleder — en die kennen de hek-status. Gebruik er één en laat _documentTitle alleen nog de eerste h1 daaruit pakken.

Twee dingen om dan gelijk goed te zetten:

  • een setext-kop (Titel + =====) is óók een kop; dat is #1647, en dat issue wordt eenvoudiger als er één gedeelde kopscanner is;
  • frontmatter mag geen kop opleveren (--- erboven), controleer of de gekozen scanner de body krijgt en niet de hele bron.

Regressietest (verplicht)

test/document_editor_screen_test.dart of de conversietest: document zonder title: dat begint met een hek waarin # Voorbeeld staat → titel valt terug op de bestandsnaam. Plus: kop ná het hek wordt wél gevonden.

Kosten

Klein, mits de gedeelde scanner bruikbaar blijkt; anders eerst die scanner naar lib/utils/ en dan pas dit.

Prioriteit

Laag-middel: verkeerde bestandsnaam en verkeerde presentatietitel, geen verlies.

## Triage: accepted **Bevestigd tegen `main` (e93ef205c).** `_documentTitle` (`lib/widgets/document_editor_screen.dart`, onderaan) loopt de losse regels af met `RegExp(r'^#\s+(.+)$')` op `line.trim()` en houdt geen hek-status bij. Een `# Voorbeeld` binnen een ``` -blok is dus de titel. Voor de export wint `document.fields['title']`, dus dit bijt bij een document zonder `title:` — en dan meteen op twee plekken: de exportnaam én de titel van de nieuwe presentatie bij Converteren. ## Oplossingsrichting Geen derde eigen kopregex. Er zijn er al twee die dit goed doen — `documentHeadingBlocks` / de Overzicht-ontleder — en die kennen de hek-status. Gebruik er één en laat `_documentTitle` alleen nog de eerste `h1` daaruit pakken. Twee dingen om dan gelijk goed te zetten: - een setext-kop (`Titel` + `=====`) is óók een kop; dat is #1647, en dat issue wordt eenvoudiger als er één gedeelde kopscanner is; - frontmatter mag geen kop opleveren (`---` erboven), controleer of de gekozen scanner de body krijgt en niet de hele bron. ## Regressietest (verplicht) `test/document_editor_screen_test.dart` of de conversietest: document zonder `title:` dat begint met een hek waarin `# Voorbeeld` staat → titel valt terug op de bestandsnaam. Plus: kop ná het hek wordt wél gevonden. ## Kosten Klein, mits de gedeelde scanner bruikbaar blijkt; anders eerst die scanner naar `lib/utils/` en dan pas dit. ## Prioriteit Laag-middel: verkeerde bestandsnaam en verkeerde presentatietitel, geen verlies.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#1679
No description provided.