diff --git a/pitfall/pitfall/document.rkt b/pitfall/pitfall/document.rkt index d23b0cbb..a59f543a 100644 --- a/pitfall/pitfall/document.rkt +++ b/pitfall/pitfall/document.rkt @@ -14,7 +14,6 @@ [_pageBuffer null] [_pageBufferStart 0] [_offsets (mhash)] ; The PDF object store - [_waiting 0] [_ended #f] [_offset 0] [_root (ref this @@ -109,7 +108,6 @@ (() (hash?) . ->*m . (is-a?/c PDFReference)) (define next-refid (add1 (length (hash-keys (· this _offsets))))) (hash-set! (· this _offsets) next-refid #f) - (increment-field! _waiting this) (make-object PDFReference this next-refid payload)) @@ -129,11 +127,16 @@ this) +(define/contract (offsets-missing? this) + (->m boolean?) + ;; `boolean?` matches #f values + (positive? (length (filter boolean? (hash-values (· this _offsets)))))) + + (define/contract (_refEnd this ref) ((is-a?/c PDFReference) . ->m . void?) (hash-set! (· this _offsets) (· ref id) (· ref offset)) - (increment-field! _waiting this -1) - (if (and (zero? (· this _waiting)) (· this _ended)) + (if (and (not (offsets-missing? this)) (· this _ended)) (· this _finalize) (set-field! _ended this #f))) @@ -159,7 +162,7 @@ (· this _root payload Pages end) (cond - [(positive? (· this _waiting)) (set-field! _ended this #t)] + [(offsets-missing? this) (set-field! _ended this #t)] [else ;; generate xref (define xref-offset (· this _offset))