Added text:get-port-name to framework, and used text:lookup-port-name to get at the editor in DrScheme error highlighting.

svn: r10494

original commit: a506cefeac7dad39876fb763c9ca2670a4ff57f7
This commit is contained in:
Danny Yoo 2008-06-28 23:33:39 +00:00
parent 2a12b0323b
commit 78b446852d
3 changed files with 35 additions and 2 deletions

View File

@ -85,6 +85,13 @@
symbols are meant to be module paths. If @scheme[manuals] is false,
then all of the documented names are used.})
(proc-doc/names
text:lookup-port-name
(-> symbol? (or/c (is-a?/c editor:basic<%>) false/c))
(manuals)
@{Returns the editor instance whose port-name matches the given symbol. If no
editor can be found, then returns @scheme[false].})
(proc-doc/names
number-snip:make-repeating-decimal-snip
(number? boolean? . -> . (is-a?/c snip%))

View File

@ -207,7 +207,8 @@
(define-signature text^ extends text-class^
(autocomplete-append-after
autocomplete-limit
get-completions/manuals))
get-completions/manuals
lookup-port-name))
(define-signature canvas-class^
(basic<%>

View File

@ -49,6 +49,30 @@ WARNING: printf is rebound in the body of the unit to always
(define-struct range (start end b/w-bitmap color caret-space?))
(define-struct rectangle (left top right bottom b/w-bitmap color))
(define-values (register-port-name! lookup-port-name)
;; port-name->editor-ht: (hashof symbol (weakboxof editor:basic<%>))
;; Maintains a mapping from port names back to their respective editors.
(let ([port-name->editor-ht (make-weak-hasheq)])
;; register-port-name-to-editor!: symbol editor<%> -> void
;; Registers the editor's port name.
(define (register-port-name! a-port-name an-editor)
(hash-set! port-name->editor-ht a-port-name (make-weak-box an-editor)))
;; lookup-port-name: symbol -> (or/c editor:basic<%> #f)
;; Given a port name, tries to get the editor with that name.
(define (lookup-port-name a-port-name)
(let ([a-weak-box (hash-ref port-name->editor-ht a-port-name #f)])
(cond
[(not a-weak-box)
#f]
[else
(weak-box-value a-weak-box)])))
(values register-port-name! lookup-port-name)))
;; wx: `default-wrapping?', add as the initial value for auto-wrap bitmap,
;; unless matthew makes it primitive
@ -82,7 +106,8 @@ WARNING: printf is rebound in the body of the unit to always
(cond
[(or (unbox b) (not n))
(unless port-name-identifier
(set! port-name-identifier (gensym 'unsaved-editor)))
(set! port-name-identifier (gensym 'unsaved-editor))
(register-port-name! port-name-identifier this))
port-name-identifier]
[else n])))
(define/public (port-name-matches? id)