Markdown- en LaTeX-export buiten de projectmap breekt relatieve afbeeldingen #1673
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#1673
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Probleem
De .md- en .tex-export behouden relatieve afbeeldingspaden uit het project, maar de gebruiker kan het uitvoerbestand in iedere map opslaan. Er worden geen assets gekopieerd en paden worden niet herbaseerd. Het exportbestand toont/compileert daardoor zonder afbeeldingen zodra de doelmap een andere relatieve basis heeft.
Reproductie
Verwacht
Een zelfstandig exportbestand houdt werkende beelden, bijvoorbeeld door assets mee te nemen/rebasen of de beperking vóór export expliciet af te dwingen.
Technische aanwijzing
writeDocumentExport schrijft voor md projectedDocumentBody en voor latex markdownToLatex met de originele bronnen. Alleen HTML/PDF krijgen embedImage.
Gevonden bij audit van commit
d439638c6b.Triage: accepted — maar er ligt eerst een productkeuze
Bevestigd tegen
main(e93ef205c).writeDocumentExport(lib/services/document_export_service.dart) schrijft voormdde geprojecteerde body en voorlatexmarkdownToLatex(projectedDocumentBody(bundle), …), beide met de afbeeldingspaden zoals ze in de bron staan. Alleen de HTML- en PDF-tak krijgenembedImage. De uitvoermap is vrij te kiezen, dus zodra die niet dezelfde relatieve basis heeft, wijst elk relatief pad naar niets.De keuze die eerst gemaakt moet worden
Er zijn drie eerlijke antwoorden en ze geven de gebruiker echt iets anders:
p.relative(abs, from: p.dirname(outputPath))). Goedkoop, blijft één bestand, werkt zolang de export op dezelfde machine blijft. Levert../../project/images/a.pngop en breekt alsnog zodra iemand het bestand doorstuurt.<naam>-assets/naast de export, met herschreven paden. Dit is wat "één ding dat je kunt overhandigen" betekent voor formaten die niets kunnen insluiten. Kost een map die de gebruiker niet vroeg, plus een regel voor naambotsingen en voor beelden buiten de projectmap (die worden vandaag geweigerd, en dat moet zo blijven).KNOWN_LIMITATIONS.md.Aanbeveling: (b), met de kopie begrensd tot dezelfde projectgrens die
_embedDocumentExportImage(lib/widgets/document_editor_screen.dart) al afdwingt, en een vinkje in de exportdialoog dat standaard aan staat. Zet de gebruiker het uit, dan (a) als terugval. Een export die je niet kunt doorgeven is geen export, en insluiten kan hier nu eenmaal niet — Markdown en LaTeX hébben geen data-URI-weg die de doelprogramma's begrijpen.Regressietest (verplicht)
test/document_export_write_test.dart: document metimages/a.png, export naar een map buiten het project → het beeld staat naast de uitvoer en het pad in de uitvoer wijst ernaar; met de kopie uit → herbaseerd pad dat vanuit de doelmap oplost; beeld buiten de projectmap → geweigerd, met melding, niet gekopieerd.Kosten
Dialoog + service + tests, plus twee nieuwe
l10n.d('…')⇒ 31 vertalingen elk. Halve dag tot een dag.Prioriteit
Middel. Geen dataverlies, wel een export die niet doet wat hij belooft.