From 6a99c93ebb074615fbc0d86514757e8afddc94cb Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 22 Nov 2011 20:17:58 -0700 Subject: [PATCH] add `get-colors' to `color-database<%>' --- collects/racket/draw/private/color.rkt | 15 ++++++++++++--- .../scribblings/draw/color-database-intf.scrbl | 12 +++++++++--- doc/release-notes/racket/HISTORY.txt | 1 + 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/collects/racket/draw/private/color.rkt b/collects/racket/draw/private/color.rkt index 1142660d1f..4380e22e87 100644 --- a/collects/racket/draw/private/color.rkt +++ b/collects/racket/draw/private/color.rkt @@ -7,7 +7,8 @@ color-green color-blue color-alpha - color-database<%> the-color-database + (rename-out [color-database-intf color-database<%>]) + the-color-database color->immutable-color) (define-local-member-name @@ -88,7 +89,13 @@ (define color-objects (make-hash)) -(defclass color-database<%> object% +(define color-database-intf + (let ([color-database<%> (interface () + find-color + get-names)]) + color-database<%>)) + +(defclass* color-database<%> object% (color-database-intf) (super-new) (def/public (find-color [string? name]) (let ([name (string-downcase name)]) @@ -100,7 +107,9 @@ (send c set-immutable) (hash-set! color-objects name c) c) - #f)))))) + #f))))) + (def/public (get-names) + (sort (hash-map colors (lambda (k v) k)) string)) diff --git a/collects/scribblings/draw/color-database-intf.scrbl b/collects/scribblings/draw/color-database-intf.scrbl index ef83bc5bd0..0838363f9b 100644 --- a/collects/scribblings/draw/color-database-intf.scrbl +++ b/collects/scribblings/draw/color-database-intf.scrbl @@ -202,10 +202,16 @@ See also @racket[color%]. @defmethod[(find-color [color-name string?]) - (or/c (is-a?/c color%) false/c)]{ + (or/c (is-a?/c color%) #f)]{ Finds a color by name (character case is ignored). If no color is - found for the name, @racket[#f] is returned. + found for the name, @racket[#f] is returned.} -}} + +@defmethod[(get-names) (listof string?)]{ + +Returns an alphabetically sorted list of case-folded color names for which +@method[color-database<%> find-color] returns a @racket[color%] value.} + +} diff --git a/doc/release-notes/racket/HISTORY.txt b/doc/release-notes/racket/HISTORY.txt index cddd2c5ec4..d7a85186df 100644 --- a/doc/release-notes/racket/HISTORY.txt +++ b/doc/release-notes/racket/HISTORY.txt @@ -4,6 +4,7 @@ Regexps are `equal?' when they have the same source [byte] string Numbers, characters, strings, byte strings, and regexps are interned by read and datum->syntax Added read-intern-literal +racket/draw: added get-names to color-database<%> mzlib/pconvert: added add-make-prefix-to-constructor parameter, which changes the default constructor-style printing in DrRacket to avoid a make- prefix; the HtDP languages set the parameter to #t