Het gebundelde terugvalfont mist tekens die in diagrammen gewoon zijn (→) #1968
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#1968
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?
Wat er aan de hand is
Sinds #1942 wordt de tekst in een ingesloten tekening (grafiek, mermaid,
formule) op het gebundelde
Roboto-Variable.ttfgezet zodra er een teken bovenU+00FF in staat. Dat lost het afbreken van de export op, maar niet elk teken
staat in dat font.
Afgelezen uit de
cmap-tabel van het bestand zelf:—U+2014’U+2019…U+2026→U+2192Een pijl in een diagramlabel of een grafiekreeks (
Kritiek → hoog) wordt duseen leeg blokje. Sinds #1942 méldt de export dat wel —
unsupportedCharactersleest nu ook de tekst in de tekening — maar de gebruiker kan er niets anders mee
dan het teken vermijden.
De afweging
Meer dekking kost bestandsgrootte, in de app én in elke PDF die het font
insluit. Mogelijke richtingen, van klein naar groot:
->.(pijlen, wiskundige tekens) naast Roboto zetten.
DocumentPdfFonts.fallbackis al een lijst, dus de bedrading ligt er.
Dit is een productafweging (grootte tegenover dekking), geen bug — vandaar een
apart issue in plaats van meeliften op #1942.
Waar het zit
lib/services/pdf/document_pdf_fonts.dart—fallback,fallbackCoverageassets/fonts/Roboto-Variable.ttflib/widgets/parts/document_export_pdf_support.dart— de meldingNagemeten, en dat verandert het voorstel op twee punten. Beide corrigeren iets dat hierboven staat.
1. De afweging "grootte tegenover dekking" bestaat grotendeels niet.
package:pdfbedt geen heel font in maar een subset:PdfTtfFont._buildType0roeptTtfWriter.withChars(unicodeCMap.cmap)aan, met alleen de tekens die het document werkelijk gebruikt. Een breder terugvalfont kost dus niets in de PDF — alleen in de app-download. Wat hierboven staat over "elke PDF die het font insluit" klopt niet.2. Het is geen ontbrekende pijl maar een systematisch gat. Roboto-Variable dekt 927 codepunten:
Dus
→ ← ↑ ↓ ↔ ⇒ ✓ ✗ ★ ▪ontbreken allemaal — precies het rijtje dat in een diagramlabel of een statuskolom thuishoort. En het raakt niet alleen tekeningen: een→in de lopende tekst van een document is vandaag even onzetbaar.Voorstel: geen nieuw font bundelen — de fonts die er al zijn aan elkaar knopen.
Inter-Variable.ttfzit al in de app (het is de interfaceletter) en dekt 2818 codepunten, inclusief het hele rijtje hierboven. Roboto heeft 39 codepunten die Inter niet heeft (Cyrillische uitbreidingen als U+047A–047F en het U+0500-blok), dus vervangen is een kleine achteruitgang en kettingen niet. De unie is 2857.Kosten: geen nieuw bestand, geen licentieregel erbij (
Inter-OFL.txtstaat al in de assets), geen afhankelijkheid, geen SBOM-wijziging.Het werk zit niet in het font maar in drie plekken:
fallbackis al eenList<pw.Font>en de lopende tekst ketent vanzelf viafontFallback— daar is het één font erbij.fallbackCoverageis nu één map uit één font en moet de unie worden. Anders meldt de export tekens als ontbrekend die wél gezet worden — precies de valse melding waar #1942 tegen waarschuwt.customFontLookupgeeft éénFontper (familie, stijl, gewicht) terug en de SVG-lezer heeft geen terugvallijst.svgTypesettingmoet dus per tekening de snede kiezen die álle tekens erin dekt. Dekt geen enkele snede ze allemaal (een tekening met zowel een pijl als zo'n Cyrillische uitbreiding), dan kiest hij de snede die het meeste dekt en meldt de rest via het bestaande kanaal — de belofte blijft dat de export zegt wat hij kwijtraakt.Aanbeveling: dit doen. Het is klein, het haalt een gat weg dat de gebruiker vandaag alleen kan omzeilen door het teken te vermijden, en het kost geen byte in de export.