diff --git a/collects/syntax-color/lexer-contract.rkt b/collects/syntax-color/lexer-contract.rkt new file mode 100644 index 0000000000..3344737331 --- /dev/null +++ b/collects/syntax-color/lexer-contract.rkt @@ -0,0 +1,34 @@ +#lang racket/base +(require racket/contract/base + unstable/options) +(provide lexer/c) + +(define lexer/c + (option/c + (or/c (->i ([in input-port?]) + (values [txt any/c] + [type symbol?] + [paren (or/c symbol? #f)] + [start (or/c exact-positive-integer? #f)] + [end (start) + (if start + (and/c exact-positive-integer? + (>=/c start)) + #f)])) + (->i ([in input-port?] + [offset exact-nonnegative-integer?] + [mode any/c]) + (values [txt any/c] + [type symbol?] + [paren (or/c symbol? #f)] + [start (or/c exact-positive-integer? #f)] + [end (start) + (if start + (and/c exact-positive-integer? + (>=/c start)) + #f)] + [backup exact-nonnegative-integer?] + [new-mode any/c]))) + #:tester (λ (x) (and (procedure? x) + (or (procedure-arity-includes? x 1) + (procedure-arity-includes? x 3))))))