Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions htdp-lib/lang/htdp-langs.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -726,12 +726,26 @@
(define (stepper-settings-language %)
(if (implementation? % stepper-language<%>)
(class* % (stepper-language<%>)
(inherit get-abbreviate-cons-as-list
get-use-function-output-syntax?
get-output-function-instead-of-lambda?)
(init-field stepper:supported)
(init-field stepper:enable-let-lifting)
(init-field stepper:show-lambdas-as-lambdas)
(define/override (stepper:supported?) stepper:supported)
(define/override (stepper:enable-let-lifting?) stepper:enable-let-lifting)
(define/override (stepper:show-lambdas-as-lambdas?) stepper:show-lambdas-as-lambdas)
(define/override (stepper:configure-rendering settings)
(configure/settings
(sl-runtime-settings (drscheme:language:simple-settings-printing-style settings)
(drscheme:language:simple-settings-fraction-style settings)
(drscheme:language:simple-settings-show-sharing settings)
(drscheme:language:simple-settings-insert-newlines settings)
(htdp-lang-settings-tracing? settings)
(htdp-lang-settings-true/false/empty-as-ids? settings)
(get-abbreviate-cons-as-list)
(get-use-function-output-syntax?)
(get-output-function-instead-of-lambda?))))
(super-new))
(class* % ()
(init stepper:supported)
Expand Down
6 changes: 5 additions & 1 deletion htdp-lib/lang/private/sl-stepper-button.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,12 @@
(public stepper:show-consumed-and/or-clauses?)
(define (stepper:show-consumed-and/or-clauses?) #t)

(public stepper:configure-rendering)
(define (stepper:configure-rendering settings)
(configure/settings settings))

(public stepper:render-to-sexp)
(define (stepper:render-to-sexp val settings language-level)
(define (stepper:render-to-sexp val language-level)
(when (boolean? val)
(log-stepper-debug "render-to-sexp got a boolean: ~v\n" val))
(or (and (procedure? val)
Expand Down
1 change: 1 addition & 0 deletions htdp-lib/lang/stepper-language-interface.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@
stepper:show-lambdas-as-lambdas?
stepper:show-inexactness?
stepper:show-consumed-and/or-clauses?
stepper:configure-rendering
stepper:render-to-sexp)))
51 changes: 38 additions & 13 deletions htdp-lib/stepper/private/mred-extensions.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
images/compile-time
string-constants
pict
simple-tree-text-markup/data
(for-syntax images/icons/control images/icons/style))

(provide
Expand Down Expand Up @@ -178,8 +179,20 @@
(inherit get-dc)

(define/private (format-sexp sexp)
(define text-port (open-output-text-editor this))

(define text-port
(open-output-text-editor this 'end
; need to handle number-markup
(lambda (x)
(if (number-markup? x)
(f:number-snip:number->string/snip (number-markup-number x)
#:exact-prefix (number-markup-exact-prefix x)
#:inexact-prefix (number-markup-inexact-prefix x)
#:fraction-view (number-markup-fraction-view x))
x))))

(define language-pretty-print-size-hook (pretty-print-size-hook))
(define language-pretty-print-print-hook (pretty-print-print-hook))

(parameterize
([pretty-print-show-inexactness show-inexactness?]
[pretty-print-columns pretty-printed-width]
Expand All @@ -202,23 +215,31 @@
(let-values ([(xw dc dc2 dc3) (send dc get-text-extent "x")])
(max 1 (inexact->exact (ceiling (/ (unbox wbox) xw))))))]
[(and looked-up (not (eq? looked-up 'non-confusable)))
(string-length (format "~s" (car looked-up)))]
[else #f])))]
(or
; note that this may return #f, but we still want the print-hook to handle it
(language-pretty-print-size-hook (car looked-up) display? port)
(string-length (format "~s" (car looked-up))))]
[else
(language-pretty-print-size-hook value display? port)])))]

[pretty-print-print-hook
; this print-hook is called for confusable highlights and for images.
(lambda (value display? port)
(let ([to-display (cond
[(hash-ref highlight-table value (lambda () #f)) => car]
[else value])])
(let ([looked-up (hash-ref highlight-table value (lambda () #f))])
(cond
[(is-a? to-display snip%)
(write-special (send to-display copy) port) (set-last-style)]
[(is-a? value snip%)
(write-special (send value copy) port) (set-last-style)]
[(and looked-up (not (eq? looked-up 'non-confusable)))
; we have to call the size hook *again* to find
; out if the underlying pretty-print-print-hook
; can handle this
(define to-display (car looked-up))
(if (language-pretty-print-size-hook to-display display? port)
(language-pretty-print-print-hook to-display display? port)
(write-string (format "~s" to-display) port))]
[else
;; there's already code somewhere else to handle this; this seems like a bit of a hack.
(when (and (number? to-display) (inexact? to-display) (pretty-print-show-inexactness))
(write-string "#i" port))
(write-string (format "~s" to-display) port)])))]
(language-pretty-print-print-hook value display? port)])))]

[pretty-print-print-line
(lambda (number port old-length dest-columns)
(when (and number (not (eq? number 0)))
Expand Down Expand Up @@ -254,10 +275,14 @@
(select-all)
(clear)
(reset-style)
(define start (get-start-position))
(for ([exp stripped-exps] [i (in-naturals)])
(unless (= i 0)
(insert #\newline))
(format-sexp exp))
(define end (get-start-position))
(change-style (send (get-style-list) find-named-style "Standard")
start end)
(end-edit-sequence)
(lock #t))

Expand Down
3 changes: 2 additions & 1 deletion htdp-lib/stepper/private/view-controller.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
;; render-to-sexp : TST -> sexp
(define (render-to-sexp val)
(send language-level stepper:render-to-sexp
val simple-settings language-level))
val language-level))

;; channel for incoming views
(define view-channel (make-async-channel))
Expand Down Expand Up @@ -410,6 +410,7 @@

(define stepper-frame-eventspace (send s-frame get-eventspace))
;; START THE MODEL
(send language-level stepper:configure-rendering simple-settings)
(start-listener-thread stepper-frame-eventspace)
(model:go
program-expander-prime
Expand Down
6 changes: 5 additions & 1 deletion htdp-lib/stepper/stepper-tool.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,12 @@
(public stepper:show-consumed-and/or-clauses?)
(define (stepper:show-consumed-and/or-clauses?) #t)

(public stepper:configure-rendering)
(define (stepper:configure-rendering settings)
(error 'stepper:configure-rendering "this must be overridden"))

(public stepper:render-to-sexp)
(define (stepper:render-to-sexp val settings language-level)
(define (stepper:render-to-sexp val language-level)
(when (boolean? val)
(log-stepper-debug "render-to-sexp got a boolean: ~v\n" val))
(or (and (procedure? val)
Expand Down