stub out #lang quad
parent
743f8cad83
commit
35fa2174aa
@ -0,0 +1,37 @@
|
||||
#lang racket
|
||||
(require racket/class)
|
||||
(provide get-info)
|
||||
|
||||
(define (custom-indent-rules x)
|
||||
(match x
|
||||
;; tbd: custom indent rules, examples below
|
||||
#;[("with-pattern"
|
||||
"with-shared-id"
|
||||
"pattern-case"
|
||||
"pattern-case-filter") 'lambda]
|
||||
#;[("define-macro"
|
||||
"define-macro-cases"
|
||||
"define-cases"
|
||||
"while"
|
||||
"until") 'define]
|
||||
[_ #false]))
|
||||
|
||||
(define (indenter t pos)
|
||||
(send t compute-racket-amount-to-indent pos custom-indent-rules))
|
||||
|
||||
(define (get-info key default-value proc)
|
||||
(define (fallback) (if proc (proc key default-value) default-value))
|
||||
(define (try-dynamic-require lib export)
|
||||
(with-handlers ([exn:missing-module?
|
||||
(λ (x) (case key
|
||||
[(drracket:indentation) indenter]
|
||||
[else (fallback)]))])
|
||||
(dynamic-require lib export)))
|
||||
(case key
|
||||
[(color-lexer)
|
||||
(try-dynamic-require 'syntax-color/scribble-lexer 'scribble-lexer)]
|
||||
[(drracket:indentation)
|
||||
(try-dynamic-require 'scribble/private/indentation 'determine-spaces)]
|
||||
[(drracket:keystrokes)
|
||||
(try-dynamic-require 'scribble/private/indentation 'keystrokes)]
|
||||
[else (fallback)]))
|
@ -0,0 +1,8 @@
|
||||
#lang racket/base
|
||||
(require (for-syntax racket/base))
|
||||
(provide (rename-out [quad-mb #%module-begin])
|
||||
#%top-interaction)
|
||||
|
||||
(define-syntax (quad-mb stx)
|
||||
(syntax-case stx ()
|
||||
[(_ . ARGS) #'(#%module-begin . ARGS)]))
|
@ -0,0 +1,27 @@
|
||||
#lang racket/base
|
||||
(provide (rename-out
|
||||
[quad-lang-read read]
|
||||
[quad-lang-read-syntax read-syntax]
|
||||
[qr-mod:get-info get-info]))
|
||||
|
||||
(module quad-reader syntax/module-reader
|
||||
#:language 'quad/lang
|
||||
#:info qgi:get-info
|
||||
#:read my-read
|
||||
#:read-syntax my-read-syntax
|
||||
(require (prefix-in qgi: quad/get-info) (prefix-in at: scribble/reader))
|
||||
(define (my-read ip) (syntax->datum (my-read-syntax ip)))
|
||||
(define (my-read-syntax src ip)
|
||||
(parameterize ([current-readtable (at:make-at-readtable #:command-char #\◊)])
|
||||
(read-syntax src ip))))
|
||||
|
||||
(require debug/reader (prefix-in qr-mod: 'quad-reader))
|
||||
|
||||
#|
|
||||
Use wrap-reader on the whole-module read function that would be exported
|
||||
by the reader module, not the single-expression read function like
|
||||
at:read-syntax that you deal with within syntax/module-reader or normal use.
|
||||
|#
|
||||
|
||||
(define quad-lang-read (wrap-reader qr-mod:read))
|
||||
(define quad-lang-read-syntax (wrap-reader qr-mod:read-syntax))
|
Loading…
Reference in New Issue