You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
typesetting/xenomorph/xenomorph/util.rkt

15 lines
574 B
Racket

#lang racket/base
(require racket/match racket/dict "number.rkt" "helper.rkt" "generic.rkt")
(provide (all-defined-out))
(define (length-resolvable? x)
(or (not x) (symbol? x) (xenomorphic? x) (procedure? x) (exact-nonnegative-integer? x)))
(define (resolve-length x port [parent #f])
(match x
[#false #false]
[(? exact-nonnegative-integer?) x]
[(? procedure? proc) (proc parent)]
[(? symbol? key) #:when parent (dict-ref parent key)]
[(? x:int?) #:when port (decode x port)]
[_ (raise-argument-error 'resolve-length "fixed-size argument" x)]))