diff --git a/collects/drscheme/private/get-extend.ss b/collects/drscheme/private/get-extend.ss index 23c0aa319c..faa82d7040 100644 --- a/collects/drscheme/private/get-extend.ss +++ b/collects/drscheme/private/get-extend.ss @@ -1,87 +1,84 @@ - #lang scheme/unit - (require mzlib/class - "drsig.ss" - mred - mzlib/etc) - - - - (import [prefix drscheme:unit: drscheme:unit^] - [prefix drscheme:frame: drscheme:frame^] - [prefix drscheme:rep: drscheme:rep^] - [prefix drscheme:debug: drscheme:debug^]) - (export drscheme:get/extend^) - - (define make-extender - (λ (get-base% name) - (let ([extensions (λ (x) x)] - [built-yet? #f] - [built #f] - [verify - (λ (f) - (λ (%) - (let ([new% (f %)]) - (if (and (class? new%) - (subclass? new% %)) - new% - (error 'extend-% "expected output of extension to create a subclass of its input, got: ~a" - new%)))))]) - (values - (rec add-extender - (case-lambda - [(extension) (add-extender extension #t)] - [(extension before?) - (when built-yet? - (error 'extender "cannot build a new extension of ~a after initialization" - name)) - (set! extensions - (if before? - (compose (verify extension) extensions) - (compose extensions (verify extension))))])) - (λ () - (unless built-yet? - (set! built-yet? #t) - (set! built (extensions (get-base%)))) - built))))) - - (define (get-base-tab%) - (drscheme:debug:test-coverage-tab-mixin - (drscheme:debug:profile-tab-mixin - drscheme:unit:tab%))) - - (define-values (extend-tab get-tab) (make-extender get-base-tab% 'tab%)) - - (define (get-base-interactions-canvas%) - drscheme:unit:interactions-canvas%) - - (define-values (extend-interactions-canvas get-interactions-canvas) - (make-extender get-base-interactions-canvas% 'interactions-canvas%)) - - (define (get-base-definitions-canvas%) - drscheme:unit:definitions-canvas%) - - (define-values (extend-definitions-canvas get-definitions-canvas) - (make-extender get-base-definitions-canvas% 'definitions-canvas%)) - - (define (get-base-unit-frame%) - (drscheme:debug:profile-unit-frame-mixin - drscheme:unit:frame%)) - - (define-values (extend-unit-frame get-unit-frame) - (make-extender get-base-unit-frame% 'drscheme:unit:frame)) - - (define (get-base-interactions-text%) - (drscheme:debug:test-coverage-interactions-text-mixin - drscheme:rep:text%)) - - (define-values (extend-interactions-text get-interactions-text) - (make-extender get-base-interactions-text% 'interactions-text%)) - - (define (get-base-definitions-text%) - (drscheme:debug:test-coverage-definitions-text-mixin - (drscheme:debug:profile-definitions-text-mixin - (drscheme:unit:get-definitions-text%)))) - - (define-values (extend-definitions-text get-definitions-text) - (make-extender get-base-definitions-text% 'definitions-text%)) + +(require scheme/class + "drsig.ss") + +(import [prefix drscheme:unit: drscheme:unit^] + [prefix drscheme:frame: drscheme:frame^] + [prefix drscheme:rep: drscheme:rep^] + [prefix drscheme:debug: drscheme:debug^]) +(export drscheme:get/extend^) + +(define make-extender + (λ (get-base% name) + (let ([extensions (λ (x) x)] + [built-yet? #f] + [built #f] + [verify + (λ (f) + (λ (%) + (let ([new% (f %)]) + (if (and (class? new%) + (subclass? new% %)) + new% + (error 'extend-% "expected output of extension to create a subclass of its input, got: ~a" + new%)))))]) + (values + (letrec ([add-extender + (case-lambda + [(extension) (add-extender extension #t)] + [(extension before?) + (when built-yet? + (error 'extender "cannot build a new extension of ~a after initialization" + name)) + (set! extensions + (if before? + (compose (verify extension) extensions) + (compose extensions (verify extension))))])]) + add-extender) + (λ () + (unless built-yet? + (set! built-yet? #t) + (set! built (extensions (get-base%)))) + built))))) + +(define (get-base-tab%) + (drscheme:debug:test-coverage-tab-mixin + (drscheme:debug:profile-tab-mixin + drscheme:unit:tab%))) + +(define-values (extend-tab get-tab) (make-extender get-base-tab% 'tab%)) + +(define (get-base-interactions-canvas%) + drscheme:unit:interactions-canvas%) + +(define-values (extend-interactions-canvas get-interactions-canvas) + (make-extender get-base-interactions-canvas% 'interactions-canvas%)) + +(define (get-base-definitions-canvas%) + drscheme:unit:definitions-canvas%) + +(define-values (extend-definitions-canvas get-definitions-canvas) + (make-extender get-base-definitions-canvas% 'definitions-canvas%)) + +(define (get-base-unit-frame%) + (drscheme:debug:profile-unit-frame-mixin + drscheme:unit:frame%)) + +(define-values (extend-unit-frame get-unit-frame) + (make-extender get-base-unit-frame% 'drscheme:unit:frame)) + +(define (get-base-interactions-text%) + (drscheme:debug:test-coverage-interactions-text-mixin + drscheme:rep:text%)) + +(define-values (extend-interactions-text get-interactions-text) + (make-extender get-base-interactions-text% 'interactions-text%)) + +(define (get-base-definitions-text%) + (drscheme:debug:test-coverage-definitions-text-mixin + (drscheme:debug:profile-definitions-text-mixin + (drscheme:unit:get-definitions-text%)))) + +(define-values (extend-definitions-text get-definitions-text) + (make-extender get-base-definitions-text% 'definitions-text%)) diff --git a/collects/drscheme/tool-lib.ss b/collects/drscheme/tool-lib.ss index 0a6023be82..eca151a8a8 100644 --- a/collects/drscheme/tool-lib.ss +++ b/collects/drscheme/tool-lib.ss @@ -18,4 +18,13 @@ all of the names in the tools library, for use defining keybindings (shutdown-splash) (define-values/invoke-unit/infer drscheme@) (close-splash) - (provide-signature-elements drscheme:tool^)) + (provide-signature-elements drscheme:tool^) + + (provide drscheme:unit:program-editor-mixin) + (define-syntax (drscheme:unit:program-editor-mixin stx) + (syntax-case stx () + [(_ a ...) + #'((drscheme:unit:get-program-editor-mixin) a ...)] + [_ #'(drscheme:unit:get-program-editor-mixin)]))) + + diff --git a/collects/scribblings/tools/common.ss b/collects/scribblings/tools/common.ss index aba2d9e57e..ed1308b4a8 100644 --- a/collects/scribblings/tools/common.ss +++ b/collects/scribblings/tools/common.ss @@ -1,21 +1,47 @@ -(module common scheme/base - (require scribble/manual - scribble/basic - scheme/class - scheme/contract) - (provide (all-from-out scribble/manual) - (all-from-out scribble/basic) - (all-from-out scheme/class) - (all-from-out scheme/contract)) +#reader scribble/reader +#lang scheme/base +(require (for-syntax scheme/base)) - (require (for-label scheme/gui/base - scheme/class - scheme/contract - scheme/base - framework)) - (provide (for-label (all-from-out scheme/gui/base) - (all-from-out scheme/class) - (all-from-out scheme/contract) - (all-from-out scheme/base) - (all-from-out framework)))) +(require scribble/manual + scribble/basic + scheme/class + scheme/contract) +(provide (all-from-out scribble/manual) + (all-from-out scribble/basic) + (all-from-out scheme/class) + (all-from-out scheme/contract)) +(require (for-label scheme/gui/base + scheme/class + scheme/contract + scheme/base + drscheme/tool-lib + framework)) +(provide (for-label (all-from-out scheme/gui/base) + (all-from-out scheme/class) + (all-from-out scheme/contract) + (all-from-out scheme/base) + (all-from-out drscheme/tool-lib) + (all-from-out framework))) + +(provide docs-get/extend) +(define-syntax (docs-get/extend stx) + (syntax-case stx () + [(_ id) + (identifier? #'id) + (with-syntax ([get (datum->syntax + #'id + (string->symbol + (format "drscheme:get/extend:get-~a" (syntax-e #'id))))] + [extend (datum->syntax + #'id + (string->symbol + (format "drscheme:get/extend:extend-~a" (syntax-e #'id))))]) + #'(begin + @defproc*[([(extend (mixin mixin-contract)) + void?] + [(extend (mixin mixin-contract) (before boolean?)) + void?])]{ + Does stuff. + } + @defproc[(get) class?]{Returns the class.}))])) \ No newline at end of file diff --git a/collects/scribblings/tools/debug.scrbl b/collects/scribblings/tools/debug.scrbl index 9289a9af12..163b607727 100644 --- a/collects/scribblings/tools/debug.scrbl +++ b/collects/scribblings/tools/debug.scrbl @@ -1,19 +1,20 @@ #lang scribble/doc @(require "common.ss") @title{@tt{drscheme:debug}} +@(defmodule drscheme/tool-lib) -@defmixin[drscheme:debug:profile-unit-frame-mixin () ((domain . drscheme:frame:) (domain . drscheme:unit:frame))]{ +@defmixin[drscheme:debug:profile-unit-frame-mixin (drscheme:frame:<%> drscheme:unit:frame<%>) ()]{ } -@defmixin[drscheme:debug:profile-interactions-text-mixin () ((domain . drscheme:rep:text))]{ +@defmixin[drscheme:debug:profile-interactions-text-mixin (drscheme:rep:text<%>) ()]{ %% %% drscheme:unit %% } -@defmixin[drscheme:debug:profile-definitions-text-mixin () ((domain . drscheme:unit:definitions-text) (domainc . text))]{ +@defmixin[drscheme:debug:profile-definitions-text-mixin (drscheme:unit:definitions-text<%> text%) ()]{ } diff --git a/collects/scribblings/tools/frame.scrbl b/collects/scribblings/tools/frame.scrbl index 6537f774c6..7b8d55a672 100644 --- a/collects/scribblings/tools/frame.scrbl +++ b/collects/scribblings/tools/frame.scrbl @@ -1,6 +1,7 @@ #lang scribble/doc @(require "common.ss") @title{@tt{drscheme:frame}} +@(defmodule drscheme/tool-lib) @defclass[drscheme:frame:name-message% canvas% ()]{ @@ -31,7 +32,7 @@ hasn't been saved is shown. }}} -@defmixin[drscheme:frame:mixin (drscheme:frame:<%>) ((domain . drscheme:frame:basics) (domain . frame:text-info) (domain . frame:editor))]{ +@defmixin[drscheme:frame:mixin (drscheme:frame:basics<%> frame:text-info<%> frame:editor<%>) (drscheme:frame:<%>)]{ Provides an implementation of @scheme[drscheme:frame:<%>] @@ -39,7 +40,7 @@ Provides an implementation of } -@defmixin[drscheme:frame:basics-mixin (drscheme:frame:basics<%>) ((domain . frame:standard-menus))]{ +@defmixin[drscheme:frame:basics-mixin (frame:standard-menus<%>) (drscheme:frame:basics<%>)]{ Use this mixin to establish some common menu items across various DrScheme windows. diff --git a/collects/scribblings/tools/get-slash-extend.scrbl b/collects/scribblings/tools/get-slash-extend.scrbl index 0bc106bf16..43f515f021 100644 --- a/collects/scribblings/tools/get-slash-extend.scrbl +++ b/collects/scribblings/tools/get-slash-extend.scrbl @@ -1,92 +1,11 @@ #lang scribble/doc @(require "common.ss") @title{@tt{drscheme:get/extend}} +@(defmodule drscheme/tool-lib) -@defclass[drscheme:get/extend:base-unit-frame% (drscheme:debug:profile-unit-frame-mixin) ()]{ - - - -@defconstructor[()]{ -Passes all arguments to @scheme[super-init]. -}} - - -@defclass[drscheme:get/extend:base-tab% () ()]{ - - - -@defconstructor[()]{ -Passes all arguments to @scheme[super-init]. -}} - - -@defclass[drscheme:get/extend:base-interactions-text% (drscheme:debug:profile-interactions-text-mixin) ()]{ - - - -@defconstructor[()]{ -Passes all arguments to @scheme[super-init]. -}} - - -@defclass[drscheme:get/extend:base-interactions-canvas% (canvas:delegate-mixin canvas:info-mixin) ()]{ - - - -@defconstructor/make[()]{ - -Calls @scheme[super-new], adding @scheme['hide-hscroll] to the style argument. - - -} - -@defconstructor[()]{ -Passes all arguments to @scheme[super-init]. -} - -@defmethod[#:mode override - (on-focus) - void?]{ - -When the focus is on, calls -@method[drscheme:unit:frame% make-searchable] with @scheme[this]. - - -}} - - -@defclass[drscheme:get/extend:base-definitions-text% (drscheme:debug:profile-definitions-text-mixin) ()]{ - - - -@defconstructor[()]{ -Passes all arguments to @scheme[super-init]. -}} - - -@defclass[drscheme:get/extend:base-definitions-canvas% (canvas:delegate-mixin canvas:info-mixin) ()]{ - - - -@defconstructor/make[()]{ - -Calls @scheme[super-new], adding @scheme['hide-hscroll] to the style argument. - - -} - -@defconstructor[()]{ -Passes all arguments to @scheme[super-init]. -} - -@defmethod[#:mode override - (on-focus) - void?]{ - -When the focus is on, calls -@method[drscheme:unit:frame% make-searchable] with @scheme[this]. - -%% %% drscheme:debug %% - -}} - +@docs-get/extend[definitions-text] +@docs-get/extend[interactions-text] +@docs-get/extend[unit-frame] +@docs-get/extend[definitions-canvas] +@docs-get/extend[interactions-canvas] +@docs-get/extend[tab] diff --git a/collects/scribblings/tools/language.scrbl b/collects/scribblings/tools/language.scrbl index 116776589b..d4338ca4f0 100644 --- a/collects/scribblings/tools/language.scrbl +++ b/collects/scribblings/tools/language.scrbl @@ -1,6 +1,7 @@ #lang scribble/doc @(require "common.ss") @title{@tt{drscheme:language}} +@(defmodule drscheme/tool-lib) @definterface[drscheme:language:simple-module-based-language<%> ()]{ @@ -131,7 +132,7 @@ returns the corresponding init arg. }} -@defmixin[drscheme:language:simple-module-based-language->module-based-language-mixin (drscheme:language:module-based-language<%>) ((domain . drscheme:language:simple-module-based-language))]{ +@defmixin[drscheme:language:simple-module-based-language->module-based-language-mixin (drscheme:language:simple-module-based-language<%>) (drscheme:language:module-based-language<%>)]{ \index{drscheme:language:simple-settings} \label{tools:simple-settings} @@ -492,7 +493,7 @@ Defaultly returns @scheme[#f]. }}} -@defmixin[drscheme:language:module-based-language->language-mixin (drscheme:language:language<%>) ((domain . drscheme:language:module-based-language))]{ +@defmixin[drscheme:language:module-based-language->language-mixin (drscheme:language:module-based-language<%>) (drscheme:language:language<%>)]{ diff --git a/collects/scribblings/tools/rep.scrbl b/collects/scribblings/tools/rep.scrbl index 690ae85038..39e6162452 100644 --- a/collects/scribblings/tools/rep.scrbl +++ b/collects/scribblings/tools/rep.scrbl @@ -1,6 +1,7 @@ #lang scribble/doc @(require "common.ss") @title{@tt{drscheme:rep}} +@(defmodule drscheme/tool-lib) @definterface[drscheme:rep:text<%> ()]{ @@ -312,7 +313,7 @@ in the user's eventspace }} -@defmixin[drscheme:rep:drs-bindings-keymap-mixin () ((domain . editor:keymap))]{ +@defmixin[drscheme:rep:drs-bindings-keymap-mixin (editor:keymap<%>) ()]{ This mixin adds some drscheme-specific keybindings to the editor it is mixed onto. diff --git a/collects/scribblings/tools/unit.scrbl b/collects/scribblings/tools/unit.scrbl index 419de5798b..2a89813db3 100644 --- a/collects/scribblings/tools/unit.scrbl +++ b/collects/scribblings/tools/unit.scrbl @@ -1,6 +1,7 @@ #lang scribble/doc @(require "common.ss") @title{@tt{drscheme:unit}} +@(defmodule drscheme/tool-lib) @definterface[drscheme:unit:tab<%> (drscheme:rep:context<%>)]{ @@ -175,7 +176,7 @@ Clears any error highlighting. }} -@defmixin[drscheme:unit:program-editor-mixin () ((domainc . text) (domain . editor:basic))]{ +@defmixin[drscheme:unit:program-editor-mixin (text% editor:basic<%>) ()]{ This mixes in the ability to reset the highlighting for error message when the user modifies the buffer. Use it for @@ -220,7 +221,7 @@ Passes all arguments to @scheme[super-init]. }} -@defclass[drscheme:unit:frame% (drscheme:frame:mixin drscheme:frame:basics-mixin drscheme:unit:frame<%>) ()]{ +@defclass[drscheme:unit:frame% (drscheme:frame:basics-mixin (drscheme:frame:mixin frame:searchable%)) (drscheme:unit:frame<%>)]{ This frame inserts the Scheme and Language menus into the menu bar as it is initialized. @@ -688,7 +689,7 @@ Note that the capability must be registered separately, via }} -@defclass[drscheme:unit:definitions-text% (scheme:text-mixin drscheme:unit:program-editor-mixin drscheme:rep:drs-bindings-keymap-mixin drscheme:unit:definitions-text<%>) ()]{ +@defclass[drscheme:unit:definitions-text% (drscheme:rep:drs-bindings-keymap-mixin (drscheme:unit:program-editor-mixin (scheme:text-mixin text:info%))) (drscheme:unit:definitions-text<%>)]{