#lang debug at-exp racket/base (require racket/string racket/match) (provide page-sizes-ref) (define page-size-strs @list{ 4A0 4767.87 6740.79 2A0 3370.39 4767.87 A0 2383.94 3370.39 A1 1683.78 2383.94 A2 1190.55 1683.78 A3 841.89 1190.55 A4 595.28 841.89 A5 419.53 595.28 A6 297.64 419.53 A7 209.76 297.64 A8 147.40 209.76 A9 104.88 147.40 A10 73.70 104.88 B0 2834.65 4008.19 B1 2004.09 2834.65 B2 1417.32 2004.09 B3 1000.63 1417.32 B4 708.66 1000.63 B5 498.90 708.66 B6 354.33 498.90 B7 249.45 354.33 B8 175.75 249.45 B9 124.72 175.75 B10 87.87 124.72 C0 2599.37 3676.54 C1 1836.85 2599.37 C2 1298.27 1836.85 C3 918.43 1298.27 C4 649.13 918.43 C5 459.21 649.13 C6 323.15 459.21 C7 229.61 323.15 C8 161.57 229.61 C9 113.39 161.57 C10 79.37 113.39 RA0 2437.80 3458.27 RA1 1729.13 2437.80 RA2 1218.90 1729.13 RA3 864.57 1218.90 RA4 609.45 864.57 SRA0 2551.18 3628.35 SRA1 1814.17 2551.18 SRA2 1275.59 1814.17 SRA3 907.09 1275.59 SRA4 637.80 907.09 EXECUTIVE 521.86 756.00 FOLIO 612.00 936.00 LEGAL 612.00 1008.00 LETTER 612.00 792.00 TABLOID 792.00 1224.00 }) (define page-sizes (make-hasheq (for*/list ([line (in-list page-size-strs)] [toks (in-value (for/list ([tok (in-port read (open-input-string line))]) tok))] #:unless (null? toks)) toks))) (define (page-sizes-ref name [other-name #false]) (define name-key (string->symbol (string-upcase name))) (if other-name (hash-ref page-sizes name-key (λ () (page-sizes-ref other-name))) (hash-ref page-sizes name-key)))