pdftract/crates/pdftract-core/src
jedarden 172cdadd04 feat(pdftract-4x0y): implement font binding and text positioning operators
Implement Tf, Td, TD, Tm, T* operators for Phase 3.1 text state.

- Add TSTAR_ZERO_LEADING, FONT_RESOURCE_NOT_FOUND, FONT_SIZE_ZERO_OR_NEGATIVE diagnostics
- Add move_text, move_text_set_leading, set_text_matrix, next_line, set_font methods to GraphicsState
- Refactor execute_with_do to use gstate.text_matrix instead of local TextMatrix
- Implement Tf with ResourceStack font resolution and size clamping
- Implement Td/TD/Tm/T* operators with correct matrix semantics
- Add acceptance criteria tests for all operators

Per PDF spec:
- Td: text_line_matrix = translate(tx, ty) * text_line_matrix
- TD: same as Td, plus sets leading = -ty
- Tm: overwrites both text_matrix and text_line_matrix (does not accumulate)
- T*: equivalent to Td 0 -leading
- Tf: resolves font name from ResourceStack, clamps size <= 0 to 1.0

Closes: pdftract-4x0y
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 17:44:34 -04:00
..
annotation feat(pdftract-3r77): implement non-link annotation extractor with subtype-specific fields 2026-05-24 16:52:51 -04:00
attachment feat(pdftract-3lir): implement Filespec dict + EF stream decoder 2026-05-24 13:54:27 -04:00
cache feat(pdftract-3s2i): implement Phase 5.5.2 validation filter 2026-05-24 04:57:17 -04:00
fingerprint feat(pdftract-3s2i): implement Phase 5.5.2 validation filter 2026-05-24 04:57:17 -04:00
font feat(pdftract-2iur): implement nearest-neighbor scanner with Hamming distance and frequency tie-break 2026-05-24 06:57:27 -04:00
forms feat(pdftract-5qca): implement form_fields JSON output + schema integration 2026-05-24 14:36:03 -04:00
layout feat(pdftract-5o6hx): implement hyphenation repair 2026-05-24 17:24:48 -04:00
ocr/preprocessing feat(pdftract-5xyjv): implement 3x3 median-filter denoising for OCR preprocessing 2026-05-24 16:09:08 -04:00
parser feat(pdftract-4x0y): implement font binding and text positioning operators 2026-05-24 17:44:34 -04:00
profiles feat(pdftract-64p5): implement classify CLI subcommand and --auto flag 2026-05-24 15:16:56 -04:00
receipts feat(pdftract-3s2i): implement Phase 5.5.2 validation filter 2026-05-24 04:57:17 -04:00
render feat(pdftract-3s2i): implement Phase 5.5.2 validation filter 2026-05-24 04:57:17 -04:00
schema feat(pdftract-5o6hx): implement hyphenation repair 2026-05-24 17:24:48 -04:00
signature feat(pdftract-3s2i): implement Phase 5.5.2 validation filter 2026-05-24 04:57:17 -04:00
table feat(pdftract-3s2i): implement Phase 5.5.2 validation filter 2026-05-24 04:57:17 -04:00
atomic_file_writer.rs feat(pdftract-68wfa): implement AtomicFileWriter for atomic file writes 2026-05-24 13:02:37 -04:00
classify.rs feat(pdftract-5v1l9): implement BrokenVector escalation for low-readability pages 2026-05-24 16:16:51 -04:00
content_stream.rs feat(pdftract-4x0y): implement font binding and text positioning operators 2026-05-24 17:44:34 -04:00
diagnostics.rs feat(pdftract-4x0y): implement font binding and text positioning operators 2026-05-24 17:44:34 -04:00
document.rs feat(pdftract-3s2i): implement Phase 5.5.2 validation filter 2026-05-24 04:57:17 -04:00
dpi.rs feat(pdftract-3s2i): implement Phase 5.5.2 validation filter 2026-05-24 04:57:17 -04:00
extract.rs feat(pdftract-5tvv1): implement Tagged-PDF fast-path stub with TAGGED_PDF_STRUCT_TREE_DEFERRED diagnostic 2026-05-24 16:28:10 -04:00
graphics_state.rs feat(pdftract-4x0y): implement font binding and text positioning operators 2026-05-24 17:44:34 -04:00
hybrid.rs feat(pdftract-5qj50): implement mojibake detection and repair via encoding_rs 2026-05-24 17:01:53 -04:00
lib.rs feat(pdftract-46qa): implement 7.6.1 annotation walker dispatcher 2026-05-24 15:30:45 -04:00
markdown.rs feat(pdftract-5qca): implement form_fields JSON output + schema integration 2026-05-24 14:36:03 -04:00
ocr.rs feat(pdftract-6dki1): implement histogram stretch contrast normalization 2026-05-24 10:30:20 -04:00
options.rs feat(pdftract-3s2i): implement Phase 5.5.2 validation filter 2026-05-24 04:57:17 -04:00
preprocess.rs feat(pdftract-3s2i): implement Phase 5.5.2 validation filter 2026-05-24 04:57:17 -04:00
render.rs feat(pdftract-axcri): record inline images as ImageXObject entries 2026-05-24 07:41:50 -04:00
semaphore.rs feat(pdftract-3s2i): implement Phase 5.5.2 validation filter 2026-05-24 04:57:17 -04:00
span_flags.rs feat(pdftract-cbrbg): implement span flag detector for Phase 4.1 2026-05-24 07:28:25 -04:00
url_validation.rs feat(pdftract-3s2i): implement Phase 5.5.2 validation filter 2026-05-24 04:57:17 -04:00
word_boundary.rs feat(pdftract-h2s0z): implement adaptive word boundary detector 2026-05-24 06:06:56 -04:00