[plt-scheme] Slideshow and pretty-print
At Mon, 26 Nov 2007 20:12:42 +0800, yug at ios.ac.cn wrote:
> 1. in slideshow, why code could not print my s-exp good?
Slideshow's `code' layout depends on the layout of the source. To get
the layout information, the source needs to be literally within a
`code' form.
In this example:
> (define code-test '(code "DrScheme" "DrScheme"
> "DrScheme" (break one) (break two) "DrScheme"
> "DrScheme"
> (break three) "DrScheme"))
>
> (slide/center
> (code #,code-test))
`code-test' just has an S-expression with no source-layout information,
so `code' cannot format it based on the source.
In the case of
(slide/center
(code
(code "DrScheme" "DrScheme"
"DrScheme" (break one) (break two) "DrScheme" "DrScheme"
(break three) "DrScheme")))
the S-expression to typeset is immediately visible to the `code' macro,
so it can extract source information (at compile time) to decide the
layout.
> 2. How can I reserve the annotations when I apply pretty-print ?
I'm not sure I understand the question.
If you want pretty-print to generate the layout, then you can use
`read-syntax' to read an S-expression back out of the `pretty-format'
generated string:
(slide/center
(code #,(read-syntax
#f
(let ([p (open-input-string
(parameterize ([pretty-print-columns 10])
(pretty-format
'(this is a test))))])
;; be sure to turn on line counting to get source layout:
(port-count-lines! p)
p))))
But if your question was how to preserve the comment in
(define test
'(this is
;;annotation
a test))
(define ptest
(pretty-format test))
then there's no way to do that with just a quoted S-expression. The
comment doesn't exist after the program is parsed.
Matthew