47 lines
1.5 KiB
Scheme
47 lines
1.5 KiB
Scheme
(module modes (lib "a-unit.ss")
|
|
(require (lib "string-constant.ss" "string-constants")
|
|
(lib "class.ss")
|
|
(lib "list.ss")
|
|
(lib "framework.ss" "framework")
|
|
"drsig.ss")
|
|
|
|
(import)
|
|
(export drscheme:modes^)
|
|
|
|
(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 (not-a-language-language? l)
|
|
(and (not (null? l))
|
|
(equal? (car (last-pair l))
|
|
(string-constant no-language-chosen))))
|
|
|
|
(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
|
|
(or (not-a-language-language? l)
|
|
(ormap (λ (x) (regexp-match #rx"Algol" x)) l)))))))
|