improve the performance of typing a close paren

original commit: 0b095382ca537a95fa9fb37a866337006210553a
This commit is contained in:
Robby Findler 2012-12-15 15:12:55 -06:00
parent cf816d725e
commit 366a8a31ff

View File

@ -1041,13 +1041,6 @@ added get-regions
;; as a paren, then don't try to change it. ;; as a paren, then don't try to change it.
#f)) #f))
(define insert-str (if closer closer (string char))) (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) (define (insert)
(for ([c (in-string insert-str)]) (for ([c (in-string insert-str)])
(on-default-char (new key-event% (key-code c)))) (on-default-char (new key-event% (key-code c))))
@ -1058,24 +1051,40 @@ added get-regions
(define end-pos (define end-pos
(cond (cond
[(not smart-skip) (insert)] [smart-skip
[(eq? smart-skip 'adjacent) (define-values (next-close-start next-close-end next-close-str next-close-adj?)
(if (and next-close-start next-close-adj? (find-next-close-paren pos closers))
(string=? insert-str next-close-str))
(skip next-close-end)
(insert))]
[(eq? smart-skip 'forward)
(cond (cond
[(and outer-close-start [(eq? smart-skip 'adjacent)
(or fixup? (string=? insert-str outer-close-str))) (end-edit-sequence) ;; wraps up the net-zero editing changes done by get-close-paren etc.
(skip outer-close-end)] (undo) ;; to avoid messing up the editor's modified state in case of a simple skip
[(and next-close-start (if (and next-close-start next-close-adj?
(or fixup? (string=? insert-str next-close-str))) (string=? insert-str next-close-str))
(skip next-close-end)] (skip next-close-end)
[else (insert)])] (insert))]
[else (error 'insert-close-paren [(eq? smart-skip 'forward)
(format "invalid smart-skip option: ~a" smart-skip))])) (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))) (when (and flash? (not stopped?)) (flash-from end-pos)))