43 lines
1.3 KiB
Scheme
43 lines
1.3 KiB
Scheme
(module modes mzscheme
|
|
(require (lib "unitsig.ss")
|
|
(lib "string-constant.ss" "string-constants")
|
|
(lib "class.ss")
|
|
(lib "framework.ss" "framework")
|
|
"drsig.ss")
|
|
|
|
(provide modes@)
|
|
|
|
(define modes@
|
|
(unit/sig drscheme:modes^
|
|
(import)
|
|
|
|
(define-struct mode (name surrogate repl-submit matches-language))
|
|
(define modes (list))
|
|
|
|
(define (get-modes) modes)
|
|
|
|
(define (add-mode name surrogate repl-submit matches-language)
|
|
(let ([new-mode (make-mode name
|
|
surrogate
|
|
repl-submit
|
|
matches-language)])
|
|
(set! modes (cons new-mode modes))
|
|
new-mode))
|
|
|
|
(define (add-initial-modes)
|
|
|
|
;; must be added first, to make it last in mode list,
|
|
;; since predicate matches everything
|
|
(add-mode
|
|
(string-constant scheme-mode)
|
|
(new scheme:text-mode%)
|
|
(λ (text prompt-position) (scheme:text-balanced? text prompt-position))
|
|
(λ (l) #t))
|
|
|
|
(add-mode
|
|
(string-constant text-mode)
|
|
#f
|
|
(λ (text prompt-position) #t)
|
|
(λ (l)
|
|
(and l (ormap (λ (x) (regexp-match #rx"Algol" x)) l))))))))
|