[plt-scheme] Trying to reliably turn a value into a list of snips
On Wed, 28 May 2008, Robby Findler wrote:
> Did you try just using `print' and then redirecting the output to your
> editor snip's ports?
Hi Robby,
But that's so simple that it can't possibly work... wait. It works!
:)
I hadn't known about print; I'd only been aware of printf, write, and
display. With your suggestion, my updated code is:
;; value->snips: value -> (listof snip%)
(define (value->snips a-value)
(let* ([text (new text%)]
[port (open-output-text-editor text)])
(print a-value port)
(flush-output port)
(get-text-snips text 0 (send text last-position))))
;; get-text-snips: text% number number -> (listof snip%)
;; Returns the snips in the text editor between start and end.
(define (get-text-snips text start end)
(send text split-snip start)
(send text split-snip end)
(reverse
(let loop ([snips/rev '()]
[a-snip
(send text find-snip start 'after-or-none)])
(cond
[(or (not a-snip)
(>= (send text get-snip-position a-snip)
end))
snips/rev]
[else
(loop (cons (send a-snip copy) snips/rev)
(send a-snip next))]))))
and it deals with picts correctly. Thanks again!