[racket] display problem

From: Roelof Wobben (r.wobben at home.nl)
Date: Wed Apr 11 07:39:14 EDT 2012

Op 6-4-2012 15:23, Stephen Bloch schreef:
>
> On Apr 6, 2012, at 3:39 AM, Roelof Wobben wrote:
>
>> ;interp. (make-editorst)means the text in the editor is
>> ;(string-append 
>> <http://docs.racket-lang.org/htdp-langs/beginner.html#%28def._%28lib._htdp-beginner..rkt._lang%29._%28%28lib._lang%2Fhtdp-beginner..rkt%29._string-append%29%29>st)with 
>> the cursor displayed between sand t
>>
>>
>>
>> So for aaaaaaa| s has the value of aaaaa en t has the value of ""
>
> No, s should be "aaaaaaa" and t should be "".
>
>> For aaaa|aaaa s  I think s has the value of aaaaa and t has the value 
>> of aaa
>
> No, s should be "aaaa" and t should be "aaaa".  The cursor is supposed 
> to be displayed between s and t.
>
>> If I use the length of the first string and I press one time on the 
>> left-key then the new-length could be the old-one - 1. Then I could 
>> use substring to cut that part away.
>
> Sure.  Note that you'll need to not only make the new s shorter than 
> the old s, but also make the new t longer than the old t.  And vice 
> versa when somebody presses on the right-arrow key.
>
>> The t part I could say if it's empty substring ( s , (string-lenght 
>> s), 1) and if it's not empty use a string-append.
>
> You could, but that's unnecessarily complicated.  string-append works 
> regardless of whether s or t is empty.
>
>
> Stephen Bloch
> sbloch at adelphi.edu <mailto:sbloch at adelphi.edu>
>

Hello,

I have finally written the render function.
It's looks like this :

(define workspace (empty-scene 200 20))

(define-struct editor (pre post))
; Editor = (make-editor String String)
; interp. (make-editor s t) means the text in the editor is
; (string-append s t) with the cursor displayed between s and t
; make-editor String String -> Editor
; editor-pre Editor -> String
; editor-post Editor -> String
; editor? Editor Any -> Boolean

; make-struct
(define verwerker (make-editor "aaa" "bbbb"))


;; Image -> Number
;; Function to calculate the width of the editor-pre image
(check-expect (width (make-editor "aaa" "")) 18)
(check-expect (width (make-editor "" "")) 0)
(define (width editor)
   (image-width (text (editor-pre verwerker) 11 "black")))

; Editor -> Image
; Function which displays the struct on the screen into a image.
(check-expect (render verwerker) (place-image
    (text "aaa" 11 "black")
    14 10
    (place-image (rectangle 2 20 "solid" "red") (+ (width editor)8)  10
     (place-image
      (text "bbbb" 11 "black")
      (+ (width editor) 22) 10
      workspace))))
(check-expect (render (make-editor "" "bbbb")) (place-image
    (text "" 11 "black")
    14 10
    (place-image (rectangle 2 20 "solid" "red") (+ (width editor)8)  10
     (place-image
      (text "bbbb" 11 "black")
      (+ (width editor) 22) 10
      workspace))))
(check-expect (render (make-editor "aaa" "")) (place-image
    (text "aaa" 11 "black")
    14 10
    (place-image (rectangle 2 20 "solid" "red") (+ (width editor)8)  10
     (place-image
      (text "" 11 "black")
      (+ (width editor) 22) 10
      workspace))))
(define (render verwerker)
   (place-image
    (text (editor-pre verwerker) 11 "black")
    14 10
    (place-image (rectangle 2 20 "solid" "red") (+ (width editor)8)  10
     (place-image
      (text (editor-post verwerker) 11 "black")
      (+ (width editor) 22) 10
      workspace))))

But I see something strange, Both check-expect of the function width 
gives as output 18.
But I expect that on a empty (editor-pre verwerker) gives as output 0.

Am I mistaken or is there something wrong in my functions ?

Roelof

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20120411/7ed79fcb/attachment-0001.html>

Posted on the users mailing list.