63 lines
1.6 KiB
Scheme
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))))))
|