Voorgestelde document-exportnaam verwijdert accenten en niet-Latijnse titels #1675

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

Probleem

De voorgestelde exportbestandsnaam filtert de titel met Dart-regex \w, die hier alleen de ASCII-woordtekens dekt. Accenten en niet-Latijnse schriften verdwijnen: Résumé wordt Rsum en een volledig Chinese/Arabische titel valt terug op document. Dit maakt exports moeilijk herkenbaar en is een internationalisatieprobleem.

Reproductie

  1. Geef een document de titel Résumé, 中文 of العربية.
  2. Open de exportdialoog.
  3. Bekijk de voorgestelde bestandsnaam.

Verwacht

Unicode-letters en -cijfers blijven in een bestandssysteemveilige vorm herkenbaar.

Technische aanwijzing

lib/services/document_export_service.dart:suggestedDocumentExportFileName gebruikt RegExp(r'[^\w- ]+').

Gevonden bij audit van commit d439638c6b.

## Probleem De voorgestelde exportbestandsnaam filtert de titel met Dart-regex \w, die hier alleen de ASCII-woordtekens dekt. Accenten en niet-Latijnse schriften verdwijnen: Résumé wordt Rsum en een volledig Chinese/Arabische titel valt terug op document. Dit maakt exports moeilijk herkenbaar en is een internationalisatieprobleem. ## Reproductie 1. Geef een document de titel Résumé, 中文 of العربية. 2. Open de exportdialoog. 3. Bekijk de voorgestelde bestandsnaam. ## Verwacht Unicode-letters en -cijfers blijven in een bestandssysteemveilige vorm herkenbaar. ## Technische aanwijzing lib/services/document_export_service.dart:suggestedDocumentExportFileName gebruikt RegExp(r'[^\w\- ]+'). Gevonden bij audit van commit d439638c6bd1b519d68d87680cb022b7d5eddc85.
Author
Owner

Triage: accepted

Bevestigd tegen main (e93ef205c). suggestedDocumentExportFileName (lib/services/document_export_service.dart) filtert met RegExp(r'[^\w\- ]+'). Dart's \w is [A-Za-z0-9_] zonder unicode: true; er is geen Unicode-uitbreiding op deze klasse. Dus RésuméRsum, en een volledig Chinese of Arabische titel wordt leeg en valt terug op document.

Oplossingsrichting

Draai het filter om: haal weg wat een bestandssysteem echt niet aankan en laat de rest staan, letters en cijfers uit élk schrift inbegrepen.

Weghalen: / \ : * ? " < > |, stuurtekens (U+0000–U+001F, U+007F), punten en spaties aan begin en eind, en de gereserveerde Windows-namen (CON, PRN, AUX, NUL, COM1COM9, LPT1LPT9, ook met extensie). Waar een tekenklasse nodig is: RegExp(…, unicode: true) met \p{L}\p{N}.

Doe dit samen met #1677 — dat is dezelfde functie, en twee losse wijzigingen aan één functie is werk voor niets.

Kijk meteen of de deck-kant een tweede kopie van dezelfde naamsuggestie heeft. Zo ja: één gedeelde helper, dit is het moment.

Regressietest (verplicht)

Unittest op de functie: RésuméRésumé-volledig.md, 中文 blijft 中文, العربية blijft staan, a/b:c verliest alleen de scheidingstekens, CON wordt iets anders dan CON.

Kosten

Klein: één functie, één testbestand. Geen l10n.

Prioriteit

Middel. Wij leveren een interface in 32 talen; een exportnaam die alleen ASCII overleeft, spreekt dat tegen.

## Triage: accepted **Bevestigd tegen `main` (e93ef205c).** `suggestedDocumentExportFileName` (`lib/services/document_export_service.dart`) filtert met `RegExp(r'[^\w\- ]+')`. Dart's `\w` is `[A-Za-z0-9_]` zonder `unicode: true`; er is geen Unicode-uitbreiding op deze klasse. Dus `Résumé` → `Rsum`, en een volledig Chinese of Arabische titel wordt leeg en valt terug op `document`. ## Oplossingsrichting Draai het filter om: haal weg wat een bestandssysteem echt niet aankan en laat de rest staan, letters en cijfers uit élk schrift inbegrepen. Weghalen: `/ \ : * ? " < > |`, stuurtekens (U+0000–U+001F, U+007F), punten en spaties aan begin en eind, en de gereserveerde Windows-namen (`CON`, `PRN`, `AUX`, `NUL`, `COM1`–`COM9`, `LPT1`–`LPT9`, ook met extensie). Waar een tekenklasse nodig is: `RegExp(…, unicode: true)` met `\p{L}\p{N}`. Doe dit samen met #1677 — dat is dezelfde functie, en twee losse wijzigingen aan één functie is werk voor niets. Kijk meteen of de deck-kant een tweede kopie van dezelfde naamsuggestie heeft. Zo ja: één gedeelde helper, dit is het moment. ## Regressietest (verplicht) Unittest op de functie: `Résumé` → `Résumé-volledig.md`, `中文` blijft `中文`, `العربية` blijft staan, `a/b:c` verliest alleen de scheidingstekens, `CON` wordt iets anders dan `CON`. ## Kosten Klein: één functie, één testbestand. Geen l10n. ## Prioriteit Middel. Wij leveren een interface in 32 talen; een exportnaam die alleen ASCII overleeft, spreekt dat tegen.
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#1675
No description provided.