v1.12.0
What's Changed
- fix(pdf): recover block structure and reading order on OCR'd pages by @thomas-villani in #280
- benchmarks: pinned PMC born-digital corpus fetcher + characterization by @thomas-villani in #281
- Score all2md against the PMC born-digital corpus by @thomas-villani in #282
- Run the PMC born-digital lane on a monthly schedule by @thomas-villani in #283
- Recover borderless tables from layout-predicted regions by @thomas-villani in #285
- fix(pdf): trigger auto OCR on the scan shape, not on total image area by @thomas-villani in #286
- fix(pdf): keep the space where a styled run wraps onto the next line by @thomas-villani in #287
- fix(pdf): keep the prose a table region only partly covers by @thomas-villani in #288
- feat(pdf): expose the layout classifier as a searchable option by @thomas-villani in #292
- fix(pdf): label lines, not just blocks, so headings inside a column survive by @thomas-villani in #293
- fix(pdf): require a heading to contain at least one alphanumeric character by @thomas-villani in #297
- chore(deps): Bump cryptography from 49.0.0 to 50.0.0 in the uv group across 1 directory by @dependabot[bot] in #289
- fix(pdf): join a heading that wraps onto a second printed line by @thomas-villani in #298
- fix(pdf): end a list item at the next marker, not at the end of the block by @thomas-villani in #299
- fix(pdf): read a list marker from the start of the line, not the first Text node by @thomas-villani in #301
- fix(pdf): dehyphenate text rescued from a rejected table region by @thomas-villani in #302
- fix(api): stop blaming the caller for options all2md injected itself by @thomas-villani in #304
- docs: show that archives are searchable without unpacking by @thomas-villani in #307
- fix(cli): project namespaced options per item on the --zip path by @thomas-villani in #305
- fix(cli): match multi-part extensions so .tar.gz is accepted as input by @thomas-villani in #308
- fix(pdf): keep PyMuPDF's layout advisory out of the converted document by @thomas-villani in #309
- fix(markdown,html): fold del/s/sup/sub/mark instead of escaping or dropping them by @thomas-villani in #310
- fix(pdf): read level columns left-to-right instead of by a hairline y difference by @thomas-villani in #311
- fix(options): export every registered format's options class from both surfaces by @thomas-villani in #312
- fix(pdf): import PyMuPDF as pymupdf, and stop the version guard crashing by @thomas-villani in #313
- fix(ast): handle null field values in AST JSON deserialization by @santhreal in #265
- docs(changelog): record #265, which merged without an entry by @thomas-villani in #316
- fix(markdown): round-trip table captions through a marker comment by @thomas-villani in #315
- fix(markdown): pass raw HTML through instead of escaping it by @thomas-villani in #314
- docs(changelog): consolidate [Unreleased] into one section per kind by @thomas-villani in #317
- docs(roadmap): correct Theme 8 for the OCR geometry work that shipped by @thomas-villani in #318
- feat(options): export OCROptions and MetadataRenderPolicy from the public API by @thomas-villani in #319
- fix(cli): add main.py so python -m all2md.cli runs the CLI by @thomas-villani in #320
- docs: correct seven CLI flags that do not exist by @thomas-villani in #321
- docs: add a PDF conversion guide by @thomas-villani in #322
- feat(benchmarks): measure content precision beside recall on the PMC lane by @thomas-villani in #323
- fix(benchmarks): stop gating on a dimension measured to move the wrong way by @thomas-villani in #324
- fix(ci): make the Semgrep gate capable of failing again by @thomas-villani in #325
- fix(action): stop reading an unassessed placeholder as a passing confidence score by @thomas-villani in #326
- docs: quote a benchmark comparison the two runs can actually support by @thomas-villani in #327
- fix(benchmarks): record a withdrawn PMC article instead of failing the load by @thomas-villani in #330
- docs: publish the conversion fidelity numbers with their controls by @thomas-villani in #331
- chore(release): prepare v1.12.0 by @thomas-villani in #333
Full Changelog: v1.11.0...v1.12.0