Documentmodus: een tab-ingesprongen opsomming wordt bij plakken een tabel #1557

Closed
opened 2026-08-18 19:53:05 +00:00 by brenno · 1 comment
Owner

Wat er misgaat

Plak in documentmodus een opsomming die met tabs is ingesprongen, en je krijgt
een Markdown-tabel in plaats van een lijst.

_smartPaste in lib/widgets/document_editor_screen.dart biedt het klembord
eerst aan parseClipboardTable aan. Die functie behandelt elke tab als een
kolomscheiding — bewust, met als motivering "no one types tabs into a cell"
(lib/utils/table_clipboard.dart:32). Voor een spreadsheet klopt dat, maar een
tab-ingesprongen lijst voldoet aan dezelfde vorm.

Gemeten

- Primary bullet level.
\t- Secondary bullet level.
\t\t- A third bullet level.

parseClipboardTable geeft hierop een 3x3-raster terug:
[[- Primary bullet level., , ], [, - Secondary bullet level., ], [, , - A third bullet level.]]

Daarmee komt er een pijptabel in het document te staan; de lijst is weg.

Wat het zou moeten doen

De lijst als lijst plakken. De tabelherkenning zou moeten afzien van haar
oordeel wanneer de inhoud er als een opsomming uitziet — bijvoorbeeld wanneer
elke niet-lege regel met een opsommingsteken of een genummerd item begint, of
wanneer de eerste kolom van elke rij op één na leeg is (het patroon dat
inspringing hier achterlaat).

Waar het vandaan komt

Gevonden bij het toetsen van #1556. Het verklaart dat issue niet — daar ging het
om spaties, niet om tabs — maar het is wel dezelfde klasse: een plak die een
geneste lijst sloopt.

Bestandsformaat

Raakt het formaat niet; dit gaat alleen over wat er bij het plakken in de tekst
belandt.

Regressietest

parseClipboardTable op een tab-ingesprongen lijst moet null teruggeven, plus
een test die bewijst dat een echte TSV-plak nog steeds als tabel wordt herkend.

**Wat er misgaat** Plak in documentmodus een opsomming die met tabs is ingesprongen, en je krijgt een Markdown-tabel in plaats van een lijst. `_smartPaste` in `lib/widgets/document_editor_screen.dart` biedt het klembord eerst aan `parseClipboardTable` aan. Die functie behandelt elke tab als een kolomscheiding — bewust, met als motivering "no one types tabs into a cell" (`lib/utils/table_clipboard.dart:32`). Voor een spreadsheet klopt dat, maar een tab-ingesprongen lijst voldoet aan dezelfde vorm. **Gemeten** ``` - Primary bullet level. \t- Secondary bullet level. \t\t- A third bullet level. ``` `parseClipboardTable` geeft hierop een 3x3-raster terug: `[[- Primary bullet level., , ], [, - Secondary bullet level., ], [, , - A third bullet level.]]` Daarmee komt er een pijptabel in het document te staan; de lijst is weg. **Wat het zou moeten doen** De lijst als lijst plakken. De tabelherkenning zou moeten afzien van haar oordeel wanneer de inhoud er als een opsomming uitziet — bijvoorbeeld wanneer elke niet-lege regel met een opsommingsteken of een genummerd item begint, of wanneer de eerste kolom van elke rij op één na leeg is (het patroon dat inspringing hier achterlaat). **Waar het vandaan komt** Gevonden bij het toetsen van #1556. Het verklaart dat issue niet — daar ging het om spaties, niet om tabs — maar het is wel dezelfde klasse: een plak die een geneste lijst sloopt. **Bestandsformaat** Raakt het formaat niet; dit gaat alleen over wat er bij het plakken in de tekst belandt. **Regressietest** `parseClipboardTable` op een tab-ingesprongen lijst moet `null` teruggeven, plus een test die bewijst dat een echte TSV-plak nog steeds als tabel wordt herkend.
Author
Owner

Breder dan hier staat: het is niet alleen de tab.

parseClipboardTable herkent ook komma en puntkomma als kolomscheiding zodra
elke regel hetzelfde aantal velden oplevert. Een gewone opsomming waarin toevallig
elke regel één komma bevat, voldoet daaraan. Gemeten:

- Primary level, with a detail.
    - Secondary level, with a detail.
    - Another secondary, with a detail.

wordt herkend als een tabel van drie rijen. Idem met puntkomma's.

De reparatie moet dus niet alleen de tab-tak uitzonderen, maar de herkenning als
geheel: ziet de inhoud eruit als een opsomming (elke niet-lege regel begint met
een opsommingsteken of een genummerd item), dan is het geen tabel — ongeacht de
scheider.

Breder dan hier staat: het is niet alleen de tab. `parseClipboardTable` herkent ook komma en puntkomma als kolomscheiding zodra elke regel hetzelfde aantal velden oplevert. Een gewone opsomming waarin toevallig elke regel één komma bevat, voldoet daaraan. Gemeten: - Primary level, with a detail. - Secondary level, with a detail. - Another secondary, with a detail. wordt herkend als een tabel van drie rijen. Idem met puntkomma's. De reparatie moet dus niet alleen de tab-tak uitzonderen, maar de herkenning als geheel: ziet de inhoud eruit als een opsomming (elke niet-lege regel begint met een opsommingsteken of een genummerd item), dan is het geen tabel — ongeacht de scheider.
brenno 2026-08-18 20:34:23 +00:00
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#1557
No description provided.