Skip to content
162 changes: 81 additions & 81 deletions drracket/browser/private/btree.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -67,94 +67,94 @@

(define (insert before? n btree pos data)
(define new (node pos data #f #f #f 'black))
(if (not (btree-root btree))
(set-btree-root! btree new)

(begin

(set-node-color! new 'red)

; Insert into tree
(if before?

(if (not (node-left n))
(begin
(set-node-left! n new)
(set-node-parent! new n))

(let loop ([node (node-left n)])
(if (node-right node)
(loop (node-right node))
(begin
(set-node-right! node new)
(set-node-parent! new node)))))

(if (not (node-right n))
(begin
(set-node-right! n new)
(set-node-parent! new n))

(let loop ([node (node-right n)])
(if (node-left node)
(loop (node-left node))
(begin
(set-node-left! node new)
(set-node-parent! new node))))))

; Make value in new node relative to right-hand parents
(let loop ([node new])
(let ([p (node-parent node)])
(when p
(when (eq? node (node-right p))
(adjust-offsets p new))
(loop p))))

; Balance tree
(let loop ([node new])
(let ([p (node-parent node)])
(when (and (not (eq? node (btree-root btree))) (eq? 'red (node-color p)))
(let* ([recolor-k (lambda (y)
(set-node-color! p 'black)
(set-node-color! y 'black)
(let ([pp (node-parent p)])
(set-node-color! pp 'red)
(loop pp)))]
[rotate-k (lambda (rotate node)
(let ([p (node-parent node)])
(set-node-color! p 'black)
(let ([pp (node-parent p)])
(set-node-color! pp 'red)
(rotate pp btree)
(loop pp))))]
[k (lambda (node-y long-rotate always-rotate)
(let ([y (node-y (node-parent p))])
(if (and y (eq? 'red (node-color y)))
(recolor-k y)
(let ([k (lambda (node) (rotate-k always-rotate node))])
(if (eq? node (node-y p))
(begin
(long-rotate p btree)
(k p))
(k node))))))])
(if (eq? p (node-left (node-parent p)))
(k node-right rotate-left rotate-right)
(k node-left rotate-right rotate-left))))))

(set-node-color! (btree-root btree) 'black))))
(cond
[(not (btree-root btree)) (set-btree-root! btree new)]

[else
(set-node-color! new 'red)

; Insert into tree
(if before?

(if (not (node-left n))
(begin
(set-node-left! n new)
(set-node-parent! new n))

(let loop ([node (node-left n)])
(if (node-right node)
(loop (node-right node))
(begin
(set-node-right! node new)
(set-node-parent! new node)))))

(if (not (node-right n))
(begin
(set-node-right! n new)
(set-node-parent! new n))

(let loop ([node (node-right n)])
(if (node-left node)
(loop (node-left node))
(begin
(set-node-left! node new)
(set-node-parent! new node))))))

; Make value in new node relative to right-hand parents
(let loop ([node new])
(let ([p (node-parent node)])
(when p
(when (eq? node (node-right p))
(adjust-offsets p new))
(loop p))))

; Balance tree
(let loop ([node new])
(let ([p (node-parent node)])
(when (and (not (eq? node (btree-root btree))) (eq? 'red (node-color p)))
(let* ([recolor-k (lambda (y)
(set-node-color! p 'black)
(set-node-color! y 'black)
(let ([pp (node-parent p)])
(set-node-color! pp 'red)
(loop pp)))]
[rotate-k (lambda (rotate node)
(let ([p (node-parent node)])
(set-node-color! p 'black)
(let ([pp (node-parent p)])
(set-node-color! pp 'red)
(rotate pp btree)
(loop pp))))]
[k (lambda (node-y long-rotate always-rotate)
(let ([y (node-y (node-parent p))])
(if (and y (eq? 'red (node-color y)))
(recolor-k y)
(let ([k (lambda (node) (rotate-k always-rotate node))])
(if (eq? node (node-y p))
(begin
(long-rotate p btree)
(k p))
(k node))))))])
(if (eq? p (node-left (node-parent p)))
(k node-right rotate-left rotate-right)
(k node-left rotate-right rotate-left))))))

(set-node-color! (btree-root btree) 'black)]))

(define (find-following-node btree pos)
(define root (btree-root btree))
(let loop ([n root]
[so-far root]
[so-far-pos (and root (node-pos root))]
[v 0])
(if (not n)
(values so-far so-far-pos)
(let ([npos (+ (node-pos n) v)])
(cond
[(<= pos npos) (loop (node-left n) n npos v)]
[(or (not so-far-pos) (> npos so-far-pos)) (loop (node-right n) n npos npos)]
[else (loop (node-right n) so-far so-far-pos npos)])))))
(cond
[(not n) (values so-far so-far-pos)]
[else
(define npos (+ (node-pos n) v))
(cond
[(<= pos npos) (loop (node-left n) n npos v)]
[(or (not so-far-pos) (> npos so-far-pos)) (loop (node-right n) n npos npos)]
[else (loop (node-right n) so-far so-far-pos npos)])])))

(define (create-btree)
(btree #f))
Expand Down
31 changes: 14 additions & 17 deletions drracket/browser/private/bullet.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@

(define bullet-size
(make-parameter
(let ([s (send (send (send (make-object text%) get-style-list) basic-style)
get-size)])
(let ([s (send+ (make-object text%) (get-style-list) (basic-style) (get-size))])
(max 7 (quotient s 2)))))

(define (get-bullet-width)
Expand Down Expand Up @@ -51,16 +50,15 @@
[(0) (values (lambda (x y w h) (send dc draw-ellipse x y w h)) #t)]
[(1) (values (lambda (x y w h) (send dc draw-ellipse x y w h)) #f)]
[else (values (lambda (x y w h) (send dc draw-rectangle x y w h)) #f)])])
(let ([b (send dc get-brush)])
(send dc set-brush
(if solid?
(send the-brush-list
find-or-create-brush
(send (send dc get-pen) get-color)
'solid)
transparent-brush))
(draw x y bsize bsize)
(send dc set-brush b)))))]
(define b (send dc get-brush))
(send dc set-brush
(if solid?
(send the-brush-list find-or-create-brush
(send (send dc get-pen) get-color)
'solid)
transparent-brush))
(draw x y bsize bsize)
(send dc set-brush b))))]
[define/override copy
(lambda ()
(make-object bullet-snip% depth))]
Expand All @@ -69,11 +67,10 @@
(send stream put depth))]
[define/override get-text
(lambda (offset num flattened?)
(if (< num 1)
""
(if flattened?
"* "
"*")))]
(cond
[(< num 1) ""]
[flattened? "* "]
[else "*"]))]
(super-new)
(set-snipclass bullet-snip-class)
(set-count 1)))
Expand Down
2 changes: 1 addition & 1 deletion drracket/browser/private/entity-names.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,6 @@
(euro . 8364)))

(define (entity-name->integer s)
(hash-ref table s (lambda () #f)))
(hash-ref table s #f))


Loading