From 366a8a31ffde2b5fccf36d9c46dddad8efc3ce72 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Sat, 15 Dec 2012 15:12:55 -0600 Subject: [PATCH] improve the performance of typing a close paren original commit: 0b095382ca537a95fa9fb37a866337006210553a --- collects/framework/private/color.rkt | 57 ++++++++++++++++------------ 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/collects/framework/private/color.rkt b/collects/framework/private/color.rkt index 2e581011..eb882686 100644 --- a/collects/framework/private/color.rkt +++ b/collects/framework/private/color.rkt @@ -1041,13 +1041,6 @@ added get-regions ;; as a paren, then don't try to change it. #f)) (define insert-str (if closer closer (string char))) - (define-values (next-close-start next-close-end next-close-str next-close-adj?) - (find-next-close-paren pos closers)) - (define-values (outer-close-start outer-close-end outer-close-str) - (find-next-outer-paren pos closers)) - (end-edit-sequence) ;; wraps up the net-zero editing changes done by get-close-paren etc. - (undo) ;; to avoid messing up the editor's modified state in case of a simple skip - (define (insert) (for ([c (in-string insert-str)]) (on-default-char (new key-event% (key-code c)))) @@ -1058,24 +1051,40 @@ added get-regions (define end-pos (cond - [(not smart-skip) (insert)] - [(eq? smart-skip 'adjacent) - (if (and next-close-start next-close-adj? - (string=? insert-str next-close-str)) - (skip next-close-end) - (insert))] - [(eq? smart-skip 'forward) + [smart-skip + (define-values (next-close-start next-close-end next-close-str next-close-adj?) + (find-next-close-paren pos closers)) (cond - [(and outer-close-start - (or fixup? (string=? insert-str outer-close-str))) - (skip outer-close-end)] - [(and next-close-start - (or fixup? (string=? insert-str next-close-str))) - (skip next-close-end)] - [else (insert)])] - [else (error 'insert-close-paren - (format "invalid smart-skip option: ~a" smart-skip))])) - + [(eq? smart-skip 'adjacent) + (end-edit-sequence) ;; wraps up the net-zero editing changes done by get-close-paren etc. + (undo) ;; to avoid messing up the editor's modified state in case of a simple skip + (if (and next-close-start next-close-adj? + (string=? insert-str next-close-str)) + (skip next-close-end) + (insert))] + [(eq? smart-skip 'forward) + (define-values (outer-close-start outer-close-end outer-close-str) + (find-next-outer-paren pos closers)) + (end-edit-sequence) ;; wraps up the net-zero editing changes done by get-close-paren etc. + (undo) ;; to avoid messing up the editor's modified state in case of a simple skip + (cond + [(and outer-close-start + (or fixup? (string=? insert-str outer-close-str))) + (skip outer-close-end)] + [(and next-close-start + (or fixup? (string=? insert-str next-close-str))) + (skip next-close-end)] + [else (insert)])] + [else + (end-edit-sequence) ;; wraps up the net-zero editing changes done by get-close-paren etc. + (undo) ;; to avoid messing up the editor's modified state in case of a simple skip + (error 'insert-close-paren + (format "invalid smart-skip option: ~a" smart-skip))])] + [else + (begin0 + (insert) + (end-edit-sequence))])) + (when (and flash? (not stopped?)) (flash-from end-pos)))