adjusted f1 in drracket so that it uses the syntax colorer

(this fixes hitting f1 on things like the "racket" in @racket[...])
This commit is contained in:
Robby Findler 2011-01-22 19:39:47 -06:00
parent 71ecf83d63
commit 3abfb8ce91

View File

@ -232,30 +232,47 @@ module browser threading seems wrong.
;; find-symbol : number -> string ;; find-symbol : number -> string
;; finds the symbol around the position `pos' (approx) ;; finds the symbol around the position `pos' (approx)
(define (find-symbol text pos) (define (find-symbol text pos)
(send text split-snip pos) (cond
(send text split-snip (+ pos 1)) [(is-a? text scheme:text<%>)
(let ([snip (send text find-snip pos 'after)]) (let* ([before (send text get-backward-sexp pos)]
(if (is-a? snip string-snip%) [before+ (and before (send text get-forward-sexp before))]
(let* ([before [after (send text get-forward-sexp pos)]
(let loop ([i (- pos 1)] [after- (and after (send text get-backward-sexp after))])
[chars null]) (cond
(if (< i 0) [(and before before+
chars (<= before pos before+)
(let ([char (send text get-character i)]) (eq? 'symbol (send text classify-position before)))
(if (non-letter? char) (send text get-text before before+)]
chars [(and after after-
(loop (- i 1) (<= after- pos after)
(cons char chars))))))] (eq? 'symbol (send text classify-position after-)))
[after (send text get-text after- after)]
(let loop ([i pos]) [else ""]))]
(if (< i (send text last-position)) [else
(let ([char (send text get-character i)]) (send text split-snip pos)
(if (non-letter? char) (send text split-snip (+ pos 1))
null (let ([snip (send text find-snip pos 'after)])
(cons char (loop (+ i 1))))) (if (is-a? snip string-snip%)
null))]) (let* ([before
(apply string (append before after))) (let loop ([i (- pos 1)]
""))) [chars null])
(if (< i 0)
chars
(let ([char (send text get-character i)])
(if (non-letter? char)
chars
(loop (- i 1)
(cons char chars))))))]
[after
(let loop ([i pos])
(if (< i (send text last-position))
(let ([char (send text get-character i)])
(if (non-letter? char)
null
(cons char (loop (+ i 1)))))
null))])
(apply string (append before after)))
""))]))
;; non-letter? : char -> boolean ;; non-letter? : char -> boolean
;; returns #t if the character belongs in a symbol (approx) and #f it is ;; returns #t if the character belongs in a symbol (approx) and #f it is