Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
45 check-ins
|
2026-08-17
| ||
| 12:06 |
Fonts sorted by origin, the Liberation set with its metrics measured, two more output intents and the examples to see them, Tibetan marks refused, 02.09 with signs one knows
- examples/assets/fonts is sorted by origin: DejaVu stays flat, the Google Fonts faces move to google/, OCR A and B to tsukurimashou/, and liberation-fonts/ is new - Liberation Sans, Serif and Mono 2.1.5, twelve faces from the release archive with LICENSE, AUTHORS, README and a NOTICE.md carrying hash and measurement (fossil mv --hard, every path in tests, examples and docs follows) | |
| 09:41 |
PDF/A colour spaces held against the output intent, the striped head back to blue, 02.09 on three pages with right-to-left everyday lines and eight bars of Beethoven, 05.05 in Italian, equal columns for the standard-14 table
- pdfa checks colour like fonts: the document records which device colour spaces it uses and where - fills and strokes through the one gate ColourUsed, text, SVG, pictures at placement, shadings - and at write time every space that the output intent does not admit is refused in one message naming call and page (ISO 19005-2, 6.2.4.3: grey always, RGB only under an RGB intent, CMYK only under a CMYK one) with the two ways out; measured against veraPDF on fifty probes, refused equals failed. The old separation check was wrong under a CMYK profile - it refused the valid CMYK alternate and named sRGB - and is folded into this one; GraphicsStyle translates colours after the other values so a refused width leaves no record | |
| 08:07 |
Grey areas closed: hhea for variable instances, one matrix check, version ceiling for PDF/A and PDF/UA-1, shared UCD generator base, 16-bit colour key as soft mask, form groups without a colour space, Unicode spaces as break points, a CMYK output intent, themes and achromatic names in DeviceGray
- Variable fonts: the four hhea summary values of an instance (advanceWidthMax, minLeftSideBearing, minRightSideBearing, xMaxExtent) are computed from the moved glyphs; a face embedded without axes stays byte-identical | |
| 07:14 |
Round-2 grey areas built, plus what fell out of them: bidi classes from the UCD, no-break space, PNG colour key, CID-keyed CFF refused, page box limits, form transparency groups, PDF version gate, pattern matrix, variable-font boxes and bearings, subset checksum
- Bidi: the number classes EN/AN/ES/CS/ET come from DerivedBidiClass.txt (Unicode 17) through tools/mkbidi.tcl into the new module bidiData.tcl instead of a hand list - degree, pound and per-mille signs used to come out reversed beside a digit in a right-to-left line; three package lists carry the module | |
|
2026-08-16
| ||
| 21:28 |
Second norm review: separation colour, forward links, font subsets and descriptors, refuse-before-write, layout fixes, manual gaps
- A separation colour writes its colour space: the Separation array with the alternate space and a type 2 tint function, entered under Resources /ColorSpace and shared by fill, stroke and text. It used to be a bare name the reader could not resolve, so example 01.02 painted the swatch black. Under PDF/A a CMYK alternate is refused, since the shipped intent is sRGB | |
| 19:52 |
Right-to-left text: -direction rtl, Arabic contextual forms, digit islands, and two fixes found on the way
- text takes -direction rtl: the glyph run stays logical for ligatures and kerning and is reversed when written, -align is mirrored, and Hebrew, Thaana and Samaritan no longer need -unshaped 1. The kerning adjustments move by one on reversal because each closes the gap to the next glyph | |
|
2026-08-15
| ||
| 19:11 |
Split structure.tcl by topic, keep the shipped profile's IEC name, complete the module list
- structure.tcl keeps building the tree while the document is drawn; three new modules take what was a topic of its own: structureWrite (the tree as objects at write time, with StructurePage and StructureFirstPosition), structureReport (facts about the finished tree for the UA checks) and structureDest (the GoTo action a link or a bookmark points at an element with). Pure move, no method body changed | |
| 17:43 |
Norm review: XMP encoding, output intent, structure destinations, PDF/UA checks and 27 manual gaps
- The XMP packet is stored as UTF-8 bytes: a title with an umlaut wrote Latin-1 under a UTF-8 BOM, one with a euro sign made the document unwritable. It is rebuilt on every write from the current title, language and declarations unless the caller set it, dc:language is written, and xmp:CreateDate and CreationDate come from one clock reading | |
| 13:54 |
Structure destinations, break hyphens, and the 2.0 date spelling
- structure takes -name, link and bookmark take -structure: the destination names the element rather than a place on a page, which is what PDF/UA-2 asks for on internal targets. The destination object is indirect, so a reference may point forward at a section further down | |
| 13:03 |
Build PDF/UA-1 and PDF/UA-2, with WTPDF on top
- New ua.tcl - $doc ua declares PDF/UA and refuses the claim when the document does not keep it: title, language, every font embedded including the standard 14, headings without a gap, regular tables, a description on every link - all reported at once, each naming the call to change | |
|
2026-08-14
| ||
| 23:03 |
Take image data from memory, not only from a file
- image embed and image draw accept -data with the bytes themselves, the way svg has taken markup from the start; the name stays first and positional and -data replaces the path behind it | |
| 22:50 |
Instance variable fonts when embedding them
- font embed takes -axes {wght 620} and -instance "Bold": the outlines are computed for that point on the axes and embedded as a fixed instance, PDF having nowhere to put an axis value. The two combine, with -instance setting the starting point | |
| 22:01 |
Fix three table defects: continuation position, valign, and cells read as dictionaries
- Table -top says where a breaking table resumes on the pages after the first, taken from the page height like -bottom instead of from where -at started it; the frame of "-border outer" follows the table up the page | |
| 21:15 |
Add shaping.tcl, missing from check-in e54da6fe
- New shaping.tcl and tests/shaping.test - e54da6fe carried their pkgIndex.tcl.in and tests/all.tcl entries without the files, so the test suite cannot load at that check-in | |
| 21:11 |
Refuse text from writing systems that need shaping instead of drawing it wrong
- New shaping.tcl - answers whether a string holds characters from a system needing contextual forms or reordering; the check sits in FontRun, so text, tables, SVG text and textPath all pass through it | |
| 16:20 |
Add the font material under examples/assets/fonts
- Ten Noto faces and a brush face with their licences: Japanese, Tibetan, two symbol sets, emoji, cuneiform, Egyptian hieroglyphs, Arabic and music notation | |
| 12:17 |
Say what the missing mark attachment means for a caller
- doc/tclpdf.md: composed text is unaffected, which covers every European language; decomposed text and combinations Unicode has no composed form for come out with displaced accents, and normalising to NFC beforehand is the answer | |
| 11:57 |
Embed Type 1 and OpenType/CFF faces
- type1.tcl: new, reads both containers of a Type 1 program - a .pfb with segment markers and a raw .pfa or .t1 - and the AFM beside it; the widths are addressed by glyph name, and which name a face carries is decided per face against its metrics rather than by taking the first the Adobe list offers | |
| 10:47 |
Text in an SVG drawing goes through the same fonts as text does
- svgElement.tcl, text.tcl: a drawing measures and writes through TextPoints and TextShow instead of the AFM path, so font-family reaches an embedded face by its alias and kerning and ligatures apply - new TextPoints holds the one branch between an embedded face and the standard fourteen, and textWidth uses it too | |
| 09:22 |
Keep the URW faces in all four formats
- examples/assets/fonts/urw-core35-fonts: the metrics and the Type 1 form of the fourteen faces, taken from the same upstream archive the TrueType and OpenType files came from - all 28 of those compare byte for byte against what was already here | |
| 08:56 |
Carry OCR A and OCR B for the clear text line under a barcode
- examples/assets/fonts: OCRA and OCRB in four forms each - TrueType, OpenType, Type 1 and the metrics. The TrueType ones embed and pass PDF/A-3u; the digits under an EAN can now be set in the face the standard asks for instead of in Helvetica | |
| 05:34 |
Draw barcodes through tzint, and add PDF417
- examples/03.04-barcodes.tcl: new - Code 128, EAN-13, QR, DataMatrix, PDF417 and a GiroCode, each from markup in a variable rather than a file; PDF417 is sized by width because a stacked symbol comes out roughly 3.6 to 1. tclpdf carries no encoder and the example skips itself where tzint is absent, so make examples is unaffected | |
|
2026-08-13
| ||
| 23:20 |
Document svg -data, and the options the signature was missing
- doc/tclpdf.md: svg takes its markup from a variable as well as from a file, and -size, -scale and -opacity existed without being written down; svg size takes a file name only, which the entry now says check-in: 6b01065f68 user: alex tags: trunk | |
| 22:59 |
Check the manual is no older than what it is made from
- tools/check.sh: doc/tclpdf.n and doc/tclpdf.html are compared against doc/tclpdf.md by timestamp - neither is under version control, both travel in the source archive, and a check-in of the source alone looks complete either way check-in: 2431c117e1 user: alex tags: trunk | |
| 22:40 |
Honour soft hyphens, and set leader rows
- afm.tcl, font.tcl: U+00AD never reaches a font any more - a standard face refused the whole string over it, and an embedded one set a visible hyphen in the middle of an unbroken word | |
| 21:59 |
Read lookupFlag and GDEF, and add a target for the full acceptance run
- gdef.tcl: new - the glyph classes, mark attachment classes and mark glyph sets a lookup flag filters by, and the question it asks of them | |
| 21:04 |
Fix three findings from the review
- text.tcl: the width of an empty string is no longer negative - an empty table cell was asking for less room than none | |
| 20:46 |
Write tagged PDF, and with it PDF/A level A
- structure.tcl: new - the logical tree beside the page: tagged as the switch, structure with a script block for the grouping a writer cannot infer, and the Annex L nesting rules checked where the call is written rather than in a validator later | |
| 18:22 |
Carry the font substitutes and the core metrics in the tree
- examples/assets/fonts/adobe-afm: new - the fourteen Adobe core font metrics afmData.tcl is generated from, with the LICENSE.txt Adobe's terms forbid separating from them; the generator over this directory reproduces the committed afmData.tcl byte for byte under Tcl 8.6 and 9.0 | |
| 15:15 |
Read standard ligatures, and make the glyph run the single source of truth
- liga.tcl: new - the liga feature of GSUB, lookup type 4, extension type 7; dlig, hlig and rlig are not read | |
| 09:23 |
Apply pair kerning, on by default
- kern.tcl and kernGpos.tcl: new - the amounts come from GPOS when the resolved language system has kerning lookups and from the kern table otherwise, the order of ISO/IEC 14496-22 8.16 | |
|
2026-08-12
| ||
| 18:27 |
Build roadmap items 1 to 5: PDF/A-3u, page numbers, text flow, text on a path and blend modes
- pdfa.tcl: level U is documented and taken; level A is now refused, because it needs a structure tree this writer has no way to produce and veraPDF rejected the result at clauses 6.7.2.2 and 6.7.3.3 | |
| 12:22 |
Show decimal commas in the MINIMUM invoice and give the SVG page room
- examples/05.01-zugferd-minimum.tcl: the printed totals use a comma and the column lines up on it through -decimal, while the attached XML keeps the point EN 16931 prescribes | |
| 09:28 |
Fix justified, rotated and anchored text, the subset prefix, and close the test and example gaps
- text.tcl: word spacing for embedded faces now comes from a TJ array instead of Tw, which has no effect under Identity-H - justified text came out flush left in every document with an embedded font, and PDF/A requires embedding | |
|
2026-08-11
| ||
| 22:15 |
Fix rotated aligned text and add a diagonal stamp example
- The alignment shift of -align center and right now runs along the baseline: text.tcl passes it into TextRun, where it enters the Tm matrix before the rotation; a centred word rotated with -rotate drifted off towards the page corner instead of staying centred on -at | |
| 21:52 |
Document the extension points in doc/PLUGINS.md
- New doc/PLUGINS.md: the event bus with its six events, the idempotency and error contracts, the six supported methods, and two worked examples covering a beforeWrite subscriber and an oo::define method package | |
| 20:54 |
Give SVG gradient patterns unique names instead of the SVG id
- SvgGradient in svgPaint.tcl names patterns from a document-wide counter; naming them after the SVG id made a second drawing of the same file collide and lose its fills, and a second file sharing an id lost its own | |
| 20:42 |
Wire up -border outer for tables
- New TableDrawFrame in tableDraw.tcl, called from TableRun: one frame per page around the block instead of a rule per cell | |
|
2026-08-10
| ||
| 19:47 |
Make writing idempotent - a second write no longer duplicates the objects
- New method reservation in output.tcl hands out writer object numbers that survive a rebuild, so a builder writes over its objects instead of allocating new ones | |
| 14:32 |
Add the functional code of tclpdf 1.0 - stages 1 to 6
- 42 Tcl modules implementing document core, TrueType embedding and subsetting, JPEG and PNG images, tables, SVG and ZUGFeRD as PDF/A-3B, loaded lazily through a topic table in document.tcl | |
| 07:50 |
Example assets and a make target to build them
- Roboto, Bitcount Prop Single and Niconne added, one face each, next to the two DejaVu faces | |
|
2026-08-08
| ||
| 22:01 |
Install and ship the sRGB output intent profile
- tools/install.tcl accepts directory arguments and copies them recursively, keeping the directory name | |
| 21:53 |
Add example assets and the sRGB output intent profile
- icc/sRGB.icc as a runtime part of the package, installed and shipped in the binary archive, with a README recording its identity and how to verify it | |
| 19:31 |
Initial project scaffolding for tclpdf 1.0
- TEA build adapted for this package: configure.ac, Makefile.in, aclocal.m4, tclconfig, pkgIndex.tcl.in | |
| 07:45 | initial empty check-in check-in: 87e8fd0694 user: alex tags: trunk | |