racket/collects/test-suite/private/print-to-text.ss
2005-05-27 18:56:37 +00:00

63 lines
1.6 KiB
Scheme

(module print-to-text mzscheme
(require
(lib "list.ss")
(lib "etc.ss")
(lib "class.ss")
(lib "contract.ss")
(lib "unitsig.ss")
(lib "mred.ss" "mred")
(lib "framework.ss" "framework")
(lib "tool.ss" "drscheme"))
(provide print-to-text^
print-to-text@)
(define-signature print-to-text^
(print-to-text))
(define print-to-text@
(unit/sig print-to-text^
(import drscheme:tool^)
;; Using the current languages print operations, print the list of values to the text
(define (print-to-text atext vals)
(unless (empty? vals)
(send* atext
(begin-edit-sequence)
(erase))
(let ([port
(make-output-port
'set-actuals
always-evt
(lambda (s start end block? enable-breaks?)
(send atext insert
(list->string
(map integer->char
(bytes->list (subbytes s start end)))))
(- end start))
void
(lambda (v block? enable-breaks?)
(if (v . is-a? . snip%)
(send atext insert v)
(send atext insert (format "~s" v)))
#t))])
(define (print-one v)
(let* ([language-settings
(preferences:get
(drscheme:language-configuration:get-settings-preferences-symbol))]
[language
(drscheme:language-configuration:language-settings-language
language-settings)]
[settings
(drscheme:language-configuration:language-settings-settings
language-settings)])
(send language render-value v settings port)))
(print-one (first vals))
(for-each
(lambda (val)
(newline port)
(print-one val))
(rest vals)))
(send atext end-edit-sequence))))))