fix(plakken): een geplakte opsomming houdt zijn inspringing #1562
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!1562
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/plakken-behoudt-inspringing"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Drie gebreken in dezelfde plakroute lieten een geneste opsomming plat of scheef
binnenkomen. Ze kwamen boven bij het natrekken van #1556.
Waarom dit niet eerder gevonden was
De melding beschreef "new document" →
<source>→ twee panelen. Dat isdocumentmodus, en die heeft een eigen plakafhandeling (
_smartPaste→parseClipboardTable→sanitizeMarkdownPaste). De deck-broneditor, die ersterk op lijkt, heeft er géén — daar valt een plak ongewijzigd binnen. Toetsen op
het verkeerde van die twee gaf een "niet reproduceerbaar" dat niet klopte.
De drie gebreken
1. Dunne spaties in de inspringing werden gewist (#1560).
_invisibleCharsverwijderde U+2009 overal. Van acht spatiesoorten was dat de enige die sneuvelde:
Springt een webeditor met dunne spaties in, dan kwam elke bullet op het
hoofdniveau — letterlijk de klacht uit #1556. De motivering ("ruis van
nieuwssites") gaat op voor een dunne spatie midden in een zin, niet voor één aan
het begin van een regel: daar is het de structuur. Hij wordt daar nu een gewone
spatie, zoals een NBSP al werd; verderop in de regel verdwijnt hij nog steeds.
2. U+2028/U+2029 werden gewist in plaats van gelezen (#1560). Het zijn
regel- en alineascheiders; ze stonden op dezelfde lijst. Drie opsommingsregels
werden zo één regel. Ze worden nu
\n, net als\r\nen\reen regel hoger.3.
trim()nam de inspringing van de eerste regel mee (#1561). Kopieer eenstuk uit het midden van een geneste lijst en dat eerste item sprong naar het
hoofdniveau terwijl de rest bleef staan. Nu gaan alleen lege regels aan de
randen eraf.
En de tabelherkenning greep te breed (#1557)
parseClipboardTablebehandelt elke tab als kolomscheiding ("no one types tabsinto a cell") en telt komma's en puntkomma's zodra elke regel evenveel velden
geeft. Een ingesprongen opsomming voldoet aan allebei — met tabs, of met
toevallig één komma per regel. Zo'n lijst werd dan een tabel.
Er staat nu een wachtpost vóór de scheidingsdetectie: begint élke niet-lege
regel met een opsommingsteken of een genummerd item, dan is het geen tabel. Een
markdown-tabel wordt eerder herkend en raakt dit niet.
Toetsing
Elk gebrek is één keer teruggezet om te zien dat zijn test valt — alle vier
vielen, en alleen die vier:
inspringing met dunne spatie U+2009 blijft staanU+2028 en U+2029 gelden als regeleinde, niet als ruiseen fragment dat ingesprongen begint houdt zijn inspringingan indented bullet list is not a tableAls tegenproef staan de zeven andere spatiesoorten erbij, plus een dunne spatie
midden in een zin (moet blijven verdwijnen) en een echte TSV-plak (moet nog
steeds een tabel zijn) — zodat de reparatie niet te breed grijpt.
Wat hier bewust níet in zit
Het niveau-plafond van de visuele opsommingseditor (#1558) staat los: dat is geen
plakprobleem maar een botsing tussen de 2-spaties-conventie van de parser en
_maxLevel = 4, en de reparatie vraagt een ontwerpkeuze. Blijft open.Of het bronprogramma van de indiener werkelijk dunne spaties gebruikt, is nog
niet bevestigd; de vraag om de ruwe klembordinhoud staat uit. Deze reparaties
staan daar los van — het zijn gebreken ongeacht zijn antwoord.
Bewaker
Bewust overgeslagen: raakt het bestandsformaat niet, de opslag niet, geen
afhankelijkheid, geen uitgaand verkeer, geen publieke belofte. Het gaat om wat
er bij het plakken in de tekst belandt.
Poorten
make checkgroen (exit 0, 9799 tests, dekking 87,0%, per-bestandsvloer 0),make check-secretsgroen (geen lekken),make sastgroen (0 bevindingen).DAST niet gedraaid — geen geserveerd oppervlak geraakt.
Closes #1557
Closes #1560
Closes #1561