docs/plans/p5a: 01 kind+fetch limits, 02 pdftext child + runner, 03 dcache PDF tables, 04 pdfpool, 05 pdfdoc render (map/pages/grep), 06 api, 07 digest citations, metrics, CLI, skill, unit, README. Given tests compile against a panic-only skeleton and fail there for the intended reasons; PDFs for tests are built by internal/pdftest (given), plus two qpdf-encrypted fixtures. Owner changes for the run: vendor go-pdfkit/extract v0.3.0 + reader v0.6.0 (pinned via tools.go until task 02); AGENTS.md, tools/run-plan.sh (enforces a Co-Authored-By trailer for the model), docs/implementer-log.md, `make gate`; gofmt (whitespace) on clean.go and guard; TestUnsupportedType uses a zip now that PDFs are supported; requestDeadline 90→210 s and writeTimeout 120→240 s for the PDF path's worst case. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
72 lines
4.1 KiB
Go
72 lines
4.1 KiB
Go
package pdffont
|
||
|
||
// The glyph names above cover the Latin every English document is set in and
|
||
// stop there. A document in Czech, Polish, Slovak, Hungarian, Turkish,
|
||
// Romanian, Latvian, Lithuanian or Maltese is set in the block that follows,
|
||
// and every one of its accented letters was being read as nothing at all —
|
||
// which is worse than it sounds, because a dropped character leaves no mark:
|
||
// "Příliš" comes back "Píliš" and looks like a word.
|
||
//
|
||
// Counted across the 118 833-file corpus: of 52.4 million glyph names, 483 382
|
||
// could not be turned into text, and the largest nameable share of those was
|
||
// this block — rcaron 650, zdotaccent 617, Ccaron 611, nacute 602, aogonek
|
||
// 602, scedilla 597, gbreve 597, and so on for a hundred more.
|
||
//
|
||
// These are the names the Adobe Glyph List gives, and the characters are not
|
||
// in doubt: unlike the subsetted fonts that call their glyphs g0 or dress a
|
||
// glyph number up as uni00000048, a name like "rcaron" says exactly one thing.
|
||
var latinExtendedRunes = map[string]rune{
|
||
"Amacron": 'Ā', "amacron": 'ā', "Abreve": 'Ă', "abreve": 'ă',
|
||
"Aogonek": 'Ą', "aogonek": 'ą', "Cacute": 'Ć', "cacute": 'ć',
|
||
"Ccircumflex": 'Ĉ', "ccircumflex": 'ĉ', "Cdotaccent": 'Ċ', "cdotaccent": 'ċ',
|
||
"Ccaron": 'Č', "ccaron": 'č', "Dcaron": 'Ď', "dcaron": 'ď',
|
||
"Dcroat": 'Đ', "dcroat": 'đ', "Dslash": 'Đ', "dmacron": 'đ',
|
||
"Emacron": 'Ē', "emacron": 'ē', "Ebreve": 'Ĕ', "ebreve": 'ĕ',
|
||
"Edotaccent": 'Ė', "edotaccent": 'ė', "Eogonek": 'Ę', "eogonek": 'ę',
|
||
"Ecaron": 'Ě', "ecaron": 'ě', "Gcircumflex": 'Ĝ', "gcircumflex": 'ĝ',
|
||
"Gbreve": 'Ğ', "gbreve": 'ğ', "Gdotaccent": 'Ġ', "gdotaccent": 'ġ',
|
||
"Gcommaaccent": 'Ģ', "gcommaaccent": 'ģ',
|
||
"Hcircumflex": 'Ĥ', "hcircumflex": 'ĥ', "Hbar": 'Ħ', "hbar": 'ħ',
|
||
"Itilde": 'Ĩ', "itilde": 'ĩ', "Imacron": 'Ī', "imacron": 'ī',
|
||
"Ibreve": 'Ĭ', "ibreve": 'ĭ', "Iogonek": 'Į', "iogonek": 'į',
|
||
"Idotaccent": 'İ', "dotlessi": 'ı', "IJ": 'IJ', "ij": 'ij',
|
||
"Jcircumflex": 'Ĵ', "jcircumflex": 'ĵ',
|
||
"Kcommaaccent": 'Ķ', "kcommaaccent": 'ķ', "kgreenlandic": 'ĸ',
|
||
"Lacute": 'Ĺ', "lacute": 'ĺ', "Lcommaaccent": 'Ļ', "lcommaaccent": 'ļ',
|
||
"Lcaron": 'Ľ', "lcaron": 'ľ', "Ldot": 'Ŀ', "ldot": 'ŀ',
|
||
"Nacute": 'Ń', "nacute": 'ń', "Ncommaaccent": 'Ņ', "ncommaaccent": 'ņ',
|
||
"Ncaron": 'Ň', "ncaron": 'ň', "napostrophe": 'ʼn', "Eng": 'Ŋ', "eng": 'ŋ',
|
||
"Omacron": 'Ō', "omacron": 'ō', "Obreve": 'Ŏ', "obreve": 'ŏ',
|
||
"Ohungarumlaut": 'Ő', "ohungarumlaut": 'ő',
|
||
"Racute": 'Ŕ', "racute": 'ŕ', "Rcommaaccent": 'Ŗ', "rcommaaccent": 'ŗ',
|
||
"Rcaron": 'Ř', "rcaron": 'ř', "Sacute": 'Ś', "sacute": 'ś',
|
||
"Scircumflex": 'Ŝ', "scircumflex": 'ŝ', "Scedilla": 'Ş', "scedilla": 'ş',
|
||
"Tcommaaccent": 'Ţ', "tcommaaccent": 'ţ', "Tcaron": 'Ť', "tcaron": 'ť',
|
||
"Tbar": 'Ŧ', "tbar": 'ŧ', "Utilde": 'Ũ', "utilde": 'ũ',
|
||
"Umacron": 'Ū', "umacron": 'ū', "Ubreve": 'Ŭ', "ubreve": 'ŭ',
|
||
"Uring": 'Ů', "uring": 'ů', "Uhungarumlaut": 'Ű', "uhungarumlaut": 'ű',
|
||
"Uogonek": 'Ų', "uogonek": 'ų', "Wcircumflex": 'Ŵ', "wcircumflex": 'ŵ',
|
||
"Ycircumflex": 'Ŷ', "ycircumflex": 'ŷ',
|
||
"Zacute": 'Ź', "zacute": 'ź', "Zdotaccent": 'Ż', "zdotaccent": 'ż',
|
||
"longs": 'ſ',
|
||
|
||
// A handful outside that block that the same documents use: the Romanian
|
||
// letters written with a comma below rather than a cedilla, the Turkish
|
||
// and Azeri schwa, and the two the Adobe list names for Welsh and Maltese.
|
||
"Scommaaccent": 'Ș', "scommaaccent": 'ș',
|
||
"Afii10017": 'А', "afii10017": 'А',
|
||
"Wgrave": 'Ẁ', "wgrave": 'ẁ', "Wacute": 'Ẃ', "wacute": 'ẃ',
|
||
"Wdieresis": 'Ẅ', "wdieresis": 'ẅ',
|
||
"Ygrave": 'Ỳ', "ygrave": 'ỳ',
|
||
"Hcaron": 'Ȟ', "hcaron": 'ȟ',
|
||
// The rest of what the corpus asks for and nothing could answer, each of
|
||
// them a name the Adobe list gives and none of them in doubt: the cedilla
|
||
// spellings of the Romanian letters, the capital sharp s, the script ell
|
||
// mathematicians write lengths with, and the angle brackets.
|
||
"Tcedilla": 'Ţ', "tcedilla": 'ţ', "Germandbls": 'ẞ',
|
||
"lscript": 'ℓ', "openbullet": '◦',
|
||
"angbracketleft": '〈', "angbracketright": '〉',
|
||
"Scommabelow": 'Ș', "scommabelow": 'ș',
|
||
"Tcommabelow": 'Ț', "tcommabelow": 'ț',
|
||
}
|