From 3abfb8ce911a2734d04575d282700dac996cbcb5 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Sat, 22 Jan 2011 19:39:47 -0600 Subject: [PATCH] adjusted f1 in drracket so that it uses the syntax colorer (this fixes hitting f1 on things like the "racket" in @racket[...]) --- collects/drracket/private/unit.rkt | 65 +++++++++++++++++++----------- 1 file changed, 41 insertions(+), 24 deletions(-) diff --git a/collects/drracket/private/unit.rkt b/collects/drracket/private/unit.rkt index 95a45e4148..4b4b681fe1 100644 --- a/collects/drracket/private/unit.rkt +++ b/collects/drracket/private/unit.rkt @@ -232,30 +232,47 @@ module browser threading seems wrong. ;; find-symbol : number -> string ;; finds the symbol around the position `pos' (approx) (define (find-symbol text pos) - (send text split-snip pos) - (send text split-snip (+ pos 1)) - (let ([snip (send text find-snip pos 'after)]) - (if (is-a? snip string-snip%) - (let* ([before - (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))) - ""))) + (cond + [(is-a? text scheme:text<%>) + (let* ([before (send text get-backward-sexp pos)] + [before+ (and before (send text get-forward-sexp before))] + [after (send text get-forward-sexp pos)] + [after- (and after (send text get-backward-sexp after))]) + (cond + [(and before before+ + (<= before pos before+) + (eq? 'symbol (send text classify-position before))) + (send text get-text before before+)] + [(and after after- + (<= after- pos after) + (eq? 'symbol (send text classify-position after-))) + (send text get-text after- after)] + [else ""]))] + [else + (send text split-snip pos) + (send text split-snip (+ pos 1)) + (let ([snip (send text find-snip pos 'after)]) + (if (is-a? snip string-snip%) + (let* ([before + (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 ;; returns #t if the character belongs in a symbol (approx) and #f it is