mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-10-26 02:58:32 -06:00
* fix(audit): an applied redaction at the end of a line is not a faux redaction After Apply Redactions removes text at the end of a line, the line keeps a TJ adjustment where the text was, and the box of the line still spans it. The audit compared the redaction box with that box: at the end of a line it covered more than 40% of it and the words left beside it were reported as covered text, on a correctly redacted file. In the middle of a line the gap was usually too small to cross the threshold. Text lines now also give the boxes of the words they draw (`ink`: glyphs, without spaces and TJ adjustments), and the audit measures how much of those words a cover hides. A real cover over text that is still there is found as before. doc_audit_redactions also reports its rectangles in top-left-origin points like comment_list and doc_info; they were in PDF user space. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(audit): leave the rectangles of doc_audit_redactions in user space here Reporting doc_audit_redactions rectangles in top-left-origin points is a separate subject from the false alarm this branch fixes, and on its own it made the tool and `pdfcraft-cli audit` disagree on the same file: the CLI still prints PDF user space. Take it out of this change; the tool and the CLI can move together in their own change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(edit): word boxes span whole words when glyphs run backwards With a negative font size or a negative horizontal scale (Tz), each glyph advances backwards along the text matrix, and the box of a word kept only its first glyph: the end of the word was compared with a start that had already moved past it. A word box is now the union of its glyphs whichever way they go, and a TJ adjustment ends a word past 0.2 em of the scaled size, whatever its sign. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(audit): a cover over a short value after a long label is still found Measuring a cover on the words of a line alone missed faux redactions main found: a long label followed by a short value hidden under the box is less than 40% of the line's words. A cover now also counts, as before, when it hides 40% of the line's box and at least half of one word still drawn; a cover over the gap an applied redaction left, with no word under it, still does not. The audit README states both rules. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(audit): retain partial-value cover detections Co-Authored-By: OpenAI Codex <noreply@openai.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: OpenAI Codex <noreply@openai.com>