(module collapsed-snipclass-helpers mzscheme (require (lib "mred.ss" "mred") (lib "class.ss")) (provide make-sexp-snipclass%) (define (make-sexp-snipclass% sexp-snip%) (class snip-class% (define/override (read in) (let* ([left-bracket (integer->char (bytes-ref (send in get-bytes) 0))] [right-bracket (integer->char (bytes-ref (send in get-bytes) 0))] [snip-count (send in get-exact)] [saved-snips (let loop ([n snip-count]) (cond [(zero? n) null] [else (let* ([classname (bytes->string/utf-8 (send in get-bytes))] [snipclass (send (get-the-snip-class-list) find classname)]) (cons (send snipclass read in) (loop (- n 1))))]))]) (instantiate sexp-snip% () (left-bracket left-bracket) (right-bracket right-bracket) (saved-snips saved-snips)))) (super-instantiate ()))))