racket/pkgs/at-exp-lib/scribble/base/reader.rkt
Robby Findler a5118f7525 guard against missing scribble and syntax-color libraries
we don't want an actual dependency from at-exp-lib to those libraries,
so when they aren't present, don't just crash, but instead fall back
to the defaults passed to the get-info procs
2017-01-27 11:43:13 -06:00

50 lines
1.8 KiB
Racket

#lang racket/base
(require (prefix-in scribble: scribble/reader)
(rename-in syntax/module-reader
[#%module-begin #%reader-module-begin]))
(provide (rename-out [module-begin #%module-begin])
(except-out (all-from-out racket/base)
#%module-begin)
scribble-base-info
scribble-base-reader-info
scribble-base-language-info)
(define-syntax-rule (module-begin lang #:wrapper1 wrapper1)
(#%reader-module-begin
lang
#:read scribble:read-inside
#:read-syntax scribble:read-syntax-inside
#:whole-body-readers? #t
#:wrapper1 wrapper1
#:info (scribble-base-info)
#:language-info (scribble-base-language-info)))
;; Settings that apply just to the surface syntax:
(define (scribble-base-reader-info)
(lambda (key defval default)
(define (try-dynamic-require lib export)
(with-handlers ([exn:missing-module?
(λ (x) (default key defval))])
(dynamic-require lib export)))
(case key
[(color-lexer)
(try-dynamic-require 'syntax-color/scribble-lexer 'scribble-inside-lexer)]
[(drracket:indentation)
(try-dynamic-require 'scribble/private/indentation 'determine-spaces)]
[(drracket:keystrokes)
(try-dynamic-require 'scribble/private/indentation 'keystrokes)]
[(drracket:default-extension) "scrbl"]
[else (default key defval)])))
;; Settings that apply to Scribble-renderable docs:
(define (scribble-base-info)
(lambda (key defval default)
(case key
[(drracket:toolbar-buttons)
(dynamic-require 'scribble/tools/drracket-buttons 'drracket-buttons)]
[else ((scribble-base-reader-info) key defval default)])))
(define (scribble-base-language-info)
'#(racket/language-info get-info #f))