diff --git a/notes/pdftract-1jkme.md b/notes/pdftract-1jkme.md new file mode 100644 index 0000000..b932610 --- /dev/null +++ b/notes/pdftract-1jkme.md @@ -0,0 +1,46 @@ +# pdftract-1jkme: sort_spans_in_line implementation + +## Work Summary + +The `sort_spans_in_line` function was already implemented in `crates/pdftract-core/src/layout/line.rs` (lines 723-770). The implementation correctly handles: + +- **LTR**: Sorts by `bbox[0]` ascending (left edge first) +- **RTL**: Sorts by `bbox[2]` descending (right edge first) +- **Mixed**: Falls back to `bbox[0]` ascending (v0.1.0 limitation documented) +- **NaN bbox**: Treated as `Ordering::Equal` to prevent panic +- **Stable sort**: Uses `sort_by` (not `sort_unstable_by`) to preserve insertion order on ties + +## Changes Made + +Fixed a compilation bug in `crates/pdftract-core/src/layout/correction.rs`: +- Added `use std::sync::Arc;` to the test module (line 993) +- The test module was using `Arc::from("Helvetica")` but `Arc` was not in scope + +## Acceptance Criteria - PASS + +| Criterion | Status | Notes | +|-----------|--------|-------| +| LTR 3 spans x0=100,50,150: sorted 50,100,150 | PASS | test_sort_spans_in_line_ltr_ascending_x0 | +| RTL 3 spans x1=100,50,150: sorted 150,100,50 | PASS | test_sort_spans_in_line_rtl_descending_x1 | +| Mixed: spans in logical x0 ASC | PASS | test_sort_spans_in_line_mixed_fallback_x0_ascending | +| NaN bbox: no panic | PASS | test_sort_spans_in_line_nan_bbox_no_panic | +| Stable: ties preserve order | PASS | test_sort_spans_in_line_stable_sort_preserves_insertion_order | + +## Test Results + +``` +PASS [ 0.006s] (1/7) pdftract-core layout::line::tests::test_sort_spans_in_line_single_span_unchanged +PASS [ 0.006s] (2/7) pdftract-core layout::line::tests::test_sort_spans_in_line_rtl_descending_x1 +PASS [ 0.006s] (3/7) pdftract-core layout::line::tests::test_sort_spans_in_line_empty_line_no_panic +PASS [ 0.006s] (4/7) pdftract-core layout::line::tests::test_sort_spans_in_line_stable_sort_preserves_insertion_order +PASS [ 0.006s] (5/7) pdftract-core layout::line::tests::test_sort_spans_in_line_ltr_ascending_x0 +PASS [ 0.007s] (6/7) pdftract-core layout::line::tests::test_sort_spans_in_line_mixed_fallback_x0_ascending +PASS [ 0.007s] (7/7) pdftract-core layout::line::tests::test_sort_spans_in_line_nan_bbox_no_panic +``` + +All 7 tests passed in 0.010s. + +## Commit + +- Commit: `a0ea5f4` - "fix(pdftract-1jkme): add missing Arc import to correction.rs test module" +- Pushed to: `forgejo main` at `8cfbe70`